Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I will be a freshman next year who has programmed for about 3 years. I currently know Java pretty well, but I am looking towards the future. In order to be at the top of the job market when I am out of college, what languages should I learn in high school?

share|improve this question

closed as off topic by gnat, Thomas Owens Jun 29 '12 at 17:24

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

What are you going to study in college? – K.Steff Jun 29 '12 at 15:44
I plan on having a double major in math and programming – fr00ty_l00ps Jun 29 '12 at 15:47
up vote 4 down vote accepted

Who knows what is going to be the "necessary" language in 3 or 7 years time?

So, first, I will recommend you to learn languages that force you into new paradigms. You can use Seven Languages in Seven Weeks as an starting point.

Make sure that once you get the basis you go deeper into different programming paradigms: functional, object oriented, procedural (check wikipedia). The actual language is not that important.

Then add different concepts and techniques into your repertoire: design patterns (the GoF book is recommended), unit testing, requirement specification, documentation, ...

Learn about algorithms and data structures (This one to start with). Make sure that you understand about performance (speed, memory, hard drive).

Work with DBs. You can get MySql or others for free.

Keep an active account in top websites for programmers (like this one and stackoverflow)

Read software related news, to see where things are going, what is hot or not, and what is dead (i.e., don't learn COBOL).

And finally, make sure that you have something (or a lot) to show. What you will lack on experience on the marketplace you can overcome with your pet projects that show how good you are.

I wish I could give these tips to myself a few years ago.

share|improve this answer
Totally agree... I was worried about this some years ago and with some time I understood that foundations are more important than knowing languages, and so do personal proyects are... – pollirrata Jun 29 '12 at 16:02
Thank you soooooo much!!! This will be very helpful for me, as I have a problem with not spreading myself out enough. I never would have thought of doing DB stuff, because I was not anticipating that I would have anything to do with it. Again, thank you!!!! :) – fr00ty_l00ps Jun 29 '12 at 16:03
+1 Seven Languages in Seven Weeks. Its a great book to expose different paradigms in a concise, to the point manner. The only thing I would add would be to host your pet projects on GitHub or similar, so you have everything saved. I've been programming for about 15 years, and I wish I still had half the code I've written... – bunglestink Jun 29 '12 at 16:25
But learning Git is a challenge in itself, as I have tried learning it before (but quickly stopped) – fr00ty_l00ps Jun 29 '12 at 16:30

Well, you can almost certainly find a job if you know Java and/or C#. The thing is, in programming, demand for good programmers is way higher than the supply for them. This means that if you manage to become a decent programmers (very few people manage to 'emerge' from college as über-hackers) during your time as a student, you can find a job programming in almost any language. Which is very cool, because it means you can actually choose what language to learn and still not worry about job security much.

The two most important things to do while being a student are:

1. Constantly improve your programming-related skills
Doesn't really matter exactly what skill. Miyamoto Akira's answer has some very good examples.

2. Do NOT allow yourself to be overconfident
No matter how much good you think you are, chances are you've had no objective assessment of your skills. Therefore, it might seem to you that you know it all. Don't be tempted to think so. Programming is a huge field, and it gets bigger as you learn about it.

Also, check out these pieces of advice by Joel Spolsky (who is also the cocreator of the SE network):

  1. The Perils of JavaSchools
  2. College Advice
share|improve this answer
I am very aware that I do not know it all. You should see all the dumb questions I have in CodeReview and StackOverflow :) – fr00ty_l00ps Jun 29 '12 at 16:25
@CodeAdmiral Don't take this as a personal attack. It is general advice. Almost all programmers at some point in their professional career feel like they know it all. With a great deal of certainty, they're wrong, and they often need some reality check at that point. – K.Steff Jun 29 '12 at 16:53
I figured as much, but still, you should see the dumb questions I asked :) – fr00ty_l00ps Jun 29 '12 at 20:02

c# and Java are currently popular languages but there are more and more Ruby jobs around. I recommend doing a search on recruitment websites to see what the most popular jobs are. However, rather than concentrating on learning a particular language with a view to getting a job, I would recommend starting a 'pet project' to solve a particular problem or getting involved in an open source project so you have something to show prospective employers and make you stand out from the other graduate developers. Experience counts for a lot and you don't have to be in a paid job to gain experience.

share|improve this answer
So with what you are saying, is it better to make smallish things (like a basic encryption/decryption program), or to join some bigger project on, say, Google Code or SourceForge? – fr00ty_l00ps Jun 29 '12 at 16:04

Personal experience: Since internet is here to stay, the opportunities in web development and mobile apps are tremendous. If you chose to go this route, learn html, css, ruby/php, javascript, nodejs. Mastering these will give you the tool-set for the future.

share|improve this answer
A very valid point, but those languages seem to be ever changing, while, for example, Java just adds a couple features here and there in every new release. Does that have any truth in it? – fr00ty_l00ps Jun 29 '12 at 16:22
@CodeAdmiral - yes, java moves at a dinosaur pace. There are too many stakeholders and backwards compatibility is a primary goal, so new features are very slow to evolve. By comparison, C# is a very similar language, but has evolved extremely quickly during its time, much like ruby, php, etc. – bunglestink Jun 29 '12 at 16:28
@bunglestink I have looked at C# a little bit, but the conversion from Java to C# is not a fast one (Question #1: What the heck are namespaces???) :) – fr00ty_l00ps Jun 29 '12 at 16:31
@CodeAdmiral Namespaces are just a way to organize code to avoid naming collisions - almost the same as pagacke in Java – bunglestink Jun 29 '12 at 17:15

Not the answer you're looking for? Browse other questions tagged or ask your own question.