I started my programming career with BASIC, during 9th grade. I learned a bit of BASIC by writing simple programs to add, subtract and to print. Then I went to the university and took Computer Information and Systems Engineering. In the first year I was taught C, and I have good command over it.

Next I learned C++ in the second year. It just taught me some knowledge of OOP. Now I am doing PHP (along with HTML). I have not mastered C++, BASIC or PHP. I am now planning to move to mobile development. But I feel that I have not covered everything in the languages I learned.

Does it really matter?

locked by maple_shaft Feb 11 '14 at 16:24

This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center.

16 Answers 16

up vote 50 down vote accepted

We're all just learning bits of programming languages. I would only consider the language implementers to be those who are a 10 out of 10 in the knowledge of a language.

Learning multiple languages, and paradigms, is the only way to develop a "taste" for what you like and don't like. If you only learned one language, you wouldn't even be able to really decide whether you even like it or not.

You're actually doing it the correct way. You will be able to reuse the most important fundamentals you learn in each while getting exposure to different syntax, libraries, and frameworks.

  • 16
    I like this answer, except it's less "what you like", and it's more "the right tool for the job". No one should be using the same language to solve every problem. That would make a bad software developer. Each language and paradigms have pros and cons. – user606723 Dec 30 '11 at 21:57
  • 1
    Given that compilers and interpreters have bugs, I don't think it's humanly possible to get to 10 for most languages. – jmoreno Dec 30 '11 at 22:39
  • 6
    I don't think even the people who write C++ compilers understand C++. Individually, I mean. Obviously collectively, they have to somehow understand the entire language, but I don't think that there is a single person on this planet who understands all of it. In fact, the committee members are usually quite clear about the fact that they all understand only their own area of expertise. Similarly in Java: Martin Odersky recently said that he believes there are only 3 people in the world who understand wildcards. And from the tone of the e-mail I got the impression that he did not include himself – Jörg W Mittag Dec 31 '11 at 2:20
  • 2
    in that group, even though he actually designed Java Generics (together with Phil Wadler, of course). Although, to be fair, wildcards were added to his design without his consent, in fact, against his express dissent. – Jörg W Mittag Dec 31 '11 at 2:29
  • 1
    @brian, trust me, you do not have to know the language in order to be able to implement its compiler. You can just translate the spec into a code blindly. But as a result of doing so you'll learn at least some basics of the language - that's why it is my preferred way of learning the new languages. – SK-logic Jan 6 '12 at 8:01

If you're still in university, it shouldn't matter yet that you don't feel you've covered everything in any of the languages you know. Understanding the common fundamental theories behind these languages is much more important. Once you understand the basics, you can learn the details of other languages when you need them.

  • 5
    In my first two years I think we picked up a new language every 3 - 4 weeks to go with the Pascal that was the basis of most of our project work (1982-85) - some of those were functional languages. Part of the point was to try and ensure that we separated "programming" from "coding" – Murph Dec 30 '11 at 19:25

I believe that the most important in programming is to understand the different paradigms.

In your question, you mentioned Object-Oriented Programming (OOP). If you mastered this topic, you should be able to explain it using only pseudo-code and essentially some graphical modelling representation (such as UML class diagrams).

Whether you decide to use Java, C++ or C# (...) is up to you or to the company you work for, but what is really important is to understand/recognize the different problems and decide the best model to solve them. A very important way to solve problems in programming is to use the design patterns which you can discover in this reference book.

As for embedded languages, I believe the important thing is to understand the different problems associated with such technologies.

In a metaphoric way, I'd compare this to writing a good scientific book; what is important is the theory you expose, the problems you manage to solve, and so on. Whether you write the book in English, in French or in Japanese is not that important in the end.

That said, it is also important to know the specifics of a particular language if you want to specialize in that technology in order to exploit it very efficiently.

  • 2
    +1 for the paradigms. It's not important to focus on the syntactic sugar of the X or Y language (of course you need that if you use the X language every day at work); what is useful is to study different paradigms because IMHO they help you to be more open-minded and creative in problem solving. – sakisk Dec 31 '11 at 21:53

In my opinion, there's little point in changing language very frequently. You'll never actually grasp any of them. Especially some like C++, where some people spend a decade writing the language and still have their code look like C.

If you can't write best practices in a language, then don't move on, IMO. That means that covering more than a couple will take many years, if not decades.

I think it won't hurt to learn a bit of many different languages, but at the same time you should learn at least one or two in depth.

I've used many languages during my career, like AMOS Basic, Java, C++, PHP, VB6, Delphi etc. Today I use C#, JavaScript, Ruby and some Clojure at work, and I've also played with Pyhton, Erlang, Common Lisp and Scheme.

But this fall I wanted to make a special x-mas calendar for my blog, and decided to familiarize myself with and solve a particular problem in 24 additional languages. This was a great experience, I learned a lot, and I highly recommend doing this once you have some programming experience.

My answer to you is this: Learn a couple of languages really well (they should be quite different), but make sure you sample and familiarize yourself with many.

Today it's important to know both OOP and FP (functional programming) well, and you should also be comfortable in both a very static and a very dynamic language.

PS: My blog is in Norwegian, but if you'd like to see the list of languages I covered you can have a look here.

I learn what I need to learn in a particular language when I need to learn something new. The "trigger" that tells me I need to delve deeper into a language is that a particular bit of code looks ugly or clumsy, appears unmaintainable or is difficult to test or comment. Often these triggers point to my lack of knowledge of a particular programming idiom, style, data structure and so on.

Learning multiple programming languages is good practice and is necessary nowadays; as many times you can't always use your language of choice for everything.

The benefits of seeing how other languages do things will help you as a programmer; even if occassionally when you are jumping around you make syntactical mistakes (e.g., is checking for inequality !=, ~= or <>). You should be careful though to learn more than just the syntax of a language, but best practices within a language as well as just general good software engineering skills. Stuff if you learned C and then learned C++ you should make sure when you are writing C++ code that it is in the style of C++ code (rather than just C with a few new keywords. That is you have multiple classes/objects, prefer references/smart pointers over raw pointers, etc.

  • 1
    Don't get me started on If x <b>=</b> 5 Then. I have to double check all my C code for like a week after maintaining anything related to BASIC. – user606723 Dec 30 '11 at 22:07

it's good to study languages from different programming paradigms at least! Procedural, declarative, functional, object-oriented, prototypical, and dynamic language - each class of programming offers its own bit of insight as to how to organize and solve a problem. Eventually you discover one or more paradigms that you're most productive and happy with, and use it.

Definitely not. Of course you also want to make sure you are learning different styles of languages. Learning both C# and Java will not expand your mind in any major way, but learning Java and Haskell will.

Check out the Book Seven Languages in Seven Weeks, which will walk you through an intro to Ruby, IO, Scala, Erlang, Prolog, Clojure and Haskell. IF you enjoy languages you will love that book.

  • 1
    Learning C# after Java might expand your mind thanks to its functional programming (and other features Java is lacking). But if it's just for learning, Haskell will be probably much better, because of how purely functional it is. – svick Jan 5 '12 at 18:17

Well, C and C++ won't do you any harm in mobile programming. You can use both with Cocoa Touch or the Android NDK, and sometimes you need to for performance. Also, sometimes you want to because you want to write code that runs on several platforms. In that case, assuming you're not just using a third-party framework, you can write your app in C/C++, and compile in platform-specific wrappers for required native elements (for example, the only way to get an OpenGL context on iPhone is by using the native CAEAGLLayer class).

So it's like the more tools you have in the drawer, the more options you have for getting the job done. You'll find you have a preference for certain ones as you specialize in various kinds of tasks. If you only do UI stuff, C might not be your all-time favorite. I would worry more about the kinds of things I wanted to get done, and then learn any tool I needed to do them.

It's actually about as useful as learning a little bit of French, Spanish, English, Arabic, Hindi, and Chinese while never knowing any one of them well.

  • 6
    I have no idea what were you trying to say by that. – svick Jan 5 '12 at 18:14
  • You do realize that most of us doesn't know "well" even our native languages, right? – Spidey Feb 7 '14 at 14:53

On the contrary, I think it hurts when I don't/am not able to learn a new programming language. It may be because of the lack of time or some other reasons. As far as I see, programmers/software developers are in love of challenging the languages, putting better things/products, and when you see that you are doing same thing always, you don't feel good. So you want a new challenge, a new language, something new to learn and put more products by it.

So I think it gives me excitement to follow new languages, new libraries, new approaches, new technologies. But I don't have time to get all of them, and people may not be able to go enough deep always. So it hurts not to learn more; but doesn't not hurt to learn more.

I agree with brian, FrustratedWithFormsDesign and SRKX, but I'd like to add that during university this, broadening your knowledge with multiple programming languages and paradigms, is the desirable way to become a good professional.

It's really improbable that you are coming out of college as a formed programmer. Programming is a hard craft and you will need the years in the industry working alongside good programmers, attending good training programs and community meetings, and mostly, you will have to face the craft problems and fail a lot, until you learn your way to master it.

Learning multiple paradigms, multiple languages, solving the multiple problems of our area, will give you a good supporting base to learn the craft on your own, daily while acting as a professional in the industry.

You may attend a Compilers class, but you won't get out as a language designer, creator or even as a compiler developer. You'll get the steps, the processes, and the problems and the basic solutions, and that will give you the edge to adapt this knowledge to a broad range of problems.

Short answer: No.

Long answer: So much of a programmer or software engineer or designer's job is independent of a specific language but very dependent on a certain methodology. For example, Object Oriented Programming is very much about where things exist in memory and in runtime, how accessible they are, and how available they are for later use (inheritance and encapsulation). Implementations differ, such as Java having a top-level inherited class Object whether you like it or not and C++ not having any that you don't specify.

Many languages share features (and many diverge). Syntax differs, of course, and it's trickier when you compare entirely different paradigms like imperative versus functional. But String processing is largely the same wherever you go, once you get little questions of syntax, index, and mutability out of the way. Any language with static typing generally has some method of casting and coercion, but how and when you can do it are up to the language designer.

The language is the tool. You're just putting more tools in your belt. But the tool is only as good as the craftsman who wields it.

Now, how many you learn is a personal choice. I would never learn a language for the sake of learning a new one. Any choice to learn a new language is prompted by either a course requirement (had to pick up js, php, and R for a single class last year), an existing project requirement (if 90% of the work is done in perl 6 before you get hired, so is the remaining 10% after) or an application-specific benefit (R over say Java combined with some sugary library for statistical analysis).

That said, you do want to learn what is out there and available. My college taught a course on this subject, Programming Language Concepts. It was a broad overview course, not a rigorous mathematics or a coding related one, covering the basics of what might be considered practical rather than theoretical computer science. It was a great course and I wish it was something offered in the 1st-2nd year rather than the 3rd-4th. The text was Concepts of Programming Languages. Not saying you have to go out and read this book, but that'd certainly broaden your horizons.

Well, The way I see it is you dont have to learn each and every bit of language. But try learning very basic features which will be required in other languages too.
For example, OOPS concepts are required in all the languages be it Java, PHP, or any other language.
Memory allocation concepts are quite similar in many programming languages. These kind of topics you should never miss out on.
Each and every language have grammar and rules, same applies for programming languages; Dennis Ritchie himself accepted that fact. So one should learn the grammar of that language.
But the way I see it is that you got to learn the non common factors between two programming languages. They will let you identify what which language stands for what. C++ is all basic OOP(Object Oriented Programming), so once you learn the OOP concepts, you learn the grammar which you will see in PHP and Java too.
My learning flow was :
Visual Basic 5 (partial) -> HTML 2.0 (partial) -> C (partial) -> CPP (partial) -> Java (partial)
and then I learned C Language again followed by C++ followed by JAVA (complete this time) then I moved to android as I was familiar with Java and XML (partial) and learned it in mean time. First attempt taught me less but in second attempt be sure to learn everything which will help you next time.

  • this post is rather hard to read (wall of text). Would you mind editing it into a better shape? – gnat Feb 7 '14 at 15:42

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