However, think very carefully before embarking on that journey. Having an average proficiency in Java already will almost certainly get you a job in some bank, insurance company or similar enterprise-style companies. At the same time you become an exchangeable code monkey that from thereon will only be hired based on the TLAs listed in his CV.
In other words, your work will become a commodity and you won't be judged by your abilities such as abstract thinking or creative problem solving any more. All that will count will be the frameworks you have experience in at any given time. It doesn't matter that you can learn a new framework within a week. If you don't already have proven experience in framework X when applying for a job it's required for you won't get that job.
To cut a long story short: Screw employability!
Enterprisey places will ask for Java. Startup'y places might ask for Python/Django or Ruby/Rails. Embedded software (microprocessor places) or Video game places will ask for C. Apple will ask for Objective C.
"Employability" without putting in some constraints really doesn't make much sesnse.
Also, find out what other libraries/API they might use. For example, the company could be using some niche software that's nice to know, but it wasn't important enough to list in the job description. The HR people won't care if you say that you know X, but you might impress a fellow developer during the interview, and that's a plus.
Pick the project to work on first. Once you've done that your field of (practical) languages to use gets narrowed, and it becomes easier to choose the language.
- Want to build a web app? If you're looking to break into the web startup scene, Ruby and the MVC framework Rails seem to be the most popular.
- Want to do robotics / embedded systems? First I'd say buy an arduino kit and have fun with it. This will involve a flavor of C, and C looks like the de facto king of the field.
- Want to do banking? Perhaps try to build a trading bot in Java with Yahoo's free (15 minute delay) stock quotes.
! Find your interest first. If you can't find your interest, find a project that sounds fun (not too big!) and then choose the best language for it. If you find it's fun and interesting, keep going.
With employability, projects reign supreme, programming languages don't. (most of the time, but you don't want to work for the companies that care too much about you knowing their specific language -- hint: the job will get boring quickly).
Don't worry about super special libraries - just cover the basics of some of the above and build something that "works" and it'll be good groundwork.
What "Works" means is up for grabs, but any set of functions that expose you to the platforms will be worthwhile. All the concepts and capabilities you build in will do you personally a lot of good, and give you good talking points, but don't expect interviewing panels to be actually that picky about specifics - they want to find good developers, not bring in a 3rd party trading bot :-)
1. SV startup: Python, Ruby are best bets. Java will make people squirm. C# will make people tilt their heads. You'll probably get bonus points for Go
2. Google/Microsoft/Amazon: If you know C or C++ you'll be fine.
3. Facebook: They really let you interview in anything but you might as well be awesome in PHP. That said, they definitely use other languages internally.
4. Other: Java. If the company uses C#, they'll still probably be OK with you only knowing Java.
At a certain point, companies shouldn't be hiring for languages you know since a language can be learned relatively easily compared to the Larger Broader Concepts that they should really be trying to probe for. Which is generally true - any company who doesn't give you an offer because you didn't memorize language syntax for whiteboarding is crazy. It's not about that.
What it is about (I think) is trying to figure out who are you?. As an example, if you only know Java many people will think "oh this is your run of the mill CS student who doesn't do side projects" - whether true or not (of course it's possible to do side projects in Java). But it just makes people think you have less initiative than the applicant next to you that knows Java (because he has to) but also knows Python (because he wants to)
Say I know a lot of languages, up and down the stack. IA64 assembler, C++11, Ruby/Python/Go, Clojure, Haskell, etc. I don't know Java or C# very well, but I've gotten my feet wet in both.
What's the most practical thing to study next, if I'm basically going for a minimax approach--that is, minimizing the maximum regret I'd feel in having wasted my time and effort--to optimizing the area under the curve of ([breadth of possible career opportunities] x [pay of each opportunity]), in the current global market? Presume that I'm both willing to telecommute or relocate, and up for anything from founding a company to working as a faceless code-slinger.
(Personally, I have a feeling that that curve is a power-law, so there might be a strictly area-dominant industry, e.g. finance, which would mean that whatever language that industry expects would also strictly dominate.)
This is more worrisome though : Presume that I'm both willing to telecommute or relocate, and up for anything from founding a company to working as a faceless code-slinger.
When folks tell me "I'll do anything" I'm left wondering
If they are a contractor, its all up front, they are a money to code engine, pour in money on one side, get out code on the other. As the going in position for a full time employee I wonder, "Is this just a paycheck? Or do they have any goals they are trying to achieve?" I've known folks who just wanted a paycheck because their passion was something they were doing outside of work, and that works well on a contractor basis, but less well on a FTE basis.
I may be unusual but if someone is working for me I want them to be getting something more durable out of their efforts than just a paycheck. New skills, new experiences, moving some personal goals closer to reality as they relate to their career. (that last bit is important because clearly moving closer to a goal of "home ownership" is a solid goal, but as a manager my tools there are limited :-)
So being flexible is a plus, but not knowing where you are going is a minus. An example of "going" is this, let's say you wanted to learn how anyone could build a web service that serviced a billion users, and Facebook was the only place where that happened. You could learn the language and frameworks that Facebook used, and the stack, and the systems management, and all the places where scale negatively impacted the user experience and how they fixed that. (unlike Google they are very open with this stuff so its easier to do from the outside). That is a goal and then the languages and frameworks fall out of the goal. Or a goal of "making the connection between writing and publishing more seamless" which will have you looking at Wordpress and Ghost and Tumblr Etc as frameworks and languages where people were trying to achieve that goal, did it work? Did it miss? Where could it be better?
Hard to describe, but it is not unlike someone coming up to you on the street and saying, "Excuse me, should I drive down that street, that one, or take the freeway?" The answer is meaningless unless you know the destination.
Not everyone is a delicate little flower that requires every aspect of his environment to be perfect in order to come to work, bust his ass, and keep a smile on his face.
Some people love to program and don't really care where they do it or in what language. Sure, there are languages that hn loves to hate, but in every such case, I'd bet that there's someone out there that's a better programmer than you that fucking loves it. To be clear, that's a statement about diversity in opinion, not an attack on your skills.
Other perfectly talented people have a hard time finding a job and just want a chance to show someone what they can do. This is the situation that a lot of people just starting out are in, but there are also experienced people who for whatever reason, struggle to find employment.
Not sure if you have experienced unemployment, but its terrifying. It shouldn't come as a surprise that people put survival above finding a perfect job.
People shouldn't default to the assumption that people who have a hard time finding work must somehow be defective.
Actually, that is exactly what I was asking, and it seems like a perfectly sensible question to me. (Though it's not a question you'll encounter every day.)
I think you're ignoring what, exactly, a minimax algorithm entails: it's not a goal-directed least-cost search, like, say, A⁎. Instead, it's more about picking and weighting a set of potential goals, given the costs involved with pursuing them.
So the question becomes, in effect, not "what road should I take to get to X," but rather, "which road should I start heading down, assuming I'll narrow down the set of possible Xes I might want to pick later, that will cause me the least problem for any given X I might have chosen?"
Oddly enough, this is a question driving-directions programs have a heuristic for. If you chart a course, on e.g. Google Maps, between suburban addresses in two different cities, the directions will almost always start with what amounts to "first, get out of the suburbs, so you can reach the highway."
Given this, without knowing where you're going, "get out of the suburbs and onto the highway" is a high-value guess in how to get there. You might be wrong, of course: the place you might like to go might end up being in the same neighborhood you were already in. But, across the set of all possible destinations, you'll regret the strategy of heading to the highway less often than you will the strategy of "sit in your driveway waiting to see where you're supposed to be going."
 It's kind of an inhuman way of thinking, really. Humans tend to come with both "axiomatic" terminal goals, and deontological notions of how they have to get where they're going. Minimax solutions only become relevant when, for example, you've decided that what you'd like to do with your life is "to pursue, in a consequentialist manner, the maximum amount of money-earned-per-unit-time, so I can then engage in effective altruism." ;)
(More generally, though, every real-world question people deal with where they want a "good answer that leaves my options open" is actually a bit of goal-directed search, and a bit of minimax. You do want to invest effort getting to X; but you don't want to have invested too much, if it turns out X is closed, or your friend wants to meet at Y instead.)
 Actually, I just thought of a real-world scenario for this. A lot of jobs (e.g. truckers, ambulance drivers, taxis) involve a combination of a driver and a dispatcher, where the driver has to be ready to get "anywhere" the dispatcher might tell them to go. If dispatches come in steadily, then the driver must simply travel directly from the end of whatever route the last dispatch took them on to the beginning of the next. But if the driver has enough time between the end of the previous dispatch, and the start of the next, then where should they drive toward, optimally, to wait?
Thanks for the clear response and your excellent example. It is interesting to see what it optimizes for. I don't doubt you could stay employed "forever" at $45,000/year Java shop code monkey jobs for example. My personal conjecture is that Tech is not a 'connected graph' in the sense that not all nodes are reachable from any node, and not all paths can be traveled in both directions.
The example I am most familiar with is 'CEO taint' which is folks who get to a certain level, and then become CEOs of their own startup, where they reach a certain level of qualified success. Then, in a quest for finding their next engagement they are un-hirable because 'former CEO' isn't something you higher in to be a coder, and maybe not manager. Their only accessible nodes are 'new startup' or 'appointment as CEO to startup' or 'consultant'. If you can't get funding for a startup, and you don't have enough street cred as a 'consultant', its a really sticky place to be. The other common one I've seen is people who 'grew up' in a company, started right out of college and put in 10, 15, or 20 years, and then left as UberDistinguishedPrinciple Engineer/Scientist but were unable to find anyone who would hire them at a level and salary they could easily accept. But I'm wondering how much of that transition resistance is simply pride/wages related.
- startups: Ruby, Python, Objective-C
- large tech: Java, C++, potentially Scala
- large non-tech: Java, C#
But ideally you would want to work at a place that cares less about a list of skills and more about the quality of code you write. Learning a new language (and/or framework) is trivial for a halfway decent programmer.
PHP is still somewhat useful if not for any other reason than legacy.
Some useful frameworks for those languages include:
A developer works for an agency that builds websites. The agency sells a job to a client for $150k (an average size job). The project entails building an application that can sort tasks a user inputs. These tasks have certain data associated with them that are automatically pulled in from a resource the client provides. So as a developer you're thinking: "ok I can use Rails as the back-end and Angular on the front-end because I know it works great for that type of interface sorting".
For the sake of this post let's leave it as a high level example. From here the developer and a PM devote 10 hours to research the idea. A designer gets the client's brand guidelines and spends roughly 10 hours putting together some style tiles for the client to look at. From here the designer and developer work on some wireframes together and have something useful after another 10 hours. After some back and forth between the client the small team of 3 has come to a conclusion on architecture and design style in just 40 hours of work. The designer then starts mocking up the design in flat HTML and the developer starts building the rails app. Fast forward 50 hours each plus 30 from the PM and we arrive at 170 hours total at the end of the project.
If we go back to our $150k figure and divide it by the 170 hours spent we should arrive roughly at $900/hour. If the developer makes $100k per year that's $48.08 per hour. If the designer and PM both make $85k per year that's $40.87/hour. Add those three up and we've got $129.82/hour. That means the cost of production is roughly 14% of the total cost of the project.
So in what world is six figures too high for a developer with these very relevant skills?
I think Java is likely the single largest market - .net platform costs quite a lot so it's a bit less appealing to many companies.
If you want to be a front end guy then there is only one choice (exclude transcompilers which you don't have to think about for some time) - html/css/js
I regret very much that I'm not very good at JS - and I have a hard time working with JS.
Offtopic - really hope @zedshaw writes a learnjsthehardway.
Huh, that's a good point. Some of my peers from college went to work in Arkansas for Tyson. I also recall other companies from that area (J. B. Hunt and Walmart come to mind) were having recruitment drives some years back.
There are many big organizations one doesn't normally associate with technology that do have large-ish IT departments and tons of programmers on staff, although knowing C/C++ is usually helpful as well.
Other things that are typically overlooked are strong DBA or sysadmin skills. It helps to have provable knowledge of the full stack regardless of where you're going.
What do you want to do? You might be leaning towards web development, but that's not clear, since you asked for a "language/web framework". Languages and web frameworks are not the same things. But, let's assume for the moment that you want to go into web dev. Do you want to stick to the front end or back end? Or both? If both, do you like the idea of sticking to one primary language throughout the web stack, or does that not concern you?
And if you don't want to go into web development per se, then what do you want to do? Maintaining legacy applications (not necessarily "cool", but there can be a lot of money in it)? Machine learning? Working on distributed systems? Embedded systems? Game programming? Sysadmin? BOFH?
Try to put yourself in our shoes for a moment, and think about how woefully incomplete your question is.
In this thread I see quite a lot of recommendations to learn C++. However, C++ just isn't in very high demand outside of certain geographical area or development niches. I have been looking around for a new job in the Netherlands, but the amount of jobs available in C++ development is tiny compared to jobs in languages such as C#/Java/PHP.
Obviously every situation is unique, and my story may not be that of many others. I've no metrics on it. But in my experience, it largely is enthusiasm and willingness to learn over having a specific ability with someone's specific box of tools. Jormundir gave a lot of great input on what to get into depending on what sector of business you want to break into.
3. Which framework? there is no solution to rule them all or look at 1.
Whatever you do end up choosing, good programmers are presently in high demand. So just learn one and get good. Being good matters far more than what specific framework you use. And if you aren't good, no framework will save you in the long run.
By the way, I'm not saying it what language/framework you use doesn't matter. I'm saying it doesn't matter for your employment, so you shouldn't let that decide for you.
- Any language that runs on top of the JVM.
One of those, probably in that rough order. For enjoyable employability, I'd shuffle that list around considerably.
Enterprises (mostly in this order)
- Java (standard J2ee framework)
- .net (mostly asp.net, many corporate sites are built with this)
- specific applications like Oracle, SAP etc.
- beyond this there is no one thing, it is mostly the founders comfort zone
- their software stack
But given your profile and the nature of posts that you have made, I am curious why you raised this question?
Some would argue the average enterprise job is more stable - as someone who started out in C# in big corps, that was not my experience. What I would agree with is that enterprise jobs are generally less demanding, and that enterprise jobs are available in more places.
How is the job market for entry-level web developers in Vancouver? I studied literature and philosophy at UBC but I'm looking into transitioning into web development.
I moved to Los Angeles two years ago from there, but I will be moving back. It seems like there are more opportunities for entry level web devs in LA than in Vancouver.
I've been focusing more on JS, Python, Ruby, PHP and MySQL, but your comment caught my eye.
Thanks for any info!
This is easy to quantify just by looking at the jobs posted on AngelList.
- Python (plus R if you are doing data stuff)
...And location. In Ohio you might have a harder time finding work knowing Ruby or Python compared to knowing Java or .Net.
Supply of ruby developers is lagging demand, with two well-known and growing agile-development companies with a ruby bent (http://neo.com/ * & http://gaslight.co) & a host of funded ruby-based startups coming out of The Brandery http://www.brandery.org/ that are hiring at market rates.
It's an underrated city with great arts & entertainment, and an active community of developers.
* my employer
>I can count only three companies (not blogs or framework websites) that use Haskell to serve websites
I can count more than three just that I've worked at. I think "companies using haskell that some random guy happens to know about" isn't a very useful metric.
>And learning Haskell is very demanding
No, it isn't.