Ask HN: If you were starting your career today, which language would you learn? - pauloortins
======
mattquiros
I've only been working for two years so I guess my career has pretty much just
started, and I like the path I've (accidentally) taken to learning languages.

I met my first real programming language in college, Java, and I still
recommend it to any beginner. It's great for grasping OOP concepts,
algorithms, data structures, design patterns, and other problem-solving
approaches that you can carry on to implement in other languages. I did some
work in enterprise systems and Android during my first year.

Then I had to study Objective-C to make iOS apps, but I also picked up some
things about C and I'm actually reading the K&R book now to know more. I think
that C is a great language to learn after Java because it gives you an insight
of what the Java syntax hides from you, but does anyway in the compiler level.

The thing now is that I don't know what I'm going to do next once I'm done
with C. For me, I code because I want to build a product I can someday build a
company with, so I don't really have a drive to learn the open web stack in
depth (I already have mobile for front-end). I guess I'm just gonna go back to
mastering the algorithms and some maths. Or does anyone have advice for me
what to do next?

------
scheff
Javascript.

I started in Microsoft development and saw code that made me cry. I switched
to Java because developers with self respect wrote elegant code in Java. But
Java frustrated me because of the effort to result ratio; for the amount of
time I would spend coding and configuring, I had very little to show for it. I
like to build things quickly and see people interact with them heavily.
Javascript gives me both of these.

And it's becoming more adopted as the lingua franca of app development; I can
write server side code, rich client web interfaces, and native mobile apps
using nothing but Javascript as the coding language.

------
nmcfarl
All of them!

But as you probably want to slightly more concrete list I would go with
JavaScript, Java, Clojure, Objective C, Ruby, SQL, Prolog. In that list we
have a few of oo languages of varing purity, a few scripting languages, a
couple of logic programming langs, and a lisp. Something for the enterprise,
something for the academics, and something for the startups. Something for the
web, something for server and something for your desktop and phone. You'll end
up well rounded, and have a tool for most situations.

~~~
praguebakerr
Well rounded means often not focused because, only top notch developers really
grasp more skills efficiently.

Average developer will mix up everything and won't be able to work without
google search. Don't spend much time with learning JavaScript. Every monkey
now learns JS and do you know why ? because it's dead easy. JS leads to Front-
end development and that's often pain in the ass.

I vote for solid knowledge of SQL, Java and maybe Python or Ruby but don't
learn everything in one time. Step by step e.g. each year one new technology
or language.

~~~
nmcfarl
I completely agree with going one by one through list, and focusing on what
you're most interested in first (for whatever reason maybe curiosity or maybe
straight economics) maybe for years at a time. But I don't believe that being
well rounded is only for the elite or in stopping before you see the range of
possibilities. The hardest problems are usually solved by looking at them from
another perpective - and all of these languages gives you another lens to look
at things through.

And for that reason, I don't agree with skipping on low economic value
languages just because they don't make cash. JavaScript is currently a vital
part of the web programming ecosystem and if you are interested in that
ecosystem you should have a familiarity with it…

------
pedalpete
First off, it depends on your area of interest. Do you love data and want to
do some interesting algorithm work? Then I'd say go with Python or Java.

If design and interaction are more your thing, then go with
Javascript/HTML/CSS. Personally, I'd focus on Javascript as 271... mentioned,
doing front-end code gets lots of glory if you're making things beautiful and
engaging. But it also let's you focus on one language and bring that language
to the server-side with Node.js.

It lest you work with 'apps' in the app stores by using a packager like
Cordova, giving you the 'I have an app in the app store' cred.

It's becoming the one language to rule them all. There are great frameworks to
learn like backbone, angular, ember, etc. Learn to use d3 and learn to do some
cool stuff with charts. There is just so much you can do with the one language
and you can show it off!

I'm currently in the job market, and I've got a background in PHP, Rais, and
Javascript, but most of my coolest stuff that I'm most proud of was data-
specific internal tools and systems, so when people say 'show me your
portfolio', I don't really have much of one.

For that reason alone, I'd get into Javascript.

~~~
tommaxwell
As someone who got into web development only about a year ago, JavaScript has
been wonderful. When I began I was overwhelmed by the amount of frameworks I
could learn, but now I _want_ to learn them all!

I think some people underestimate the kind of work front-end developers. I
write Rails as well now, but I could be much better at JavaScript than I am
now.

------
tome
I wish I'd taken Haskell seriously ten years earlier.

My SML lecturer told us the quip that "Haskell programmers don't write
programs to run them. They write them to look at them and see how nice they
are." which is hilarious but far from true (it may have been closer to true
when he said it though).

------
ndesaulniers
In college, we started with high level and went low level. While I understand
this provides much more instant gratification and can be more intuitive, I
think I would have preferred to start at low level (though just about every CS
professor disagrees with me).

I would have liked to start with x64 assembly, then C, C++, JavaScript,
Haskell.

Assembly would show 1:1 what the machine was doing.

C would give you greater appreciation for portability and low level constructs
after knowing assembly.

C++ would give you greater appreciation for encapsulation, polymorphism, and
inheritance after knowing C.

JavaScript would give you more appreciation for portability, garbage
collection, a new object model (prototypical) and dynamic & loose types (loose
types can be appreciated more by novice programmers and lead to more bugs then
it's worth, though C is not exactly the strongest typed language), and intro
to functional programming.

Haskell for something just entirely different (though Lisp might be a good
addition here).

I guess it's hard to come up with a good curriculum because each language has
it's own unique benefits. All the appreciations I mentioned could ultimately
be realized going from higher to lower as well.

Usually your first language is the toughest to learn because you're trying to
grok the syntax and CS concepts. Once you have the basics down, learning
another language just comes down to expressing the same CS concepts in the new
syntax (thus is the notion of Turing completeness).

Ultimately, software is about expression. Certain languages are better for
expressing certain CS concepts than others. Pick the right right tool for the
job, and don't bash other languages when you haven't sat down with them to
take the time to appreciate what they're good at and why they were created.
Learning constructs unique to one language will ultimately help you express
yourself in every other programming language you ever use.

To answer your question, I'd say learn them all, or as many as you can in a
reasonable amount of time. Always push yourself to learn more about your
craft, lest you one day find yourself to be left behind in your industry.

------
praguebakerr
Enterprise Java or SAP will still give you good money even if you have only
few years of experience. Don't know if it's future but it's pretty safe
harbour now.

------
tommaxwell
I'll just provide my perspective. I'm a web developer, and have only be doing
it for about a year, so maybe I can't even call myself a "web developer" with
a straight face. Anyway, JavaScript was the first language I learned and what
introduced me to the world of programming. As someone who wants to be able to
rapid prototype and show friends the ideas I have, JavaScript is __perfect __.
I remember when I was first introduced to jQuery, I was so excited to keep on
learning more and more. The amount of flexibility JavaScript gives you to
build flexible, dynamic websites is outstanding. JavaScript seems to be going
through a renaissance right now in which frameworks pop up every other day to
help you accomplish all kinds of tasks.

At the same time, I don't think some developers give front-end engineers
enough credit. Backbone and other similar MVCs can be very difficult to
master, and I give credit to those who do. It's serious, but very quickly
rewarding, work.

------
27182818284
I'd probably learn all sorts about nanotechnology given I have a science
background along with my development background and there is an emerging
billion(trillion?)-dollar market for nanotechnology.

That said, strictly in the realm of development:

After having done Python+Django, PHP, and .NET(c#), JavaScript, etc, I'd focus
today on mobile or front-end development. Objective C and JavaScript. It is
_way more visible_ so it gets _more praise_ from strangers and coworkers and
the very nature of it means that you aren't usually working on legacy apps. I
don't get happiness out of rewriting old enterprise code. Some might say they
get joy out of fixing old problems, but I have had situations where 10 lines
of legacy code were reduced to 1 with an increase and speed and I just felt
sad, not happy. _shrug_

------
mathrawka
It all comes down to what your goals are... do you want to create a SaaS? do
you want to build large distributed systems? do you want to code an embedded
OS? do you want to get a job building internal/external web sites for a large
company?

You would be better off focusing on what you are trying to accomplish and talk
to people in the field and then asking them what tools they use and if they
could redo it from the beginning, what would they have done differently?

Also, some of the choices of your career have the toolset determined
already... if you want to get a job at an insurance company that uses PHP,
then PHP is the main thing you should focus on for now.

Also, languages are just tools to add to your toolbelt. Having many notches on
your toolbelt always fun and cool, but doesn't always help you with your
career.

------
j2d3
Do not choose a language first, and certainly don't make a big list and try to
learn each language on your list in a vacuum.

Choose a project, and then research the best language to do that project in,
and then learn that language by doing your project in it.

------
tptacek
C.

------
daliusd
Initialy I thought to write JavaScript but actually answer is "it doesn't
matter". I would investigate what I want to work and then learn best language
to solve that problem. I solve different problems using different languages
but basically I use only Python as helper language (e.g. to write helper
scripts, to automate something and etc.).

------
zekenie
What do you want to build? You'll get a lot out of something like
javascript... but if you really want to build an iPhone app, you're nowhere.
Having something you really want built is the best way to learn for me and
many people I've talked to about the topic.

------
sytelus
If your question is learning language for "career" it would almost certainly
be JavaScript.

------
dignati
I would learn Clojure. More and more major companies are picking it up and it
seems to be a workhorse which you can use for a long time. It's mature, has
advanced techniques for concurrency and is extremely flexible. It's made to
stay.

------
dhruvkaran
Learn the languages which are easy to keep in your head. Python, Go and
JavaScript. Then spend most of your time learning _techniques_, not _tools_.
Pickup some mapreduce, do a project with service oriented architecture, that
kinda thing.

------
cafard
"Learn" as in "learn first"? I would probably pick Javascript for its
ubiquity. But good programmers who know just one language are probably as rare
as accomplished musicians who know just one instrument.

------
zeckalpha
Lambda calculus.

~~~
praguebakerr
this is not language

~~~
zeckalpha
"Lambda calculus is an extremely simple yet Turing complete language, ..." \-
[https://en.wikipedia.org/wiki/Lambda_calculus](https://en.wikipedia.org/wiki/Lambda_calculus)

~~~
praguebakerr
...is formal system in mathematical logic

~~~
zeckalpha
The asker never asked for 'programming languages'. Someone could have
responded 'Mandarin'. Any language goes.

EDIT: Someone did!

------
yen223
Mandarin.

------
pauloortins
Why no one suggested C#?

~~~
dignati
Probably because it only works well on Windows. I know there are ports to Unix
but c'mon.

~~~
weavie
It does pay very well though, and you will never be short of job
opportunities...

~~~
EnderMB
Not to mention that C# is a fantastic language to use.

------
dome82
Javascript, Python, Clojure and C.

------
contingencies
Philosophy.

------
johnlinvc
English

------
FellowTraveler
D

------
ishener
chinese

