What I wish they would teach in universities
A few weeks ago I gave a talk about what makes a good developer. And more to the point, what doesn’t. We are in a hiring sprint now, so we spend a lot of time thinking about this. Primarily, I’m concerned with having passionate people who love what they are doing. But that isn’t the topic of today’s post.
We get a lot of CVs from people who went to good schools, had excellent grades, and can’t actually write real world code worth a damn. Actually, I look at the previous statement and I really don’t like it. “Writing real world code” implies that writing the code is the most important aspect of the work, and it isn’t.
Real world projects is about a lot more than just the code. What about using a source control system. And not just knowing that there is such a thing that is better than this:
I’m talking about actually using a source control system to manage code, to review past work, to see the flow of changes, etc.
What about knowing how to debug? I’m talking about a bit more than F5 and F10. I’m talking about practical things like being able to debug a big system and understand how to work the debugger to give you what you want. Knowing how to look at the stack trace, or understand the difference between an exception that is thrown (and handled) and an unhandled exception.
What about actually solving real world problems? Like a project that has a double assembly reference because of a bad merge, and you need to be able to track it down and fix it.
What about actually reading code? Given a non trivial amount of code, figuring out what is going on and making changes there.
Those are just some of the things that bug me because people come out of the university assuming that they can start pumping code, and they don’t know how to actually work on projects.
I wish a four year degree would also mean having a a four years project, that you started to work on day one, and to modify and work on throughout those years. That would give newly graduated students some concepts about how to manage a codebase over time. For that matter, I see questions like this being asked, and I don’t really know what to say.
There is a very strong need to have practical learning as well. Not just learning algorithms or how things work, but also how to actually work.