Return to

What programming languages should I learn?


I'm a beginner programmer, I've learnt a couple of languages already, but I want to learn more and I want to know what I should, realistically learn.

I currently have basic knowledge of:

  • Java
  • JavaScript/jQuery
  • HTML/XML (If you want to count these, I don't myself, but I know some do)
  • CSS/CSS3 (Also if you want to count this, I also do not)
  • ActionScript
  • VB
  • PHP
  • Python
  • Ruby
  • C#
  • Fortran
  • Haskell
  • C (Hello World sorta level)
  • C++ (Also Hello World sorta level)
  • Perl (Also hello world kinda stuff)
  • I will learn SQL, sometime this winter in uni

Is there anything else I should learn? - BTW. I haven't learnt the likes of fortran and haskell through choice, it's a part of my course at university, so is Java, but I had the intention on learning Java anyway.

I've also been learning OOP style programming, but this is the only type/style of programming that we're learning in my university, is there any other type of programming that I should start learning? What's the most common in the field of software/web development?

I think I would like to go on to do some sort of web development job, but I'm unsure, is there much of a difference between web development and software development?

Also are there more web development jobs compared to software development jobs? A web developer friend of mine thinks that there are more web development jobs out there in comparison to software development jobs, but that's one person.


I would really learn C++ and C

If you have mastered those two languages, then you will pretty much always have a job.

For web development you really do not even need to do any programming any more. So much of web development is now done with programs that will just auto generate code, that anyone can make a web page.

The problem with web development though is that you get hired based upon what you have done and not what you know. You need a portfolio of websites you have done to show to other people. So I would make 10 arbitrary web sites and make them as nice as possible. Then drive around and find out if any small businesses are starting up in your area. Go right up to them and ask if they need a website.

That is what a friend of mine did and he is now 26 and retired.

Fortran is damn near useless. IDK of anyone who uses it other than the scientific community who still has programs and models based on fortran from the freaking 90s. In large it has been replaced with matlab which is also almost useless to learn since the matlab job market is pretty small.

Python and perl are really good programming languages to learn, but I have not seen any job postings for python. At all. Ever. I could just not be searching for jobs right....but they do not make me very hopeful.

But there are tons and tons for jobs for C++, java, C#, and C.


Why not just dive into the best languages for whatever projects you're currently working on?


Assembly if you're a real man.


Java is excellent to get your foot in the door.

but overall, stuff to keep up with is,

  • C#
  • Java
  • C++
  • C
  • Javascript.

All of these are still relevant. especially java contrary to popular belief.


For web dev a working knowledge of CSS3, HTML5, Ajax and Javascript would probably be a good place to start (IMHO)


Totally, at least to know basic stuff, like how operations are handled deep down on the chip. You may just compile C (different -O<1,2,3,4> -S) to look at the human readable assembly and see how function calls and parameters are realized.

If you're interested in newer stuff, I would suggest Rust. It is in heavy development, but has very great features. When using Cargo it becomes easy and yet powerful because you can easily built test suits.


So...Depending on what you're doing and your goals, it may be worthwhile to focus on one language and learn architecture/design patterns (if you don't already know them) then go back to learning other languages. I'm largely self taught and as my projects are scaling up, I'm finding that getting stuff done in whatever language is no biggie. It's following clean coding principles and a pattern like MVP or MVC that's tough.


Has as @Kat said, Java is a great language to specialize in. People love to hate it however outside of game development, it is a very popular language when it comes to professional software. Its very fast compared to C to produce something while being supported on far more products compared to C#. The three languages I would recommend are Java, C++ and Lua for scripting.


it would be wise to learn few languages thoroughly rather than knowing a bit of everything.
you should focus on C, C++, Java, JS, and learn assembly for the lulz.


So there are 2 components to your question.
1) How do I figure out what kind of job I want to do later?
2) What skillset should I acquire to do that job later?

Thanks for listing out what your current experience with programming languages has been so far.

Alrighty. Regardless of what you will end up doing, you NEED to know C. C++ is a close 2nd.
A plethora of languages are based off or around C, not to mention you will need it at some point regardless of what you do.
1 or 2 scripting languages like Python are also going to be incredibly useful.
Now, from there on out it's going to be extremely important that you know what general kind of job you want to do.
Don't set out to do a job because there are a multitude of jobs in a specific industry.

That being said, Haskell, PHP, Ruby, and Perl are generally fantastic for just about any back-end stuff you will encounter. Personally not a big fan of PHP, but it's widely used, so it's good to at least be familiar with it.

Java and JScript are commonly (mis-) used for a lot of UI and front-end stuff. Not a fan. Websites are bogged down terribly.
Still, widely implemented (by idiots), so important to be familiar with their quirks (if only to know how to cut down on how much of it is being used).

I recommend reading something general like the Sedgewick book on Algorithms to gain a good understanding of all important fundamental aspects of programming, before specializing. There's a reason why it's been used for several decades to teach CS courses around the world.

If you can, see if any companies you would be willing to work for have a place where they have job-listings. Compare what job listings you are able to find for one kind of job over another.
Also see if you can get a meeting set up with someone from an HR department. I don't know how much of their work is covered by NDA's, but you might be able to get some good advice from them on the average "lifespan" of a certain position that they have observed during their career in the industry. That might be life-saving information.
For example, typical video-game devs only last 5 years before "burning out".
Find a relevant statistic might help you gain a better understanding of what to do.

The best way to figure out, however, if a particular job is for you, is to work on projects.
Vary what roles you have in a team.
Move around.
Gain some experience in working with others.
See what parts of a project are the most fun to code.
At the end of the day, it's a general understanding of coding principles and the ability to work well as part of a team that's going to help you get a job and be happy, and not how many programming languages you know.
Someone close to me spent almost 2 decades working for Microsoft, and he told me how important it is to have an adaptable and permeable skill-set when working at a company like that.

My best advice is to get to know 2 or 3 languages REALLY well, as the skills and knowledge will translate pretty well between any relevant language.


I myself would replace Java with something like Haskell or Perl. C and C++ can do pretty much everything that Java is used for, except do it more efficiently.


I've actually already started learning assembly stuff, is it sad that I find it fun because you have to make things like loops all by yourself. I've done some assembly stuff in uni too, but in reality, where would I use that? - I don't plan on working for someone like intel, but I could, so who knows.


I'll be sure to check out Rust, may become something more commonly used as time goes on, so I guess it wouldn't hurt to take a look! :)


I totally agree with you, but the only reason why I know a little of many is due to the fact that I've had to do some web development before now, and now that I'm in university, I'm using Java as the main programming language, I use Python as a quick scripting language to do some calculations on stuff like how efficient an algorithm is. I also tried to start learning C, C# & C++ before anything else and only now I realize that wasn't a great idea.

I do plan on focusing on Java, C#, Python, Haskell, etc for now. I've also learnt a fair bit of assembly already, I found it kinda interesting because you have no functions built in really, you gotta make most of the common functions yourself.

Some of the languages I've learnt without an option, like Java, Fortran and Haskell, that has been through university and web stuff, I've learnt that because my uncle owns a business and asked me to make the website for him. I also learnt web stuff in high school, the only languages I've learnt through choice have been Python, C, C++, C# & Perl. The rest has been learnt for some other reason or another.

Although I do think it's nice to have a basic understanding of multiple languages, just to add some variation to one's skill set. But I agree that it's better to master a few languages than be a novice at many.


Granted, but a lot of the time that extra efficiency is not needed on relatively modern hardware. A lot of business apps are written in Java / C# / whatever because C++'s efficiency is not needed-- the bottleneck usually sits in retrieving the data from the datastore.
Java, C# and these types of language are entirely relevent nowadays.
They don't serve the same purpose as C++, honestly.




i'm not really familiar with Haskell and Perl, so i guess so... but java is required for android app development, which also has lots of jobs.


I would still advocate people to use C++ alternatives where possible. Just because something works, doesn't mean you shouldn't strive to improve performance where possible.
Valid point about the bottleneck though.


Plus writing a software in C++ doesn't automatically mean it's faster. You have to actually know how to write high performance code.

You won't believe what kind of code some people is capable of writing. A well written and high performing Java or Python software is way faster than most of C/C++ rubbish.