Programming as a Foreign Language

In both high school and college, I took several French courses. But I’ve never been to France. I’ve never been immersed into a French-speaking context, and therefore, I never achieved fluency in French. Decades later, I can still pick out French words, I can still understand phrases and sentences, and express a few ideas, but for the most part, my knowledge of the French language faded very quickly, and almost entirely when I stopped studying.

A few years after college, I started learning another language. This language was for computers, and it’s called Java. I read Java for Dummies, which I found at Barnes and Noble. I got to the point where I could make the compiler happy, and I could make widgets appear on the screen. But due to the purely independent nature of my studying, I was never immersed in the Java-speaking context. I never got over the hump and achieved fluency.

A year later, I started learning another programming language. It’s called Perl. I was working at “dot-com” startup as a HTML and content editor, and was handed The Camel Book by the company’s CEO when he effectivey told me to learn Perl or lose my job. I got to the point where I could print stuff onto the screen and execute programs. And then the CEO and CTO gave me fake CGI projects to work on in my spare time. When I quickly cranked those scripts out, they started giving me bugs to fix in the main product. I had no clue what to do next, so I asked the CTO for help. The CTO gave me a quick lesson on debugging, but I was still at a loss for how to fix bugs in our product code.

I had learned French and Java, but I’d never been immersed in them. I had now learned Perl, and the opportunity to immerse myself into a Perl-speaking context was available to me. I asked if I could move my desk to where the programmers worked. The people I’d been sitting near were talkative, energetic, and the space was bright. The developers kept their workspace dark, and they were intimidating to me. But I couldn’t think of any other way forward than to immerse myself into their land of Perl.

A few months later, I was fixing bugs. A few months after that, I was at another company writing more complex scripts. All along the way I was surrounded by people who were fluent in Perl. A year later, I was fluent in Perl. Two years later I was fluent in Java and Ruby.

Just as with spoken languages, achieving fluency in a programming language requires immersion. Once fluency is achieved, similar languages become much more accessible. Learning a new language in a non-immersive environment will give you concepts, syntax, rules, and trivia, but you will not achieve fluency, which in programming languages gives you the power to craft original solutions to arbitrary problems.

Non-immsersive learning is great, but it’s only a stepping stone to fluency. Codecademy and Treehouse are great examples of non-immersive learning environments for JavaScript. Code Academy and Dev Bootcamp are great examples of immersive environments that lead people to fluency in Rails. That said, both of these immersive programs are too short a time to achieve fluency for people who are completely new to programming.

Remarkably, though, I’ve seen graduates of both programs creating immersive environments for themselves in Chicago. I’ve seen small groups of Code Academy students join up to continue coding together on a regular/continual basis. I’ve seen people literally eat/breathe Ruby on Tuesdays, when you can participate in Code & Coffee (at Starbucks, free wifi) from 7am-9am, then Geekfest (free lunch, open to public) from 12pm-1pm, then Chicago Ruby (free dinner, open to public) in the evening. I’ve seen people diligently stay immersed over the course of months and then transition into various apprenticeship programs around the city, which eventually lead to full-time employment opportunities.

A great example of this transition is Jean Bahnik. Jean is a marketing executive turned Trunk Club apprentice, who also happens to be fluent in French.