How do I learn new programming languages and start using modern web apps without getting frustrated and angry?
So I'm in my mid-twenties and work in IT. I've been watching the last couple of years of exploding creativity on the net - literally millions of blogs, new programming languages, new ideas like twitter, citizen journalism, etcetera.
But lately I've realised that despite being able to see the potential benefits and really actually exciting possibilities of all this new stuff, I grumpily dismiss it and stick to how I've been doing things for the past couple of years. I use email, Java and PHP, and HTML 4.0.1 Transitional. I occasionally write some stuff in my site's news section, but I doubt my completely random ramblings make anyone come back. I'd like to think that I might have some interesting things to say on some topics, but I can't find the time to write about it, and it feels odd to intersperse "here's some photos I took" with "here's a detailed analysis of this political situation". I don't use
RubyTwitterXMLPythonLISPQuicksilverGTDPodcastsRSSLifehacks. I don't contribute to wikis, or talk on forums (with the pretty much sole exception of MeFi).
At the same time I'm getting very frustrated with the limits of the tools I do know how to use - Java's verbosity and lack of support for first-class functions is a pain, and I don't like the fact that I'm always the last to hear about everything interesting that happens on the net. I have no coherent systems for making notes or keeping track of appointments or tasks, despite the plethora of Mac programs available for doing just that.
Why is this a problem? Well, I'm not even thirty yet, but I can already feel myself falling behind the times. I don't want to end up as the kind of programmer / person in general who toils away on some legacy project in a little corner, insisting "we've always done it this way" until one day I get fired for being completely superfluous. I want to want to learn new things. I want to be more organised.
So is there a question in all of this? Yes!
I want you to tell me how to break out of my rut. Tell me how I can learn about, and start to use, new stuff, despite the two big obstacles I'm about to describe.
Obstacle number one: Why do I dislike new things? To a large part, to be honest, because the people who do use these things and try to promote them really grate on my nerves. Take programming languages: many advocates of new languages (Ruby, I'm looking at you) start off their pitch by pointing out how useless language X (also known as "Java") is, and how using their language allows you to become a massively more enlightened individual. Along the way, there is a strong implication that anyone who still uses language X in 2008 is a hopeless dinosaur. Way to insult your audience.
Number two: I find learning new things really unpleasant. Faced with needing to code a small website, another programmer would say "Cool, a chance to try out this new Python framework, and this AJAX front-end library - no one's ever tried using them together before, but I have a really clever plan involving metaclasses". I say "Well, I don't really want to take too much time on it, so let's code it up in imperative-style PHP 4. It's clunky, it's incredibly verbose, the code is hideous, and errors are hard to track down, but I know how it works and can liberally reuse code from previous projects." Of course, this is a caricature, but the point remains that that other programmer will end up being more productive and motivated than me, perhaps not on this project, but on the next, where I'm still using PHP 4, but the other guy would be using said Python framework (but not the AJAX library, because it turned out to be too buggy).
So why don't I go off and do like the other programmer? Because the framework and the library will have terrible, hard-to-find inconsistent documentatio, bugs that cause the default configuration to fail silently, and creators who have the attitude described in obstacle #1. And here's the crux of the matter: where the other programmer would think "Cool, a challenge! Let's try to get this working." I fly into an impotent rage, cursing the code, its creator, and myself. I will yell at the computer when yet another promising documentation link 404s on me, I will make strangling motions at the screen when it turns out that I installed some package whose name has no vowels on the wrong path, and I will mentally tally every single problem I've had getting the whole thing working. Both the other programmer and I will take about five hours to get the framework up and running, but while that's five hours of joyful problem-solving time for the other guy/gal, it's five hours of fuming at the computer for me, and I'll have a headache at the end. And somewhere along the way I will probably give up and code the thing in PHP 4 or Java, feeling guilty for being a dinosaur.
Much the same happens when the Thing in question isn't a programming language but a website or some organizer/productivity program.
So to the end of not having to look at new things anymore, I now come up with automatic put-downs for every new thing that crosses my path: Ruby's syntax is horrible, Twitter is shallow, XML is verbose, Python is white-space-sensitive, LISP is unreadable, Quicksilver is unstable and obtuse, GTD is for obsessive-compulsives, podcasts are narcissistic, RSS is inefficent and ill-defined and life hacks are impractical. Contributing to wikis is pointless, and all forums are full of 13 year olds.
Still, I want to learn and use new things, because I find them fascinating and recognise their potential.
So what techniques, states of mind, resources would you suggest that I could use to approach learning new languages, starting to use new websites, new modes of communication, etcetera, without just coming away pissed off and exhausted?
(And if you've read all of this, congratulations. You get a voucher for small prize, redeemable anywhere on the moon only.)
You're stuck in the Java rut. Break out by trying something totally new (to you). Maybe a functional language: SQL, Haskell, Erlang. Maybe you need to get more low-level: try ARM assembler. Or maybe you need to add a new tool to your toolkit: uses JavaCC to write a parser and a compiler.
But forget web shit. Web shit is one corner of programming, and it's not even particularly interesting (serve page, get user POST, save user data, repeat). Forget GUI crap, forget validating user input.
Get back to basics: forget about your IDE (for a bit, anyway), forget about maven or ant, eschew all XML. Just get a text editor, and write code.
posted by orthogonality at 3:41 AM on May 14, 2008 [2 favorites has favorites]