Ask HN: Should I learn a few different languages or become a master of one?

  • Depends on your goals.

    If you have a product in mind, another platform might be more suited for the product, so it may be better to learn that.

    If you have fun learning new platforms, why not go for it?

    From the standpoint of generating the max amount of "code value", I'd stick to one platform. By maximizing "code value", I mean the max amount of features you can create and the cleanliness of that code given a platform. Note that this does not necessarily translate to business value or value to the consumer. Technology changes so fast, that the value of your knowledge depreciates proportional to every platform you go into. It's like for every basket you put eggs into, you lose more eggs.

    In terms of happiness, you might choose a platform based on various characteristics. Do you like UI? Do you like being on the app store? Do you like the intricacies of code? Etc, etc.

    For me, I like utilitarian code. It isn't flashy UI-wise or techwise, but it's clean, saves me from headaches and gets the stuff done.

    In summary, if you have no goals, choose a platform and stick to it. Each platform has it's own pros and cons, it's up to you to decide what's important.

  • Learn at least a server side language for now, and a web framework.

    You don't need to learn every single thing about JS (for example, you don't need to know about the DOM and events, unless you decide to build apps with Cordova or something), but if you want to be a good independent mobile developer, having a server side language will enable you to work on your own backends. You'll want to know SQL inside and out, too.

    If you don't know ruby or JS yet, I'd recommend just learning JS and using node for your backends with express.js. Node is pretty easy/awesome, don't listen to the neckbeards.

    Don't waste your time learning brainfuck or whatever if you want to work in industry building applications. Although things like that are cool, it's never going to have a higher priority than the million other important things you need to learn right now. It's best left to bored CS students who don't want to rake in the cash to learn things like that.

  • Both.

    There are very few professional or top-notch amateur musicians who know exactly one instrument. All (I believe) have one best instrument, but for most it's violin and guitar or cello and piano.

    You will presently find useful tasks that don't fit into the App world comfortably. Take them as the opportunity to branch out.

  • There is no such thing as mastering a language. You can master a style of programming and you can master a set of libraries, but not a language.

    Two things flow from this. The first is that once you have mastered the Java libraries or .NET libraries, you can easily add a couple more languages to your repertoire with different programming styles. But the other thing is, that learning a set of libraries is a lot like saying "I can code without using Google!". Is that really an achievement? It's like saying that you don't carry a mobile phone or that you only use human powered transport. Now that Google exists, why would you bother learning a set of libraries inside out.

    Far better to learn how to do great work using different programming styles, object oriented, functional, domain driven design, actor systems with a supervisor tree, and so on. That takes practice and cannot be googled.

  • There is nothing quite like working with a platform/language that you know inside and out, where you rarely have to stop and look something up, where you know the best way to do everything. It feels like flying a jet fighter, screaming along at Mach 3.

    On the other hand, although it can be frustrating puttering along with a new language/technology, googling some basic question every 10 minutes, that's how you learn, and sometimes you need language XX to accomplish task YY.

    Ultimately there is value to both, and as others have said, it depends on your goals. There will be times that call for learning a new stack and getting it done (even if it's coded badly), and times that call for expert application of masters-level deep magic.

  • You seem like you want to try other things, so go for it! I like to think that the best developers are T-shaped. The top of the T is a vast beginner/intermediate understanding of many things. The rest of the T represented a very deep understanding of a select few topics.

  • "I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times." - Bruce Lee

  • Both. There are plenty of resources in the brain to master one language and be competent with many others.