maandag 14 januari 2008

Why we will not have senior developers anymore

I have the pleasure of working with some people who live and breath software development. Coming from the old days where assembly was new and cool and above all something that made you think about the inner workings of a computer.

Now what makes a software developer senior?

These days it seems like becoming "senior" developer means having a few years of experience under your belt. You can easily have senior guys who never did anything else than php or .NET development. (nothing against php or .NET if used under the right circumstances, don't get me wrong).
To many businesses this would qualify as someone who would be labeled 'senior'.
I think there's a bigger issue here. Those new senior developers don't have that deep understanding that many of the current senior developers have. They never had to be bothered with allocating memory or worrying about limited hardware resources.

The current trend seems to evolve to "if we have an issue with resources or performance, we'll throw some extra hardware at it". I understand Ruby relies heavily on this principle, after all, development time is more expensive than cpu time.  A fact, just like looking good is more important to Paris Hilton than having something useful to say.

I personally doubt this level of seniority somewhat. They might be very good developers, but in their own language. When it comes to high performance apps and scalability, often it requires an intimate understanding of the inner workings of a compiler, down to bit level.

The "old" senior developers know for every line of code they write what bits move around, how that relates to the heap and stack. They intimately understand Pascal and C strings and the (dis)advantages of both, or why certain algorithms are more scalable than others. Simply because they grew up having to care about every bit in that machine.

Our future senior developers...

These days people often don't get down to that level of computing. They have fancy things like objects, garbage collectors, excessive amounts of disk and memory available, ... . And they often start out with a higher language like Java or C# which makes them unaware of all these intriguing little details that make or break large scale applications. I don't blame the persons, those who really want will still find all the information necessary to get that understanding of the machine.

I think we should start reconsidering our school system (for Belgium for sure) and start teaching our computer graduates the basics first before letting them have a go at a high level language which takes away a lot of the machine related problems. In their first years, give them an 8086 or an emulator that lets them run assembly. Make them aware of address registers, stack and heapspace, allow them to fool around with 0 terminated strings and the up and downsides. Make them feel the pain, they will even more so appreciate the higher level languages, but above all, they will learn why some things simply require a lower level language.

This is a call to all deciding people on school boards. Don't try to have a sexy education with fancy new languages, just get a good old hardcore education that teaches what they need to provide the world with senior developers.

2 opmerkingen:

DefV zei

It seems you're arguing against high-level languages because the programmer isn't aware of the lower workings of the language, the memory allocation, pointer hell, and so on. I agree with you to some point.

It's important to know what a language does exactly to debug such problems as memory leakage, high memory usage, long runtime on certain "blackbox" functions and so on. But to me, there it stops. High level languages have set a new cruise speed for most applications, that could've never been reached with the low-level ones. It has fired up a whole new way of working, and I truly believe that hardware upgrades are cheaper then developer time.

This of course doesn't mean you should strive for "quick and easy" code. This means it gives you a chance to write your code As Beautiful as you can, without having to worry about system performance because you've added an extra MySpecialObject.

To me, a senior developer is a person who has experience with all sorts of different design patterns, algorithms and methodologies to get things done. And to be honest, I don't care if (s)he does it in C, ASM, ...

(And if you're creating software for embedded devices, you have an argument, but you have exceptions for everything ;-))

Don Ardonio zei

It wasn't my intention to argue against higher level languages. I merely tried to get the point across that people should understand the 'pointer hell' before moving to higher levels, and a lot of that I somewhat blame on our educational system. They try to be fancy and avoid the nitty gritty matters by jumping into higher level languages right away. which means that the developers coming out of there are like constructors that can build a wonderful house, but just have no clue you need a solid foundation.