Ask HN: Which language to learn for long-term work

28 points by jsudhams ↗ HN
All : I am an 17 year experienced in IT infra (everything from sun solaris to linux / windows and some cisco) and very enthusiatic to learn. Learned programming for troubleshooting and can CRUD apps in C#,vb.net, vb6 and if forced C++. Used C++ in past for call windows kernel functions only. Supported COM and DCOM apps, and know ms sql very well. But like coding in vb.net mostly if i have come out with app quickly. Have done few websites and apps used by companies.

I want to be a good programmer for alternate income as in India it is not possible continue as IT Infra guy with out biting management bullet after some level of salary. I get around 34K USD after tax here in india and manage a team now but also consult and design apps. Very innovative and have can solove anything attitude and does not drop/give up before trying. Have learned trading in real markets as well as openstack, aws and TOGAF way of EA. Been around a lot in this forum and earlier in slash dot.

I have gone through funtional programming pros and cons and discussion here. What i need is what langauage can/should i learn out of the below ones.

1. Rust 2. Go 3. Haskell 4. Elixr (Erlang) 5. Lisp

What I want to get out is side income to start with as remote work ( i dont have regular education for H1B but L1 i can get so dont want try moving)

But want to pick up a domain like Trading or Telephony or large systems management learn using real worl scenarios and problems and create applications as i learn. I have plan bootstrap few ideas in banking and in chat areas. But main thing is want to have some steady income via side project some thing like US$ 2 K per month is sustainable for long run.

As a primer i have started (again) on math on Khan academy and refreshing math skills.

So my question is which language should i learn? (Note: i can love what i do so no answer of love what u do, had developed this mentality to come so i am fine with start something love it)

58 comments

[ 3.1 ms ] story [ 172 ms ] thread
Go and Elixr have very wide spread industry uses.

Rust while promising (I use it heavily myself) still hasn't seen much industry adoption. I'm confident it will... eventually.

Second this. Given your couple of bootstrap areas too, either language (or both) will be beneficial.

I will say though that in most low level systems that demand absolute performance or that have been around for quite a while it is still mostly C/C++ based. So if you are wanting to break into those areas, then C is going to be the language to know really well. I have worked on a number of telephony systems and am familiar with a few financial trading platform architectures, and C is really core and popular in both domains. Other languages are used in both domains, but just wanted to toss that out there to you.

> very wide spread industry uses

I think you need to be very careful with this and quantify it more. I suspect that if you graphed Go + Elixr on a graph with either LOC deployed, new LOC written, expected future projects or jobs available it wouldn't even be visible on the same scale as C# or C++. Compared to Java you'd have to do some sort of dramatic log scale or something to see it.

While there are new comers like Swift, Go and Rust etc. Still the biggest language and lots of chores in future, will be Java. If you want to just work <tm>
Out of the ones you listed, and grit my teeth to say it as I must: Go.

Go is the new C, for good and ill.

We're going to be stuck with it for decades. Might as well become conversant.

Go is not the new C. It's not up to the same tasks, full stop (memory management being the number one killer.) C is still the new C, and your best low level bet. (Rust should take over, but people don't do what they should.)
> Go is not the new C.

1+

> Rust should take over,

no </3

English. j/k.

Out of those, would pick Go

I'm not sure that "English" deserves to be written off as a joke.

I was born in England and have had to work at developing a "mid-Atlantic" English accent to make it easier for Americans to understand me on the phone.

One of my colleagues who grew up in Chennai says that learning how to speak with an American accent has won him a lot of contracts over competing outsourcing firms.

If you are selling something then making it as easy as possible to buy from you is a good idea.

This is really important. From personal experience, there's a lot of bias. Some racism, but a lot of people having bad experiences with "Indians", due to shitty outsourcing. It must suck to get written off because of this superficial bias. I'm guessing more money goes to contractors that happen to be in India vs Indian contractors. (I've lived in a country with a bad rep for a long time, and I make sure I'm not introduced as Michael from <place> - a lot of people are attracted to mentioning it if you're not local, it seems.)
From your list: Go.

Not on your list: Java, C++, C#, maybe even COBOL.

If you want cool work then: Rust, Haskell, Elixir and Lisp (Clojure). As these will see a lot more green field projects, use at start-ups, use by teams that are less constrained by Enterprise criteria.

Just did a few job searches for contracts in London.

0 jobs available for most of the "cool" languages, but some for clojure, 4 for go, and hundreds for java, C++, C#.

So, it depends if he wants to get paid or just learn for the sake of learning.

There are also remote jobs in the "cool" languages.
Stick with Java and C# if you want to work in business, as that's what like 90% of businesses are using. Learn cool new languages for fun if you want, but don't expect to find work using them.

But really, you should read http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-pro... which has the more correct answer for your question: It doesn't matter.

I would learn Java and the JVM if I wanted a language/platform for the long term.

Of the five you got there, I would go for Go. Or Clojure as a Lisp. Scala is also a good option.

+1 for Scala, it might be a good stepping stone, given your current "enterprisey" focus. Much easier to differentiate yourself than good old fashioned Java, yet not as esoteric (viewed from enterprise) as some of the languages in your list.
I'm surprised nobody here has said JavaScript. It's not on your list, and personally I strongly dislike it, but it's the most ubiquitous language nowadays in the world. You will definitely be able to find side project work in it. And if you add in Node, you're golden for most any web project.
I was going to come and also say JS. It is not my favorite language, but it is certainly not going anywhere anytime soon. There is also so much bad code being written in JS right now that entire careers will likely be built doing clean up.
> There is also so much bad code being written in JS right now that entire careers will likely be built doing clean up.

Perhaps the most demotivational advice I've ever read :-)

"Learn javascript and clean up other people's mess."

That very advice has powered many a career in Cobol...
But you're not meant to tell someone that when they're just starting out... :-)
Some people (myself at least) actually like refactoring. There is something really satisfying about coming in and fixing up a badly written Node.js codebase, breaking it up into microservices, etc.

Plus if you want to be a $200+ per hour contractor, this type of "mercenary work" can be really profitable.

When I decided to focus on a new technology I really wanted to be somewhere where all the "cool" things are happening. I ended up in the world of JavaScript and really have not looked back. If you are undecided have a look here http://githut.info/ as well as look at your local job market. I like to attend hackathons so being able to leverage a massive developer community is key to any technology I will bet my career on. Even now I'm pushing myself beyond JavasScript to use typescript as it brings a maturity to JavaScript I felt was lacking. The important thing is that I feel that there is so much community investment into being able to do things in JavaScript that it enables me to focus on deliverables.
I expected this answer at the top... JS will always be in demand for front end web positions (the MVC front end frameworks included), but as for the backend I have doubts about it's longevity, a major flag being the IO & Joyent split, as well as general back end developer anathema to using JavaScript I've sensed over the years (your's being an example). Maybe they'll resolve the community, and maybe greater numbers of back end devs will learn to enjoy JavaScript. It's hot right now of course, but thinking long term my experience tells me it's a risky choice if your goal is more pure back end dev.
The io.js and node.js split is actually a sign of health in the core of Node.js. Tired of Joyent's stagnate stewardship, the top contributors forked it. They forced Joyent's hand into creating a foundation.

Now io.js and Node.js are "merging", but the merge is just the io.js codebase with some patches from node.js all under the node.js branding and the new node foundation (which has blessings from the linux foundation, IBM, Microsoft, etc). So the community has been "resolved."

If you're main goal is "to have some steady income via side project" then it doesnt matter which language you pick.

What matters is the product you create and whether people will use it and/or pay for it.

I think that English is very important not only for doing remote work but also for understanding the intricacies of programming languages with docs that are inscrutable to the beginners of the English language. When I was 16 and had been trying to learn C++ I had a late realization that understanding the (sometimes weird) semantics of English would have helped a great deal learning the (almost always weird) semantics of C++.

Also, I'd refrain from trying to learn as many languages as possible. Understand how systems work and how to build them. You have to understand how to read code, before you become a great coder (Maybe you already are, I'm speaking in general).

What is the motivation for refining your math ability?
I had to drop out of school for job (as part son of soil type) and i dropped after class 10 so learned only up to algebra, basic probability and basic geometry as the differentials and calculus was on the 11th and 12th class. And lot of time i am not able understand even small equations in articles related to crypto and others hence starting to learn it now.(35 but i understand the math now much better so started again from basics)
As long as you're (re-)learning math (which is a very good thing), you should consider dipping your toes into Lisp by doing some of SICP (https://en.wikipedia.org/wiki/Structure_and_Interpretation_o... note the complete text is on-line), which was designed for MIT undergraduates, who the authors could safely assume were fairly mathematically mature. It doesn't require any math I consider difficult, but it does use it freely. So if you do it, it'll reinforce the math you're learning, show you to some very useful, basic computer science, and incidentally teach you basic Lisp and functional programming.
Or along with Sedgwick's old algorithms book. Reading it at a fast pace will give anyone a good survey of algorithms. I read the Pascal version, and it was clear enough to pick up a fair idea of many things.
Since you are in India, the most sought after skill is Android/iOS development. ObjC/Swift, Java and Javascript is definitely good for long term.
Learn all of the above. If you hear about a language and it seems like it's significantly different from the ones you know, learn it. Learn all the languages.
He does not need to learn all of them if he actually wants to get paid.
You're right, but looking at the long term it helps to be as well rounded as possible. Short term you only need to know what's on the want ad.
Someone who only knows one or two languages is not worth paying.
You're doing it backwards. Find out what gigs are paying, what skills they require then go and learn them. No point learning Go if there are only Java jobs available.

On the other hand, if you're creating personal projects to monetise, use whatever you like/has the best libraries, etc.

I'd first ask myself where do I want to be: enterprise, freelance, community/FLOSS, ...? After that, it's not hard to make list of langs that are mostly used in these areas and personally i'd choose langs that are in more than one area.

Ok, this has one big flaw, it doesn't tell much about langs that are still in development (rust, go, ...), so keep that in mind.

(comment deleted)
My main language for the past 2 years has been Go, and I'm very happy with it (with the occasional Python and JS break). I would definitely recommend it for you, too. I've been on both sides of the hiring process and Go seems to have gained a lot of momentum, especially at companies you'd like to work for.
Learn several languages (you did). Dont focus on one but rather look at what the problem in front of you calls for. If there was one "best" programming language, why do we have so many?
From your list, Haskell. Rust and Go are trendy right now but there's no guarantee they will last (much as I admire Rust's design), whereas Haskell is old enough to have passed through the hype cycle and out the other side. (So has Lisp, but it's simply not popular enough, IMO).

Honestly you already have a language that's much more commercially viable: C#. You'll find it easier to make money by expanding your C# skills than with any of the languages you suggest. If you want to go functional then F# is a good companion language since it's interoperable with C#, so you can use small pieces of it where appropriate.

I recommend JavaScript. Finding contractor work should be fairly easy if you are able to build web applications. In addition, learn Node so you can write backends for those web apps in JavaScript as well.

When I was in school I focused primarily becoming proficient at Python, as I thought that was the language that would land me a decent career. Since I am mostly interested in web programming, I found myself building backends in Python - but always ended up still using a ton of JavaScript. When I switched my focus to being primarily a JavaScript developer, I ended up finding a ton of work and that is still the case to this day (5-6 years later).

    1. JavaScript
    2. Java
    3. C#
Everything else is niche, recommended by people drinking too much Kool-Aid.
Money wise, I would put Java first. It pays best of these. Not sure who wins between C# and JS on that front.
As long as you like maintaining 10+ year old systems.
> Everything else is niche, recommended by people drinking too much Kool-Aid.

Objective-C and Swift are niche? Apple has sold 100,000,000s of devices.

PHP is niche? Python is niche?

Be careful about writing in absolutes.

"niche" as in probably applies to a relatively small percentage of job postings overall.

Objective-C and Swift are obviously big in terms of absolute number of jobs available but I'd suspect still an order of magnitude smaller relative to the other three combined.

> Everything else is niche,

Niche isn't always a bad thing.

> recommended by people drinking too much Kool-Aid.

Sure, it's just because of Kool-Aid that people choose to use C, Lisp, Haskell, Python, Ruby, etc for projects instead of one of your blessed 3 languages.

Telephony (in VoIP) is mostly C/C++, then with a smattering of scripty stuff to tie it together in the UI. PHP, Perl, Ruby. Bigger places use Java and maybe a few on .NET. WebRTC seems hot, and the frontend would need JS in a browser, but in the backend... Despite Erlang supposedly being "made for telecom", I've not really seen it be used much. (Yes I'm aware some big switches use or have used it, just haven't seen it in VoIP much.)

If I were in the position of trying to get remote work in telephony, I'd start learning the popular open source packages in use (Asterisk, FreeSWITCH, OpenSIPS), read up on protocol SIP (SIP Illustrated is a good course, includes an annotated RFC) and get your name out there in the community (answer questions, post write ups, etc.)

There's a range of work from cobbling CRUD apps together around a telephony core, to fixing core code, setting up networks, etc. Telecom has a lot of legacy and complexity, and that means there's opportunity for people figuring it out. I've seen this happen: guy joins mailing list asking super newb questions. Fast forward a bit and now he's billed out as an expert. All self-taught and promoted.

You'd also need solid networking skills (which come in handy even in web dev; I'm annoyed/surprised that many "web developers" are unable to diagnose basic network issues with Wireshark). The material in a CCNA course should be a decent starting point, though don't obsess about learning IOS management.

On languages, if you're steady with C (you have a good idea how the machine works), and you've got a couple popular languages learned, I don't believe language will hold you back. Domain experience will compensate, and you can always learn new languages easily enough. Though I'd highly suggest picking up a functional language (I'm preferential to F#) for the much more powerful thinking it'll bring you. Ultimately, I'm unconvinced that picking up a hot language will lead to work in that language (hey, I just learned Go, hire me!). But demonstrating ability will show you off very well. For instance, Rust is hot, a great language, and there's still opportunity for write-ups on "I did $neatish_thing, in Rust", to get a fair amount of interest.

Otherwise if you really just are trying to bid on random contract work, others said it: adding the JVM/Java keyword is probably the best way to increase reach.

Edit: With 17 years IT, when you add programming to the mix, you now have the very hot "devops" buzzword which seems to be very popular.

Java, C#, JavaScript, and maybe Python are probably the best chance of steady work, since they are so ubiquitous. C or C++ for some domains, like embedded systems, drivers, and other heavy-duty systems work.

Learning the more esoteric stuff can be fun and can teach some interesting approaches to programming, but they are niche. Maybe more highly-paid jobs, but the availability is orders of magnitude lower than the more widely-used languages.

Not knowing anything else about you than that you are from India, and just going on the experiences I have had working with some Indian subcontractors, doing some Rosetta Stone English would probably be a worthwhile investment. It's mostly the tempo that seems to confuddle Americans.

I would learn all of them a little and just pick the one you enjoy the most. I did the same thing and included Scala and Clojure. In the end I pick Elixir and Erlang but I think you can pick the one you enjoy most.