(Disclaimer: This may not apply to everyone, this is just my view on this, if something is wrong please give me some constructive feedback)
Yesterday I was reading this article which appeared on Hacker News and it made me think a lot about about our generation and the ones to be (like myself). What I interpret from the article is that given some time, any skill will disappear/be replaced by something simpler. And in some cases the skill is simply forgetten and never used again. A great example they gave in the article was that current developers don’t seem to know the inside of the machine (A.K.A How the raw machine works). What’s the purpose of programming if you assume the rest is just “magic”. Use of High Level programming languages are great for speeding development time, but when there is a problem (like some program that runs slow for some “magic reason”) and you don’t know the why’s and the how’s because you don’t know what is happening at a lower level, then what’s the point?
Faced with a lower level problem, people are just as clueless as the bag of chips lying next to them.
Let me give you a real world example:
Let’s say that John Doe is driving his brand new beautiful Ferrari and suddenly his car stops working. John gets out of the car and starts panicking, why does his brand new car not working? Why is it not behaving like how he was informed it would when he bought it 5 hours ago? While he is panicking, John spots a car that is coming his way, waving his hands he alerts the car and the driver stops right in front of him.
-Man, what gives?
-Why did my car stop? It’s brand new and already broken!
The stranger investigates a little bit
-Well from the time you bought your car to now did you maybe think of refuelling?
-Refuelling? What does that mean?
-It means to put more fuel in the car (fuel tank) so that the engine can work and make the car go forward.
-Why would I need to know the inner workings of the car? All I need to know is how to drive, the rest isn’t important...Well that was before this happened, now I'm screwed.
-What do you mean it’s not important?! You have to know at least a minimum of how the car works if you want to be efficient and solve your own problems! [...]. ← I could go on forever, but I’ll leave it here.
Here in my little story you could say that John is a simple C++ developer and the stranger is let’s say a C++ developer with some assembly knowledge. John didn’t understand the why’s and how’s of his problem, he just knew the basic functions of how to use the object, so he immediately asked for help to the stranger who luckily had some knowledge of the inner of the car (a lower level language) to help John with his problem. You see, if more people would take the time to understand how stuff work, there would be less dumb questions on SO and programs would run better (It’s a win-win).
Another reason the new generation of programmers are becoming dumber is because of the infamous flow of frameworks. It seems that everyday there is a new framework which is revolutionary, but that’s for another debate. Again, like high level languages it makes development time a bit shorter, but it also hides a whole part of the language and limits the possibilities you can do with it (limiting creativity). A good example here (friendly example, OK?) would be jQuery: Some people will only use it for quick adjustments/hacks to their website and that’s OK, what’s no OK is when it becomes the only thing you use and that you never go explore JavaScript to understand the why’s and the how’s. If a problem appears they won’t know what to do. What you can do is limited to what jQuery can do (not saying that it can’t do a lot of stuff..ooh shiny), that’s how it works (magic not included). What’s the fun of letting someone do all the work for you? On the short term it’s great, on the long term it’s not that great anymore since you’ll be lacking key skills when you won’t have access to your framework (or when you’ll have to use something different).
With that said, I’m starting to understand why the veteran programmers (those who worked their ass’s off) hate the new generation of developers. Back in their day (not saying that they are old) memory was a rare resource, you had to write efficient and optimized code so that the program worked as described with a couple K’s of ram and a CPU slower than my calculator (they had to squeeze all the spare juice out of the hardware). Now with 4 gigs of ram cheaper than 60 days of WOW and crazy fasts processors at sub 300$, programmers are letting themselves go overboard with resource management being an afterthought. Most of the problems now with programs/OS’s are that they are so bloated that my decent laptop and gaming computer has a hard time keeping up (Ubuntu 11.04 anyone?).
One thing I am always stressing about is “Am I learning the right way”, because learning the hard and difficult way makes you learn the right way since you have more possibilities of making errors and what better way to learn than to make error (and finding solutions of course), and with that comes a deeper understanding of the subject and how the inner works. That’s why I started with C++ (some may argue with me here) and slowly moving to some assembly to understand the why’s and how’s of C++. At my age I think it’s important the learn the right way instead of the bad and easy way (good habits are always welcomed).
Going back to my tough of programmers becoming dumber, taking everything for granted is not good. Making everything simpler is also not very good. Examples to back up these observations would be: automatic cars, our survival instinct on the verge of extinction...Let’s just say that Idiocracy wasn’t to far fetched: Instead of a steady climb of our intelligence we will slowly decline and become stupid. OK, this is probably a half-decent conclusion, but hey it could be true if we continue to loose valuable skills.
In the end, go do yourself a favor, go get your hands dirty and do your research on the why’s and how’s of your favorite programming languages (here is a start) and you will thank me when a problem pops out. Knowing how stuff work isn’t just great for you, it’s great for everyone.
And don’t forget: It’s always fun to learn new stuff.
Oh and while I have your attention, I would also like to get some feedback on my English (helps me write better for future posts).
Have a nice August Day inside.
