Lack of fundamentals in web programming education

Wasn’t sure what to name this entry, but have had a few discussions with some people over the past month or so about their experiences.  All of them were finishing up “web development” degree programs (under somewhat different nams) at institutions in the area, and all were talking about looking for jobs.

I was dismayed (but not necessarily shocked) at how little understanding they had about the basics trade skills that are necessary for most real world webdev work.  Now, I’m obviously passing my own judgement here, but bear with me.

Task/project breakdown – the idea of taking a project requirement and breaking it down in to written steps – whether inline documentation, external ‘requirements’ doc, or tracking in an issue database.  This was not something that any of these people indicated was covered in their classes or coursework.  Whether you’re working alone or on a team, this is a fundamental basic skill that is missing in most jr devs I meet – loading an editor and starting to code is the default mode.

Version control – none of the people I spoke with had any version control in their class work.  One knew *of* version control, but his internship mentor didn’t feel it was useful because there was just two of them working, and they could easily schedule time to edit the same files on an FTP server without stepping on each other’s changes.  I don’t expect someone to be an svn master or git guru – the specific technologies may change.  One company may use clearcase, another MS TFS, another git, and so on.  The nuances of each will be different, and the dynamics of the projects will be different.  But the core value of using version control, even on projects for yourself, isn’t even being mentioned in some of these courses.

Testing – this is going to be different based on the project, of course, but a ‘web degree program’ that doesn’t expose students to some testing tools – selenium being the one I’d default do – is doing a poor job of equipping these students to be proficient in their craft.  Put another way, students from a degree program that exposes them to testing concepts will produce better, more desirable/employable students.  However, if *no* programs do this, then the bar is uniformly low across the board.  Exposing students to the concept of unit testing their code – xUnit style – and understanding that code is more testable when it has fewer hard coded stuff in it – these are things that should be being taught.
Note that, excepting for a ref to selenium, I’m not really advocating a particular technology (and not really even in that case), but concepts.  The need for Android developers may be gone in 5 years (at least, Android as we know it know).  The need for “PHP5 developers” may be radically lower in 5 years.  The need for Ruby3 developers may be through the roof in 5 years, and there’s not even any degree programs *talking* about Ruby3, because it doesn’t exist yet.  The need for developers who understand testing and version control will definitely be strong in 5 years.  It was strong 10 years ago, although the tools were different.  It will be strong 10 years from now.

These universal lifelong skills that are *fundamental* to the practice of good software development are not seeming to be taught in software development courses at a college/university level.  Some programs will have an emphasis on data structure and algorithms – certainly nothing *wrong* with them – they’re universal truisms too.  But there seems to be an ignoring of the realities of day to day work.  And I’m not just talking about the 4 year ‘big league’ schools – local community colleges that traditionally have a more practical emphasis on ‘vocational skills’ are seemingly ignoring this.

I don’t remember any of these skills being in course descriptions 20 years ago in my university, and I’m not seeing much reference to the few colleges I searched about for recently, and certainly not getting this from talking to people about to graduate from “web developer” degree programs.  Is this your experience too?  Or am I just getting a statistically skewed sample?

I'm currently working on a book for web freelancers, covering everything you need to know to get started or just get better. Want to stay updated? Sign up for my mailing list to get updates when the book is ready to be released!

Web Developer Freelancing Handbook

Share and Enjoy:
  • DZone
  • Facebook
  • Reddit
  • StumbleUpon
  • Digg
  • Simpy
  • Technorati

{ 11 comments to read ... please submit one more! }

  1. Also I would add–>problem solving skills involved with efficient debugging. The logic involved in finding & narrowing down/honing in on the bug. Knowing how to set up and use tools to do so effectively.

  2. Debugging – yes, absolutely. Working with someone else’s code is what we do far more often than writing from scratch. I bet this isn’t covered in many courses. Tools, i agree with, but those tools may change over time, so I’d have less emphasis on tools on more on the basic debugging skills.

  3. Excellent article, spot on in so many ways

  4. When I was teaching in a degree like this, we taught all of those things to a greater or lesser extent. I agree these skills are absolutely critical.

  5. Couldn’t agree more. I was NEVER taught ANYTHING about version control or project management at NC State (been 10-12 years ago). We had one class that talked about testing, but I wouldn’t say it was a huge focus. I learned all the best practices I know on my own and out of a desire to turn myself into a decent developer. We make our student devs do all that stuff, and they constantly are telling me that their only exposure to such things are in our office. It’s sad, and I’ve tried to speak to people about it, but I get nowhere.

  6. Totally agree with you. I graduated in 2010 and I feel bad to see how much I missed on these basic skills.

    I would add to the list Deployment and Automation. For all these tedious tasks that we do on a daily basis, or whenever we decide to update our app.

  7. I don’t think one can learn to break down system requirements at the uni. You need some experience to do it properly.
    And I do agree with 2 other points.

  8. @Laura – good on you – you’re in the 1% ;)

    @jfaustin – great that you’re having people do some of it. sad that you’re the only place they have to do it.

    @iwankgb – I disagree somewhat. “System requirements breakdown” might not be able to be taught 100%, but you can be exposed to the concept and have some run throughs. Give out homework assignments like a project is created in the ‘real world’ – vague statements without any focus, and have part of the homework process be to elucidate the specifics from the prof or TA (or indeed a fellow student, as that may be closed to reality in many companies).

  9. @vincentb – good points. I’d probably put them lower a bit with respect to classroom learning – at least deployment – as that’s often going to be something jr-level devs won’t necessarily be concerned with. Or… barring that, with good version control techniques in place, rolling back to an earlier state isn’t impossible to do :)

    But yeah, both of those should be things that people at least are exposed to.

  10. So very true!

{ 1 Pingbacks/Trackbacks }

  1. Local Development For Heroku Facebook Apps « The Blog With No Name (Yet)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">