Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Language Dabbling Considered Wasteful

Name: Anonymous 2011-04-10 17:13

http://duartes.org/gustavo/blog/post/language-dabbling-considered-wasteful

Learning new programming languages is often a waste of time for professional programmers. It may be a fun waste of time (i.e., a hobby), but it’s a waste nonetheless. If you do it for pleasure, then great, but profit is scarce. Pointing this out among good programmers is heresy: even the pragmatic programmers, whose teachings are by and large excellent, suggest we should learn one new programming language every year. That’s rubbish.

The theory is that by learning a new language you "expand your mind" and become "a better programmer". Right. By that kind of argument we should all be eating LSD (don’t). In reality learning a new language is a gritty business in which most of the effort is spent on low-value tasks with poor return on time invested. You need to get to know the libraries, struggle with the environment, find or tune a text editor, look for tools, and so on. Most of the effort has to do with housekeeping chores, which are surely not mind-expanding by anyone’s measure. If you hope to be productive in the new language, things are even bleaker: proficiency has less to do with the language itself than with the myriad technologies you must master to use it effectively.

Even core language learning offers dubious return. How much does it really help to learn a new syntax? How does it expand your mind to learn new operator precedence quirks? Much of what constitutes a language is lexical and syntactical bureaucracy. Worse, you’re learning absolutely nothing about fundamental aspects of computer science. No algorithms, no operating systems, no compiler theory, no math, no AI. If you’re an undergrad, then you should have time to pick up languages on the side while learning all that, of course. But a professional is making a trade-off: what else could you learn with that time? We’re better off studying business, security, usability, architecture, software estimation, and so on, rather than spending time with a different language every year.

If your goal is better programming, you will learn far more from reading high-quality code bases in your current languages than from a new language. Go read top-notch code in the languages you know already; it’ll teach you techniques and style quickly, plus different ways of thinking about problems, with the added bonus that you can actually use what you learn. You can also understand a lot about programming languages in general (issues like typing, scoping, functional vs. imperative) by reading a good book.

There’s another pernicious effect to language hopping: it hurts your momentum. Every time you rely on your current languages you get a little better. Not in a fluffy expand-your-mind way, but in a concrete way. You learn more about your libraries, you set up a new macro in the editor, you have a chance to use that new language feature. Scott Hanselman argues that learning a new language is sharpening your saw, but I see it as neglecting your half-sharpened saw while playing with the dull, new, shiny one. The upfront cost is not the only one either. It’s better to have 3 razor-sharp saws than 8 so-so ones. Each new language you add to your toolbox is making it harder for you to become furiously productive in any given language.

Name: Anonymous 2011-04-10 23:35

TL;DR

If you know only one language, you suck, regardless of what it is. You NEED to learn different programming paradigms and different approaches to different problems. That doesn't mean "herp, learn a n00 language every x, derp". If a language won't teach you anything new, there's no point in learning it.

You're not a good programmer if you don't know, and appreciate, every one of those languages or ones that are very similar to them: C, C++, Lisp, Haskell, Python, JavaScript (FUCK YOU, YES JAVASCRIPT), Java, Ruby, FORTH, Assembly and [insert an assortment of declarative and non-programming languages like SQL, logic languages, HTML, etc.]

The point is that you have to be familiar with every main paradigm. Structured, imperative, functional, OO (both class-based and prototype-based), both strict-type and lazily-evaluated, the new, ``dynamic'' languages (JS is a pretty dynamic, despite being shit in many ways), as well as different approaches to old paradigms, even if they're not good. (Ruby is a prime example)

If you know all of those languages, and you wanted to learn, say, Visual BASIC, I'd say drop it. You won't gain anything from learning it. But if you want to add a new language that will teach you something new, then definitely go for it.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List