Manhattan Metric
Software and Science in Equal Measure

Code vs Create

There is a rather long running debate in the world of programming regarding the utility of learning more than one programming language. This debate is not entirely dissimilar from the debate over how many human languages one should learn. Many of the pros and cons bandied about are almost identical: specializing in one language allows you to improve your proficiency and focus your efforts, leaning other languages lets you communicate in foreign lands and can expand your way of thinking, etc.

However, there is a dimension to the debate, and people’s understanding of the debate, regarding human languages that is almost always missing from the corresponding debate regarding programming languages: fluency. Now, language fluency is something of a sliding scale, but there is a definite inflection point (or so I’ve been told by those who reach this point) in becoming fluent in another language. This inflection point comes about when you stop thinking in one language and translating on the fly to the other and instead start actually thinking in the new language.

I’ve recently come to suspect that something similar exists with programming languages, but it’s harder to pin down since programmers don’t think in code. Sure, some might tell you they think in code, but I can almost guarantee that there’s a little voice in their head that’s still speaking a human language (especially since many programming language constructs are essentially unpronounceable). Instead, I think the distinction lies in the ability to code in a language vs the ability to create in that language.

For example, on numerous occasions I’ve started with an empty file and written enough C code to accomplish some non-trivial task. More recently, I’ve done this a number of times in Ruby. I feel these are two languages that I know very well. Last week I also would have included Javascript in that list. Then I found myself watching a demo of a co-worker’s Javascript project, and I realized I had no idea how he had done it! I just wrapped up a project that involved writing around 500 lines of Javascript, so I can obviously code in Javascript, but when it came to visualizing the process of starting from scratch and ending up with something like this, I was at a loss.

It’s the equivalent of knowing that you can get around in a foreign country, maybe have casual conversations, but realizing that you wouldn’t begin to know how to write a novel or give a speech in that language. I can sit down and, almost without thought, begin creating Ruby classes and modules to do what I need. On the other hand, with Javascript I feel I’d need mounds of example code and a fairly fleshed out set of libraries to help me along.

So, I think it’s important to remember, when considering whether to learn a new programming language, that there is a real difference between being able to edit or debug in a language and being able to start from scratch. Before you learn that new language because it’s going to "expand how you think about constructing programs", how committed are you? Are you going to create something from scratch? Or are you going to learn just enough to put it on your resume (not that this isn’t also a valid reason to learn a new language)?

The other way to think about this, is that maybe instead of running off to learn the next hot new language, maybe you could gain more by revisiting a language you already "know". As for myself, I’ve got a blank .js file waiting for me in my text editor.