Keeping Up With the Always-Changing Software Development Landscape

Posted 23 May 2012

As a manager and Web developer, it’s my responsibility to make sure that both my team and I stay up to date with as much in the ever-changing Web application development landscape as we can. If you’re in software development, and Web application development in particular, and you’re not learning about new technologies, frameworks, and approaches to building your Web apps, you’re in the wrong business. Seriously. Get out. You’re doing yourself and your clients a serious disservice.

The problem with keeping up with everything that’s going on in Web application development is that it’s simply impossible to do so. Even if you’re a tech journalist, there’s simply too much to cover. I find Hacker News and the feeds from various Stack Exchange sites to be invaluable, and following luminaries in the Web, CSS, JS, and software development world on Twitter helps to keep me exposed to what’s new, and what’s great, in the full spectrum of Web application development.

But there’s a big difference between just reading about what’s new and what’s great, and learning it.

One of the real challenges of learning is putting ideas into practice. Not all of us have the time to add node.js to our production stack, or shift our entire deployment to Heroku. Even if we find the time to set up a side project to do this, it’s hard for a lot of us to be motivated to follow through on that side project and see it to completion. Many of us need the structure of a more traditional, cohort-based class to get us motivated. When deadlines and others are involved, there’s a great more impetus to do the work and learn the technology than if we’re doing it entirely on our own.

This is an issue I’ve discussed a lot recently with my team, given that it’s annual staff review time at my place of work. There are a lot of options out there, but, again, who has the time to review them all and figure out which teaching resources work and which don’t?

As a result of these discussions, I put together a presentation for the Johns Hopkins Adobe User Group about various resources for learning the art of software development and learning about what’s new in that field. The slides from that presentation are attached to this post.

Here’s my not-so-unopinionated opinion on what works:

There’s some excellent software development and computer science material available from MIT OCW, iTunesU, and sites like Google Code University. In the case of MIT’s OCW project, you can get videos, reading lists (you have to get the readings on your own) and, sometimes, exams from some of the best minds in higher education. But there’s no real interaction — either automated or human. You don’t know if you’re really learning and you’re left to very much fend for yourself should you run into problems and Google (or Stack Exchange) doesn’t help. Maybe it’s just me, but without deadlines and a cohort to work with, I find these to be no better than querying a problem in Google when I need an immediate solution.

The total number of courses at either of these sites may be limited, but the depth of content, cohort-based approach, and interaction with faculty and peers is great. Both sites treat their classes like real college classes, with a higher degree of rigor than you’ll find at self-paced sites. Coursera courses are a lot like the first half of a real college course, and frequently use the exact same set of materials and exercises as you’d find at Stanford, Berkeley, or Princeton. While Coursera focuses on bringing in faculty from renowned academic institutions to teach, Udacity focuses on bringing in renowned builders of Web applications (the founder of Reddit, for example). You get true experts who are, largely, quite good at teaching.

Combine the high-quality material with solid exercises that really make you work, a well-defined schedule with email reminders of the work that’s due, active interaction with peers who are working on the same problem as you and occasional guidance from the faculty, and in-lecture exercises that aren’t just multiple-choice clickfests, and the experience is really conducive to learning and retaining that information when the class is done.

Software Engineering for Saas at Coursera taught me Rails, a good chunk of Ruby, and how to deploy apps on Heroku. Web Application Engineering taught me a ton of Python and how to build and deploy apps for Google App Engine using Python. You’d be hard-pressed to something as integrated and motivating as either of these classes on a tutorial website.

Categories: Learning