Undergraduates and learning to program
I last looked at the research on teaching programming around 10 years ago and I have been catching up with what has been going on; in brief: same old, same old. One of the best papers on the subject is still: Language-independent conceptual “Bugs”
The research activity is still focused on making the tools and language ‘better’. There is a defining silence on the possibility that those doing the teaching could not teach their way out of a paper bag. Nobody is brave enough to suggest that teacher training might be a worthwhile investment, or that lectures oriented to what is useful (rather than what the lecturer finds interesting) would be appreciated by students.
I have always thought that researching the teaching of programming had no practical purpose, other than possibly helping universities increase the number of students graduating with computing degrees (some universities are solving the problem students have with programming by offering degrees that don’t involve being able to program). I still think that teaching programming to school children is at best a waste of time.
My experience with students learning to program is from a very long time ago. The process involved listening to confusing and disjoint lectures, reading books and figuring out what worked by trial and error. Students were not taught to program, they got thrown in at the deep and were expected to survive. Anybody who could handle this stood some chance of being able to handle developing software in the ‘real world’; universities were (accidentally) graduating people with the skills industry needed. However, these days universities are supposed to be customer focused, what industry needs is irrelevant (my experience of sitting on departmental industry panels is that the head of department tells us what they are thinking of doing {i.e., new courses for which there will be lots of paying students} and we try to talk him/her out of the sillier ideas); too many fee paying students find programming too hard, let’s offer computing degrees that don’t require any programming has been the only workable solution to-date.
Would you hire a recent graduate, for a development role, who had trouble figuring out how to fix syntax errors in their code? Surely, the minimum requirement is somebody who gets some pleasure from coding, even if they don’t want to spend lots of time doing it.
There is a shortage of software developers and flying turkeys are still with us.
have you come across software carpentry?
@nick j , Yes. I think software carpentry is a great way for people who don’t get to go to university, for whatever reason, to try their hand at software development.
Some of the programs have a very rigorous screening program, aimed at filtering out those likely to fail a particular type of activity (i.e., software development), which will contribute towards their success rate.
I taught computer programming for a long time at a 2-year community college. We taught professional software development, not computer science. I’m also an associate lecturer at a 4-year university. My CS department colleagues would love to teach development and my 2-year colleagues would love to have more computer science in the curriculum. Neither group has enough time given their mandate. My classrooms at the 2-year college were all labs with computers. Enrollment was capped at 20 per section. We taught people how to write software, SQL, systems analysis and design, source code management, and whatever current thing was hot. Over half the students already had a 4-year degree in something, even CS sometimes. When they were done they all got good jobs. Our students had a reputation for being productive very quickly. They know several languages, are good debuggers, and also had a much more professional attitude in general.
I mention this to suggest that there are good ways to teach software development. It has to be the focus of the curriculum. The science behind computers is important in many areas of the field. Creating websites and mobile apps need less science and more hands-on experience. For instance, my students learned SQL, XML, and JSON, not how to write a database or big-endian version little-endian. I have former students at Apple, Amazon and most local employers. They stand toe-to-toe with 4-year CS grads and are very respected and productive.
@Eric
Studying Medieval French teaches as much about software engineering as studying Computer Science, but one is a much better filter for the kind of person industry needs. The current benign neglect method of teaching works because it filters out the people who don’t have the independence, frontier, mentality that a ‘new’ field like software development needs.
Once things start to settle down (which is starting to noticeable) the demand for frontier mentality will decline and the more regular Joes, who are taught professional software development, will be those in demand.