Hacker News new | ask | show | jobs
by onion2k 1354 days ago
If I was choosing a language to base the tech stack for a startup on these days I'd be very reluctant to pick anything that didn't have a local user group. Slightly more esoteric languages that enable you to write better code faster are brilliant, but if you're successful enough to grow quickly, or you can raise funding, you'll need to hire devs relatively early on. If you've chosen a stack that's too esoteric then this will be a huge blocker to making any real progress.

When I did my last startup we switched from a Python API to Node for this reason. Python is a great language but there are no devs available where I live. I can't even imagine considering Clojure unless I was in a major tech hub.

The move to remote work is probably going to be a massive benefit to building in less mainstream languages.

8 comments

Counterpoint: building in esoteric languages can serve as a filtering mechanism in and of itself. Given how broad the swaths of JavaScript and Java developers are, they can be much more hit-or-miss.
Counterpoint counterpoint: Esoteric languages attract PL nerds, who are much more interested in using every new/different "expressive" feature of the language than in getting business done using clear code understandable by anyone on almost any level.
Counterpoint X 3

True. But if you have a good well-enforced, sane style guide, then expressive powerful languages can be a good thing. If you hire devs who care more about playing with the language than delivering value then you're hiring the wrong people. You can't ditch these languages because some people are sometimes attracted to them for the wrong reasons.

I actually did start a company using Clojure. All these points are true. Yes, it helped filter candidates in the early days, and also helped attract people to jobs that might otherwise not be that interesting or competitive. It's difficult for pre-funded companies to compete with the FANG companies.

However, there were negatives. At the time the Clojure library landscape was less mature. Clojure developers would also tend to abandon projects to create "the next best version" which made migrating and keeping up with the libraries of the day difficult. Most of the libraries were very rough around the edges too. On the other hand we could use any Java library which was a boon.

As the team grew, it became harder and harder to hire people in larger numbers. Especially in a single timezone. Also it became apparent that many of the people who were very happy in the early days, were increasingly less happy as we added standardization and protocol to our dev process. As some commenters pointed out many of the people attracted to Clojure liked playing with the latest and greatest, and things were "boring" when they couldn't work with whatever the latest fast changing trend in the community was. Trying to teach people Clojure also an issue. For some it was challenging, and for others, they were not really interested in using it.

It was a good learning experience, but I don't think I'd do it again. There is something to be said for using "boring" technology for the majority of your tech stack.

I also founded a company which built a large portion of our backend on Clojure, using it through Series C. Your experience matches ours verbatim.
I must note switching from novelty to boring phase is a crisis which every growing project will come through once it starts to expand its workforce. I saw it in teams with very average tech stack many times.
Counterpoint Part 4:

Esoteric languages by-nature have smaller populations of devs. They demand higher salaries for their specialist work. This can hurt you as you scale - salaries continue to increase (secularly), and the pool of possible engineers begins to shrink within your locale.

If you hire developers based on the languages they know / think of languages and stacks as part of the long-term identity of a developer, then you should not use esoteric ones. This is well known! On the other hand significant parts of the industry don’t do the former, so they are free to do the latter.

As an example, nobody knows Go when we hire them to write it.

Yep. This is also true.

Hopefully WFH helps there. In my niche Scala it does. We can hire more broadly. We also hire ppl with an aptitude for Scala and keep our style simple. That helps.

Having been at a Clojure startup I can second this, despite our non existent brand we found great candidates. And teaching a smart junior developer Clojure wasn't harder than teaching people Ruby or Java. As soon as the initial lisp shock is over learning is much faster due to the simplicity (it's just data).
Good point! In my experience, you don't need to hire "Clojure developers". Look for good candidates that have worked with functional programming languages and you'll be fine. They'll get up to speed in a matter of weeks. Any flexible and educated developer can use Clojure, it's not magic.

In other words, it's not about hiring a "Clojure developer", it's about hiring a good developer.

> building in esoteric languages can serve as a filtering mechanism in and of itself.

Yes, definitely in growth periods you get the best developers migrating to it. I'd say Rust is like this now. The problem is a few years time they'll move on to the next big thing leaving you stuck. I'd think Clojure is in this spot right now.

Countercounterpoint: People can be terrible at Clojure. The distribution of ability probably doesn't vary much between languages.
It absolutely does, because there’s a self-selection in being interested in an esoteric langage (assuming it’s not a corporate oddball or legacy langage) which raises the average above the background of targeting “employable” langages: people going through this process show more interest in the field.

Though that doesn’t mean they’ll be more productive, and then adds hiring challenges. So the break-even is not simple.

One of pg’s early essays was on exactly that subject (“the python paradox).

As a Scala dev, I had a similar belief as you: Scala using companies seemed to have higher calibre programmers. Until my current job at a major Telecom.

The code is all Scala, but written by a bunch of ex-Java devs. I have made attempts at education, and the code is improving, but the fundamental structure of the services are bad, and there is still a lot of bad code. I am not saying this as a FP purist, some of the code would be bad by the standards of Java programming.

Bad programmers then hire other bad programmers. Because it is hard to find experienced Scala developers, they have brought in people with java experience, or big data Python programmers who claim to have some experience using Scala with Spark. I am now involved in the hiring process, and it is slow and dismal. To be fair, the kind of contractors this company hires are mediocre, regardless of language.

The features of Scala create novel ways for confused programmers to screw up, and we aren't even doing anything esoteric, like pure FP. I suspect there are some similar traps in Clojure.

Scala's problem here is largely historical.

When it was released, there were two camps to adopt it: people that wanted an FP, and people that wanted a better Java. Since Java went through a long period of stagnation, most of the Scala code out there is written by Java developers that just wanted a better Java.

Kotlin has stepped in and replaced Scala for "better Java" role. But this history has left a pile of crap code written by people who didn't want to use Scala.

Clojure doesn't have this problem because you couldn't ever use it as just a better version of Java.

I have no commercial Scala or Java experience.

However I wouldn't mind coding in Scala. I like OO, I like FP, I'm comfortable with expression based programming and immutability. Based on that alone - and playing with Scala in my spare time - I feel like someone with my background may be more suited than someone with a commercial Java "mutate every variable" background.

But I'd never get through your filters.

Had this exact experience trying to hire at startups for Scala/Spark. There’s only so many Scala devs to go around. It also doesn’t help that “good” Scala is highly subjective, with different levels of Scala from better Java to functional paradise.

I’ve been happily coding (and hiring) in Python for the last four years or so. Still doing Rust and some Scala at home where deadlines don’t exist and hiring is a non-issue.

Probably worth bringing to attention the python paradox essay: http://www.paulgraham.com/pypar.html
> If you've chosen a stack that's too esoteric then this will be a huge blocker to making any real progress.

Clojure is... esoteric now? I would understand if we were talking about, I don't know, INTERCAL. But Clojure? Is Scala 'esoteric' too?

> Python is a great language but there are no devs available where I live.

Ah, I see. Yeah, by that measure Clojure will be esoteric indeed. Python developers being rare is very surprising.

Maybe exotic is a better word? It is certainly not seen as often as Java is, but it is no Malbolge.
last 6 months job listings from itjobswatch.co.uk

Python - 23,146

Java - 19,800

Scala - 2,274

Clojure - 291

I haven't gotten to that stage yet. But I think it's difficult to hire good devs for all stacks, be it Python, Ruby, JS. Clojure community is super friendly and full of very talented developers and I'd love to pay someone to write Clojure :).

Yes, remote work for sure is an edge when hiring!

Also reminds me of the essay "The Python Paradox" by Paul Graham (http://www.paulgraham.com/pypar.html)

2 years ago I was hired into a Clojure based start-up with no experience in Clojure. It is easy to learn, and I love it now. One of my duties is hiring, and we don't look for developers with Clojure experience. Instead we look for developers with good skills in any language, and trust they'll be able to figure out Clojure. In a way, it has actually widened our hiring pool since we can't be shackled to the XXX years of experience in YYY approach.
Still hiring? :)
We're paused right now since we're prepping for a funding round. However, have you checked out the Clojurians slack? They have a #jobs channel which is pretty good.
> Python is a great language but there are no devs available where I live.

Wow. Where on Earth do you live? Real question, not being sarcastic.

Presumably not the US. I've found Python developers even in some fairly small towns (approx 25K people).

Also a point for node: in the time people have argued about how node sucks (some valid points, all easily mitigated) and how X is better, they could have already shipped a bunch of nice features.

Focusing only on web stuff.. If you have a good grasp of design patterns and you can build out your system in a modular way, I think node is a great starting point.

I love starting with node because typescript is awesome, the performance is nice, the community support is tremendous, the scaling is easy, and finally it’s easy to move off it. If some part of the system starts becoming a bottleneck, just swap that piece out for something more suitable. One thing I like about this time right now is that most things are built just fine to be used in creating something new and useful products.

Have we learned nothing from covid? You don't need to limit your talent pool to your own backyard. Especially since you're not in a major tech hub, by your own admission.
How long does it take for some non-Python dev to become a Python dev? One week? Two?
Learning a language like Python is easy enough, but the hard bit is actually unlearning the language you came from. If you give a JS dev a couple of weeks to learn Python they'll probably succeed, but their code will be 'python syntax written with a JS thought process'. The code will work but it won't be good code. Sometimes that's fine, but as the foundations of a startup?

Getting to the point where you're writing good Python and taking advantage of what the language provides, knowing the ecosystem, and building things that other Python devs won't look at and think "Wtf?" takes much longer than weeks.

Syntax is probably within an hour. Spurious colon in a few places, whitespace deemed more important than lambda. Brief confusion over the scoping rules.

Then the library ecosystem is probably good for a lifetime.

> but there are no devs available where I live

If only there was a worldwide information technology network allowing people to work together remotely.