-
Notifications
You must be signed in to change notification settings - Fork 0
Description
There is a big difference between software engineering and programming.
Programming is a skill that should someday be equivalent to writing spreadsheets is today (a skill with obviously benefits quite a bit from programming). Writing scripts to automate processes, simple applications that store and retrieve data, or writing a function that can be run on iterable amounts of data should someday be just as important a skill as reading, writing, and doing arithmetic.
I'm not saying everybody should be engineers, just as I am not saying everybody should be avid readers, novel writers, or mathematicians. What I am saying is that it is a skill that we are very quickly approaching a need for all humans to have some level of skill in. Entry-level programming classes are becoming a requirement in more and more academic fields, and there are increasingly more jobs that require interaction with some sort of programming -- if not some sort of programmable technology -- and those employed in those jobs would benefit from some general level of programming education just as much, as they might benefit from taking music, literature, chemistry, or physics 101.
The problem, however, is that we are still not making our Computer Science 101 classes approachable. Even worse, I am questioning if our 101 classes are really focusing on the right curriculum.
Recently I had the benefit of helping a friend with their 101 computer science class. There were a couple of things that stood out to me:
- Many of the assignments I helped my friend with were some of the same assignments that I did twenty years ago.
- Twenty years ago, when taking the same level class, I remember the panic of feeling constantly lost that I was seeing my friend experiencing (except I thought it was just me).
During that time, I thought there was something wrong with me. I thought that maybe I was not as smart as the other students because I wasn't understanding. I was seriously considering whether or not I belonged in the Computer Science program, and might have left it if I had any idea what else I would do.
But after a couple of decades in the industry, working on multiple projects, onboarding new team members in new projects, and helping employees advance in their careers, I realize the problem wasn't me. It was, and still, the way that we teach computer science.
Admittedly, I am generalizing from only two experiences -- my education, and helping my friend with a class. If for some reason I have only interacted with the two worst Computer Science programs in the academic world, then perhaps these thoughts will at least deter the organizers into future programs from falling into similar tracks.
Functions First
My friend didn't ask me for help until about half-way through his class, when he started learning for loops. His first assignment was to find all of the Fluky numbers between 1 and 10,000.
Teach iterative development
Very much related to "functions first." Either teach tests, or at least help students develop a system for iteratively improving their code. Don't make them write thirty lines of code before they ever run anything.
Actually teach them how to read a stack trace
The first time they see a stack trace and debug it, should not be one written by them.
Teach them how to use the documentation for their language
And then use it in assignments.
Learning to read code is important. But most students will get that through their own troubleshooting process. More important is teaching students how to find and use the tools they need to write their programs.
Don't sabotage the students
using /Fill in here, but don't change anything else/ demonstrate poor practice. Do it right, and don't teach your students to do it wrong.
If you want the students to write specific functions in a class, then write an interface for their class to extend.