Something that I have noticed working in IT for the last 20 or so years is that the critical thinking and problem solving skills appear to have diminished with the most recent crop of CS grads. Perhaps this is an unfair characterization, maybe there is less emphasis on ‘the fundamentals’ in the current CS curriculum. As an example, if you give a set of requirements to a recent grad, their first instinct is to go try to download something from the Internet and start customizing it. While I applaud the apparent desire to re-use existing code bases, Im not sure that this practice makes them prudent or dependent on the work of others for productivity. A similar issue exists when a problem or issue comes up — zoom, straight to Google. If someone else hasn’t solved the problem, well, then it must not be workable — better download someone elses work and ‘fix’ the problem that way. The other symptom is that inevitably, when asked to do something new, the newbies will insist on having a training class on it. Suggest picking up a book and building a prototype to learn and you will be rewarded with a grimace as if you had asked them to drink their own vomit.
I contrast this with my education and career where I felt that I had a good grounding in fundamentals (how operating systems, programming languages, databases, networks and other building blocks work). Having these in place, I have successfully been able to apply and extend by knowledge base without being dependent on someone else providing me with an answer. I remember one of my first jobs, I showed up and was told, ‘we just bought this minicomputer and we need you to set it up’. Ok, hadn’t done that before, but love a good challenge. I took the manuals home, came in the next day, setup the mini, did development on it and it was solid for years. This has been repeated over the years as, at various times, I was a database administrator, network engineer, computer operations manager, software developer, development manager and so on. In each of these roles, building on the fundamentals and previous experience seemed natural to me — I wasn’t dependent on someone else solving the problem for me.
There also seems to be the glamor effect at play here as well. Because there is so much access to so much ‘stuff’ via the Internet, new developers feel the need (if not the RIGHT) to only use the tools and practices that are cool at the moment. The whinging that accompanies constraining the technology set can be deafening. In retrospect, somehow I have managed to use the tools at hand to solve the problem at hand without needing to do it with the ‘tool of the moment’ or wasting time on ‘if only…’ . Oh well, this presents the opportunity to mentor and lead by example. Maybe an old dog can teach some (not so) new tricks.