April writes Ask 37signals:
As a developer, I often feel overwhelmed by the amount of new technologies and languages to learn. I work long hours as it is, and the last thing I feel like doing when I get home is spending more time trying new stuff out at the computer. Do I really have to be the kind of person that is excited about spending 24/7 at the computer to be a programmer? I love my job, and I love what I do, but I want a life outside of it too.
I think the best programmers are those that do have a life outside of computers. Those who value their time in front of the screen because it’s finite, because it’s competing with other interests. That usually drives you think twice about spending eons just playing around for the heck of it (not that there’s anything inherently wrong with that).
In my opinion, the best way to learn new technologies is on the job. I learned Ruby because I wanted to escape the pain that PHP and Java was giving me and because I had a fresh project to try it on (Basecamp). I built Rails because I needed it for Basecamp. I got into Ajax because we wanted to give Ta-da a compelling UI experience. I got into REST because we didn’t want the API for Highrise to be an afterthought. I picked up on OpenID because the thought of building single-signon for all 37signals’ products sounded like a drag to build from scratch.
Sure, you some times need to do a cursory investigation on a new technology to see whether it would be a good fit for the work you’re considering it for. But that shouldn’t be a two-week project. If the technology you’re considering takes more than a few days to get a feel for, that’s information in itself (I would probably never bother with it). So you go for the taste and if it feels good, you apply it to something real.
That does require that you’re working in an environment that’s open to new technology and willing to invest in your growth as a developer by allowing you to use it. If you’re not working in a place that fits that description, I’d start looking for a place that does.
Dr. Pete
on 27 Sep 07I’d like to second that. I’m slightly older than the 37S crowd (coincidentally, I’m 37) and have been programming since I taught myself at age 10 using Basic on a TRS-80 Color Computer. Since then, I’ve used, to some degree: Basic, 6809 Assembly, Visual Basic, Pascal, LISP, Prolog, Fortran, C/C++, ASP, Visual FoxPro, ColdFusion and PHP. I don’t currently use any language I learned in college and all of the ones after school were learned on the job.
At some point, while there will be new approaches and paradigms, you learn to trust your expertise in core logic and programming principles and realize that new languages are more about syntax than anything else. It’s inevitable that the language you’re using now will be replaced (probably in 5 years or less), and you just have to have the confidence that you can adapt your skills.
Jason
on 28 Sep 07For example, programing GUIs with WIN32 API vs .NET. Both can be used with the C++ programming language, however the technology is totally different just to make a window with a menu and buttons etc. Same final product, but you have to consider development time, application speed, compatibility and so forth.
Another example in which I recently experienced was when I was looking to make a portable PHP content management system for my client. I labored over the pros and cons of XML vs. SQLite database for over 3 weeks (mostly on my own time). After reading pages and pages of documentation, and writing sample programs with both technologies (including 3 XML parsing techniques…) I finally decided to go with SQLite.
I love programming, but part of me wishes I could get back some of that 3 weeks of my life spent burning out my eyeballs in front of a screen. The cool and crisp fall breeze is sure nice outside in Septemeber…
Jason Pontius
on 28 Sep 07Dude, is the 37s crowd that young? I’m 37 too. Jeez.
So yeah, learning on the job is the key, totally agreed. When I started out in this field as a temp in the 90’s it went like this. (phone rings) Temp agency: Hi, we have a job for you. It requires knowledge of ASP. Do you know ASP? Me: Sure, I know ASP. Temp agency: Great, you start Monday.
And then you’d run to the bookstore, call your friends, go online, whatever, try to figure out what the hell ASP is. You gather some basic knowledge, enough to not feel like a complete idiot, then you go to the job. You act like you know what you’re doing, fake it until you figure out what’s happening, put two and two together, and by the end of the job, hell, you know a little ASP!
That seemed crazy and kind of irresponsible back then. But now that I run a company that builds applications, it’s kind of the same thing. You want tool X to do job Y? Sure, we can build that. And only then do you figure out how to do it. And there in the early process is where you do the learning. We work in PHP, but oh my God do we know more about code than we did five years ago.
Dave Bednarski
on 28 Sep 07“because it’s competing with other interests… you think twice about spending eons just playing around for the heck of it”
The BEST thing I ever did was start taking weekends off. I work my ass off M-F, I get more done & “work” better, more productive, I look forward to Monday morning, relationships with customers improved, my personal relationships have improved, my product has improved, I am happier, I feel like I have a life away from my Mac. It’s amazing how much your brain works and gets done in the off time, with respect to your projects and decision making in programing, etc. It took me many years to figure this out.
Darrel
on 28 Sep 07I’m a programmer at the level of ‘I know enough to know when I’m doing stuff wrong’ which is an incredibly frustrating point to be at.
So, when I feel bad about my programming skills, I crack open our enterprise, insanely expensive, oddly popular help-desk software we purchased and look at the asinine ASP code including such logic as “if a = b then true else true” and I quickly feel better again.
That said, I completely agree with Jason. The biggest frustration is commitment. You want to commit to the best technology for a particular project, but it’s almost impossible to really KNOW what the best option is until you’re halfway through it. That week or so you spend analyzing everything is, IMHO, wasted time. You might as well just throw a dart, pick one, and start at it.
I think that’s why a lot of technology sticks around even when it’s not the newest or best…it just happens that people stuck with it and became well versed enough in it that it’s actually more productive for them to stick with it than to deal with the ‘new and improved’ option.
There’s a reason an XSLT/XML wizard believes XSLT/XML is the greatest new technology. There’s a reason a .net wizard believes .net is the greatest new technology. There’s a reason a RoR wizard believes RoR is the greatest new technology. The reason is usually “I’m good at it” which is a perfectly valid argument.
Marc Grabanski
on 28 Sep 07Learning technologies simply to learn them is not good for your sanity or career. As you stated, you need a specific purpose, it has to solve the problems rather than adding complexity to your day.
Who in their right mind would want to add more complexity to their day for no particular reason? That is what we do when there is no purpose behind walking through the sea of new technologies and frameworks.
Go in with a purpose – a problem you want to solve or an application you want to develop. Match that purpose to the technology. You will learn faster and ultimately become much more valuable in less time.
Toni from TagsPage.com
on 28 Sep 07My 5 cents: you don’t need to know every new technology out there. You only need to know about the ones you need. Information in the world, not in the head.
jon oropeza
on 28 Sep 07Great advice on this thread so far. One of the best lessons that I’ve learned the hard way is : Rather than trying to be good at everything, try to be great at a few things. You don’t need to learn every new language & technique, you just need to learn the ones that will make you great at what you do.
Jonathan
on 28 Sep 07One of the best lessons that I’ve learned the hard way is: Rather than trying to be good at everything, try to be great at a few things, and at least know something about everything else.
This is because you can never know whether the stuff you are trying to be great at is the best stuff for you or not at any one time. You need to be able to change tack if necessary through enough knowledge of other things.
Andrew
on 28 Sep 07To add one small thing to this really helpful bunch of comments. You don’t really need to be up on every technology, but you should hone your ability to be up on paradigm shifts and trends.
For instance, you may not want to or need to learn Rails, but it’s certainly worth understanding how Rails (and others) have changed how web development is done in the last three or so years: quick iterations, native support for Ajax and cleaner HTML, test-driven development.
What else? With the appearance of stuff like MSFT’s Silverlight and Adobe AIR (Apollo), it’s pretty clear that other client runtimes are coming. Need to learn everything about both? No way, but it’s certainly worth learning something about the trend.
Chad
on 28 Sep 07Thanks for this post. I printed it out (man, I don’t print anything anymore!), highlighted the opening line “I think the best programmers…” and taped it to my filing cabinet. Over the last 2 years I’ve had a tendency to work 12 hour days and try learn every possible thing I can. I’m getting away from that, thankfully, and the advice in the post and comments could not be more dead on.
Sukit Arseanrapoj
on 29 Sep 07Great post. Great comments. Thanks!
Don Schenck
on 30 Sep 07Oh to be 37 again (I’m 48).
I do my best to find the hottest emerging technology and then ride the wave. Right now I’m honing my Silverlight skills. In the past, my biggest move was from AS/400 RPG to Windows & Visual Basic.
You can’t know everything. But you can know about a heck of a lot.
Buu
on 30 Sep 07The depth: Stick with the fundamental CS and SE stuffs like compiler, OS, database theories, networking etc. and learn as much as you can about them, you’ll find new stuffs much easier to learn.
The breadth: Submitting to RSS of technology sites (like DZone) or thought leaders (like Martin Fowler) and notice things seemed to be talked over and over – they maybe the things you should spend a little time on to learn about what they are and how they can benefit into your work (now or in the future). (That should not take long, if it takes long, chance is that you have not been catching up with the trends well enough lately and everything now seems to be completely new to you and learning curve is huge.) Attend technology conferences – just a few days or weeks every year (plus, you can combine with vacation).
That’s been my strategy so far and I hardly find keeping up with interesting stuffs a big deal.
Hideyo Imazu
on 30 Sep 07David, thank you for a thoughtful posting. I was so impressed that I posted a Japanese translation to my blog at: http://d.hatena.ne.jp/himazublog/20070930/1191133583
Ryan Allen
on 30 Sep 07I recall that you developed Basecamp on a contractor basis while you were at Uni, is that correct?
If so how did you bill your ‘learning’ to 37s? I think that it’s good and well for learning on the job so to speak, yet I think contractors may have trouble billing 8 hours ‘reading beginners guide to X’.
I understand there are some technologies you have to research as due course but I doubt you could decide to do a project in a new framework for example, and bill someone for the time you spent learning how to use it.
Michael
on 02 Oct 07@Dr. Pete. That’s hilarious! I also taught myself to program on a CoCo when I was 10. The book that came with it was fantastic!
Deborah
on 02 Oct 07I struggle with this topic on a regular basis. Having almost 20 years programming experience and being someone who is constantly curious how things works, I find it frustating not being able to settle down and decide to be great at 2-4 things. I’ve learned 15 languages over the years – whatever I needed to get the job done but wouldn’t consider myself an expert in any (although some would say I am). I’m great at design and mapping user requirements but when I see resumes listing 10 languages/technologies, I feel amazingly stupid. Although I know I could the job, I don’t apply for fear of being expected to be an expert in everything listed. It’s like they don’t realize that being a great sw engineer is not learing a language and syntax, it’s being able to think about the end user’s needs, write quality code which can be maintained and tested, and 100 other qualities.
I know I spend way too much time in front of a computer, working, reading, learning but I also find it hard to concentrate on just a few technologies and ignore the rest without feeling I’m missing out. No, I don’t have much of a life outside of work, but I made that choice and I’m ok with that.
This discussion is closed.