Not a counter to your comment, just a field report on Cincinnati, since you mentioned Ohio:
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.
When I left Columbus about a year and a half ago, it didn't seem as though there were any serious opportunities for my Ruby skills. I saw plenty of Java, C# and PHP work, but that was basically it.
not even sure why the thread was posted. if you type in "employable programming language" into google it doesn't even show search results, just redirects to haskell.org.
I don't think there are a lot of jobs in Haskell. Yesod/Snap/Happstack(/Scotty) are the only web frameworks and I can count only three companies (not blogs or framework websites) that use Haskell to serve websites. And learning Haskell is very demanding. I'd never advise any one to start learning Haskell and hope to get employed any time soon.
Learning Haskell improved my programming probably more than any other single thing I've done. And while it's true that I've spent most of my career writing python and never worked as a Haskell programmer, the things I learnt from Haskell are things I use every day. So even if I was employing someone to program python, seeing Haskell on their resume would definitely be a plus in my book.
There's only 5 web frameworks for haskell, and that's a problem somehow?
>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.
Here's an advice: browse for job posts you'd be interested in. Look at required/preferred qualifications. Start learning those. When ready, apply for those kinds of jobs.
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.
This is actually excellent advice. It will also drive you to recognize what you need to be able to demonstrate to actually get the job after you become proficient in the language / framework you select.
This is, from my perspective, the only advice that matters when discerning what to learn while seeking employment. Look at businesses and people that you admire and see what tools they're using and see what they're looking for. It's one thing to see that there are a lot of (potentially boring and poorly paid) jobs out there using some technology and another to see that you can do the kind of work you want to and find a job you'll enjoy if you learn something else.
I second "Ruby", but I'm deep in the web app development world. Despite the trend towards single page apps, there is still a large market for apps being developed with Ruby-based APIs.
Excellent Javascript skills are in high-demand, especially if you have a good understanding of one or more Javascript front-end frameworks.
Here in the Vancouver area, definitely C# (and ASP.net for that matter.) I assume it's bleedover from being so close to Redmond, and probably also affects Seattle.
I checked out your site. I see you're a writer. So am I!
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.
If you just want a job - any job - maybe. The vast majority of Java/C# jobs though are poor quality as far as dev jobs go, since the vast majority are enterprise-y positions. Most of them treat software as a cost center instead of a competitive advantage.
I would personally argue for mobile (iOS/ObjC and/or Android/Java) and/or Ruby/Rails and/or Javascript. Plenty of demand, better paying, higher quality.
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.
Depends on where you want to work... Want to work 60 hours a week in cube farm in banking, where you will be just some guy in the IT department? What to sit in long meetings? What to take 18 months to do a project instead of 3? Then learn Java and stuff with "enterprise" in the title. Otherwise, learn Unix command line basics, then Ruby or Python, Rails or Django, and lots of Javascript and CSS. Then look for more interesting work in startups.
Don't learn for employability. Find something you want to build, teach yourself the best tools for the task ---or the ones you find more exciting--- and build it. The kind of experience and the learning you'll get from actually doing something will be much more important towards being employable than having learnt a particular language or framework. And you'll have something to show to prospective employers.
Loads of frontend jobs and AngularJS really getting traction in the Netherlands (and rest of the world i guess). Learning MVC is a minimal requirement (backend and frontend) these days.
If you want the breadth of web+mobile+desktop then Java is the other definite consideration. It really depends whether you end up more on web or desktop, but it'll give you a similarly strong breadth across those areas.
Depends on the type of place you want to be most "employable" to:
- 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.
It would depend on which job market you are trying to target, this is my guess (it also differs based on geography)
Enterprises (mostly in this order)
- Java (standard J2ee framework)
- Javascript, HTML, CSS
- .net (mostly asp.net, many corporate sites are built with this)
- specific applications like Oracle, SAP etc.
Startups
- Javascript, HTML, CSS (and any popular framework)
- beyond this there is no one thing, it is mostly the founders comfort zone
Software Biggies
- their software stack
- Javascript, HTML, CSS (ans any popular framework)
But given your profile and the nature of posts that you have made, I am curious why you raised this question?
You've given us no information about yourself. In what geographic location do you live? Is there a particular place that you'd like to live instead? Are there places in which you'd rather not live?
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.
Funny you are being downmodded - because what you are saying is completely true.
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.
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.
I think this touches upon an important point: "employability" will depend on which subsector of the so called "software industry" you're aiming for.
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.
Another reason to know a bit of Java is that a lot of interesting software design books and articles use code examples written in Java. It's good to have a basic understanding of the language to be able to follow.
For server side work, Java or C# are a fairly safe bet. Generally you would pick one or the other to learn well and focus on for a while. Try to get an entry level cert to show you're proficient and you might be able to get a position as a developer without experience within a company (eg if you work at an agency in Ops, you might be able to convince people to let you move into a dev seat after 6 months).
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
All of them. Ok, that isn't a serious answer, but take the time to learn 2 or 3 and you'll start seeing the similarities and underlying structure needed for a web framework and the things the language will do to plug into it. And once you can see those connections, you can learn any language/web framework pretty quickly.
This is true, but I was sort of assuming it as part of the question. If other people weren't, here's maybe a better question:
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.)
Well if your targeting small companies I would order them JS, Java, C#, in terms of languages. If you would like to be working for an enterprise company probably Java, C#, JS. Of course given adaptabiilty it doesn't really matter, you can learn what you need.
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.
> 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.
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.[1])
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.[2] 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."
---
[1] 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.)
[2] 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?
Nice! You are correct of course, I did mis-understand your question. I suspect the minimax answer is Java. My reasoning for that is that enterprise shops both consume and turn over a lot of Java programmers, this is in part to consulting gigs with Salesforce, SAP, Oracle, or IBM.
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.
>When folks tell me "I'll do anything" I'm left wondering.
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.
It really depends where you want to work. Gonna make some wild guesses here!
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)
77 comments
[ 3.0 ms ] story [ 75.9 ms ] thread- Ruby
- Python (plus R if you are doing data stuff)
- Javascript
...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.
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.
Excellent Javascript skills are in high-demand, especially if you have a good understanding of one or more Javascript front-end frameworks.
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!
I would personally argue for mobile (iOS/ObjC and/or Android/Java) and/or Ruby/Rails and/or Javascript. Plenty of demand, better paying, higher quality.
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.
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.
- 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.
Enterprises (mostly in this order) - Java (standard J2ee framework) - Javascript, HTML, CSS - .net (mostly asp.net, many corporate sites are built with this) - specific applications like Oracle, SAP etc.
Startups - Javascript, HTML, CSS (and any popular framework) - beyond this there is no one thing, it is mostly the founders comfort zone
Software Biggies - their software stack - Javascript, HTML, CSS (ans any popular framework)
But given your profile and the nature of posts that you have made, I am curious why you raised this question?
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.
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.
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
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.
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.[1])
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.[2] 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."
---
[1] 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.)
[2] 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.
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.
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)