March 20, 2006
One of the peculiarities of software development is how rapidly knowledge becomes obsolete. Dan Appleman cited a parable from Lewis Carroll's Through the Looking Glass which illustrates this wonderfully:
'Now! Now!' cried the Queen. 'Faster! Faster!' And they went so fast that at last they seemed to skim through the air, hardly touching the ground with their feet, till suddenly, just as Alice was getting quite exhausted, they stopped, and she found herself sitting on the ground, breathless and giddy.
The Queen propped her up against a tree, and said kindly, 'You may rest a little now.'
Alice looked round her in great surprise. 'Why, I do believe we've been under this tree the whole time! Everything's just as it was!'
'Of course it is,' said the Queen, 'what would you have it?'
'Well, in our country,' said Alice, still panting a little, 'you'd generally get to somewhere else -- if you ran very fast for a long time, as we've been doing.'
'A slow sort of country!' said the Queen. `Now, here, you see, it takes all the running you can do, to keep in the same place.
If you want to get somewhere else, you must run at least twice as fast as that!'
AJAX and Atlas are the hot topics du jour here at MIX06, but will we be using them in five years? Unlikely.
I am all for learning new technology, but immersing yourself in new technologies is merely running as fast as you can to stay in the same place. To get somewhere else, you must run twice as fast. That means studying the topics that won't be obsolete in five years: human factors and design. And that's exactly what my recommended reading list is about. If you haven't read the top 5 books on that list, ask yourself-- am I too busy running as fast as I can?
Posted by Jeff Atwood
Mightn't part of the problem be that you've planted your flag in Microsoft territory? MS has a vested interest in keeping the fire and motion going - forced obsolescence and new waves of tools coming down the pike to replace what you're currently using, whether you like it or not.
In the OSS universe, esp w/re to Free Software, you can develop expertise in a tool without worrying that it's going to be end-of-lined by the all-powerful vendor. New languages and tools come along, but they aren't necessarily rammed down your throat under duress ... leaving you time and energy to acquire design and hci skills while (not instead of) keeping current.
If you make an either-or choice and immerse yourself in "soft" skill subjects (the only nitty gritty books that I see on your list are Programming Pearls and the Friedl regexps book), aren't you sort of setting yourself up to be unemployed in several years time or "rescued" by being sucked into management?
I mean if you can't produce a tool that's satisfying to use for anyone but yourself, what are you actually doing?
In fact, that's how I define success as a software developer: How many people are using your software? And how many are using it because they *want* to?
if you got into software development because you love developing software (writing actual code) then [...] you haven't really "kept your job", now have you? You've actually completely changed jobs.
That's true, but is physically building an iPod even a worthwhile job to have? I think Apple's business model is the future: what you're really selling is the design and the end-to-end experience, from device, to PC, to website. Technical chops still important, but they aren't the key ingredient here.
But I don't have a problem with learning something new every five years.
I am not advocating that we abandon learning new stuff. We should strike a balance between learning new stuff, and learning the human side of development. Most developers are very, very good at the technical stuff. They don't need to be better at what they already excel at. You'll further your career a lot more by learning the things programmers are traditionally NOT good at: design and human factors. These also tend to last longer-- people change in geologic time compared to computers.
Forced obsolesence isn't the only driver of change (I would argue it's a minor factor). Generally the new technologies that truely dominate (and thus are 'required' learning) will generally solve new problems that come up, or solve existing problems in a significantly better way. AJAX being the case in point, it basically tries to solve the problem of sucky web browser interfaces.
I've been calling this 'computing in the Red Queen's square' for years. The fact of the matter is, the last significantly original developments in software were the Lempel-Ziv series of compression algorithms, and the Bricklin spreadsheet model - both of which date back to the late 1970s. Everything else in the industry - *everything* - is a refinement of work developed before 1975, and most of it is nothing more than exploiting the improvements in hardware performance.
this is my first comment, and I'd like to say I greatly enjoy reading your blog.
It's interesting that amid the recommended books I don't see "Gang of Four" or Fowler's "Refactoring" -- tomes that have been with us for 11 and 7 years, respectively, and are here to stay for some time. Not to mention, say, Knuth's "The art of computer programming", which is probably timeless ;)
yet, for example, Krug's book is there. And while I thoroughly enjoyed it, much of its ipractical/i advice is probably already made obsolete by Web 2.0 (and whatever comes out of it), and in terms of "timelessness" it's hardly a match for, say, Raskin's "Humane Interface".
Would you care to explain/comment?
"the only nitty gritty books that I see on your list are Programming Pearls and the Friedl regexps book"
Wow. Or it could be he's already got enough of the nitty-gritty and wants to be able to communicate it those unfortunate souls who don't speak gheek. All the nitty-gritty in the world doesn't do much good if you can't produce something usable by the world at large. And I don't mean that in a fidiuciary sense, I mean if you can't produce a tool that's satisfying to use for anyone but yourself, what are you actually doing?
And that's exactly why I'm currently learning WPF. It will be the next 'big thing' but won't be here for almost another year. I'm trying to maximize the benefit of learning the new technology.
But I don't have a problem with learning something new every five years. That's how I continue to stay more valuable than my counterparts who sit in the same technology for ten years until they are tossed aside. It's a "good" thing that technology changes every five years. If it didn't, then there would only be "so much" to learn and everyone would eventually just be equal. Imagine if all of your peers were just as good as you are. No thanks... I'd prefer to be the guy who keeps up with the latest and greatest while my peers wallow in the mundane.
"Wow. Or it could be he's already got enough of the nitty-gritty and wants to be able to communicate it those unfortunate souls who don't speak gheek. All the nitty-gritty in the world doesn't do much good if you can't produce something usable by the world at large."
I'll refer you to what he initially said about knowledge rapidly becoming obsolete (at least for MS-allied folks). If you accept his premise, then you can't really ever have "enough" of the nitty gritty ... unless, as I said, you're going to try to cross over into a management role.
The sell-by date for people skilled in FOSS is generally much further in the future and it's comparatively easy to keep yourself up to date. In most cases, age discrimination will become an issue long before FOSS skills are truly obsolete.
"Generally the new technologies that truely dominate (and thus are 'required' learning) will generally solve new problems that come up, or solve existing problems in a significantly better way."
You've sort of left yourself a huge out with the "or solve existing problems in a significantly better way" bit, haven't you? Whether, when MS pulls the rug out from under its developer community and suddenly announces that one tech is out and another is suddenly in (maybe VB6 vs. VB.net?), the new tech is really better is completely subjective, isn't it? None of the mortally wounded VB6 programmers I've spoken with, for example, believe that they're being treated particularly well by MS.
"Basically you want to keep moving your skills up the chain towards more design, more analysis, more human-factors because these are the parts of the job which are difficult to outsource."
Yes, that's the message of the day. Here's the rub, though: if you got into software development because you love developing software (writing actual code) then, when you just barely, by the skin of your teeth, are able to transition out of actual coding into being an architect or someone who basically throws specs over a wall to some software sweatshop in Rumania or Bangalore or Beijing ... you haven't really "kept your job", now have you? You've actually completely changed jobs.
Everything you know will be obsolete in five years
Today I used:
- regular expressions
- Unix pipes
- VMWare (yes its more than 5 yrs old)
just to name a few...
I've been using all of these for more than 5 years and I'd bet I'll be using quite a few of them 5 years from now.
But 5 years ago I was also using:
- Java (replaced with C#, then with Python)
- Solaris (replaced with Linux)
- Win2k (replaced with XP)
- Perl (replaced with Python)
- Ant (obviated with Python)
- JBoss (moved to Django)
- JSP (replaced with ASP.NET, then with Python)
(are you seeing a trend?)
So, yeah, you have a point. And I don't see this as a bad thing. Its one of the attractions of this field - that I _get_ to learn new stuff all the time and find better ways to do things, and also find out that many of the old ways I've done things are still useful.
That doesn't mean I dive into every new technology I see on slashdot. I've dabbled in AJAX but haven't found that many good uses for it. Conceptually its simple enough that you don't need to read a whole book on it - "view source" will tell you most of what you need. As for Atlas, well I think I'll just sit that one out. Part of learning is recognizing what things you don't need to waste your time on. (But I wish I had that wisdom when J2EE was hot ;-).
"The sell-by date for people skilled in FOSS is generally much further in the future and it's comparatively easy to keep yourself up to date. In most cases, age discrimination will become an issue long before FOSS skills are truly obsolete."
So you're saying that FOSS stagnates? How do you become skilled in FOSS? What the heck *IS* a FOSS skill? By using PHP? C++? RoR? Just by using Linux as your server base? What about cross-platform FOSS? Does OS X count? What if I develop a commercial, closed-source product using Linux and PHP? Does that count? If you think Microsoft obsoletes their technology often, try keeping up with the Ruby on Rails API for a few months. Isn't the only FOSS skill really the ability to include a license in your source code?
As far as human factors (as they relate to usability, not management) and design. Pfffttt, somethings got to change. We can't have reached the pinnacle of software engineering and processor design. How long can we keep propping up the x86 architecture and the design patterns required to make these crusty 50 year old ideas running? You might think the Tablet PC is a step in the right direction, but it's not. It's just replacing the mouse with a pen. They still design the software to be used with a mouse, it's just now you can add bad handwriting to your documents. Whoopee! If I'm really moving my design skills forward, should I be thinking about pixel placement of drop-down boxes and target areas? Or should I be focuesd on changing how people interact with the PC on a more fundamental level?
Armen, if you qualify that statement by pointing out that the 'C++' programs in question are really just C programs made to look vaguely as if they used the OOP facilities of the language, I would agree with you.
This isn't a knock against OO per se (not entirely, at least), but rather about a) how poorly OOP is taught in most books and courses, b) the rampant *mis*use of OOP in places where the paradigm is a poor fit, and c) the general lack of substance to the changes in programming and software design techniques in recent years.
Interestingly, it looks like the 'hot new thing' for 2006 is... Lisp. About time, too. Back to the Future, anyone?
I would say that Ajax type techniques are all about design and human factors, making the web experience more immediate for people, making things feel more responsive and enabling more control over the same functionality. That may not be what they are being sold as now, but that is what will endure about them.
I doubt we'll be using the name Ajax, though- that's pretty much hype plus DHTML. I'm sure the marketing types will have thought up a new name for the same technology by then- they have to do something to justify their enormous salaries, after all.
Whimsical, stupid "technologies" that are easy to learn and easy to master often become obsolete quickly.
More difficult tools that remain "useful" forever rarely go out of style.
Microsoft announced the death of Unix when NT first shipped, yet Linux is here today and still kicking ass.
People said Java would herald in the death of C++, yet most real apps are still written in C++.
Mod -1 troll.
How is MIX06 about computing in general? I'd be very surprized to find a yearly conference with the themes "XML - Still going strong, just like we said it would" or "PuTTY for the 2% of you who are not using it yet".
Conferences are about new tech, and (as always) most new tech will quickly be obsolete. AJAX is still in its infancy, and Comet has already come along, promising improvements...
Unfortunately, the premise of this entry is completely wrong. AJAX has been around for nearly 5 years -- the MSXML library added it in 1999 and it was added to Mozilla in 2001 -- it just wasn't called that. And people were doing real work with it back then (but mostly for IE). But anyone catching up to it now has already missed a lot of time. Will it be around for *another* 5 years, I don't really know...
UI engineering, HCI, psychology, semantics, etc are all important to know as the web engineer matures. Also, people that are railing against rails, python/django, cloud etc are not looking where the puck is going. The same ghosts were railing against OO when they moved from procedural/assembly to OO, now OO to dynamic. Don't fight software evolution. And getting stuff up on the web is not good enough anymore, there needs to be more psychology in it.
Also, if you are stuck in a single platform like .net, java, or even just open source. Well, good luck. You will need more than one and you will need to understand how not just technical people think.
I totally agree with this post in substance. Architecture, HCI, Ui engineering, better user interfaces, virtual worlds, gaming, are all the new battles.
Join toastmasters! You will imrpove communication skills and meet new people. It's a load of fun :-)
As for the technical side of things, if you are specialized in a technology it shouldn't be too hard to keep up to date. If you have a good, job they will train you!
I completely agree that AJAX and Atlas will fade. But human factors and design aren't the only things that last.
Computer sciences models won't be obsolete - finite automata, context-free grammar, relational algebra, analysis of algorithms.
Bad prediction Jeff,
It's been 5 years. AJAX is as healthy as it could be and doesn't look like it's dying anytime soon.