Cogitas Blog:
Google Android, machine learning,
natural language processing
and Java programming.


For Devs Info
Tips and code for app, website and server developers.

The problem with learning a new language

Filed under: programming languages — Tags: , , , , , , , , — November 18, 2010

Like many programmers, I know the basics in a few languages (php, perl, python, ruby, javascript, C++, Go). However, I only know one language well (Java). By “well”, I don’t mean “perfectly” or even “near perfectly”, I mean “well”. I have a good grasp of its core concepts and I know how to find and understand the info on the things I’m a little bit more fuzzy about. However, it seems that there is a race to know as many languages as possible.

A lot of articles focus on which language to learn next – and I’ve been guilty of thinking the same way myself. In fact, I think this way at least 50% of the time, hence me wondering if it’s productive to focus on the next language to learn.

The answer for me seems like a “no”. Why? A language isn’t only a language but it comes with a whole bunch of ubiquitous libraries (if you’re lucky) as well as several third party libraries. So would you be better off knowing your primary language better or knowing a second or third language not to the level that you can be highly productive in it?

I’m not sure the comparison with spoken  languages is even valid beyond the fact they are called languages but as I am pretty knowledgeable in that field, I’m using it anyway ;-) My mother tongue is French and as a teenager, I made a concerted effort to learn English. My goal was not only to be able to write in English but to actually be fluent like a native. Why? Because I intended to move to England!

Well, 15 years on, I live in the UK and I’m always told my English is as good as a native’s so I have achieved my goal. Along the way, I have had to learn other foreign languages for school/Uni (namely Spanish and Russian) but as I didn’t want to lose my focus on English, I didn’t do so well in those. For a long time – until I felt 100% confident with my English – I kept thinking that it was a shame I hadn’t stuck to Russian or Spanish, both pretty widely spoken languages that would have given me access to two culturally rich worlds.

However, now that I have achieved the same level of confidence in English as I have in my mother tongue, I understand I have made the right choice. Another language would have distracted me from that. Only now am I ready to learn other foreign languages well (and I am working on this).

Back to the problem at hand – programming languages – the question is whether the same approach would work and indeed would be the best. When I learnt English, I didn’t only learn vocabulary and grammar but also a whole culture – it’s one thing to be able to express yourself, it’s another to not look like the odd one out in an English pub! Can the culture of a spoken language be equated with the libraries and tools of a programming language?

I do not have any answers – I’m only trying to ask the right questions ;-)

At the moment, thinking back on my experience with spoken languages, I am thinking that until I am completely fluent with not only my primary language but with all its tools and libraries, there is no point distracting myself with another language. But is this the right way to think, or is this analogy misleading? Or, in fact, is the analogy right but is my own experience with learning English misleading me into a conclusion that isn’t actually accurate?

Does your experience of learning programming languages match with your experience of learning foreign languages? How so or not so? Should you be fluent like a native speaker (perhaps a native speaker of a programming language could be somebody who actually worked on its implementation for example?) in one language before embarking on another?

Android programming tips ebook cooming soon - fill in this quick form to be notified when the ebook comes out

2 Comments »

  1. I only know one spoken language but I do know several programming languages and have just had to learn another over the past month. Unless you have a real project learning a new computer language is not easy. You can read websites, play around and think you are learning the language but until you actually write a program that some one else will use you are just playing. The syntax can look good, you can think you can write it but until you are forced to create an object, get a UI running or make changes to existing code to fix a bug you are just fooling yourself.

    Learning Objective C was never high on my list as it really is only used on one platform, the Mac. I have no problems with the Mac, just have made all my money on the PC. My new job needed someone to look over some iPhone code and I became that person. I would now say I barely know Objective C but I can get around in it enough to write some code and to fix some issues. Not a bad skill to have so I will continue my iPhone work but I must say I prefer the Android platform. Biased as I already know Java very well so it was much easier to just learn a new framework as opposed to a new language and framework.

    Comment by Kevin — November 18, 2010 @ 1:32 pm

  2. After reading the first couple of paragraphs I was thinking you should learn at least one language to the level where you’d consider yourself expert; you know not just common pitfalls but all the little quirks that make it imperfect and can instinctively know the right way to approach a problem and structure a solution for that language. You experience with English backs that up AFAICS, other languages would be a distraction.

    That doesn’t mean it’s wrong to have a browse of other languages, especially ones in other paradigms, but I’d get one good one under your belt first and that includes understanding how the implementation works, interpreter/compiler/JIT or whatever, down to the level of machine code. This may entail learning assembler too but without an understanding of the low-level fundamental units of work the CPU can do in a machine instruction, and even the varying number of clock cycles they may take, it’s too easy to write high-level code without regard for the impact that can have on the overall machine and its responsiveness. If learning assembler, I wouldn’t start with x86 although it’s very common. ARM is a nice one to learn.

    Once one language is known to a high degree, especially an imperative one that mirrors how the CPU works, it’s easier to learn others by “translating” across to your existing model of the world, e.g. Prolog and its goal-directed search.

    Comment by Ralph Corderoy — November 27, 2010 @ 1:03 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment