Dec 23

computer programmer Educating new software developers

Bjarne Stroustrup, inventor of the C++ programming language, says that universities should focus less on creating new Computer Science (CS) professors and more on developing professional software engineers:

My suggestion is to define a structure of CS education based on a core plus specializations and application areas, aiming eventually at licensing of software artifacts and at least some of the CS professionals who produce them. This might go hand-in-hand with an emphasis on lifelong industry/academia involvement for technical experts.

I disagree emphatically with creating a licensed guild. But the rest I generally agree with.

I regularly meet with the Computer Science faculty of one local college, and I’m about to join the curriculum committee of a computer science department at another Utah college as well.  I have strong opinions, formed in the forge of wasted money on failed software projects, on what should be taught in a computer science degree.

Stroustrup pegs it:

It would contain much of the established CS curriculum—algorithms, data structures, machine architecture, programming (principled), some math (primarily to teach proof-based and quantitative reasoning), and systems (such as operating systems and databases). To integrate that knowledge and to get an idea of how to handle larger problems, every student must complete several group projects (you could call that basic software engineering). It is essential that there is a balance between the theoretical and the practical—CS is not just principles and theorems, and it is not just hacking code.

Basically, I want it hard. And what he proposes sounds a lot like what I had in college.  ESPECIALLY the more math (the hard kind) part because the quantitative reasoning it teaches seems missing from many of the graduates I hire or interview.

So what happened? Where did the rigor go?   Many (most?) of them had cook book calculus as their highest math, never getting into the exotic mind benders like differential equations, or linear methods, that put quantitative hair on your chest.

Computer Science enrollment dropped 70% since I was in school in the early 80’s.  Other paths (Information Systems, Microsoft Network certification for example) into the field caused part of the drop, but also a general recognition that industry would hire you _without_ a degree.  So why spend the time and money?

Lately, the kind of person entering the degree has changed too. They are still “geeks” but many are “gaming geeks” focused on video games.  The geeks of early CS were algorithm/logic geeks – they built puzzles, enjoyed logic, and ultimately built up languages like C++, and operating systems like Unix.  As Stroustrup suggests, for many:

"programming" has become a strange combination of unprincipled hacking and invoking other people’s libraries (with only the vaguest idea of what’s going on).

When I meet with CS faculty, I say "make it hard!”, “challenge them” and make them fix other people’s code.    Because if we are going to have less CS graduates, lets at least make them top notch.

9 Responses to “Educating new software developers”

  1. Carl Nelson Says:

    Stroustrup wants a trade school and you want a CalTech. The universities might actually be able to keep up their departments with excellent preparation if they could get all the motivated and bright foreign students who want to come. But for the moment, we are too xenophobic for that as we build our walls and demean foreign nations.

    As you advise the colleges, remember that it has been more than twenty years since you left that world, and it has changed, as has the information world. You can speak about what you want to hire – today – while they have to run a college that needs a steady flow of customers who won’t be ready until four years pass.

    NB: fewer graduates

  2. NewRob Says:

    I agree Ken. The main reason that I studied CS was to be challenged and get my money’s worth out of college. The one thing I felt was lacking from the program though was the lack of real world software projects. In the more challenging classes we focused a lot on theory, which is important to a point, but the application was lacking. I think one reason for this was the faculty. Many of them had not worked outside of the academic setting and this was a detriment to the educational experience. Starting work with you after graduating was an eye-opening experience. There was a learning curve that I think could have been avoided with more practical software engineering projects in college. I guess they expect you to gain experience through internships and other jobs.

    At which school are you joining the curriculum committee?

  3. Ken Says:

    #1… My goals fall way short of CalTech. MIT would do fine. Or even Utah State (-:

    #2… You did very well {new}Rob – we miss you! Note that we wear light jackets here still. Et Tu?

  4. NewRob Says:

    Yeah…I had to dust-off my carhart coveralls and jacket a few weeks ago. I miss wearing shorts in December and having healthy air to breath and living so far away from the in-laws ;)

  5. TR Says:

    Throw in some metrics and a little project management in a 4th year course. Use that slave labor to do the university’s easier computer and software upgrades rather than a contractor. Hold a professors’ salary raise hostage to the project outcome.

  6. Paula Nelson Says:

    #5: That’s a real world solution and university prof’s aren’t about the real world.

  7. Carl Nelson Says:

    Maybe y’all need to understand what a university is and does. It is a non-profit seat of learning, not a commercial enterprise doing service tasks for profit. Which means you can make tax deductible contributions.

  8. Julio Skorupa Says:

    Rather well put.

  9. David Bardach Says:

    hi, I love reading your website. I have recently wrote my own website feel free to visit it. %NAMES%