A role for Udacity: Filling the holes from formal computing education
Two recent blog posts that are pointing out an interesting need.. First, from “Gas Stations without Pumps,” a discussion about how teaching writing and programming are similar in importance and the difficulty of doing it well.
There is a strong temptation to throw the problem over the fence to a small group of experts (writing instructors or computer science lecturers) teaching first-year classes. That happened in most universities to writing instruction over the past 2 decades, with the result that students write very few papers after their freshman year in most majors, and almost never get detailed feedback on them. It is happening in computer science also, except that the freshman CS courses already do not provide any feedback on programming style other than whether things compile and work on a few test cases. (That’s like checking English papers for word count, word length, and sentence length, but not for content—sort of what scoring of SAT essays is like.)
Next, from a new blog that I just discovered: A post from “Run(),” which talks about how Udacity is helping a long-time programmer become a better programmer. The first post is pointing out how formal education is failing future programmers, because it’s not providing enough to develop real expertise. The second post is agreeing, but pointing out that maybe that’s the role of Udacity. I’m not arguing that Udacity or Coursera is dealing with teaching novices to code well — maybe it’s possible to do that via crowd-sourcing, but I don’t really see them filling that role now. I do see the possibility of Udacity of filling other holes in formal computing education, like seeing multiple languages, which doesn’t happen much now.
It showed to me that there are many people out there programming without truly understanding the essence of programming. I would bet that there are many out there just like Rick, who dabble in programming or are self-taught programmers, who have focused most of their efforts on learning programming languages that they never realized the common logical backbone that is in so many programming languages. It does venture into a somewhat theoretical space, but I think many would stand to benefit from investing some time to understand these abstractions from the get-go. It also makes me think, once again, that you can become a better programmer if you can be exposed to at least more than one programming languages from early on– so that you are not trapped in the workings of a single mental model.