Friday, February 17, 2017

You’re Teaching the Wrong Programming Language

No, really you are. If someone hasn’t told you this yet it’s probably because too few people know what programming language you are teaching. Of course someone probably thinks you are teaching the right language. After all you’re a smart person and you chose it. Asking what programming language should be taught first is probably the best way to start an argument a discussion among computer science educators.

Should it be a block programming language? Of course it should because the cognitive load of traditional programming languages is too great. Of course not because those languages are too limited.

Should it be Visual Basic? Of course because it is friendly and easy to create nice GUI applications. Of course not because BASIC == BAD.

How about C++? Great as it lets you get right to basics. Of course not – have you seen the pointer errors?

Scheme/Racket Of course because functional languages are more in tune with how we teach mathematics. Of course not because they are impractical and not real world.

Java? No, too much cognitive load. Of course, great preparation for AP CS.

Assembly language? If I had a dime for every time I read that suggestion on a site like reddit or slash dot or the like I could buy a pretty good meal. But talk about cognitive load!

Need I go on? Probably not. You get the idea. There are good reasons to use and good reasons not to use most programming languages. Mike Zamansky took both sides on several languages recently. Starting with scheme and Selecting a starting language - why not Javascript Yesterday in conversation I heard some good arguments for Python which seems to be gathering steam in a lot of schools. Aman Yadav, and Steve Cooper talk about block programming languages in a recent CACM article. Fostering Creativity though Computing

Everyone is an expert. What’s a teacher to do? I’m pretty convinced that a good teacher can do a good job teaching students using almost any programming language if they know it well and teach it well. I worry about less experienced teachers though. Frankly I am not sure even the best programming language, assuming one believes such exists, will work as well with an inexperienced teacher as a difficult language will work with an experienced teacher.

My big worry is not so much about the right language or the right curriculum or the right text book as it is good preparation for the teacher. We’re really rushing a lot of people into teaching CS who don’t have a deep understanding of computer science and software development. How much can they really learn in a 5 day or even several week long professional development session?

I’ve been working with some people to come up with licensing requirements for CS teachers in my home state. I like what we are coming up with but I really wonder how we’re going find or how we’re going to develop teachers who meet all of the expectations we are setting.

Friday, February 10, 2017

Software Developers–Quantity vs Quality

Today is a snow day here in New Hampshire. My third one this week. So I have taken care of most of the errands I use snow days to take care of and have some time to think about things. One of them is developing quality developers. In part this is spurred today by an article in InforWorld. The sub headline is “A report from HackerRank finds that while the U.S. and India have lots of developers, Chinese and Russian programmers are the most talented” Really? I wonder.

First off I wonder if this is really a valid way to make the determination. IT is based on people basically playing puzzle games online. Who makes time for that? Obviously some smart people who have time on their hands. And maybe some sort of need to prove themselves or gain attention. Is that situation more or less common in different parts of the world? I don’t really know for sure. I’ve written about the US student attitude towards programming contests before of course - What Is It With US Students and Programming Contests? I know no more about the cultural effects now than I did then. I wish someone would study it though.

One big thing to think about it that programming challenges are by their nature artificial. They don’t take 5 people a year to “solve.” Real world developers don’t work alone and they don’t work on projects that can be done in a few hours or even days. So does these contests rate developers or some form of good on test people?

But suppose the US doesn’t have the most talented software developers? If that is the case how do we fix it? Perhaps the way to start is to look at how the “really talented” developers in Russia and China are developed. Are they getting it in school or on their own? I wish I knew. I suspect that some of it may be how education is focused.

In the US computer science departments are interested (largely) in creating computer scientists. That is a very different mind set than creating software developers. Software engineering degrees appear (and I should look at them deeper) to be focused on the development process. Yes there is always work on algorithms and problem solving but projects tend to  be smaller. Frequently getting involved in a large multi-year multi-developer project is something graduate students work on. Developing developer tools like Scratch, Snap!, BlueJ and many more like that. Some awesome projects which I don’t see coming out of Russia or China by the way. More like the US, UK and others in western Europe.

Are boot camps the answer? I don’t think so. I think we need more than that. Those programs are too short and too focused on mechanics like syntax and libraries and the like.  I think we can do better in regular schools and universities but we need to time to do it. A couple of one semester courses in high school and a year long AP course are not enough for sure. At the university level we need even more change though.  That’s what I am thinking about today. Anyone have any suggestions?

Friday, February 03, 2017

Review the revised K-12 Computer Science (CS) Standards

The Computer Science Teachers Association (CSTA) revised K-12 Computer Science (CS) Standards is now available for review. This is not to be confused with the CS Education Framework (on which these standards build). The committee is now looking for interested people to review them. Below is more information with direct links to sections of the standards by grade level so that people can focus in on their particular areas of specialty. Please help make these the best they can be!

The public review period for the revised K-12 Computer Science (CS) Standards is now open! In revising the K-12 CS Standards toward a more final form, the taskforce took specific steps to closely align its work with that of the K-12 CS Framework.  This alignment will strengthen the value of both resources as tools to communicate the CS concepts and practices critical to student educational experiences today. The Computer Science Teachers Association invites teachers, curriculum supervisors, administrators, business leaders, the broad education and business communities to review the standards and offer feedback.

Below are the links which will lead you to the Standards specific to various grade levels. The public review process is now open and ends Wednesday, February 15 at 11:59 PM PST.

Level 1A – Grade Levels K-2

Level 1B – Grade Levels 3-5

Level 2 – Grade Levels 6-8

Level 3A – Grade Levels 9-10

Level 3B – Grade Level 11-12

All feedback is greatly appreciated!

Thank you,

CSTA Standards Revision Task Force