Friday, September 4, 2009

Improving Traditional Software Development Education

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
I've been out of teaching for almost 3 years now. I miss it at times especially investing into students lives and giving them a foundation to be continual learners and researchers. I am enjoying working full time doing Rails. Some things I do to continue to help new developers is by investing my time into Rails Tutor and making my self available as a Rails Mentor which both I think stemmed from the great collaborative work being done at Rails Bridge. I hope some of this helps. I like the idea of apprenticeships or whatever avenue works to invest into future developers.