How often do you write a line of code that moves a byte into a specific register? How often do you reference a pointer or write a sorting algorithm? Heck, for some of you in the audience, how often do you actually compile code?
I am not here to argue that none of these are useful. In fact, I was recently given the opportunity to relearn C, and was more than happy to do so. Long live the address-manipulaters and the machine code compilers! But, contrary to CS programs around the country, “programming” is no longer limited to algorithms, processor architecture, or even objects. In fact, I would say that this new programming is so fundamentally different from the traditional view of the subject as to warrant a new label altogether.
“New Programming” is libraries. New Programming is experimental. New Programming is collaboration — between developers, between users, between software, and between machines. New Programming is connecting what has already been done. New Programming is knowing how to find the best tool, and not just how to write it.
It is undeniable that academia is dealing with one end of a rapidly growing subject and completely ignoring the other. From the point of view of a project requiring New Programming, the course catalogs for major CS programs look like a pointless exercise at best, and counter-productive at worst.
So what happens when employers, administrators, even professors and programmers themselves don’t know the difference? When a business needs a developer for a user login feature, the recent Course 6* graduate from MIT, who learned about RSA from Rivest** himself can look tempting. But while he’s sketching out the optimal database architecture, he might have spent the time better by researching content management systems with robust user management capabilities, and modifying the code from there as needed.
One argument for the lack of New Programming in schools is that it is “Googlable-as-needed” and constantly-changing, whereas “Old Programming” (for lack of a better term, not to imply that it’s outdated) is based on mathematics and engineering that must be taught in a rigorous way. Not only is the premise of this argument untrue, but if it were, subjects such as marketing, photography, and history might never be taught either!
The lack of degree programs with a focus on subjects like content management systems, scalability, apps, interface design, user-oriented design, or server-side/client-side scripting, means that many of the tens of thousands of CS graduates every year were not studying what they would ultimately be doing. Not only this but they may not even realize it after landing the job, imbued by the confidence of “computer science” written on their diploma.
A slightly different approach to programming education would, not only produce programmers better-suited to their field, but would ultimately produce better applications, better websites, better software, and a better quality of life for both the users and the programmers.
As the field grows, the need for differentiation and adaptation increases. Computer science degrees are becoming increasingly good at producing computer science professors, and others who stumble around in the dark for a few years, very slowly writing elegant code that has been written before, just as elegantly. Those who make it out of the dark often emerge with bad habits and a narrow understanding of their new field.
Although academia will eventually change, without a strong push this change will too slow to keep up with New Programming, or NEW New Programming, or the many additions, permutations, convolutions, and revolutions that are likely to happen to the field in the coming years. This push must come from industry, from academia, from the students, and even from the users. With a strong, continuous push, the advancement of computer science will increasingly continue to cause waves in every field in the world.***
*Electrical Engineering and Computer Science
**The “R” in RSA
***This metaphor involves a second-order differential equation. Um, yes, I am an engineer. Why do you ask?