Get funky at the meta-level.
05/12/06 21:44 |
Work
For a long time I've had a theory that subsequent
generations of programmers should (and to a large
part do) stand on the shoulders of their forebears.
Each new generation of languages really being an
abstraction layer on top of previous ones.
In biblical terms it would go something like: Assembler begat Fortran; and Fortran begat Lisp; and Lisp begat COBOL and his brethren ALGOL... and so on, and lots of forking around and incest later we end up more or less where we are today. The point is, that as we progressed complex things got abstracted away to make life easier for the next lot. Fairly quickly, registers, interrupts and dealing with hardware became something Joe Programmer didn't have to deal with directly, later memory management and now even mind bogglingly complex concepts are a mere API call away.
And, that's probably right.
Every time I see an ostensibly simple computing problem (and let's face it, the problem domain in many corporate environments is often will-shatteringly trivial) made (complex^2) by genius hero coders - well, a small piece of me dies and floats away. You only need take an occasional gander at The Daily WTF to see real life examples of this happening on a project near you.
There are, I think, two main profiles for the people who do this; those who don't know any better and those who are bored and so re-invent the challenge into something more interesting to get them through the day. And, I give a small tip of the hat to the second camp as I understand their pain.
However...
Have you seen those mashup sites the kids are making with Google Maps and flickr and god knows what else? I doubt, if you looked at the code for any one of them that you'd find an optimal binary search algorithm or Euclidian approximations for pinning the cute flags in the right place. Why? Because they're mashups. Google has done the hard work and they've just taken it, bent it and thrown it out to the world as fait accompli.
People in the previous generation will mutter under their breaths about how the young whippersnappers don't truly understand what's going on - 'how could they possibly understand the fundamentals of geolocation?' and the young whippersnappers stick two fingers up at the old guard and say, 'thanks for the tools - we're doing it our way now grandpa!'
I know. "How Post Modern!", you're thinking and you're right, I am. I'd never heard of Post Modern Programming until recently but a lot of what they're saying rings true - to me at least. There's been, what, 40 years of squillions of really smart people writing software and if you don't think there's anything in their output worth borrowing then I'm not sure you're in the right job. Of course, we all reuse code all the time, right? Well, if that's true then why do I keep stumbling across functions to determine the length of strings or sort an array? Sure, understanding the fundamentals is important but I'd argue that it's not as important as making the best use of the tools at your disposal and no, I don't necessarily think the first implies the second.
The reality of programming in 2006 is that you're mashing existing things together - be they 3rd party jars in your class path, web services, the Cocoa framework or even getting out a Knuth book and using his binary search algorithm rather than writing your own.
Most of the clever stuff has been done at the lower level by really smart people and it's now time to get funky at the meta-level.
In biblical terms it would go something like: Assembler begat Fortran; and Fortran begat Lisp; and Lisp begat COBOL and his brethren ALGOL... and so on, and lots of forking around and incest later we end up more or less where we are today. The point is, that as we progressed complex things got abstracted away to make life easier for the next lot. Fairly quickly, registers, interrupts and dealing with hardware became something Joe Programmer didn't have to deal with directly, later memory management and now even mind bogglingly complex concepts are a mere API call away.
And, that's probably right.
Every time I see an ostensibly simple computing problem (and let's face it, the problem domain in many corporate environments is often will-shatteringly trivial) made (complex^2) by genius hero coders - well, a small piece of me dies and floats away. You only need take an occasional gander at The Daily WTF to see real life examples of this happening on a project near you.
There are, I think, two main profiles for the people who do this; those who don't know any better and those who are bored and so re-invent the challenge into something more interesting to get them through the day. And, I give a small tip of the hat to the second camp as I understand their pain.
However...
Have you seen those mashup sites the kids are making with Google Maps and flickr and god knows what else? I doubt, if you looked at the code for any one of them that you'd find an optimal binary search algorithm or Euclidian approximations for pinning the cute flags in the right place. Why? Because they're mashups. Google has done the hard work and they've just taken it, bent it and thrown it out to the world as fait accompli.
People in the previous generation will mutter under their breaths about how the young whippersnappers don't truly understand what's going on - 'how could they possibly understand the fundamentals of geolocation?' and the young whippersnappers stick two fingers up at the old guard and say, 'thanks for the tools - we're doing it our way now grandpa!'
I know. "How Post Modern!", you're thinking and you're right, I am. I'd never heard of Post Modern Programming until recently but a lot of what they're saying rings true - to me at least. There's been, what, 40 years of squillions of really smart people writing software and if you don't think there's anything in their output worth borrowing then I'm not sure you're in the right job. Of course, we all reuse code all the time, right? Well, if that's true then why do I keep stumbling across functions to determine the length of strings or sort an array? Sure, understanding the fundamentals is important but I'd argue that it's not as important as making the best use of the tools at your disposal and no, I don't necessarily think the first implies the second.
The reality of programming in 2006 is that you're mashing existing things together - be they 3rd party jars in your class path, web services, the Cocoa framework or even getting out a Knuth book and using his binary search algorithm rather than writing your own.
Most of the clever stuff has been done at the lower level by really smart people and it's now time to get funky at the meta-level.
|