Hacker News new | comments | ask | show | jobs | submit login
Ask HN: best language for hiring?
43 points by petervandijck on Sept 18, 2011 | hide | past | web | favorite | 49 comments
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.


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.

I'm going to make a bold statement that might not be well received around here.

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.

> I'm going to make a bold statement that might not be well received around here. There is no smart people in what you think "webby" is

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.

Perhaps I should revise my remark.

Web Developers are the new "average".

This is what people will be judged upon as the entry point.

I think there are other types of smart people. People with skills rather than knowledge.

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.

I agree with your last statement. Learn as much as you can, the process of learning will pay off.

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.

it probably won't be well received because its contradictory.

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".

I'm sure there are stupid people in every domain. It's not like everybody in Analytic is superbly 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.

i would argue your point a different way. i think it is one of two things:

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 I shift my internal definition of "smart" to mean what it seems to mean in the context of your post, then I can't really argue, but aren't we starting to get some tunnel-vision in this community about what it means to be "smart"? It's absolutely not true that "most people" can write CRUD apps, but perhaps you meant "most programmers", at which point you've limited your set of people to a group who understand a very complex machine well enough to make it do their bidding. I personally don't know any programmers I wouldn't call "smart", but maybe I'm just a webby dummy myself and your definition of the word is better than mine.

I'll actually answer your question.

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.

Oh, that's what he's asking?

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.

I don't know why you guys downvote cppsnob (unless if he's being sarcastic).

Some of the Java startups look more solid than the rest. Zimbra, SpringPad, LinkedIN.

Thanks hello_moto. I wasn't being sarcastic -- I mean what I said earnestly.

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.

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

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.

This is the way to go: people that are in the same page with you. Leading such group is definitely far easier.

Ask yourself who you are and find the same people.

There are people who give a damn about the product on other technology stacks, and being interested in shiny things is not mutually exclusive with being pragmatic and caring about product. But maybe you're right that the Java community has the most people like this.

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#.

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.

Can you perhaps point me to one of those $400K Ruby jobs ?

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.

Maybe Murkin, but Ruby was a bad choice. It's all what you build on it, and part of the fun might just be building and understanding things better than just doing "require 'i18n'".

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.

In our startup we choose Ruby&Rails, might not be the most fun language and framework. But the #1 priority of our dev team, is to build the product - fast/simple/modifiable.

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.

I'm a little bit surprised that Ruby and Rails are considered no longer fun.

What's fun these days? LISP and JS?

I felt the same way when I tried to start a "real" web project in a different language, and I got back to Ruby because I was more interested in implementing my own ideas rather than re-implementing existing solutions.

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.

Might be a good way to know if you're doing something boring if you're just playing the pick-the-package game. If what you're doing is less interesting than re-implementing all those packages, then it might not be worth doing.

Nit-pick: it's actually spelled "Clojure" - wouldn't matter, except for the existence of Google's tool set called "Closure", which Clojure's browser hosted version uses, leading to lots of room for confusion.

That's a good book. Here's a link to the complete text online, on the official website.


If you see the language as the 'barrier' that people have to jump over in order to be accepted as smart then maybe go for something exotic. Clojure or Haskell?

I'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.

Speaking as someone who has dabbled in both Haskell and Clojure (emphasis "dabbled"), I'd have to currently recommend Clojure over Haskell, for a couple reasons:

    * The Clojure community has a strong focus on web stuff, while
    the Haskell community has (to date) been primarily concerned with
    more math-centric fields.
    * Haskell's web stack is still very much a work-in-progress. It
    severely lacks when it comes to documentation of even "simple"
    stuff necessary for the web, like shuffling data into a database.
    Unless you're looking for a type signature. The Haskell community
    loves to provide documentation in the form of type signatures.
    * Learning curve. While both are functional languages, it was my
    experience that Clojure's emphasis on simplicity and ease-of-use
    made it very easy to pick up and start tackling real things. 
    There is some ramp up time if you're getting used to the tools,
    such as Emacs or the Java ecosystem, but you don't have to worry
    about things like monads slowing you down.
    * It's a LISP! LISP is cool.

Instead of looking for fashionable languages, why not look for a history of creativity and a passion for learning? And you can never, ever underestimate the value of good communication skills.

It's never easy to hire smart people.

This is the real issue, not languages. Anyone who is smart and has a solid conceptual background in software development can pick up a new language quickly.

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.

This dataists post of the popularity of programming languages is relavant, though the data may be a but outdated.


Thankfully, the good folks at Redmonk revisited this analysis recently.


Probably Clojure - It's cool, has a webby angle, you can cherry-pick the good Java libraries and to quote Eric Raymond: "Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot."

Your product vision and company culture is what will draw good talent in. Work on building out those principles and learn how to communicate them efficiently to prospective talent.

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.


Understand the foundation and everything else becomes a lot easier to learn. And yes, you can do the web with it. Many still do.

If you want to work for a small startup, Ruby seems to be what most people are looking for. If you really want to show off your programming chops, learn something lower level like C++. Of course you said it should be "webby" so another option is something like C#, as long as you don't mind Windows.

Why do you suppose it is difficult to hire smart PHP developers? Facebook seems to be doing just fine, and as far as I know, most of their codebase is still straight up PHP. Bottom line, build something that customers want. The customer cares that the solution solves their problem, not that your technology stack is bright and shiny.

This is worth reading: http://pud.com/post/9582597828/why-must-you-laugh-at-my-back...

Focusing on being a better coder and communicator is your best bet. It'd be more interesting to solve advanced problems and only know PHP than to pick up another language and never have really solves problems anyone cares about.

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.

Pick a startup first.

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.

The problem with this strategy is that your potential hires are more experienced in whatever language you choose so gauging their skill solely on this particular aspect is hard.

If you really want to learn a new language I would go for one that fits your problem domain or what your friend use.

Python is versatile, easy to learn and has lots of nice libraries. Check out Paul Graham's article about python and hiring smart people http://www.paulgraham.com/pypar.html

+1 for Python + Django combo

Instead of answering OP's question, most posters seem to be saying "learn language X because it is my favorite language and the best programming language ever!" Completely unhelpful, although not entirely unexpected.

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.

Do you want to do a startup to make money or win a IQ competition?

ruby/python shd be relatively easy, I recommend immersing in Java ecosystem, including scala, JRuby, groovy, clojure.

node.js, google closure library

I don't think there's "one" language for this purpose.

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.

Wait for Dart.

There is no language that's so good that it's better to wait for it to be released than to write working code today.

scientific Python!

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact