Be proficient in one programming language
Every career is built up from series of steps you do. Every single step you decide to do will shape the final result so I prefer those to be stable and concrete.
One of these steps is the election of the programming language. What I mean is that the main fact here is not what language you pick up but rather than this the importance resides in keeping up with learning that language until you are very proficient with it. Learning to program is not about knowing programming languages, it’s about mastering algorithms, data structures, programming patterns and mainly to solve problems.
Learn that single language, for example C++, Java, Python, Php or whatever you prefer (just make sure it has a big community to help you when you get stuck). Know how to use Object Oriented Programming, how to implement patterns and common algorithms and you will be ready to learn any other language in a day or two.
This advice is also focused on getting a good job. Employeers prefer a programmer who really masters a language and has demonstrated perseverance than another one that has touched several languages but only has got into the surface. The first one is more eligible to adapt to internal tools, products and methodologies than the other.
So this is my advice, take it or drop it, but at least reason it out and leave a comment, feedback is welcome.
Edit: After some comments here and in Dzone.com talking about the need of learning more than one language I want to clarify it. This blog tries to guide people starting a programming career from the beginning and that’s why I’m suggesting learning well just one language, at the beginning. That doesn’t mean I’m suggesting to learn a language and stuck with it for the rest of your life. In fact I’m the first to think that knowing several languages makes you more open minded once you have to solve a problem.
I expect people visiting this blog gets the right context and enjoy reading!
Popularity: 83% [?]

on March 9th, 2008 at 1:15 am
Good post! I totally agree with you: learning on software engineering, patterns, algorithms, and effective problem solving techniques is a very good way towards mastering programming, despite of the language.
Being open minded, curious and motivated also helps on daily basis, when you may find yourself overwhelmed by a problem…
on March 10th, 2008 at 10:23 pm
I think when most people suggest dabbling in multiple languages, they aren’t trying to imply that you should jump from language to language without mastering any of them. Rather, (in my experience) they mean that after you’ve mastered one language, don’t just stick to that language! Branch out; ideas you pick up while learning other languages will help you even when programming in your “main” language, and besides, you’ll prevent yourself from becoming a “golden hammer” wielder. Different tools are well-suited to different jobs. If you only ever use one tool, you will end up using it for everything, even jobs it is ill-suited for.
on March 11th, 2008 at 12:54 am
I disagree. I use the language appropriate to the task. For instance… SQL for database work, JavaScript for UI activity, XML/XSLT for UI view, Java for sever extension, CSS for UI view consistency, JSP for session capture… I’m a hyper polyglot. I am not an expert in any of them, but I understand and can complete tasks in all of them. And because each language is specific to the task, I can be more efficient and effective. I achieve software engineering through an understanding of how to use the right language at the right time, the same as a civil engineer knows when to use steel, concrete, or asphalt to build the next bridge. It wouldn’t make sense for a civil engineer to choose steel and claim that all of his/her bridges can and will be made from nothing but steel. A software engineer needs to do the same, engineer with the materials available. You need to be careful that your career isn’t limited by becoming a programmer rather than a software engineer (unless of course that is what you want, but it doesn’t sound like it). If you are expert in a narrow field, language X, I as software engineer will assign you those narrow tasks. I surely will be pleased as you perform them well, but I will never think of you as my apprentice to take over architectural tasks. So back to the bridge analogy… do you want to be the best welder (who only welds) in the world and never be considered to build the next bridge, or do you want to be the civil engineer who selects all the material and infrastructure so that he/she can let the welders know when and how the bridge should be built.
on March 11th, 2008 at 7:10 am
I agree with you that one should be proficient with (at least) one language. But I would not follow this advice to the letter. Knowing multiple languages makes one think in terms of principles and practices since this is the common ground. In other words working with multiple languages (throughout a career) makes one think about what they want to achieve vs. how to achieve it. Yes you do mention “Know how to use Object Oriented Programming, how to implement patterns and common algorithms…”, but that does not come for free. One has to make a conscious effort to really get to know OOP and design patterns. People that know only one language, tend to get comfortable and think less about the whole picture, about the underlying principles. In conclusion, do get to know a language really well, but don’t be afraid to pick up a new language every now and then, it might just open up your mind and force you to think about good development practices instead of simply translating technical design documents to say, java.
on March 11th, 2008 at 2:29 pm
I’m CSS and XHTML master. is that enough to make a career in your (author) opinion ?
I’m currently employed at Kaltura as client-side programmer, also javascript, but mainly HTML and CSS.
my boss wanted to learn PHP also but I told him, no boss, no good. I’m focusing only on what i care and is interested at, to be the best in it.
on March 11th, 2008 at 4:17 pm
programmers get bored and like to mess around with new toys. Now while this is a good mental/learning exercise, i don’t think it is in the best interests of the enterprise to have various programs, subsystems, scripts et cetera, lying around in every which language, some of which doubtless new replacement programmers will be unfamiliar with. Programmers will rant on about “the best tool for the job” but actually i think that is a cop-out on the best interests for the enterprise, and more in the interests of their interests, being as i said, some shiny new (programming language) toy that they are currently infatuated with.
on March 13th, 2008 at 6:18 pm
[…] I just read a post by Joan Planas Illas titled “Be proficient in one programming language“. In this post, Joan gives some advice that developers should stick to one programming language, get really good at it, and make a career out of it. He does offer some good points, such as software development not being just about learning programming languages, and how employers actually prefer if a prospective employee is well-versed in the programming language they’re looking for. […]
on March 13th, 2008 at 7:40 pm
umm CSS and XHTML are not languages, i dont care what arguments you have, they arent languages.
on March 13th, 2008 at 7:42 pm
I should clarify, they aren’t programmin languages. markup languages do not count.
on March 14th, 2008 at 10:54 am
@Vsync, I’m talking about programming languages, I would follow your boss advice and learn some php…
on April 30th, 2008 at 3:36 pm
[…] Focusing on artificial intelligenceBe proficient in one programming languageEstimating time correctlyMy first game: lessons learned (II)Persistence in programming, passion does the restBuilding up a Career on Alltop.comThe Tortoise and the HareMy first game: lessons learned (I)A day with Zeev SuraskiJust the beginning […]
on June 23rd, 2008 at 8:14 am
Hi,
I am not sure if i am a litl bit too late to comment on this blog… I just happened to come across it a bit late it seems…
I partly agree with dacracot and Marcin… I mean they are very correct when they say that when u know multiple languages u kind of get multiple tools to work upon and so u can use them where they are best suited for… But I think the point poleman wants to drive home is that u got to be properly proficient in at least one programming language.. Most of the times we jump from one language to another without being aware of the intricacies involved in any one of them… The point is that, of course you must be aware of multiple tools but at the same time u must be a master of atleast one of them.. And yeah, u shud choose ‘the one’ carefully.. I mean choosing a language like BASIC or PASCAL don’t make much sense do they.. So the basic idea is that one shud try first to be proficient in atleast one contemprory programming and also use others wherever need be…
on July 17th, 2008 at 10:45 am
@Ankur, you got the point and no, it’s not too late as you can see. Keep reading.