My background in software is eclectic and unsystematic. Grade 10 computers, first year programming at U of T, a couple of programming assignments in physics involving FORTRAN and Mathematica, a summer job reading FORTRAN and writing MATLAB code, the use of R code in my master's and proprietary discrete event simulation software called ARENA in my PhD, and the use of GRASS GIS, ArcINFO, ArcView, and now ArcGIS and QGIS, the use of Drupal and WordPress on websites, and running my own computer using Ubuntu.
I've never written software for anyone other than myself - for use to solve a specific scientific problem that I was either working on directly or working on as part of a team. Over the past few years, I have had many ideas for apps that could both solve a scientific problem (specifically I'm thinking of a distributed system for building a database about forests, being able to add to it and also to access it from the web) and also be of use to someone other than me. I came to realize a few things. First, people who know how to do this are busy doing their own things and are not going to do mine; and second, I would need to devote some time to learning in order to be able to build some of these ideas myself.
Bitmaker's immersive web development course lasts 9 weeks. There's a morning lecture, and then students work on an assignment-of-the-day (or of the week) in the afternoons. The things that work especially well are:
1. The lectures are designed so that students work along with the lecturer on the programming problem. The instructors emphasize that part of programming is "muscle memory", getting into physical habits of typing out code, running it, etc. Because you're constantly typing along, you're brought back to the lecture even if your mind wanders briefly.
2. The assignments are very well-designed. Students are walked through building some application or solving some problem, with opportunities for productive frustration and getting stuck along the way, but not so steep as to be demoralizing. And, importantly:
3. In the afternoons, there are instructors present as you're working on the assignment. Because you're working on a specific assignment they are well versed in, they are able to look at your code and help you debug or get unstuck.
Interestingly, assignments aren't graded, and there don't seem to be consequences (other than for your own learning) if you don't complete them. But bitmaker uses an interesting little student management system where you can see who else has "handed in" the assignment, so there's an element of peer pressure (in a good way). Their system isn't as elaborate as Moodle can be, but it has a nice interface and has everything needed to run the course.
Bitmaker has enthusiastic students and excellent instructors, so it's bound to be effective, and it's unclear how much of it can be generalized (say, to university classrooms with different pressures and constraints). But I think the active lectures, well-designed assignments, and instructors present while students work on them (lab time) are all a big part of why bitmaker works well.