It's Hard Work Not to Lose Ground
Programmer-essayist Steve Yegge, formerly of Amazon and currently of Google, has some spectacular diatribes.
If you check Joel on Software, you need to add Stevey's Blog Rants to your reading list. It's like a crankier Joel, who still bothers writing a decent-sized essay every now and then.
This week's offering is a subject near and dear to my heart: putting in the hard work it takes to keep learning, and why the decision not to suffer through it has stymied progress.
With no effort invested in learning, you quickly fall behind, especially if you're programming for the web. I've been in this field for a mere six years, and I've seen developers with ample experience (a decade or more) and education (e.g. a Master's in CS from Stanford) get left in the dust because they wouldn't or couldn't make the sacrifices to keep up with the changing and increasing demands of the field.
Often times, this was a result of being a parent — let's face it, single 20-something dudes have very few competing responsibilities outside of work. I suspect that one day, when I'm a father, I'll be playing with my kids instead of my computers. But I also imagine that my programming, like other things that require setting aside big blocks of time, will be impeded by it. Hell, I was telling my friend Matt about books I'd read recently and he told me that he hadn't read a book in years. Well, other than children's books.
(I know of a few exceptions, and these guys will have to answer for themselves about how they can juggle both. It looks pretty damn challenging to me, and few people can pull it off.)
Others realize that, with a bare minimum of effort — i.e. learning only what you need to learn — they can delay that fate.
I once consulted for a small company that used Lotus for everything. Not just Lotus Notes instead of MS Outlook, mind you — their lead techie was trying to develop their corporate website in LotusScript because, well, that's what he knew. And the marginal cost of individual tasks being slightly more difficult never exceeded the up-front investment in at least learning some PHP. So, he's using the wrong tool for the job, he's greatly limiting the new business he can take on, and he's facing the catastrophic and inevitable day when IBM simply ends support for Lotus the way Microsoft dropped what was once the most popular browser on the Mac. My guess is that this guy saw what looked like a promising family of products, became an expert in them and thought his time was done.
At my previous job, I was the resident expert in client-side programming. A fellow programmer once asked me, "What's DHTML?" (I'm sure you remember DHTML — Ajax's mentally-retarded ancestor that wasted God knows how many programmer hours.)
"Oh, Dynamic HTML — it's just HTML that gets styled and manipulated by CSS and JavaScript after it gets to your browser," I replied.
His reply killed me: "Oh, OK. Good. I was afraid I was gonna have to learn another thing."
I would venture a guess that, if he's still in programming, he's not very good at his job and not very happy with it either.
What does Yegge have to say about this?
[L]earning is painful. But trust me on this one: it's even more painful when all you have is scraps of time here and there.
...
[J]ust make some time for it, and make it a habit. That's all there is to it. It doesn't matter if you're trying to get better at programming, or math, or fitness, or flying kites, or even humanity's Number One Fear, even worse than the fear of Death: public speaking. You just work your way up, a little at a time.
I can't promise you any satisfaction from the upward curve. You'll get better at a lot of things, and you'll have plenty of interesting insights. You may even get a better job, or build some software that makes you famous, or just have more fun at what you do. But you won't have much time for television. Something will have to give.
...
You might only be able to devote one quiet hour a week to studying, but like unit testing, or working out, or brushing your teeth, it's better than not doing it at all.
Learning is hard work, but it's important. Make some time for it.
Thanks for your feedback on the initial draft.
Posted by: Joe Grossberg on March 25, 2006 10:38 PM | permalinkThat's also why it can be beneficial to gain systems analysis experience/background -- IT skills that are fairly implementation-independent, and will serve far into the future, perhaps with some updating of methodology.
It's also a benefit to picking jobs/assignments where they aren't afraid to work with emerging technologies, rather than the same-old same-old.
Posted by: Jay on March 26, 2006 1:15 AM | permalinkAnd I should add, I'm not saying that more learning isn't worthwhile, it definitely is... just that there is always the possibility of obselescence, and it's useful to have more than one mitigating factor working against it.
Posted by: Jay on March 26, 2006 1:16 AM | permalinkOne thing - IBM isn't likely to retire Lotus any time soon - it's their groupware opposition to Exchange, and it's remarkably heavily supported.
Oh, and I work for a major financial company (many billions of pounds of turnover) and our intranet is based on Lotus - because that's what IBM recommended to us as our CMS (which, apparently, it makes a damn good job of).
As for the rest of it, I agree totally.
Posted by: Andrew Ducker on March 26, 2006 5:46 AM | permalinkJay:
Learning pretty much *anything* is good. Hell, even "soft" stuff, like better writing and presentation skills, or user interface design.
Andrew:
I guess I'm too far removed from the huge-company space to have that broader perspective. Hell, I've only used Oracle for one thing and have never seen a line of actual in-use COBOL.
Posted by: Joe Grossberg on March 26, 2006 10:26 AM | permalinkDammit, I wrote out a nice, large comment and when I submitted it was told that the post didn't exist.
Posted by: Keesey on March 27, 2006 12:09 PM | permalinkWhen did you submit it? I published this briefly this weekend (like for a minute or two), before switching it back to draft.
Posted by: Joe Grossberg on March 27, 2006 12:20 PM | permalinkMust have been in that window, somehow. Well, here's the gist of it:
I've found that having a long-term side project of goodly proportions is a great way to learn new technologies. Working on the Dinosauricon and its predecessors taught me HTML, CSS, XML, PHP, SQL, XSLT (although I haven't used it on the live site yet) and sharpened my skills considerably in JavaScript, C++ (in an earlier version, weirdly enough, yes), ActionScript (the next version of the site, whenever that comes--might wait for AS 3.0), etc.
After all, the best way to learn is by doing. And, on a more pragmatic note, in a few cases I've even been able to reuse Dinosauricon code on other projects.
Posted by: Keesey on March 27, 2006 1:45 PM | permalinkIt is the best way to learn stuff. But how do you choose those technologies?
You used PHP, for example, but why not Java or ASP. And would you or would you not use Ruby on Rails or Python for the next?
Posted by: Joe Grossberg on March 27, 2006 2:09 PM | permalinkGood post. I recently came to this realization of the profession myself - that I have fallen behind the curve.
Now that I'm past my 20-something days of staying up late to absorb new material and playing with code into the night, I'll just have to fit it in like I'm learning to fit in exercise. If that cuts into my Idol-watching time, sobeit, but it may just mean cutting out some unnecessary surfing here and there.
(Actually, with this household of pets to run I don't really watch much TV anymore - there is always something else that needs attention.)
Hmmmm... on that DHTML quote, is this anyone I worked with previously?
Posted by: Becky B on March 28, 2006 4:51 PM | permalinkNo more comments! Either someone has violated Godwin's Law, I'm tired of the discussion or, most likely, the ten-week window has closed. You can, however, contact me through email.