 |
posted on Monday, July 14, 2008 8:31 AM
Neil McAllister @ InfoWorld has a great blog post on The Web development skills crisis. He postulates at that "The most agile developers, however, are those who approach programming with a firm grounding in computer science."
Amen, brother. Say it again, only this time loud enough my son hears you.
The basic premise of Neil's post revolves around the frenetic rate at which programming technology is changing. It isn't just languages, though that is certainly part of the mix, it's also the increasing number of libraries and frameworks from which web developers can choose to develop web applications.
In order to switch from Python to Java to C to JavaScript, and do so almost seamlessly, requires, as Neil points out, a firm grounding in computer science. The kind of firm grounding that comes from an accredited computer science degree program at an established university. Or does it?

If you know young adults studying computer science in college today, you may find it disheartening that even a four year degree at an accredited, reputable university no longer ensures a "firm grounding in computer science." The continued transformation of computer science degrees into web programming degrees replete with CSS and JavaScript courses have become the norm, and traditional theoretical classes like compiler and language theory have gone the route of the dodo bird. The same college where I earned my undergraduate degree no longer offers Compiler Theory or Theory of Programming Languages, or even a Graphics course. It now offers "software design" classes in which students are taught Visual Basic, CSS, and JavaScript. They're taught the concrete implementation of programming, not the abstract theories behind it. Students aren't being taught computer science, they're being taught rote programming and not computer science.
That's increasingly disturbing, as it is these theoretical classes in which students build a strong foundational understanding of languages and computer science that can be used to become the agile developer required in today's quickly changing web development environment. If you graduated with a degree in computer science but don't know the difference between a hash table, a stack, and a linked list, then your degree program has failed you.
If you just "import" a queue, or a linked list, or a vector, and you don't understand the implementation of these basic data types you might be choosing one that will not only affect the performance of your application, but put limitations on further development down the road.
The best programmers, agile programmers, are the ones that understand not only the language but the basic constructs of all programming languages because they are, in essence, the same. They understand the theory and data structures and algorithms and it is that which enables them to move between languages and environments with alacrity.
And you network administrators out there - don't think you're off the hook so easily. If you don't know the difference between a queue and a weighted-queue and the advantages and disadvantages of each, then you don't really understand what you're doing when you click that checkbox on a firewall or traffic management device that implements queuing as a method of quality of service. Many of the techniques used to implement network-oriented tasks are based solidly in computer science algorithms, like basic routing and load-balancing that form the basis of application acceleration solutions and good old fashioned routers. That means that you, too, could benefit from a firm foundation in computer science. After all, the software that makes those network devices work in the first place is just that - software. In the end, it's all code and it all boils down to the same thing: data structures, control structures, and compilers.
Knowing why something performs the way it does gives you an edge; it gives you insight into why things go wrong and why things go right when you're configuring a device or writing an application or architecting a solution.
It may be cliché, but it's true: knowing is half the battle.
The other half is realizing that you need to know in the first place.
 
|
|