Ask HN: best language for hiring?
I'm thinking about spending 6 months learning another programming language. I'm good at PHP, and nothing against it, but I think it'll limit me if I want to do a startup, in terms of hiring smart people.
So:
What language (Ruby, Python, ...) should I learn?
Requirements: it should be well webby (ie. have libraries for all the usual web stuff you want to do), and be exciting/easy to hire smart people for.
51 comments
[ 2.6 ms ] story [ 113 ms ] threadI'm not sure if a test like that is meaningful or not, you can narrow down the field of applicants substantially but you may end up with people that have more theoretical than practical knowledge.
Rather than picking a language to attract smart developers, attract the smart developers by presenting them with an interesting challenge and let them pick the language.
If you still want pick up a new language, in my work as a recruiter in San Francisco I see a shortage of web developers who are good with Ruby.
Understand the foundation and everything else becomes a lot easier to learn. And yes, you can do the web with it. Many still do.
Ruby and Python are now too good at doing webby stuff in that there are not enough Ruby devs to meet the demand of companies without skyrocketing salaries. It is easy to hire good Ruby devs, provided you have $400k to spend per year, but that isn't your real question.
Your real question is what languages will people really, really want to work for my company to use because nobody else is using them. I can only think of a couple: Common Lisp, Closure, Scheme, Smalltalk. There are others that are happy-fun languages but not necessarily I love you languages that few startups are using: Scala, server side CoffeeScript, Io, F#.
But the problem you run into there is that many of these languages don't have as many webby aspects to them which is why fewer startups use them in the first place.
I'd probably recommend Scheme because it has the best book of all time: http://www.amazon.com/How-Design-Programs-Introduction-Progr... That book can teach anyone how to code Scheme. Although all the languages I listed are awesome.
Kidding aside, he wanted something with a strong existing application / infrastructure base.
And while CLisp, Closure, etc are fun, we can all agree that starting 99% of web projects in them is probably a bad choice.
Ruby is an amazing language, I love it, but so many things have been solved already it feels like it is a game of pick the package, rather than actual fun, at least in web development.
It means you should try to understand the libraries you're using instead of arbitrarily picking packages. Devise (https://github.com/plataformatec/devise) is a great example of that as they explicitly tell people not to use it unless they have a good understanding of the Rails framework.
Same goes for Python&Django.
I personally believe in to choosing the best tool for the job - not the most fun/esoteric/interesting/etc one.
What's fun these days? LISP and JS?
To the OP: do your startup in Java. Then at least you'll be hiring devs who give a damn about building your product, rather than ones who just want to screw around in whatever's shiny and new.
Some of the Java startups look more solid than the rest. Zimbra, SpringPad, LinkedIN.
Put another way: find developers who want to work for you because they want to build what you want to build, not ones who will only work for you because you chose "technology X" to build it. One way to guarantee that is to choose a tech that you're positive can do the job and is boring... Java is that tech.
Some people will be perfectly content to build anything just as long as it’s written in <their choice obscure language>. For other people it might be really important that you use agile, or that they are given a greater level of control over the development process, or that they can work from home, or whatever it is that they care about.
So really I’m saying is that you should generalize your advice here: find people who care about what you care about. Don’t try to guess what that is. And to do that, go away and figure out what exactly you care about, ask other people to do the same and compare notes.
Ask yourself who you are and find the same people.
http://www.htdp.org/2003-09-26/
That's Clojure (http://clojure.org/), not Closure, unless you're referring to Google's JavaScript compiler (http://code.google.com/closure/compiler/).
And I wouldn't call Scala a 'happy-fun language but not necessarily an I love you language' (what's the difference b/t the two?). Twitter is using it to replace the non-scalable parts of Rails, and FourSquare and BankSimple are built on it from the get-go.
Also, anything based on the JVM, especially Scala and Clojure, have tons of 'webby' libraries and frameworks out there. Start with the Lift and Play web frameworks, respectively, and the Netty async server, among other things.
If you really want to learn a new language I would go for one that fits your problem domain or what your friend use.
Smart people tend to adapt (in much the same way you're trying to right now) and they will ultimately follow passion and vision over the convenience of knowing the same tools as you.
http://www.dataists.com/2010/12/ranking-the-popularity-of-pr...
Thankfully, the good folks at Redmonk revisited this analysis recently.
http://redmonk.com/sogrady/2011/09/06/dataists-anguage-ranki...
There is no smart people in what you think "webby" is.
Smart people tend to be the master of their domain: data mining, capacity planning, operations, specific business domains, embedded magicians, security experts (the real ones, not the fake ones), OS masters, programming language linguist.
Most people can write RoR, Django, CodeIgniter apps (or, known as the CRUD app). Very few people can do Business Analysis, Data Analytic, understand (and fix, improve, innovate) Healthcare, or bend Oracle as they wish so it worth for their bucks (surprisingly not a lot people can do this).
You can hire a $100k Ruby developer that know Ruby inside out, but what are you going to do with that knowledge except to build a company around Ruby language? (improve VM, sell enterprise supports, etc). I don't think you'd hire this fellow to write a crud app. That would be a non optimal business decision.
Node.js is the new hotness. Alpha-programmers will flock there for a while just like they did with RoR. So you're going to hire these programmers for 2-3 years, 4 max before they jump out. What are you going to do with Node.js other than to re-write pretty much almost everything that exist in another platforms already.
New language/platform becomes popular, people (early adopters) flock to it, then the notable ones (the next early adopters) flock to it as well, then the rest. I don't mean to disrespect the people who improve new platforms but most problems have been solved. All they do is to re-implement that in another language. MVC, ORM, Caching, Routes are still what they are in other platforms.
A large number of web programmers I've met do not have a degree, they know very little theory, and often do not understand the most fundamental concepts like memory allocation or semaphores.
Though, I'm not sure I'd go as far as saying that that means there are no smart people. I've met a lot of smart people who fit the description I just laid out. Their problem is they just don't have the training or experience to make good technical decisions.
Web Developers are the new "average".
This is what people will be judged upon as the entry point.
How many people are able to quickly understand new problems, new environments, etc. While a db master is helpful in scaling a big project, the guy who can wear many hats is invaluable in the early stages.
To answer the original question, learn (well) as many frameworks/languages/paradigms as you can. The process of learning something new is the real value.
No doubt.
On the other hand, skill-smart people, or what some might call "raw-talent" tend to self-destruct on their own if they refuse to listen. Raw-talent tend to make many mistakes because they have no knowledge. That's why you need both skill and knowledge.
> How many people are able to quickly understand new problems, new environments, etc
Raw talent might be able to learn new things quicker assuming their mind is able to accept this new things. Sometime raw talent can be so stubborn that they refused to learn new things and just believe in their own raw-talent.
I'm quite sure we've all met a very super smart programmer yet very stubborn and wouldn't listen.
> the guy who can wear many hats is invaluable in the early stages
Again, agree with you. Assuming such person exist. In reality, anyone can be the guy who can wear many hats as long as he/she is willing to work hard and longer hour to do research on topics that he/she doesn't know.
Full-stack developers that wear many hats tend to specialize in one set of stack. He/she might not be at the level of DB master that knows at least 3 popular DB such as SQL Server, MySQL, and Oracle. But a full-stack developer, at the very least, must know a single popular DB (pick one from above) and almost reaching the expert level or else we don't share the same definition of an all-round professional.
why can't a smart person be the master of the web development domain?
and i can tell you from experience that there are plenty of dumb people working in business analtyics, data analytics, healthcare, etc..
smart people are smart people regardless of where they work or what tools they use. you shouldn't denigrate someone for choosing something to master that you deem as "less smart".
But if all people do is just jumping around between programming languages and re-invent the same thing over and over again, they just hit their limit. They're probably a little bit better than the average developer. Or perhaps they just work harder and more passionate, not necessarily smarter.
I don't mean to denigrate people as I don't really care whether they are smart or not because I never really care of intellectual ranking. Personally, I only care if a person is a good person or not.
I'm merely replying that most web-developers hit their ceiling and probably not what the OP consider "smart". Please view smart or not smart as some sort of true/false without any insult related to it. Not as bad or good.
1) web development is where the jobs are, right now. below average and average developers will (or have to) follow the jobs and the money.
superior developers are already making top dollar and/or are already in a job they enjoy, so they don't really need to move. my company is hiring like crazy right now for web developers and we can't seem to find intelligent/qualified employees anywhere, though we know they're out there.
2) some jobs are just straight up difficult to do. and i don't just mean difficult as in "it takes intelligence to do this job". there are mentally "easier" jobs that some people just do not want to take because of the demands of the job. being smart perhaps makes them easier to do, and being so difficult these jobs tend to command higher salaries. so the smart people tend to filter into these positions.
that is typically why you'll see extremely smart people making a ton of money in niche industries, in my opinion.
in large industries, the smart people usually get promoted out of hands-on coding positions, or they're tougher to spot from the outside looking in because of various other reasons.
If you want to learn a language with a strong developer community and is well suited to building web applications, either Ruby or Python would be good. Personally, I prefer Python because I find the syntax to be clearer and easier to understand, but that's just my preference.
For the most part, the specific language isn't that much of a problem. Good programmers generally know more than one language and can learn a new one fairly quickly. Therefore, you shouldn't limit your hiring to people who are highly experienced with one particular language.
Don't pick C++ or Java. If you need the Java libraries, consider Clojure or Scala. Don't pick C: it's a fine language, but too low-level for what you want to do. Javascript literacy is a must in web development. So learn it, but not only it.
What's more important is that you choose a language that you are comfortable with. You can learn basic Python in a couple of weeks. Is Python a perfect language? No. Is it "good enough"? Generally, yes. (Switch to Scala if it's too slow or if you find dynamic typing doesn't suit your needs.) Then build a great demo. You're going to get more leverage, in terms of hiring smart people, out of having a great demo than having picked the right language.
Make sure you'd like to work for this startup with these people for years.
Then pick development language that's most suitable for that startup.
So I think you should find the language that you love to program in first. If that's PHP, well, you're insane, but the heart knows no logic.
You're not going to find a language you love by playing it safe and asking what other people are doing. That eliminates truly mind-stretching exercises (like learning Erlang or Haskell or Clojure).
That said, if you are really looking for a language that is going to be super relevant to the next five years, you couldn't go wrong with JavaScript. Learn it in a deep way; become a master of closures and asynchrony, and try out important, opinionated libraries like jQuery, Underscore, or Backbone. If you are used to languages like PHP it should be a mind-stretcher too.
[1] http://en.wikipedia.org/wiki/Keynesian_beauty_contest
This is worth reading: http://pud.com/post/9582597828/why-must-you-laugh-at-my-back...