Day 614 of 1000

This is the eight in a series of posts on how we taught our children to program, what we did wrong and how we think we could have done better.  You can see the introductory post and index to the series by clicking here.

[Previous post]
[Next post]

Kelly and Christian both took the “Programming 101” class at North Carolina State University this semester for science majors.  We all agreed that it was badly done.  Part of the problem was with the disparity in knowledge of the students coming into the class, but a lot of it had to do with the structure and operating rules of the class.  This seems to be a typical problem for many, if not most, introductory college programming classes.  Here is the course description:

CSC 116 Introduction to Computing – Java UNITS: 3 – Offered in Fall Spring Summer
Corequisite: (E115 or PAMS 100) and (MA 121 or MA 131 or MA 141)
An introductory course in computing in Java. Emphasis on algorithm development and problem solving. Careful and methodical development of Java applications and applets from specifications; documentation and style; appropriate use of control structures; classes and methods; data types and data abstraction; object-oriented programming and design; graphical user interface design.

First, let’s talk about the disparity of knowledge of the kids entering the class.  Kelly and Christian are a classic example.  Kelly, as is described in a previous post in this series, had virtually no programming experience before she took the class.  The University required her to take a one-hour course on how to log into a University computer and use a Linux environment, how to make a PowerPoint presentation, and a bunch of politically correct goofiness.  In other words, she started the Java class with zero programming knowledge.  Christian, on the other hand, already had more knowledge about programming in C/C++, C#, Python and PHP than would be taught in the course.  So, while Christian was bored out of his gourd, Kelly struggled to learn about data types, loops, if-else statements, classes and objects, and all the rudimentary building blocks needed to program.

Meanwhile, the operating rules of the class prevented her from getting help from her brother, Google, me, or anyone who had deep knowledge of these programming topics other than the course instructor and the less than capable TA’s for the class.  Whose bonehead idea was it to make those operating rules?  I get that the student who takes the class needs to understand the material on their own and it is important to do their own work, but it is ridiculous to forbid the use of tools and resources that will allow the student to learn the material more thoroughly.  I am sure many students ignored these rules, but Kelly worked mightly to do the class according to the operating rules.  Those rules were a great hinderance to the learning process for Kelly.  For Christian, it did not matter, he already knew everything.

There has to be a way to do some kind of triage before assigning kids to a class like this.  There has to be a better way of teach the beginning programmers.  I will talk about what we would do to prepare our kids for these classes if we had to do it over, but I do not know what to do about the college classes themselves.  I am not sure what to do about the college level introductory courses themselves.  What I do know is that I have hired lots of programmers during my career and I rarely, if ever, hire programmers that have Computer Science degrees.  Partly that is because of the type of programming we do in my field (robotics and machine vision), because it seems like the CS majors are best suited for database, gui, and internet programming.  Partly, it is because I have seen too much of the kind of nonsense like the course desribed here that goes for college level programming instruction.