Computer Science, Programming, and Coding Standards by Grade Level

By: Tony DePrato | Follow me on Twitter @tdeprato

A while back I took the ISTE NETS Standards and decided to create a grade level based layout for what students should be able to do at different grade levels.

As the students continue to progress through their education, the grade level view expands gradually. The idea is that they keep repeating activities and meeting these standards.

Here is what the current design looks like:

Years  3 & 4:

  • Effectively use primitive data types
  • Effectively use, manipulate, and explain various external data types (text, images, sound, etc.), various locations (local, server, cloud), etc.

Year 5:

  • Effectively use primitive data types
  • Effectively use, manipulate, and explain various external data types (text, images, sound, etc.), various locations (local, server, cloud), etc.
  • Effectively use modeling and simulation to solve real-world problems
  • Effectively use two or more development environments

Year 6:

  • Effectively use primitive data types
  • Effectively use, manipulate, and explain various external data types (text, images, sound, etc.), various locations (local, server, cloud), etc.
  • Effectively use modeling and simulation to solve real-world problems
  • Effectively use two or more development environments
  • Demonstrate an understanding of operating systems and networking in a structured computer system

Year 7:

  • Effectively use primitive data types
  • Effectively use, manipulate, and explain various external data types (text, images, sound, etc.), various locations (local, server, cloud), etc.
  • Effectively use modeling and simulation to solve real-world problems
  • Effectively use two or more development environments
  • Demonstrate an understanding of operating systems and networking in a structured computer system
  • Using a modern, high-level programming language, construct correctly functioning programs involving simple and structured data types; compound boolean expressions; and sequential, conditional, and iterative control structures

Year 8:

  • Effectively use primitive data types
  • Effectively use, manipulate, and explain various external data types (text, images, sound, etc.), various locations (local, server, cloud), etc.
  • Effectively use modeling and simulation to solve real-world problems
  • Effectively use two or more development environments
  • Demonstrate an understanding of operating systems and networking in a structured computer system
  • Using a modern, high-level programming language, construct correctly functioning programs involving simple and structured data types; compound boolean expressions; and sequential, conditional, and iterative control structures
  • Design and test algorithms and programming solutions to problems in different contexts (textual, numeric, graphic,
    etc.) using advanced data structures

Years 9 & 10:

  • Effectively use primitive data types
  • Effectively use, manipulate, and explain
    various external data types (text, images, sound, etc.), various locations (local, server, cloud), etc.
  • Effectively use modeling and simulation to solve real-world problems
  • Effectively use two or more development environments
  • Demonstrate an understanding of operating systems and networking in a structured computer system
  • Using a modern, high-level programming language, construct correctly functioning programs involving simple and structured data types; compound boolean expressions; and sequential, conditional, and iterative control structures
  • Design and test algorithms and programming solutions to problems in different contexts (textual, numeric, graphic, etc.) using advanced data structures
  • Demonstrate an understanding of the operation of computer networks and mobile computing devices
  • Demonstrate knowledge of two or more programming paradigms

Years 11 & 12:

  • Effectively use primitive data types
  • Effectively use, manipulate, and explain
    various external data types (text, images, sound, etc.), various locations (local, server, cloud), etc.
  • Effectively use modeling and simulation to solve real-world problems
  • Effectively use two or more development environments
  • Demonstrate an understanding of operating systems and networking in a structured computer system
  • Using a modern, high-level programming language, construct correctly functioning programs involving simple and structured data types; compound boolean expressions; and sequential, conditional, and iterative control structures
  • Design and test algorithms and programming solutions to problems in different contexts (textual, numeric, graphic, etc.) using advanced data structures
  • Demonstrate an understanding of the operation of computer networks and mobile computing devices
  • Demonstrate knowledge of two or more programming paradigms
  • Analyze algorithms by considering complexity, efficiency, aesthetics, and correctness
  • Demonstrate an understanding of static and dynamic data structures

Over the next few weeks, I will be connecting the standards at each grade level to the types of activities and lessons that facilitate them.

Hour of Code: It Is Not Enough

25396304434_b90c6dca1f_b

By: Tony DePrato | Follow me on Twitter @tdeprato

The Hour of Codeis a very popular event and activity hosted by Code.org. Millions of students around the world participate in the large coordinated events, and continue to use the website to learn programming. Code.org is a good resource to get students and teachers interested in programming.

In the last year I have listened to numerous educators and administrators comment how their school participated in The Hour of Code. In many instances, I felt that these people believed this single event, and or uncoordinated participation of classes on the Code.org website, constituted a real effort in problem solving, computer science, design, and programming. I have news for everyone, an hour of programming, or even a month on Code.org, is only a half-step on a very long journey.

Read More at The International Educator

Free Books on Programming from OReilly

screen-shot-2016-10-10-at-8-27-05-pm

By: Tony DePrato | Follow me on Twitter @tdeprato

This is not a scam. I actually have already grabbed five books for myself. Yes, these are for either adults or older students, but they are free. In fact, if you are signed into your Google Account you can add them directly to your Google Drive.

Click here to grab some free books from OReilly. 

 

Problem Solving with Technology: A List of Topics and Standards

tiefourimage

 

 

 

 

 

 

 

By Tony DePrato | Follow me on Twitter @tdeprato

Core Concepts and Definitions

Digital Native is a term that refers to children who have been born after the advent of the modern personal computer and affordable personal laptop. There is a belief that these children have a very high aptitude with technology. This curriculum plan completely disagrees with this belief and reaffirms that all children need a solid foundation in problem solving in, and creating with, technology. The normal life of the average Digital Native is one of a consumer and user of things others have created.

Read More @The International Educator

Beyond Hour of Code

By: Tony DePrato | Follow me on Twitter @tdeprato


A friend emailed me to get some ideas for his IB Computer Science (IBCS) class. We had recently discussed The Hour of Code, and how it was a good activity, but it was not deep enough to accomplish anything real.

I gave my friend the same advice I always remind myself to take. If you want to meet your curriculum standards and be interesting, teach students how to make their own math.

The example I gave to my friend went like this, and I typed it out in about five minutes, so forgive the loose structure:

  • Have students write a simple grade calculator. The calculator needs to tell the student what score or combination of scores need to be earned in order to reach a target grade. For example, I have a an 89% and I want an ‘A’. What grade do I need to get next or over the next few assessments?
  • Then, introduce this question, “Are all courses, grades, and the effort put into activities rewarded the same?”. The goal is to get the students to start looking at the work they do at school in degrees of importance, chance and statistics, etc. For example, how much effort should go into earning an ‘A’ for an elective vs earning an ‘A’ for a core IB course? In fact, does my class grade even matter that much compared to my overall IB score?
  • Students then revise their work adding more variables and creating metrics to measure aspects of their academic life. They are creating new metrics. They are learning to assign value to things, in a way that is meaningful to them.
  • This activity is automatically differentiated. Standard level students in standard level math courses will use different approaches than higher level students. Students who are strong in economics or business, but weak in math, will approach the problem from completely different level as well.
  • The assessment is not that difficult. There are always standard IBCS specific benchmarks that need to be considered. They can form 30%-50% of the assessment plan. The remaining percentage could involve creativity, real-world application, ability to reproduce results, etc.
  • Students can do this individually at first, and then in teams to refine their solutions. This is an excellent way to simulate the type of collaboration that happens when people decide to make something new. The team will have to compromise, probably choose a leader, etc. Some will fail. Few will actually succeed. Who said IBCS class cannot be the starting point for entrepreneurship?

Encouraging the use of tools and problem solving is great, but unless students can see beyond language constructs, they are not going to ever get away from programming for the sake of programming. Programming is a tool. Excellent programmers are creative and inventive. Unless those last two concepts are nurtured through planning students will never realize their potential. Also, this keeps IBCS from being boring.

If you want some ideas for programming projects for grades 3-12, send me an e-mail: tony.deprato@gmail.com

Episode 92 – Tim we need your help!

itbabble_podcast

This episode Tony and talk all about programming. Yep, we talk about whether schools are starting students with too difficult a language or not. We also talk about Australia’s decision to make coding mandatory, but at what cost.

As always you can find us on iTunes and Podomatic and if you have a comment, just leave it here on the blog – we love those things!

Check out the agenda below:

You can listen to it right now as well or download it HERE!

How to Teach Programming

This week on IT Babble the Podcast Edition, you will hear Patrick and I discuss this topic that was posted on Slashdot.org: Revisiting Why Johnny Can’t Code: Have We “Made the Print Too Small”?

Any one claiming that programming is related to text size has a serious problem. Why? Because tools that you can use to write programs allow you to set your text size. These are the options that come with the built in terminal on the Mac:

Screen Shot 2015-11-16 at 7.54.23

Clearly, there are plenty of fonts, sizes, and colors available. People are grasping at straws trying to figure out why all the time spent having students plow through programming models simply is not turing them into “coders” or programmers. Trust me, it is not the font size.

The Main Problem

Everyone is over complicating the issues around learning to program, and they are not working towards the correct goals. The curricula are based on doing things in an hour, or 24-hours, or as a running elective without an objective.

Unless those in education set goals, at age appropriate levels, and have tasks that students can relate to, then attainment will be dismal. This process is not any different than learning a language. If a student is forced to do a language, and they have no application outside of the classroom, the language will not be learned.

The goal of programming, cannot be programming. This is what happens in all subjects when educators believe the subject should be taught, but have no practical application to connect the subject.

What Would a Curriculum Look Like?

I wrote a curriculum framework, yet to be fully implemented, for building problem solving skills and pattern recognition skills starting in year 3. The full framework can be seen here: Problem Solving with Computer Science and Programming: A Holistic Guide & Curriculum Overview.

The goal at every level is to build problem solving skills that connect to the physical world, as well as the digital world. The goal is always simple and repeated year after year. This allows a student to spend time working within the discipline, but also allows them to have time for all the other educational opportunities that are available.

Because this curriculum has a variety of experience based learning opportunities, students are more likely to apply what they learn to other subjects on their own initiative. When you state, this is programming class, and this is where you will do programming, then a student is less likely to apply programming outside of that framework.

What Does a Good Programming Class Look Like?

If students are required to take programming, then the lessons of a programming class cannot be based around following step-by-step instructions. Instead they need to be puzzle based, allow for teamwork, and follow a flexible assessment model.

One practice I like to follow for all new programming concepts is something I call “chopping wood”.

I once read that chopping wood is therapeutic because a person can get immediate results. Students new to programming need immediate results.

Here is how it works:

  • Students are given a working program, not piece of code, but a simple program with 3-4 parts.
  • The teacher asks the students to team up and annotate what they believe each part does. They do annotation with comments. The teacher asks the students not to run the program, just to study it.
  •  The students run the program and play with it. Whatever features it has the teacher then defines so the students can experiment. This might take 5-10 minutes, it is not a game or challenge.
  • The teacher sends the students the program again, this time it is broken. The students compare the working model to the broken one and try to fix it.
  • The students break the program and send it to one another. (This can also be a homework assignment)
  • The teacher review the structures and logic.
  • The final assignment- add a new feature. Annotate what you will do inside the code, and try to achieve it. Make it clear students can sign-up for forums (teacher provides a list if age appropriate) to get help from their peers around the world.

Rinse and repeat with every new set of concepts. After students have a decent framework, they can start taking code that exists and combining it together, improving it, etc. Then after they have manipulated and used many scripts or programs, the process of making something unique will not be so trivial or difficult.

The assessments need to be peer (30%), self (20%), and teacher (formative/summative 50%). Students need to feel like they have some say in their work. Most teachers are not great programmers, and without some input from students, interesting solutions or attempted solutions, may be ignored. In programming attempts matter. The logic might be clear, but the syntax maybe jus be a bit off. Literally speaking – if you are not careful in programming you can fail a student with a great idea for a grammatical/spelling mistake.

Unless the goal is to have a factory of people typing instruction sets, schools need to focus programming efforts towards problem solving, pattern recognition, and team work. As much as possible, the subject of programming needs to be integrated and not separated. The student mindset should be that programming, writing code, etc. is simply a tool box that can be accessed anywhere and anytime.

Tony DePrato

http://www.tonydeprato.com

http://www.intslead.com/

Not the Best, Not the Worst, and Getting the Job Done

http://i.kinja-img.com/gawker-media/image/upload/s--rF4VZ1fp--/c_fit,fl_progressive,q_80,w_636/18l7vwlkkqp45jpg.jpg

I was reading an article on Slashdot, by far my favorite website. The Slashdot posting linked to this original article, The programming talent myth. The article discusses this perception that programmers are either rock-star-ninjas or barely able to string to strings together (that was a programming joke by the way).

However, the author, who is very accomplished as a programmer and technology professional says something very compelling, and something very applicable to the whole of education,

If the only options are to be amazing or terrible, it leads people to believe they must be passionate about their career, that they must think about programming every waking moment of their life. If they take their eye off the ball even for a minute, they will slide right from amazing to terrible again leading people to be working crazy hours at work, to be constantly studying programming topics on their own time, and so on.

The truth is that programming isn’t a passion or a talent, says Edge, it is just a bunch of skills that can be learned. Programming isn’t even one thing, though people talk about it as if it were; it requires all sorts of skills and coding is just a small part of that.

 

I felt like I was a bad math student until I was almost 24 years old. I was so convinced I was bad at math, that I assumed I would be awful at programming. I would always work with technology that was based in or around some environment that aided me in development.

Then one day, as these stories go, I saw an interesting book, and randomly bought it. I literally judged the book by the cover. The book was titled Fermat’s Enigma: The Epic Quest to Solve the World’s Greatest Mathematical Problem.

I began reading it, prepared to skip the math and get to the story. However, this was impossible, as the math was the story. I learned many interesting things. First off, all these “good at math guys” were normal people with mostly boring jobs who did math as a hobby. Second, I was able to actually understand and do the math. How was that possible? How could I, someone who had always struggled with math textbooks, read and understand this book about mathematics?

The reason I could understand it, was because I could read, and this book was written for normal people, unlike a textbook which is written to help teachers plan and meet standards. All I needed was to read the information in a different way, and then have the resources required to look-up things I was confused about.

Once this small break through happened, I started programming for real, and from scratch. Whenever I would go to online forums, I would feel like a fool because everyone seemed to be a rock-star-ninja. I did not let this bother me though, I persisted. I realized I would often only have time to program a few hours a week or sometimes only a few hours a month. I was not a programmer, I was a teacher with a full-time job. These forum ninjas were probably living the life of a programmer, and working on their skills full-time.

As time went on I wrote programs for operating systems, websites, DVDs, etc. I eventually started teaching programming, and often would question if I was doing the right thing being a teacher, while not being a rock-star-ninja. I found that when I have very talented students, they could easily learn programming faster than I could, so I would help them learn things like project management, documentation processes, and how to speak to people normally. I reminded them that in the real-world they would have clients, and those people would not want to deal with someone wearing all black and missing three days worth of showers.

For the majority of students, who were simply average at programming, I told them my story. I showed them things I had done in the past, and made it clear that they were in fact able to do more than I had done because they were starting younger. I expressed to them that having a good idea would drive their work and help them find people to assit them when needed.

This journey continues.  Programming turned into competitive robotics, and now in 2015, drones and 3D printing are the new challenges.

The key theme with the article that inspired me to write this, and my personal experience, is alienation. I was alienated, or isolated, from mathematics. I was separated at an early age by perception, from groups of people who were considered competent. This happened to me before high school. I believed firmly by year 7 that I was a bad math student. By all local measurements, I was a bad math student.

As I witness schools pushing to increase programming competency and standardized test scores in math, I begin to worry. I do not think any broad curricula, such as AP and IB, are as holistic as my programming curriculum. I think their learning objectives are driven by quantifiable outcomes, just like standardised math testing.

How can we measure all the pieces required to actually make something useful with measurement tools designed to evaluate a single answer? When do we start teaching students all the other skills they need to create, regardless of whether or not that creation is in code or in some other medium? Those skills being and not limited to, project management, planning, design,team work, testing, budgeting, etc.

If you did not know, the guy at the top is MacGyver. MacGyver’s character was always presented as a logical jack-of-all-trades who could find solutions to unpredictable scenarios. I would rather have more MacGyvers than rock-star-ninja’s, because MacGyver can adapt and learn and find new solutions to a larger variety of problems. MacGyver can be a programmer when needed, logistician, a statistician, a salesperson, an entrepreneur,etc.  I have a feeling MacGyver was a B-C student, who cared more about the why than the how. MacGyvers are going to understand the core and not just follow the common core.

Tony DePrato

http://www.tonydeprato.com

Reflecting On: “9 truths that computer programmers know that most people don’t.” ~by Macleod Sawyer

java-code

This week I read a post called, “9 truths that computer programmers know that most people don’t.“, by Macleod Sawyer .

Below is a summary of Mr. Sawyer’s nine points about programmers and programming, and by the way, he is 17 years old.

1. …the funny thing about code, the website or program may work beautifully, it may run smoothly, and it may be absolutely beautiful on the front-end side (what the user sees). But, behind everything that makes it work it will have so many errors, and work arounds that barely work and that shouldn’t work, but do for some strange reason.

2. 25% of the time involved in programming …we have to sit back and think of how the end-user will end up MESSING it up. (Macleod used an unneeded explicative term, I kindly replaced it and hope in the future he chooses to reserve these for serious situations).

3. A programmer is one who deals with algorithms and design principles, not the one who repairs a computer. We may know how the internal workings of a computer work, how code fits together (or rather hacked together as I explained in Fact #1). But, that does not mean we know how to fix hardware.

4. Most of programming is spent sleeping, walking around, staring out the window, or doing anything else that helps you relax and think. Relaxing is a major key to programming, it’s not just sitting down and writing a thousand or more lines or code, and pushing out a program or app. We have to sit down, walk around, and just think.

5. This is important in every programmers life. Counting starts at 0 – your “1” is my “0”, your “10” is my “9”. The reason why this is because computer programming is all about efficiency, and even small improvements in efficiency can make big differences at scale.

6. Ever wondered why programmers are known as nightbirds? Why we stay up all night? Because it allows us to get into the zone, it allows us to focus on one thing and not have to worry about being interrupted by someone – because they are all asleep.

7. If you have a problem you are told to sleep on it, forget it, put your mind at rest. But, with programmers its the go to way to solve the problem not because it gets us away from it, but because it for whatever reason helps us solve the problem with our code.

8. Programs are written like a hierarchy. With the parent managing the processes below them.

9. Just as you’re usually not impressed when we brag about how much we know about computers, we’re not impressed when you brag about how little you know about them.

When I read these, and all the comments, I realized that I agreed with 100% of the points. I also saw many other experienced programmers commenting and agreeing. These points apply to any type of work related to programming or systems design.

As I pondered these, I reflected on education and curricula. I asked myself, as I am now asking YOU, “does [my] your school and curriculum actually facilitate students being able to work and solve problems?”

It is clear that the requirements are time, space, and distraction. The requirements do not fit into a schedule, yet, programmers work on intense personal deadlines.

In the past few years there have been massive initiatives related to programming. For example in Estonia, they are starting all students in programming from year 1. Next year in the U.S. State of Arkansas they are requiring programming at all public schools at the high school level. The question is, do these initiatives actually allow students to go beyond simple in-class programming structures and actually make something? Do they allow them to experience the horror and magic of putting a piece of code out into the world to watch it live, die, or thrive?

Anytime a student speaks-up like this, everyone needs to listen. In his article he has some good quotes to connect his thoughts to professional practice. For the before morning coffee crowd, that means he did research.

His 17 year old world view on this topic, is my view. I go to work every morning. Do I work? Yes. I do certain things in the morning so that I can actually start being creative in the late afternoon or evening. I can’t write a line of code, even HTML, before 10 am unless I have stayed-up all night and am wired in.

From 8PM – 3AM I can do more productive work than I can in 16 hours of a normal work cycle.

Admittedly, I only have to do programming certain times of the month. I have a diverse job, so I do not mind the schedule, and I work with people who must be ready to work by 7:30 am, so if I am to support them I have to be alert and ready.

I save big programming projects for holidays and weekends because I need to be able to slide out of the constraints of my contract and get lost in the problem. I wonder what would happen if just a few students had that flexibility and were allowed to see the whole year of curriculum in June (assuming an August start)? What if the solved it, did it all in the summer, and did it well? It is something to consider.

Also, most of YOU cannot count. When I help students with math, I tell them to count from 0-1. I also tell them if they do it correctly it will take them forever. I learned this from programming, and that single concept helps me reach students more than any other.

Enjoy contemplating that.

Tony DePrato

www.tonydeprato.com

 

Keep people out of your office with Google Apps

The title says it all, I do not want to be interrupted every 10 seconds. One of the most annoying things is when people forget their usernames. Or their email address. Like many places, we have two usernames. For legal reasons, this could not be helped.

So I started looking at ways to use the Google Apps Api to facilitate account look-ups.
Google Spreadsheets are easy for everyone to update, so they are great for keeping records current. However, when shared online as a reference resource, I find them hard to work with, and slow to update.

Some internet research lead me to this post that explained how to extend Google Apps Spreadsheets with PHP.

After some experimentation, I developed two Google Powered pages. One allows Teachers to look up other teachers, and the other allows teachers to look up students.

The search allows for keywords, department, grade level, etc. It sorts as well. I implemented some simple CSS to make it look nice, but simple to use. Now every teacher
on campus has access to data that can be used for reference or to propagate other systems.

We do have a school management system that can create spreadsheets of data for any purpose, but the turn around time can be an issue. As long as IT keeps the Google Apps Spreadsheets updated, access to information is instant.

Security is also provided via the Google Apps sharing preferences. This makes it easy to ensure the data is only accessible by those who are part of the school’s Google Apps Domain.

The uses of simple databases like this are endless, and once you have worked with the code on one Google Apps Spreadsheet + PHP project, it is easy to re-use it for another one.

I hope my work pays off, because I really want to keep the office visits down to a minimum, I have Mix Cloud to explore and programming to get done.

Tony DePrato

www.tonydeprato.com