I've only been working for two years so I guess my career has pretty much just started, and I like the path I've (accidentally) taken to learning languages.
I met my first real programming language in college, Java, and I still recommend it to any beginner. It's great for grasping OOP concepts, algorithms, data structures, design patterns, and other problem-solving approaches that you can carry on to implement in other languages. I did some work in enterprise systems and Android during my first year.
Then I had to study Objective-C to make iOS apps, but I also picked up some things about C and I'm actually reading the K&R book now to know more. I think that C is a great language to learn after Java because it gives you an insight of what the Java syntax hides from you, but does anyway in the compiler level.
The thing now is that I don't know what I'm going to do next once I'm done with C. For me, I code because I want to build a product I can someday build a company with, so I don't really have a drive to learn the open web stack in depth (I already have mobile for front-end). I guess I'm just gonna go back to mastering the algorithms and some maths. Or does anyone have advice for me what to do next?
I started in Microsoft development and saw code that made me cry. I switched to Java because developers with self respect wrote elegant code in Java. But Java frustrated me because of the effort to result ratio; for the amount of time I would spend coding and configuring, I had very little to show for it. I like to build things quickly and see people interact with them heavily. Javascript gives me both of these.
And it's becoming more adopted as the lingua franca of app development; I can write server side code, rich client web interfaces, and native mobile apps using nothing but Javascript as the coding language.
But as you probably want to slightly more concrete list I would go with JavaScript, Java, Clojure, Objective C, Ruby, SQL, Prolog. In that list we have a few of oo languages of varing purity, a few scripting languages, a couple of logic programming langs, and a lisp. Something for the enterprise, something for the academics, and something for the startups. Something for the web, something for server and something for your desktop and phone. You'll end up well rounded, and have a tool for most situations.
Well rounded means often not focused because, only top notch developers really grasp more skills efficiently.
Average developer will mix up everything and won't be able to work without google search. Don't spend much time with learning JavaScript. Every monkey now learns JS and do you know why ? because it's dead easy. JS leads to Front-end development and that's often pain in the ass.
I vote for solid knowledge of SQL, Java and maybe Python or Ruby but don't learn everything in one time. Step by step e.g. each year one new technology or language.
I completely agree with going one by one through list, and focusing on what you're most interested in first (for whatever reason maybe curiosity or maybe straight economics) maybe for years at a time. But I don't believe that being well rounded is only for the elite or in stopping before you see the range of possibilities. The hardest problems are usually solved by looking at them from another perpective - and all of these languages gives you another lens to look at things through.
And for that reason, I don't agree with skipping on low economic value languages just because they don't make cash. JavaScript is currently a vital part of the web programming ecosystem and if you are interested in that ecosystem you should have a familiarity with it…
First off, it depends on your area of interest. Do you love data and want to do some interesting algorithm work? Then I'd say go with Python or Java.
If design and interaction are more your thing, then go with Javascript/HTML/CSS.
Personally, I'd focus on Javascript as 271... mentioned, doing front-end code gets lots of glory if you're making things beautiful and engaging. But it also let's you focus on one language and bring that language to the server-side with Node.js.
It lest you work with 'apps' in the app stores by using a packager like Cordova, giving you the 'I have an app in the app store' cred.
It's becoming the one language to rule them all. There are great frameworks to learn like backbone, angular, ember, etc. Learn to use d3 and learn to do some cool stuff with charts. There is just so much you can do with the one language and you can show it off!
I'm currently in the job market, and I've got a background in PHP, Rais, and Javascript, but most of my coolest stuff that I'm most proud of was data-specific internal tools and systems, so when people say 'show me your portfolio', I don't really have much of one.
As someone who got into web development only about a year ago, JavaScript has been wonderful. When I began I was overwhelmed by the amount of frameworks I could learn, but now I want to learn them all!
I think some people underestimate the kind of work front-end developers. I write Rails as well now, but I could be much better at JavaScript than I am now.
I wish I'd taken Haskell seriously ten years earlier.
My SML lecturer told us the quip that "Haskell programmers don't write programs to run them. They write them to look at them and see how nice they are." which is hilarious but far from true (it may have been closer to true when he said it though).
In college, we started with high level and went low level. While I understand this provides much more instant gratification and can be more intuitive, I think I would have preferred to start at low level (though just about every CS professor disagrees with me).
I would have liked to start with x64 assembly, then C, C++, JavaScript, Haskell.
Assembly would show 1:1 what the machine was doing.
C would give you greater appreciation for portability and low level constructs after knowing assembly.
C++ would give you greater appreciation for encapsulation, polymorphism, and inheritance after knowing C.
JavaScript would give you more appreciation for portability, garbage collection, a new object model (prototypical) and dynamic & loose types (loose types can be appreciated more by novice programmers and lead to more bugs then it's worth, though C is not exactly the strongest typed language), and intro to functional programming.
Haskell for something just entirely different (though Lisp might be a good addition here).
I guess it's hard to come up with a good curriculum because each language has it's own unique benefits. All the appreciations I mentioned could ultimately be realized going from higher to lower as well.
Usually your first language is the toughest to learn because you're trying to grok the syntax and CS concepts. Once you have the basics down, learning another language just comes down to expressing the same CS concepts in the new syntax (thus is the notion of Turing completeness).
Ultimately, software is about expression. Certain languages are better for expressing certain CS concepts than others. Pick the right right tool for the job, and don't bash other languages when you haven't sat down with them to take the time to appreciate what they're good at and why they were created. Learning constructs unique to one language will ultimately help you express yourself in every other programming language you ever use.
To answer your question, I'd say learn them all, or as many as you can in a reasonable amount of time. Always push yourself to learn more about your craft, lest you one day find yourself to be left behind in your industry.
Enterprise Java or SAP will still give you good money even if you have only few years of experience. Don't know if it's future but it's pretty safe harbour now.
I'll just provide my perspective. I'm a web developer, and have only be doing it for about a year, so maybe I can't even call myself a "web developer" with a straight face. Anyway, JavaScript was the first language I learned and what introduced me to the world of programming. As someone who wants to be able to rapid prototype and show friends the ideas I have, JavaScript is perfect. I remember when I was first introduced to jQuery, I was so excited to keep on learning more and more. The amount of flexibility JavaScript gives you to build flexible, dynamic websites is outstanding. JavaScript seems to be going through a renaissance right now in which frameworks pop up every other day to help you accomplish all kinds of tasks.
At the same time, I don't think some developers give front-end engineers enough credit. Backbone and other similar MVCs can be very difficult to master, and I give credit to those who do. It's serious, but very quickly rewarding, work.
I'd probably learn all sorts about nanotechnology given I have a science background along with my development background and there is an emerging billion(trillion?)-dollar market for nanotechnology.
That said, strictly in the realm of development:
After having done Python+Django, PHP, and .NET(c#), JavaScript, etc, I'd focus today on mobile or front-end development. Objective C and JavaScript. It is way more visible so it gets more praise from strangers and coworkers and the very nature of it means that you aren't usually working on legacy apps. I don't get happiness out of rewriting old enterprise code. Some might say they get joy out of fixing old problems, but I have had situations where 10 lines of legacy code were reduced to 1 with an increase and speed and I just felt sad, not happy. shrug
It all comes down to what your goals are... do you want to create a SaaS? do you want to build large distributed systems? do you want to code an embedded OS? do you want to get a job building internal/external web sites for a large company?
You would be better off focusing on what you are trying to accomplish and talk to people in the field and then asking them what tools they use and if they could redo it from the beginning, what would they have done differently?
Also, some of the choices of your career have the toolset determined already... if you want to get a job at an insurance company that uses PHP, then PHP is the main thing you should focus on for now.
Also, languages are just tools to add to your toolbelt. Having many notches on your toolbelt always fun and cool, but doesn't always help you with your career.
Initialy I thought to write JavaScript but actually answer is "it doesn't matter". I would investigate what I want to work and then learn best language to solve that problem. I solve different problems using different languages but basically I use only Python as helper language (e.g. to write helper scripts, to automate something and etc.).
What do you want to build? You'll get a lot out of something like javascript... but if you really want to build an iPhone app, you're nowhere. Having something you really want built is the best way to learn for me and many people I've talked to about the topic.
I would learn Clojure. More and more major companies are picking it up and it seems to be a workhorse which you can use for a long time. It's mature, has advanced techniques for concurrency and is extremely flexible. It's made to stay.
Learn the languages which are easy to keep in your head. Python, Go and JavaScript. Then spend most of your time learning _techniques_, not _tools_. Pickup some mapreduce, do a project with service oriented architecture, that kinda thing.
"Learn" as in "learn first"? I would probably pick Javascript for its ubiquity. But good programmers who know just one language are probably as rare as accomplished musicians who know just one instrument.
I met my first real programming language in college, Java, and I still recommend it to any beginner. It's great for grasping OOP concepts, algorithms, data structures, design patterns, and other problem-solving approaches that you can carry on to implement in other languages. I did some work in enterprise systems and Android during my first year.
Then I had to study Objective-C to make iOS apps, but I also picked up some things about C and I'm actually reading the K&R book now to know more. I think that C is a great language to learn after Java because it gives you an insight of what the Java syntax hides from you, but does anyway in the compiler level.
The thing now is that I don't know what I'm going to do next once I'm done with C. For me, I code because I want to build a product I can someday build a company with, so I don't really have a drive to learn the open web stack in depth (I already have mobile for front-end). I guess I'm just gonna go back to mastering the algorithms and some maths. Or does anyone have advice for me what to do next?