I read Corey Haines post about his idea for software development school. I thought I'd jot down some of my experiences while I taught software development.
I taught community college computer science and web development for 7 years. In the summers I worked as a contractor to gain 'real-world' experience. This allowed me to teach what I learned over the summers in the classroom. Towards the last couple of years of teaching I worked at nights while I was teaching because I enjoyed it so much.
To me I saw a lot of teachers take the easy road: picking canned curriculum that laid out non-practical material, have a work study student grade for them, etc. while they go home early. This was frustrating to watch and be around!! I picked industry books (PragProg, Addison-Wesley, etc.) and used them for reference while I created custom curriculum every quarter because of technology changes. I did not picked canned textbooks. They drove me nuts being out of date and out of touch with modern software engineering (most still push Waterfall, ugh). I kept a class blog where I would post my notes, source code from lecture, and screencasts. Even the public could have access to my curriculum (and they did).
I worked my tail off late into the afternoons and evenings every day to prepare the best and most up to date lecture I could give. I was also the lead instructor/advisor for the Software Development Program I taught in. We had an internship class setup at the end of the degree but it was not enough. Our intention was to get our students hooked up with a local business they could work with. A few of them worked out but most of them seemed to fall short of what I wanted out of it for my students. Many companies, where I'm from anyway, do not believe in agile practices or open source. I taught Java, PHP, Ruby, and Rails. It was tough to find a match between my students' skill set and the the technologies companies were using. A lot of companies stick to what works and typically are using technologies that are not as new as what my students were learning. A lot of times I had to resort to creating my own projects for students to actually apply what they've learned to a pseudo-real project.
For teachers in traditional environments it is hard not to get sucked into the status quo. I basically rebelled and did a few things to keep my degree top notch:
- use industry books (not textbooks)
- moonlight on the side and keep your skills fresh
- create curriculum and make it public (blog, github, etc.)
- keep updating curriculum, challenge administrators to let you do this. For example, I added an Agile class that allowed me to teach TDD, using version control, and Extreme Programming. That class was fun to teach! :)
- create screencasts = students love to learn that way!!!
- don't let administration use you to do administrative work (meetings, meetings, meetings...). say 'no' often and keep at making your curriculum awesome