Ask HN: Absolute noob here, what programming language to learn to land job with?
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/skill has the best ratio of difficulty to master and application to land a job? PHP or Java or any other? Please help.
50 comments
[ 2.8 ms ] story [ 120 ms ] threadOne 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!
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.
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.
Unless you have something in mind just copy something or someone. 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.
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)
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.
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!
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.
https://tldp.org/LDP/abs/html/
https://www.gnu.org/software/make/manual/
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.
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).
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.
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.
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.
* 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 ...
Typescript is an excellent progression though.
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.
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 ;)
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)