views:

496

answers:

19

I am a newbie who has been programming for a few years. There are lots of programming languages for different purposes. While stating reasons, what would be a good set of languages to learn in order to be competitive in today's environment.

I'll try me best to tag this question properly as it's not direct programming question.

Note: After reading some comments. This is NOT what are the best programming languages question. C++ might be a more powerful then javascript, but which has a higher demand?

+1  A: 

Python! and C# (most jobs, unfortunately; not that C# is a bad language, but I wold like to see more competition).

Zifre
I would say that Java is much more job-generating than C#.
alamar
They are pretty close, but I see a lot of C#/ASP.NET around here, but it depends highly on where you are.
Zifre
A: 

i think you can try some Python, Ruby, PHP, Java, C, and then choose one you like best and go further with it. Nowadays some companies do PHP only, some companies use Java mostly, and some use only Ruby on Rails, so you touch a few, and decide on which one you'd like to go further. if you are good, chances are high that you will get good jobs no matter what language you use.

動靜能量
A: 

Python, Java (or C#), C, JavaScript.

Preferably in that order. That's the basic course.

Python because it's easy. Java because it features an enormous class library and teaches to use APIs. C because it's why it actually runs. JavaScript because you can't live without it in 2009, and it's last because you'll either be spoiled or wouldn't understand it earlier.

Yeah, don't do JS without a framework, take the Prototype.

alamar
For the JS framework, to be more explicit, you have the choice between Prototype.js or jquery.
Antoine Claval
Or MooTools, or YUI, or whatever.But Prototype is, first of all, a programming library.jQuery is, first of all, a DOM selection and manipulation library.And it shows, and he didn't ask to learn DOM manipulations.
alamar
A: 

There are as you said many programming languages. Different languages are used for different kinds of programming, and different languges are used by different teams/employers.

So, the answer to your question depends on "What kind of programming?" and "Which employer[s]?".

Even if I could tell you what the most popular language is, that still wouldn't answer which one would make you competitive: the language in which a person might be most competitive might be some relatively unpopular language, for which there's some demand but no or very few competitors.

ChrisW
A: 

At any given time you can take a look at local job listings to decide what is demanded. I would take a look at job postings where you want to work and see what's available.

Unless I want to travel to a major city, everything local seems to be ASP/.NET related.

Chris Bartow
+3  A: 

I think you'll have to decide this by field of application:

  • "Buisness" applications
  • Game programming
  • Web applications
  • Algorithmics / Mathematics
  • Database processing
  • ...

I think it's always a good choice to know a language with C-style syntax (C, C++, C#, PHP, Perl, Java) because when you know one it's easier to understand other languages of this kind (which are all very important).

As a script language, Python is relatively widespread.

Dario
Some of these overlap a bit like there can be some database processing business applications that are web applications like newer ERP or CRM systems at least where I work this is the case.
JB King
+3  A: 

Learn Objective-C, use Xcode, build the next best app on Iphone 3.0 and drive in a bmw convertible.

CodeToGlory
That wasn't very helpful.
Cecil Has a Name
+3  A: 

In the Windows world C# will be a good investment. It'll allow you to target client-side apps, server-side app and web apps (via ASP.NET).

For cross platform Java is a great bet. It's been around for a long time and has a great set of libraries that'll allow you to do pretty much anything you want. It's the cross platform equivalant of C#.

It's also good to know a scripting language. These days there's a lot to choose from, and without wishing to start a flamewar your best bet would be Python or Ruby.

Sean
+1  A: 

I would suggest making sure you cover all the major areas. Learn C for some basics that will help you out in other higher level languages. Learn a functional language like scheme even if it's for nothing more than the learning experience. Then of course pick up something OO like C++, or C# (depending on your desired field). Then pick up a solid scripting language like python or ruby, and if you plan to ever touch the web, pick up javascript too. If you plan to do a lot of web related work, consider c# or actionscript (for silverlight or flash, respectively) additionally.

That should give you diversity and a broad understanding that'll allow you to pick up just about anything else you'll need quickly and painlessly.

jess
+5  A: 

English and at least one more of your choice.

zilupe
Funny, but he did say programming languages.
Zifre
@Zfire: Well.. Visual Basic in that case :P
Partial
+3  A: 

In General I would say:

  • a scripting language, Perl, Python, Ruby
  • a "low-level" language, C
  • a functional language, Haskell, Scheme
  • an object-oriented langugae, C++, C#, Java

But it depends all on what one will do, e.g. in an science environment with a lot of math, it is important to know matlab or R; in a mac environment it is important to know Objective-C.

seb
A: 

Also try a language of diplomacy. Will improve your social skills.

User
+7  A: 

It's not clear what you mean by "this environment" or what you mean by competetive. It never hurts to know the currently popular set of languages, which might include C#, Java, PHP, and Ruby, for example.

If you want to get a good job and be competitive in any environment, here's what I look for in a potential hire:

  • Do they understand C, especially the cost model? Do they actually know what's happening with registers and memory when a program executes? If a person is claiming C++ rather than C as a basis for understanding how a program works at the machine level, can they explain what's happening with templates, virtual member functions, and so on?

  • Can they solve problems recursively? Can they solve problems without using mutable data structures? Can they solve problems by composing pure functions? Good indicators are success in a language such as Haskell, ML, Caml, or F#. Scheme, Lisp, and Clojure are also acceptable.

  • Can they use types to help understand and create programs? Good indicators are success in a language such as Haskell, ML, Caml, or F#.

  • Do they understand higher-order programming using either functions or objects?

  • Can they use a class library designed by others? Good indicators would include Smalltalk, Ruby, Modula-3, Java, or C#.

  • Can they actually design their own class hierarchy? This requires deep understanding of the programming methods used in Smalltalk, Ruby, Modula-3, Java, in C#.

  • Can they combine simple Unix commands effectively into scripts, using a language like sh, ksh, bash, awk, Lua, or Python?

  • Can they write good string-processing programs quickly, using a language like Lua, Icon, awk, Python, or Ruby. (I'm not a fan of Perl as it seems not to promote clear thinking among its users.)

So, to be a strong hire for my group you would have to know four kinds of languages well: C, a functional language, an object-oriented language, and a scripting language (with a bias toward string processing acceptable). Which language you pick is partly a matter of taste. My taste is toward languages that do one thing will (not hybrids like Scala or C++) because they force you learn a new way of thinking. I would recommend:

  • C

  • Haskell or Standard ML

  • Smalltalk (or possibly Ruby, if you erase the Perlish origins from your mind)

  • Lua

All four militate toward definite ways of doing things, and three of the four are leaders in power-to-weight ratio: small languages that do things very well. For the fourth, unfortunately there is no simple functional language that will also teach you to program with types.

Please keep in mind that these specific languages are matters of personal taste; lots of substitutions would be fine. What matters are that you learn powerful ways of solving problems by computer; the languages are a tool toward that end, not an end in themselves.

Norman Ramsey
These may be very good languages, but they're not very wide spread (except for C). Maybe you would hire someone who knows just these languages, but I think most people wouldn't. Employers usually look for developers who know mainstream languages like C++, Java or C#
Thomas Levesque
@Thomas: it depends *which* employers. Try Google, or Microsoft, or the best hedge funds... Employers who want more than just three warmed-over varieties of object-orientation will be looking beyond just C++, Java, and C#. Like Algol 60, Smalltalk is an improvement over most of its successors.
Norman Ramsey
However, s/ksh/zsh/
alamar
I have no quarrel with zsh, but "Paul's object in writing zsh was to produce a ksh-like shell which would have features familiar to csh users." I've always felt csh was an abomination, and I see no reason to cater to it.
Norman Ramsey
+1  A: 

Tiobe Programming Community Index might be worth a look from time to time:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

In their own words:

The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. The popular search engines Google, MSN, Yahoo!, and YouTube are used to calculate the ratings. Observe that the TIOBE index is not about the best programming language or the language in which most lines of code have been written. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system.

shanyu
A: 

C# is great ( you can use it on linux too with mono ) also ruby on rails and PHP and maybe F#

Yassir
A: 

Java or C# or C++. Those are the languages if all you are interested is to find a job inside a stable company.

For fun, there are a vide variety of language that might or might not gain more traction wrt number of jobs.

Now seriously, language is just an implementation of ceratain programming concepts. What you realy should focus on is to learn those concepts. In that case learning a language is just a matter of picking up synax and looking up its standard library.

Dev er dev
A: 

I would also suggest that any business application programmer learn some flavor of SQL with a strong emphasis on writing highly performant queries. There are very few business applications that don't heavily rely on database access.

HLGEM
A: 

What's missing from your question is what your abilities and desires are, where you live (and how willing you are to relocate), and exactly what you're looking for.

You can look at the various lists of job openings, or for that matter your local job board, to see where most of the jobs are. That's probably your best bet if you want to maximize the chance of getting hired right now (although you can get blindsided by competition - if everybody goes with that plan, there will be an oversupply for $POPULAR_LANGUAGE and it'll be easier to get hired in $LESS_POPULAR_LANGUAGE). This can also vary widely by locality.

It's no guarantee of a good salary, though. You'll be competing with the shallow end of the programming gene pool, and the salaries are likely to be based on that. Something less common but more technical is likely to boost your salary, should you be competent at it and should you find a job.

It's also not necessarily good for long-term employment. Where do you want to be in twenty years? If you stick with the currently popular languages, and aren't prepared to move from there, you're likely to be stuck with low salary and dull projects a decade down the road. You can learn more difficult and varied languages if you want to try to future-proof yourself.

If you have ambitions for a start-up, consider what you'd like to do, and what's best for that. In a start-up, you have to be able to do a tremendous amount of work, so you want efficiency, and you can use pretty much any language and environment you want, particularly if it's a web-based approach.

Also, realistically, how able are you? Can you master technical subjects and outshine your competitors, or are you rather average and hope to live within the herd? Do you love writing software, or are you looking for a well-paying transition to business executive?

David Thornley
A: 

You should know mainstream languages such as: C/C++, C#, Java, XHTML/CSS and SQL

Partial