26

I am a relatively young programmer. I am 23 and I have been programming professionally for about 5 years.

As most programmers I started with C, learned some x86 assembly for fun and then I found C++ which turned out to be my greatest passion in the programming world. Programming with C and C++ forces you to learn platform specific APIs, libs and frameworks all of each requires constant study and experimentation. After some time I had to move on to Java and C# as the demand on my region is basically for these languages. With these languages I entered the world of web development and then I had to learn javascript. Developing for the .NET Framework was exciting at first but I constantly felt as I was getting tied up by Microsoft (and of course the .NET Framework was driving me away from Linux). For desktop development I could do pretty much everything I did with .NET using C++ with Qt but for web development I had to look for an alternative. Quickly I found Django and then I proceeded to learn Python so I could use Django. Nowadays I am learning iOS development with Objective-C.

So far it was pretty much easy to learn all these languages (C++ trained me well) but I am worried that someday I won't be able to keep track of them all. Just to clarify. The only languages I learned cause I had to were C# and Java. All of the others I learned for fun, because I love programming and learning new things. Also I like to keep my skills sharp on desktop, web and mobile development.

My question is: How do you keep track of multiple programming languages? (I mean, keep track of changes to these languages and keep your skills sharp) and: Is there such a thing as enough programming languages?

6
  • 20
    How dare you even think about not learning more languages!? Jan 11, 2011 at 3:03
  • 10
    "Every time I learn something new, it pushes some old stuff out of my brain. Like that time I took a home wine-making course and forgot how to drive." Jan 11, 2011 at 3:10
  • 6
    some languages you will never forget; others you look forward to forgetting Jan 11, 2011 at 3:44
  • 2
    I sympathize with the OP's point, because I've interviewed at places where they reject you if you haven't memorized the API document for the language you're going to be using, and "That's what Google and IDEs are for" doesn't cut it. Sep 21, 2011 at 21:21
  • 3
    You are mostly into OOP. You should explore other paradigm languages like functional language Haskell and then think about keeping track. Sep 22, 2011 at 5:30

15 Answers 15

27

Personally, I think "keeping track" of languages is a waste of time. It's always good to pick up new popular languages, but once you have a popular and well-established language like C++, Python, etc. under your belt, you shouldn't be worried. If you're a good programmer, the language is just a set of keywords.

There's only so many substantial paradigms out there; maybe old dogs can't learn new tricks, but there really aren't many new tricks. If you're worried that your functional / object-oriented / event-driven / whatever language may not last, learn another paradigm; but don't fret too much over the exact language choice.

And so what if you forget a keyword or two after you've been away from a language for awhile? That's why we have Google.

5
  • 2
    Just don't let your boss see. :) Or a non-programmer. They'll think that programming is so easy, and why a programmer would be paid for such an easy job. Jan 11, 2011 at 3:04
  • 4
    I think this is true if you stay within a specific paradigm. E.g. OO/Imperative. It breaks down if you look at a language that isn't imperative.
    – Richard
    Jan 11, 2011 at 9:36
  • @Richard: I know you don't mean to suggest that OO necessarily implies imperative, right? Jan 11, 2011 at 12:07
  • @Frank: Yes, rather than very commonly used group of languages (Java, C#, C++) that are both...
    – Richard
    Jan 11, 2011 at 12:58
  • 1
    "(a) language is just a set of keywords" - I disagree. Every platform has local, idiomatic ways of doing things. Being a good programmer in platform X involves a lot more than just syntax. For example, great JavaScript code won't happen if I assume my .NET OO mindset is all I need.
    – Bevan
    Sep 29, 2012 at 2:19
55

I am worried that someday I won't be able to keep track of them all.

After 30 years, let me say this.

Yep, you lose track.

So?

That's why they write reference manuals.

14

The real benefit from learning multiple languages is the different paradigms and models and ways of thinking they grant you.

Your knowledge of Java and its single inheritance should have shaped your view of C++ and its multiple inheritance. Your knowledge of Java and its GC should have shaped your view of C++ and its user-managed memory. Your knowledge of C++ and its templates should have shaped your view of Java and its generics. All of these relations work both ways, of course.

If you have never written in a functional language, you won't appreciate what C++'s <algorithm> library is trying to do and what it is missing by not having first-class citizen functions (before C++11 at least). If you've never written in a dynamically-typed language, you won't realize the boundaries of what static typing can and cannot do for you. If you've never written in a language with no mutable state, you won't understand the penalties that mutable state brings upon you.

Learning other languages is good, because it makes you understand your existing languages better. In this respect, you don't need to worry about keeping up-to-date, because the concepts of a language don't tend to change quickly - or at all.

1
  • 8
    +1 Its not just about learning multiple languages (learning languages is the easy part). Learning different paradigms is what is important. I personally feel at University level students should be exposed to these different paradigms, its a sad state of affairs when there are so many "McJava (tm)" Universities these days (Please note, I'm not saying Java is bad per say, read the full context please.) . :(
    – Darknight
    Jan 11, 2011 at 9:34
8

My question is: How do you keep track of multiple programming languages? (I mean, keep track of changes to these languages and keep your skills sharp)

Write code. If you want to keep up with updates to the language, then just keep writing code.

Is there such a thing as enough programming languages?

Learning more than one language helps you gain perspective on other languages you wouldn't otherwise get. Learning many languages gives you a wide-reaching overall perspective over computation in general.

But it's impossible to learn every language, and not all languages have value - either to you or to your work. The esoteric languages aren't worth learning, except for their inherent intellectual value, because they have no real practical use.

So no, there's no such thing as "enough." But there certainly is such a thing as "not worth the trouble."

4

Just worry about keeping up with the languages you think you will be using so or are currently using. Learning new languages is helpful, but there is not reason to learn about smaller changes in a language if you never end up using it again.

4

Never stop learning; but realize you never know everything about everything. You'll always have some environments where you're more fluent. Don't worry, just keep having fun.

2
  • True, never stop learning but FOCUS. Learning everything is like running like a fu** headless chicken, and in the end you are good in exactly NOTHING.
    – Slawek
    Jan 11, 2011 at 6:14
  • @Slawek: "in the end you are good in exactly NOTHING". Almost. A better version might be: In the end, the things you were good at have been replaced by new technology about which you have no clue.
    – S.Lott
    Jan 11, 2011 at 12:34
3

You have enough programming languages when you feel you are done. Knowing multiple languages is great, but I don't know if knowing 12 when you use 2 at work provides more than contextual benefit. There is nothing wrong with knowing more languages, but the rest of the time you are probably better off improving your knowledge within the languages and disciplines you need to use most. Like spoken languages, you want to be more proficient in the ones that provide value in your life.

I can recall several programmers that bragged they knew multiple languages but wrote code the same way in each, and that's not necessarily a good thing.

Also, as you get older, time will help make up your mind for you (I have much less time to study on the side than I did before I got married, had kids, became a freelance writer, started dealing with career issues, and my memory started going south. Doh!).

3

I have learned many languages over the past 25+ years. After a while, some become less useful and get forgotten (Perl). Lets not even talk about 6502 assembly, Apple BASIC, Lisp, Prolog, Pascal, SPAN, FORTRAN...

Others languages faded, then I had to relearn (Python) after a 10 years. There was no point keeping up with Python, it doesn't take long to come up to speed - Google/SO is your friend.

In the end, a language is just a tool. You use it for the job at hand. The skill is knowing what to use when. To be honest, once I started using C++, I never wanted to do C coding again. When I learned C#, I never wanted to do C++ again.

2
  • 3
    the reports of Perl's death are greatly exaggerated. Jan 11, 2011 at 9:40
  • It's nothing personal against Perl. I used to work on Unix, so Perl was my weapon of choice. I built pretty damn big tech apps using it. Then I moved to Windows. Now, I'm back again but the app I'm developing is in Python so there seems little point using Perl and Python.
    – dave
    Jan 11, 2011 at 13:06
1

In my opinion programming is not all about the language you are using. Programming is a way of thinking. You have to be a good analyst to write good software, the programming language will only help you building your software. Sure, each language has his shortcomings or advantages, but to build good software you have to think as a developer. People who don't think like a developer will not build great software, no matter how good the language is they are using.

I always make the comparison with somebody who is building a house, he doens't care about his hammer, as long as he has one he can build the house. He might need to get familiar with the hammer (for example the weight), but once he is familiar with the tool he can build a fantastic house. Getting used to the tool is not that hard since most "versions" of the tool are quite similar (this goes for hammers, but also for development languages).

While studying we used to use Java (before that I used ASP and VB5), but after graduating (about 5~6 years ago) I learned using C# (and Javascript), a job switch "forced" me to go VB.NET, the next job allowed me to use both of the .NET languages (which I did) and even "allowed" to let me use Java again (for some legacy tool they were using). Nowadays I am working with X++ (language of Microsoft Dynamics AX), but am still doing some development in .NET. These are only the language I work with in my day-to-day job, I also like investigating new languages like F#, Ruby, etc. Learning these new languages took only a couple of days (just to understand the syntax) and the rest of the time you are just playing around with the language and will learn gradually.

There are so many languages, but I tend to focus only on languages which are really different (like F#). I see learning new languages as interesting and fun, so for now I fine, learning a new language is quite easy (at least if the thought is the same, C#, VB, Java are ale equal, but for example F# is quite different) and I don't worry too much.

1

i started my career 5 years ago on vb6, moved on to php , then to java and then to .net. currently for the last year working on asp.net mvc2 and is trying my hand on mvc3 as well

the secret is one should never become outdated you cannot master everything in the world, so worrying about that is not the option

1

I think this is a career question. Therefore you have to account for people that hire you only if you know a specific set of tools. Maybe this disqualifies the job, but maybe not. So learn new things superficially. But keep learning the hard things (math, new programming paradigms) deeply.

Adapting to use new tools is a tradeoff. The IT-industry is full of hypes and you need to defend from these. This starts with the statement: no I keep on using my old editor (emacs?). But from time to time you have to learn new things. They really get better over the years (3-4). If you have the chance to learn new things at work with a real project at hand: do not hesitate, since it will be fun! The best way to discern hype from real innovation is looking at the people that use it. You are better in judging people than technology :)

1

I would suggest learning languages with different paradigms, like functional, OO and logical, because they are so different.

However, I wouldn't necessarily suggest to learn 3 functional languages or 3 OO-Languages.

If you're good at reciting, maybe. But I find it hard to learn similar stuff again and again, which happens to be nearly the same, but not exactly, especially library stuff like window painting, database invocation, collection libraries, where you have to remember different names and conventions, but which behave nearly the same. Was it paintRect (xstart, ystart, xend, yend) or (xstart, ystart, width, height)? Including 'end' here, not including it there?

But some people don't have a hard time to learn these things.

So I would suggest learning some languages, but learning few of them in depth might teach you more, than language after language only at the surface. Maybe not 2 languages per year, but every two years one language.

0

I'm kind of at the opposite side of the spectrum. I hate learning multiple languages, because you learn simple things and never get good at deeper problems this way. At the same time you learn bad practices from other languages.

Ever seen a hardcore Java developer coding in C++, it's a mess waiting to explode...

The problem is that all languages have their gotchas where the abstraction starts to leak, or play against you. You can learn syntax in 1 day, but it will take 5 years to know how to code efficiently and bug free. Do you use at() or []? Why malloc will make your long running process run out of memory?

And learning paradigms is also an interesting proposition. Because using Java guidelines in C, or Perl guidelines in C# is probably turn into an awesome demonstration of how to write obfuscated code.

Learning few new languages might help you broaden your horizons, but they shouldn't make you feel smarter, they should make you feel dumber with every new one you learn.

0

Someone else suggested somewhere that "everyone should know 3 languages".

I tend to agree. You should know a compiled language (C/C++, C#, etc), an interpreted language (Python, Ruby, etc) and a text processing language (Perl, Awk, etc). I also think you should know a shell scripting language (Bash, these days or Windows power shell). The same advice applies to toolkits and APIs.

The only way to keep up with a language as it evolves is by using it. If you keep your toolkit of regular languages limited to a few you'll be more easily to use all of them regularly to solve problems, and thus you'll be able to keep up with developments in each.

So, get up to speed with the technologies you use daily and stay there. There's nothing wrong with dabbling in other interest areas when you have time. It usually doesn't take a competent programmer long to learn a new technology given sufficient motivation and block time to sit with it.

There is no need to keep up with every single technology out there... you'll be able to spin up and down on them as needed, keeping the ones you use most regularly as your focus.

-5

Guys, really - that's sad. No specialisation, "i'll learn everything". Sorry with that approach, you'll be knowing everything, but your skills will be so low that no-one will pay you well.

There was a research telling that you need 10 years of training to be "good" with anything (programming, playing the guitar, dancing, etc.). And that's true, you need 5-10 years of writing C++/python/etc. to get skills required to develop commercial, good quality code.

And that bullshit about language references? And where are good programming habits that are different for every programming language. In which reference you find good memory management practises and data structures for C or Server Side Security practises?

Desktop, mobile, server (!!!) - these are completely different enviroments. You decide if you want to "play" all life, or you focus one thing and get a decent job. Probably people will tell you bullshit that you should know every language on earth, because they're trying to do same to improve their shitty jobs. But guess what, they'll never be able to do this, even after reading Java "reference", because what they'll be capable of then? Exactly NOTHING.

Yeah - learn graphic design, screenplay writing and flash too, you'll need it! :) I don't exactly know what's wrong but if you're doing client, server and mobile at one time - quit your job and don't wait till tomorrow because you need to do it now!

My question is: How do you keep track of multiple programming languages?

Your question should be how to not keep track of them. My advice, quit pokemon and get good in something you like.

4
  • 1
    You know i'm right - who earns more? Senior Java Engineer at IBM or "programmer-o-graphican-o-computerfixer-o" at some local website developement company? Well i know good graphicians that do only graphics and charge $10,000 for a "stupid" banner project... and some "i know everything" guys that are making some stupid websites for stupid local business for $150 (that include doing graphics), fixing computers in the meantime, etc. Because they know so little in so many areas that all they can really do is installing a wordpress theme or checking why msoffice isn't working.
    – Slawek
    Jan 11, 2011 at 6:10
  • -1 for being more of a rant than an answer, and for confusing your personal experience with the world. I'd like to see what "research" you are referring to. The pop notion going around these days is that it takes 10,000 hours of active practice to develop expertise in an field. This was popularized by the writings of Malcom Gladwell. It is probably not bad as a rule of thumb, but it's hardly a law of physics. 10,000 hours is five years of 40 hour weeks, and of course many of us put in much longer hours the early stages of our careers. Jun 5, 2011 at 5:39
  • No they do have a specialisation. Their specialisation is programming. Programming languages are simply tools of the trade to be picked up when needed, and discarded when not needed. The 10,000 hour thing was popularized by Malcolm Gladwell's book. But did you understand what he was saying? He was saying to be a musical genius for example took 10,000 hours. He wasn't saying it took 10,000 hours to be good at playing the piano. Sep 21, 2011 at 22:54
  • If no one ever learned more than one language, we would all be programming in assembler. Today I am using Groovy, Java, Javascript, SQL, Ant, and Selenium. I don't need 7 people on my team. I need people who can pick up a new technology and make things happen. Sep 21, 2011 at 23:15

Not the answer you're looking for? Browse other questions tagged or ask your own question.