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.

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 [3 favorites]

"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."

Personally, I think these are both bad strategies, and will both lead to unmaintainable, readable code. That is what your first priority should be if you want to grow as a programmer.

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.

Your favorite technology sucks. You really ought to get over this mindset, because there are things that suck about what you use right now, and by dismissing this stuff because you found one thing wrong with it, you ignore the good points.

I agree with this entirely. When programming stuff with rich user interfaces (web, GUI), one spends so much time dealing with the user interface that the interesting programming can be infrequent or lost.posted by grouse at 3:50 AM on May 14, 2008

grouse: I know that I need to get over the mindset of "everything that isn't what I'm already using, sucks". I just don't know how, which is what the question is about.posted by Zarkonnen at 4:07 AM on May 14, 2008

OK, my suggestion is really to accentuate the positives about these technologies. And for that matter, to accentuate the negatives about the ones you already use.posted by grouse at 4:13 AM on May 14, 2008

Learn one thing at a time. Start with a new language - I recommend Python, because it's both clean and useful. Forget frameworks and big libraries for the moment. Just learn the core language. Write a few simple programs with no output more complex than print statements - no GUI, no web.

For languages and frameworks, I'd start small and with a task that is squarely in the tool's target area. If, like me, the idea of working at any significant length on a toy project doesn't please you, then try to break off the piece of whatever your final project will be and implement that. Most of these things are popular because they make certain things very easy in a somewhat dazzling way. If you start with the type of cool and highly tool-appropriate stuff they do in the screencasts, it'll help you get past the initial motivation problems.posted by abcde at 4:28 AM on May 14, 2008

Also, use books instead of docs. There seems to always be several good books out on these projects before the documentation is any good--and often the people behind the project are involved with the books, so the motivation is really low to make the documentation good until the project is getting embarrassingly mature.posted by abcde at 4:32 AM on May 14, 2008

Congratulations, you're well on the way to becoming a Grumpy Old Man! Or feel free to use the term 'curmudgeon' if you prefer.

Seriously though, forget all the OMGWTFthat'sSOcool Web 2.0 nonsense and try to find a suitable guinea pig project. How about having a go at coding a simple blog engine for your site with basic OO techniques (preferably with PHP5), and/or using a lightweight framework? Then gradually improve it, adding feeds, pinging, comments, anti-spam measures, and so on. By the time it's more-or-less complete you'll hate much of the code you've produced but will have learned a lot.

Or do you have a hobby/club/charity you're into that you could apply your skills to, adding new features to their site with the added motivation/discipline of having some sort of client involved but without the full pressure of a commercial client?posted by malevolent at 4:46 AM on May 14, 2008

Seconding Python. Yes, it's whitespace sensitive, but if you can ignore that for a little while, you'll find that it comes with an excellent tutorial and very good documentation. Of all the languages I've tried over the last 40 years, I think Python probably provided the most comfortable learning experience. Sure, it has its idiosyncracies, but it makes them easy to live with.
If 20 minutes with the tutorial doesn't feel good, then drop it and move on.posted by spasm at 4:46 AM on May 14, 2008

This may sound a little drastic, but have you considered changing careers? It sounds like this may be a bigger problem than just not being able to learn new languages, it could be that you are just burned out on programming.

It's clear from your description that you don't enjoy learning new technologies and solving new problems, and those two activities are probably the most important in being a programmer. Even if you do find a way to get onboard with a newer language like Python and some newer web frameworks, if your heart's not in it then it will be hard for you to compete for jobs with guys who love coding all day at work and then go home to work on an open source project in their spare time.

Obviously you have enough experience and skills to learn any new language out there, but I think it's worth asking yourself "Do I really want to be doing this anymore?".posted by burnmp3s at 4:48 AM on May 14, 2008

When programming stuff with rich user interfaces (web, GUI), one spends so much time dealing with the user interface that the interesting programming can be infrequent or lost.

Conversely, if "interesting programming" for you doesn't involve these projects...then maybe you shouldn't be involved in them. Move along to something you do find interesting so that those of us who like these challenges can get the job done.

The original poster probably has very good instincts. There really is a lot of needless, silly churn in "technology" where a new item replaces a perfectly good existing one that had nothing wrong with it. A lot of things happen in IT-driven shops that are frankly bad for business, but management just assumes that "those guys know more about it than I do", so the IT guys get to keep buying and playing with toys on the company dime.

So my way of getting productively past frustration is to think about hard-nosed rationales for using tool X: will doing this increase sales, productivity, or even brand identity? Will it lead to more reusable code? Will it integrate well with other things? And so on. If not, then it does, in fact, suck, and can be officially derided as such.posted by gimonca at 4:52 AM on May 14, 2008

(Incidentally, there are plenty of places on the web where Java was, in fact, a supremely terrible choice for the task at hand. Let's code up this left-hand navbar in Java! Woo-hoo!)posted by gimonca at 5:01 AM on May 14, 2008

2nding gimonica... stop worrying about trends. Just focus on finding ways to make cool things that will make people happier.posted by mpls2 at 5:24 AM on May 14, 2008 [1 favorite]

You could cut your teeth on a decent Rails-like MVC web app framework without leaving PHP: Cake.posted by aparrish at 5:29 AM on May 14, 2008

You're too young to write yourself off for your age. There was no commercial World Wide Web until I was around 30, and I designed websites for years before becoming a full-time developer in my late 30s.

> 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.

That's advocacy, and it's the only promotion anything without a marketing budget can get. This includes almost all open source software, programming languages, and the like. It's annoying, yes, and the advocates risk sabotaging their causes with their zealotry.

Try not to confuse the fans and the band. If something has enough support to inspire this zeal, there's often something to justify it. Find out what that is. Or find an online tool, freeware app, or other thing that you like using, and find out how it ticks -- it's probably written in one of the languages you hate. Or come up with a completely wacky, stupid-cool hack on your own that can get you into a presentation slot at a conference.

Alternately, you may be discovering that managing projects and people is more interesting than managing technology. Read Rands in Repose for more on being a geek who manages other geeks.posted by ardgedee at 5:29 AM on May 14, 2008

On reading and learning: There's a lot of unnecessary tech-wank out there, and blogs are often more noise than signal. Just keeping up with the crest of the wave is a more-than-full-time job - even if you skim most of it, the potentially-interesting stuff is being written faster than you can read.

So... first step is to accept that, and stop trying to keep abreast of the whole industry.

Stop down the information flow to the barest trickle, and rely on the fact that if something's truly interesting, it will be talked about and repeated so many times that it'll get through any filter you put in place. For example I run the DZone front page feed through a filter that does "-Java -Ruby -Haskell -iPhone" etc.

Once you've decided something is worth learning, do it! Commit to it, and slog through until it's completed. Don't flit to the next shiny bauble as soon as things get hard (this is my problem). Learning isn't easy, especially self-study. It requires effort, and time.

On coding: look, there's a range of values between "we hand-carve our bits out of copper ore" and "lets write the messaging backend in GP-evolved Erlang, the web interface as a state machine diagram compiled to a Ruby script, and the documentation in brainfuck".

I suggest that the sensible, professional approach is to use the best tool for the job, even if that means you have to add on some time for figuring out what the best tool is, and learning how to use it. Of course, you have to factor in learning time when you decide what the best tool is - if you've already got PHP under your belt, the 80%-suitable PHP framework is probably a better choice than the 90%-suitable Python framework.

Incremental improvements are better than revolutions.

To take PHP as an example - we can change your development methodology stepwise, and there won't be much pain. First, port your current code from 4 to 5. Sticking with 4 is especially insane as you're a Java programmer; it's not like all that OO stuff is a mystery to you. Next, start using 5-specific features. Once you're comfortable with that, take a close look at the Zend framework. In this case, "framework" is a marketing term. It's really a library, which means you can pull components out of it and use them in your own code, so the learning curve is fairly gentle. Zend_Auth and Zend_Acl might be a good place to start - authentication and authorization components.

On top of that, there's a bunch of best practices it would help you to follow - source control, issue trackers, unit tests, backups, build scripts, that kind of thing. If you don't have source control and an issue tracker, you can set them up in an afternoon. Again, lightweight incremental improvements.posted by Leon at 5:34 AM on May 14, 2008 [1 favorite]

Oh, parenthetically: if anyone wants to get on the "learn something new" train, there's a good chance that I'd be interested in joining you. Especially if it involves statistics or cartography/GIS. Mefi-mail me.posted by orthogonality at 5:48 AM on May 14, 2008

I'll third the suggestion that Python is a good choice - it seems less "trendy" than the others you mention, and I think will be less likely to attract the usual evangelists.

And I totally feel your pain about looking for documentation that's not there. When you're working on solving a problem, you want to just do it -- write code -- not have to stop and search for 15 minutes to figure out how to do X (which you could have done without breaking your stride in the language you already _know_).

It may be that you're a more focused problem-solver than many of the folks who just love to try whatever's newest - your mind is working on creating new things more than shopping for things others have created. This is good -- just work with this knowledge. People wanting you to spend time learning "the latest thing" are interrupting you, and while new languages can have improvements over old ones, there are always tradeoffs -- I think some lovers-of-the-new are selectively blind to this, and that can be trying.

For me -- and I think I have a similar mindset to you -- it helps if I do the learning first, _then_ the producing. Books are really great for this. I can take a book, spend a day or two reading it, learn what's possible and easy in the language, learn maybe how things are usually done and what they are usually called (so that if I do need to search, I can do so quickly), and basically get a grip on the thing [disclaimer: I haven't actually made time for this in years, but I really should]. Then when I code, it's much smoother; even if I have to remind myself of something, I can probably find it in the book fairly quickly.posted by amtho at 5:49 AM on May 14, 2008

Seriously though, forget all the OMGWTFthat'sSOcool Web 2.0 nonsense and try to find a suitable guinea pig project. How about having a go at coding a simple blog engine for your site with basic OO techniques (preferably with PHP5), and/or using a lightweight framework? Then gradually improve it, adding feeds, pinging, comments, anti-spam measures, and so on. By the time it's more-or-less complete you'll hate much of the code you've produced but will have learned a lot.

There are already more blog engines out there than you can shake something brown and sticky at. IMO the OP already knows how to program, and to code up yet another one would be time poured down the sink. Learning how to use one (eg knocking out Wordpress skins and plugins) has more utility. Leverage good tools to do your job, don't indulge in re-inventing the wheel for the sake of it.

CakePHP is a cargo-cult reimplementation of Ruby On Rails, and combines the idiosyncrasies of RoR ("do it our way or fuck off") with the lack-of-persistence of PHP, and adds its own special dash of broken documentation. Avoid.posted by Leon at 6:06 AM on May 14, 2008 [2 favorites]

I kinda feel you're pain. I've become extremely good at Java, and I keep getting better at it, new features like Generics, Annotations, the new Persistence framework etc are fun because they let me do things I couldn't do (or at least couldn't do easily) before.

But learning a new programming language is kind of annoying because you need to spend your time learning how to do something already know how to do in Java and that just seems like a waste.

For me personally, what I've been doing is working on learning new aspects of computer science in Java.

In other words rather then learning how to express my old ideas in a new way I want to learn new ideas to express.

But, I'm also someone who can jump quickly into a new language. In my previous job I managed to write a 5,000 line application in flash/actionscript 2.0 in just a couple months never having seen the language before (heads up: Actionscript 2.0 is horrible for a number of reasons). I've programmed in at least more then 10 different languages (I've lost count) and I've been programming since before Java came out (I learned C when I was in middle school)

I do want to learn rails at some point, just to see what the kids are up too. Oh, and one more thing

Java's verbosity and lack of support for first-class functions is a pain

That's not true, you can use java.lang.reflect.Method objects and pass those around. They'll need to be 'reattached' to objects of the appropriate class in order to run them, but you really can use them the same way you would use function pointers. Although you'd need more code.

And of course there are anonymous inner classes as well. What Java doesn't have is closures, and I find myself wishing I could use them, but most of the time I can do what I need to do with reflection or an anon inner class without too much extra code.posted by delmoi at 6:06 AM on May 14, 2008

I was full-time technical trainer for years (I still do it freelance). I've also taught all sorts of classes to people aged two to eighty. Yet reading your long, well-written* question, I still feel I don't have enough information to help.

I'm grappling with "Why don't I like learning new things?" Many adults have this feeling. Usually, it's because learning (which is a joy to infants and young children) becomes tarnished in school. It becomes un-fun, and from then on people associate it with pain. Also, painful or not, you were forced to do it in school. As a grownup, you have to find self-motivation. That's tough when -- if your schools were like mine -- you weren't trained to train yourself.

But people hate learning for all different reasons, and you need to know your reasons before you can attempt a cure. Some people hate learning because they hate reading. Some people hate learning because they fail at first, that makes them feel stupid, and they hate feeling stupid. Some people hate learning because they feel they should get a reward (e.g. an A+) for success, and they no longer get rewards. Some people hate learning because their expectations are too high -- they expect to read one book on C++ and be an expert. Etc.

I went through a long period where I hated learning, because I was scared I didn't have the capacity to learn.

There are ways to deal with all those problems, but it would be dumb to -- say -- try to help you with your hatred of reading if, in fact, you like reading.

It does strike me that you don't like learning on the job. You mention having real-life work problems to solve, trying to solve them with new technologies, failing, and having to fall back on old systems. Well, it's work. You have to get the job done. So there's pressure. If you remove learning from the work environment, you might have more luck. How about picking a language you're interested in and doing some fun, hobby-like projects? Program games or whatever. You need to infuse learning with joy. If you can do that -- and I think you'll have to do that out of the office -- you'll one day be able to bring that joy to the workplace.

You're also confusing programming with programmers. Python and Ruby aren't "what people say about them." They're inanimate systems. Let yourself get mad at the hype and the insults. Those come from people. Python and Ruby are just innocent bystanders.

Perhaps you should get back to basics. Learn a low-level language. Learn Assembly. Learn some theoretical Computer Science. Learn to approach the subject as a subject -- not as a debate. If you learn the basics of how computers work, you'll be able to rise above the debate. You'll be able to pick up any language, relatively quickly. The majority of people in IT are like cat and dog people. They fight about which animal is better, but they know nothing about biology. They don't understand that cats and dogs are more alike than different. They don't understand that PHP vs. Python is a boring debate. Which is better, French or Italian? You can write a novel in either language. Rather than arguing over something inane, why not spend your time talking about plot, character, metaphor and theme? I'd much rather argue over which sort algorithm is best for a given task than which language to use when writing the algorithm.

* You're an excellent writer. And you're dealing with a common problem -- one that frustrate many people. Why not steel yourself to lick it and start a blog about your experiences? Call it "The Reluctant Learner" or something. Write about your successes and failures; write about your frustrations. Blogging would help you stay on course, especially if you had readers. I would definitely read it! You'd feel ashamed of quitting. You wouldn't want to let your audience down.posted by grumblebee at 6:14 AM on May 14, 2008 [13 favorites]

Python isn't whitespace sensitive, the whitespace is the syntax, and in my experience this is a stupendous, fantastic, glorious thing - not an argument against it.

Having programmed in some 20-odd languages, I love not having to ever close brackets or write 'end'. It makes maintaining other people's code bliss as well. Another upside is that it forces you to avoid excessive indentation - I could quote Linus Torvalds on this subject but I'll restrain myself.

If you want to get excited about new technologies, I suggest you pick a language and start a SMALL project in it. I really like Project Euler, small mathematical challenges that are fun to code and can really help to teach you the quirks of a language.

Look at some fun python code: creating a dict (hash table),adding an element and outputting the value:

It's the easiest thing in the world, you don't even have to:
import java.util.Hashtable; or Hashtable hashtable = new Hashtable();posted by jozzas at 6:31 AM on May 14, 2008 [1 favorite]

delmoiwrites"That's not true, you can use java.lang.reflect.Method objects and pass those around."

delmoi, I love you man, but it's not the fucking same. Way more verbose than taking a function's address.posted by orthogonality at 7:02 AM on May 14, 2008

If you want to try a good web framework, Django is very well documented, both online and in book form (which is also available online). The documentation is top notch and constantly updated to match the latest development version. Friendly community and a low level of hype and advocacy round it out, in my opinion.
It's easy to pick up and most of the time 'just works'. I wrote my first for-pay app just working my way through the tutorial.
Plus, it's written in Python, so there's the antigravity aspect.posted by signal at 8:10 AM on May 14, 2008

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".

All the web 2.0 doo-dads in the world arent going to make uninteresting things look interesting. If you dont have much to say, then you dont have much to say. If what you say isnt interesting to others then adding more techy features arent going to help that.posted by damn dirty ape at 8:13 AM on May 14, 2008

Learn to implement more complicated things in the language you know. Write a compiler. Write a debugger.posted by vilcxjo_BLANKA at 8:33 AM on May 14, 2008

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.

To second (third?) gimonca — are you sure you're in the right field? I'm fairly convinced that if an individual isn't a neophile — that is, someone who is obsessed with learning and playing with new things — they're going to make themselves and everyone around them miserable if they work in programming.

And if you are in the right field, I'd absolutely second the nods to Python and the Django web framework. The parts of my day job that involve them are wonderful compared to the parts involving the horror that is PHP. ^_^posted by korpios at 1:25 PM on May 14, 2008

I'm going to be a bit glib here. Please excuse it, I'm rushing on my way out from work. Also excuse the numerous links to Creating Passionate Users, Kathy Sierra says everything much better than I can.

I think only grumblebee hit on it here. Let's not debate the merits of each language, let's talk about how angry you get when something doesn't work.

What seems to be your issue is that you can't get past the Suck Threshold and into the Passion Threshold. Why do you get so angry when you make a mistake?

You have two complaints: one, you're not learning any new technologies, and two, you have no coherent system for making notes or tracking appointments. The obvious solution is to build a note-taking and appointment-tracking system in Python. Then start thinking about ways to make it better. For example, it'd be cool if you could take notes from your cell phone, so you could integrate with Jott (jott.com). And maybe it should pop up some notification of appointments, so you'll want some to write a daemon that pops up a notification window.

Just build shit that you want. I made a scrolling news ticker using pygame a few days ago because I suck at keeping up with world news. I'd never really used pygame before.posted by galamud at 12:09 AM on May 15, 2008

Heh, Brainy, at the risk of sounding huffy, I don't get angry when I make a mistake, I get angry when the documentation makes a mistake or does not exist. Thanks for the articles tho.posted by Zarkonnen at 2:10 AM on May 15, 2008

fear of change is part of life. you're comfortable with your knowledge and don't feel the pressure to learn new things in terms of organizing or programming. eventually this leads to torpor and the doldrums as there are no more possibilities, since every avenue for growth has been cut off.

it's a hard place to be, fellow coder. what would serve you best is to rediscover a project you can be passionate about. perhaps it has to do with coding, perhaps not. your inability and frustration at new languages are a symptom of underlying issues, not the inherent flaws of the languages themselves.posted by emptyinside at 1:14 PM on May 15, 2008 [1 favorite]

A followup, for those who are interested:

Since this post appears to have been quite popular, I'm now implementing what Grumblebee suggested, and will occasionally write about my terrible experiences with trying to learn new things on my blog. I'd already described (rather angrily) a run-in with the GIMP image editor before I wrote the Ask MeFi post. And now I've had a similar encounter with Inkscape, reproduced here for your entertainment:

My newest experience along these lines was my attempt last night at creating a logo for my yet-to-be-formed company using Inkscape. Several people have thoroughly recommended Inkscape to me, and given that I'd already installed it, I thought I'd give it a shot. I also know it produces vector graphics, which makes sense for a logo.

The logo I had in mind is essentially a grid of squares, with some of the lines made thicker to spell out the company name. I managed to get a first version of this working reasonably quickly, with only some fiddling to get the lines into a square grid. I then decided to try some variations. I selected one of the thick lines and told it to become a bit longer by changing its length field in the toolbar. Instantly, it also became thicker and shifted a bit. I tried to correct the shift by setting its x-coordinate, but instead of moving the line to where I told it to, the program settled on moving it exactly halfway between where it had been and where I had told it to go. By repeating this five more times I eventually asymptotically reached the location I wanted. But fixing the changed thinkness was impossible without returning the line to its original length.

I started hunting through the menus, options and preferences of Inkscape for a way to turn off this behaviour. Clearly, the program was trying to be clever and helpful in some way, but this amounted to it essentially "disobeying" me. A long search assisted by friends turned up nothing. The problems multiplied: Inkscape seemed determined not to use round values for its co-ordinates, and determined to link the supposedly independent variables of line length, thickness, and position. I had reached the point described in the article above, the point where I yell at the computer in frustrated rage. All I wanted to do was move one thing somewhere else without setting off a cascade of side-effects, but this seemingly utterly basic operation was more or less impossible. Perhaps I was being a control freak, perhaps Inkscape is directed at drawing more free-hand things, but even free-hand drawings need to join up correctly, and this seemed to be impossible to achieve.

Finally, to demonstrate my point, I started up my trusty old copy of Bryce, a 3D modeller/renderer. I selected the from-top view and quickly created a number of cuboids that, viewed from above, produced the precise image I'd been trying to make on Inkscape for the past half-hour. Bryce is not exactly made for 2D drawing, but it does do one thing right: it does as it's told. You want a cube of width 4, length 80 and height 1 centered on the origin? Just make a cube and enter the numbers.

And this is the story of how I ended up making a 2D logo in a 3D program.

Of course, Inkscape can't actually be this bad. People do use it for serious work. And I'm sure there's a way of achieving precisely what I wanted. But my first encounter with the software left me intensely frustrated, and thinking: If it can't even do something simple, how will I ever make it do something complex?posted by Zarkonnen at 11:14 AM on May 17, 2008

Tags

Share

About Ask MetaFilter

Ask MetaFilter is a question and answer site that covers nearly any question on earth, where members help each other solve problems. Ask MetaFilter is where thousands of life's little questions are answered.