Ask HN: Which language to learn for long-term work
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 ] threadRust while promising (I use it heavily myself) still hasn't seen much industry adoption. I'm confident it will... eventually.
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.
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.
Go is the new C, for good and ill.
We're going to be stuck with it for decades. Might as well become conversant.
1+
> Rust should take over,
no </3
Out of those, would pick Go
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.
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.
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.
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.
Of the five you got there, I would go for Go. Or Clojure as a Lisp. Scala is also a good option.
Perhaps the most demotivational advice I've ever read :-)
"Learn javascript and clean up other people's mess."
Plus if you want to be a $200+ per hour contractor, this type of "mercenary work" can be really profitable.
http://thenextweb.com/dd/2015/06/16/node-js-and-io-js-are-se...
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."
What matters is the product you create and whether people will use it and/or pay for it.
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).
On the other hand, if you're creating personal projects to monetise, use whatever you like/has the best libraries, etc.
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.
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.
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).
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.
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.
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.
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.
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.