
Ask HN: Absolute noob here, what programming language to learn to land job with? -  crmax
Barelly making it out of high school, no real chance to land a college but will ofc try, but I see lot of companies looking for junior positions in PHP or Java in my country, and its very well paid.  What has coding language&#x2F;skill has the best ratio of difficulty to master and application to land a job?  PHP or Java or any other?  Please help. 
======
dilippkumar
When I have had to filter a pile of fresh collage graduate resumes to pick 2
candidates to call for a phone interview, I did not check for which specific
programming language they knew.  In my experience, most people pick up 80% or
more of their programming skills _at_ their first job. 

What always caught my attention when giving through these projects was any
project they had worked on.  The actual project didn't matter so much.  But
almost always, how well they were able to understand what they worked on
directly translated to their ability to present it in simple and concise few
sentences. 

Putting these pieces together - my advice is to go find something you want to
build and build it.  You'll figure out the best language, the libraries to use
and all the good stuff on the context of figuring out how to build what you
want to build. 

The only real skills I strongly recommend you learn:

\- git

\- Makefile

\- shell scripting

Bonus if you can run Linux on your primary computer.  You'll learn a lot from
just using a Linux box for daily use. 

Go build something for fun.  Write a text adventure game.  Write a Sudoku
solver.  Write a reddit bot to count how many times someone said
"wubalubadubdub" per day. 

At some point, you'll have to transition from fun projects to projects that
will look good on a resume.  Keep that in mind and don't get lost in the woods
and forget that you are on a mission. 

Happy coding! 

~~~
muzani
So far all the jobs I took, it was not knowing the language and picking it up
on the job.  First job: PHP, Yii, Java, Android (I had a C/C++ EE background). 
Second job: cobbling together the whole back end.  Third: JavaScript/Node. 
Fourth: Angular.  Fifth: Cordova. 

I actually crammed C# for two weeks for another job, but didn't get that one. 
In most of these jobs, it took about 1-3 days to start writing useful code. 

I guess you could come in with 5 years of experience in something, but if they
like you enough, you'll figure it out.  Skill in a language or architecture
also doesn't mean you have skill with the _code_ itself.  Like a language, the
best way to learn is immersion. 

------
WheelsAtLarge
I would learn Java first.  It's very easy to learn very poor programing habits
with PHP.  Yes, it's easier to learn but longterm it will be harder to move
forward.  Especially since developers need to continually learn new stuff. 

I would learn C first since so many languages are based on C and the move on
to Java.  You'll want to take shortcuts ,don't.  It's best you define a
structure on how you will learn new stuff from the start. 

Here's something to think about. 

I've learned that you need to set a schedule and get out of the house to get
things done. 

So, here's the actions to take:

1) Decide what you want to learn. 

2) Make a plan on how you will achieve it. 

    
    
      2a)Find a learning source
    
      2b) Define a project that you will create.  It does not have to be unique. 

Unless you have something in mind just copy something or someone. 

    
    
      2c) Set a deadline.  It should be relatively short.  1 to 1.5 months.  Don't try to learn everything.  

But make it a challenge. 

3) Find a place where you will study.  Not at home and it should have limited
internet access. 

4) Set a schedule.  Maybe, every day from 6 to 7

5) Set 1 day for study and the next day for action and review and work time on
your project. 

6) Follow thru

The big key is that you need to get out of the house and you need to keep a
schedule.  It's very hard to stay disciplined at home. 

~~~
crmax
I feel like I'm reading a cheatcode for life, is this even legal?  Thank you
very much for a very usefull info, will try my best! 

------
gtm1260
I would suggest Python first.  1 there are a lot people hiring python eng
right?  At least according to what I saw on s/o developer survey.  Anyways, I
think that it's a lot easier to become a productive python developer than a
java developer.  Python's syntax is simpler, and it's so much easier to tap
into all the libraries through pip than any kind of gradle build or IDE setup,
especially for a beginner.  I think this is important for any new programmer,
to learn the fundamentals, yes, but also learn how to use libraries and
quickly build new projects which is what may end up getting you a job anyways
right? 

------
saluki
What country are you in?  I would check your job listings and see what is in
demand.  Do you know anyone who is a developer.  Finding a job usually comes
through your network.  So see if anyone knows a developer or works at a company
that might hire you. 

I would lean toward Rails(ruby) or Laravel (PHP). 

Those are frameworks.  Laravel might even be more in demand now and easier to
get in to. 

If you're just getting started learn some HTML and CSS.  Head First HTML and
CSS is a good book. 

Next they have a Head First PHP and MySQL book that is good. 

Once you completed those start building some simple apps on your own.  Sign up
for a basic hosting account and learn about setting up a domain, pointing the
A record to the server, etc.  FTP the files up. 

After that signup for Laracasts.com, there are great tutorials, sign up for a
Github account, start going through the courses on Laracasts. 

I would recommend using a macbook if possible, or start saving up for one or
see if someone can pass a used one along to you, it just makes the tutorials
easier.  When I've tried to use windows in the past it's possible but seems
like you run in to windows only issues that take hours to resolve on a regular
basis. 

For hosting at this point go through the laracast tutorial on Forge, it's a
server setup/deployment tool, it makes setting up droplets on Digital Ocean
for Laravel super easy.  If you're just learning you could sign up for a trial
and just learn how to spin up the server, you could still ssh in to the
droplet and deploy with the command line after you cancel your forge
subscription. 

So going through these steps you should have a pretty good handle on setting
up websites and starting to develop web applications.  You'll probably still
need someone to recommend you that knows you and works at a company. 

Good luck. 

------
sixQuarks
I finally learned how to program at the ripe old age of 42. 

I would advise you to start with HTML/CSS first if you don't know that.  Then
Javascript - because javascript is used everywhere now. 

Best intro course to javascript: Many people will tell you books like Eloquent
Javascript is the best, but that book will confuse the hell out of you if
you're a complete noob.  Sure it's great once you get a handle on things, but
it will be frustrating to try to learn from it at first. 

Here's the best intro course: [https://watchandcode.com/p/practical-
javascript](https://watchandcode.com/p/practical-javascript)

Then after you get a hang of it, I recommend Udemy courses by Colt Steel.  You
can start with the Web Developer's Bootcamp:

[https://www.udemy.com/course/the-web-developer-
bootcamp/](https://www.udemy.com/course/the-web-developer-bootcamp/)

This is basically what I started with

------
reyntime
SQL.  From what I can tell it'll be around for a long while, and so many
companies require skills in data extraction and analysis.  Not to mention that
most apps built with a front-end framework will usually interface with their
database using an SQL-like language.  Data underpins most of the value in tech;
learn how to manipulate and analyse it with a language like SQL. 

------
phynax
Personally I’d go with JavaScript, easy to learn ( lots of online courses )
and if you learn something like react / angular you will be pretty well sought
after. 

Source: I’ve been a web dev / CTO for the past 15 years and this is what I
really need right now. 

Your likely going to be working on webapps and not desktop apps though. 

~~~
phynax
Oh and pick something that interests you and make a personal project out of
it, use this as your portfolio - extra credit if it solves a real world
problem and you can get this across in an interview, a programmer with
business sense is worth a _lot_ more than one without ( to me anyway )

------
eldacila
I'd suggest you make a spreadsheet with as many job postings on programming
that are near you as you can find (this shouldn't take longer than an
afternoon), and learn the most listed language if all you want is to get an
entry-level job

if you want to get better and better, you should keep learning other languages
(1 every 1 or 2 years should be good enough), knowing 1 language in every
paradigm will get you to think about what is possible in other languages, and
satisfaction of knowing something new :P

I personally would recommend Python + C to get something high level that can
get you to be productive fast, and something that makes you understand that
goes into making that at a lower level (without going as low as Assembly), and
I think both are good options because they're pretty much here to stay (you
might hear some say that you should focus on more modern stuff than C, but
there's a pretty good reason it's still here, it works, and it is fast)

and then learning stuff that'll feel weird, LISP, and Prolog, (if you go with
this suggestion, when you "finish", you should be 4~6 years in, so try to
learn other stuff along the way, like SQL, shell scripting, fundamentals of
files and processes, networking (how it works, not necessarily implementing
it), software architecture, etc.  but focus on what is interesting and useful
to you)

------
PinkMilkshake
I'm not a Python programmer, but I was also looking in to this and Python
always seemed to me like the biggest bang for your buck.  It's used in so many
different fields, is simple to get started with, and there are plenty of
Python jobs.  At least there is here in Australia (not sure where you live). 

~~~
nickthemagicman
I would learn Python and linux/ bash scripting and then move into some cloud
certs. 

------
jlawer
Focus on the area your interested in, if your going to try and teach yourself,
then being interested in a topic is worth a LOT more then the hot language /
framework as your going to be easier to master if your interested in what your
doing. 

If you have an artistic side, then front end web might be interesting, learn
Javascript and either Angular or React.  Entry bar is fairly low, and if your a
visual person you can quickly see the results of your learning.  There are
always marketing agencies and similar that need web work done. 

If your more analytical and less artistic, pick a language that works in the
domain you want to work in such as:

* Swift for iOS or mac development. 

* Java / Kotlin for Android

* C# for Windows Apps

* Shell scripting / Powershell / Python for System Automation

There are a heap of languages that work well with back end web development
(PHP / Ruby / Python are popular). 

------
t312227
imho. 

* java - it's very heavily used in enterprise and somehow becomes "the new cobol" \- jobs may be often a bit boring, but they pay :)

* kotlin - mobile/android development and integrates well with java

* python - used everywhere from scripting, webapps, ml to hpc; lots of good libraries around ... even if they are often just wrappers around fortran/c code a la scipy/numpy

* c - yes, c ... because its the "workhorse" of system/embedded programming; simple and you get full control over your system

* javascript - because its everywhere nowadays ;)

* why not php!?  personally i used php since php3 (!)  and still use it for quick projects / the occasional webpage where a static site-gen is not enough, but i avoid jobs using/announcing php, because those projects are often utterly crap ...

cheers v.

ps.:  don't forget to learn the language-specific tooling ...

------
ncw96
I wouldn't say any programming language is particularly easy to learn.  Your
best bet is to start out with one language and stick with it.  PHP and Java are
both solid choices with plenty of great books, tutorials, and videos available
to help you learn.  I would also throw in JavaScript as a popular language that
will open the door to a lot of potential web development jobs. 

One of the best things you can do as you start learning a language is to find
some project that you want to build and start working on it.  Having a clear
goal to work toward can help the learning process.  Then, you can post the code
for that project on GitHub, which many companies will look at when considering
you for a job. 

Good luck! 

~~~
crmax
Thank you for the useful reply, and I agree the best way to learn is find some
project to work and learn on, nad it would form a nice porfolio as well, but
the thing is, I dont really have a passion for a coding/programming, I'm
looking into it just for the money, as I stated my situation in the post, I
know thats pretty bad approach, but...

~~~
dragonwriter
> Thank you for the useful reply, and I agree the best way to learn is find
> some project to work and learn on, nad it would form a nice porfolio as
> well, but the thing is, I dont really have a passion for a
> coding/programming

That's fine.  You don't need passion to do a project (you can do it just
because it's the best way to develop marketable programming skills, and you
want to make money programming), and if you are motivated by passion in a
programming project it can just as easily be passion for the application
domain as passion for programming. 

------
lactobacillis
Identify companies you want/can potentially work for.  Find out their skill
requirements.  Contact them directly - it is worth a shot. 

Generally though, and in my neck of the woods - Java is very widely used.  So
is .Net (mostly C#), Python and JavaScript. 

If I had to start again like you, I would go hard on Python first.  It is
relatively easier, and there is also the great potential to build your own
apps with it.  Potential employers are easily impressed with personal projects. 

------
a-saleh
I would look at several things

1\. junior positions available (you already did that)

2\. local community/meetups available (bonus points if you have friends that
could tutor you)

3\. other paths to tech companies (i.e. have seen people starting as manual
testers/doc-writers/L1 support, transfering later down the line to more
technical positions, but not every org supports it)

Despite the bad rap it has gotten in its early days, PHP is fine and if you
can learn it, you will be fine.  Laravel and Symphone frameworks are used to-
date and there still is a vibrant cottage-industry around wordpress-plugins. 

Similarily, I know people that only know C# or only know Java and they get by
just fine. 

On the other hand, once you learn your third language and maybe expand to some
more niche languages (i.e. I remember when I finally learned SQL, or dabbled
in Clojure for a work project) you will realize it is not about the language. 

I am not an expert at any of the languages (and somebody payed me to produce
code in at least 8 of them) but I can manage and the pay is good :)

Not saying you should be jack-of-all trades, master of none, but if you are
anxious about choosing your first language, I don't think it is as big of a
deal in retrospect, as it might seem to you ;)

------
muzani
There's a lot of good ones mentioned here.  But I learned PHP in half a day,
coming from a C background.  JavaScript took several weeks, mostly because I
had to unlearn C syntax.  Java took a month, on the job, but it wasn't too bad. 
So I'd actually recommend against spending time on PHP, unless it's something
like Laravel. 

------
probinso
stan, prolog, elm, and neo4j

Your likely to get a lot of bad language advice here.  Different languages
solve different domain problems.  The term "Full Stack" is often thrown about
to describe using a series of languages in cooperation to solve a contiguous
product.  Most likely you should have basic familiarity in a database language,
a server side language, and a front end language, or pick a simple framework
to learn. 

Other domain stacks exist, that may differ in their supporting technologies. 

There is a lot of good advice in this thread for using free online course
material to start out.  Find something that overlaps with the sort of jobs that
you find interesting, and finish any project that is relevant.  Then you can
re-asses the technologies. 

------
nidhalbt
I'd suggest [https://lambdaschool.com/](https://lambdaschool.com/) or
[https://www.freecodecamp.org/](https://www.freecodecamp.org/) These platforms
not only provide programming training but also culture and broader context. 
Knowing language X or framework Y isn't everything, that's why in interviews
people ask questions like "what happens when you open a website".  There's
value in studying the "stuff that kept you up countless nights at college but
you will never use at work" because it changes the way you think and helps you
fit better. 

------
throwawaynovice
After several failed attempts to start learning programming, I'm in a similar
situation. 

I want to be able to build useful stuff on the web, so that seems to point to
learning Javascript: you can program the backend and frontend of your app in a
single language.  However, I did not like learning JS at all. 

I've now started learning python (which I like more than JS), thinking I could
probably use Flask or Django to build the things I want to build.  But once it
comes to building the frontend it seems I will inevitably fall back to having
to learn at least some JS, which takes me back around to "why not just learn
JS only". 

The above is kinda rambling, but I guess I'm just looking for advice as well. 

~~~
visarga
Python and JS are a good combo, don't mind learning two languages at the same
time. 

------
collyw
There is no getting away from JavaScript these days, so you might as well
learn that and HTML / CSS. 

You will probably want to learn a backend language as well (you could use
JavaScript there as well, but there are better options). 

If you see yourself being in a more corporate job I would suggest Java (this
will likely be more stable but boring). 

If you see yourself in a more startup role (less organized, probably more
interesting, probably more frustrating) Python is a good choice. 

------
oswamano
free code camp [https://www.freecodecamp.org/](https://www.freecodecamp.org/)

has a pretty good web dev course.  Not sure what kind of jobs are around you
but i'm sure a number of them are web dev.  Personally I think python would be
a good first language on top of that, but if you think the market likes php
and java, I'd pick java out of those two (I like C# better than java but I
learned it because that's what is popular where I am)

------
willcate
Either of those skills will serve you well.  PHP was easier to learn for me, &
I suspect same for most folks. 

------
elmolino89
Grow a beard and learn COBOL. 

More seriously: there are bunch of niches in the market.  The fact that there
are hundreds of open positions for X can also mean that for every job you will
compete with a herd of ppl who learned X badly in a week. 

------
ezoe
Whatever languages you choose, the chances are, you probably won't use that
language 10 years later unless you're maintaining the 10 years old software. 
So learn anything you think its interesting. 

------
martinmartinez
Python with a bias toward data visualization.  Working with CSV's (Jupyter
notebook, Pandos).  Java for software engineering. 

~~~
visarga
Pandos ;-)

------
slipwalker
my 2 cents, check this: [https://github.com/kamranahmedse/developer-
roadmap](https://github.com/kamranahmedse/developer-roadmap)

------
bnolsen
golang might get you where you need to go as well.  It's not a perfect language
either but it seems to be less of a foot gun than python and golang is
absolutely a better applications language. 

------
Learn2win
Rust

~~~
aldanor
Well, why not indeed. 

Pros:

\- you get a good glimpse of both imperative and functional language worlds;

\- you get to practice using low-level data structures;

\- you get used to thinking about concepts like ownership (on a higher level)
that are applicable to other languages;

\- you get used to consistent code styling that would look appropriate in
other languages;

\- chances are whatever popular language you learn next will feel like a walk
in the park. 

Cons:

\- it is not an 'OOP' language;

\- Rust is highly addictive and contagious;

\- chances are whatever popular language you learn next will feel lacking
compared to Rust;

\- actually landing a Rust gig would be extremely hard. 

------
davecheney
Java

~~~
sumosudo
You are probably a manager ;)

------
ThePower
Typescript, the only really future proof language

~~~
howlinbash
That's a good shout, but you should definitely start with vanilla JavaScript. 
It's almost akin to learning English. 

Typescript is an excellent progression though. 

------
aichbauer
JavaScript

~~~
aichbauer
I think you can land a job with any programming language ;) Just start
learning the basics :)

------
pyuser583
Python. 

------
3PercentMan
C++ for sure.