I have become very proficient in Java, and am pretty good at C++. What should my next language be? I'm looking to learn something that will be useful in the workplace, when i get out of college, or something that is easy and fun to tinker with. I know we all have our little favorite language we like to hold up higher than the rest, but what is the one you would recommend most while trying to hold back your bias ;) ?
Python. It's a dynamic scripting language, implemented via C, and boy is it powerful. I often use it to supplement other code, automate simple tasks, and develop mock-ups of more elaborate solutions which I would develop in another language, because it allows you to code a lot with very little.
Eric S Raymond outlined in a recent blog post how Python has tripled in usage as open-source project language choice. It is increasingly popular and an apt addition to your toolset.
For marketability, I would recommend learning one of the .NET languages, either C# or VB.NET.
If you want to expand your horizons, pick up a functional language. They're becoming much more popular, but will help you learn an entire different way of thinking.
Market wise I would say C# or just learning the .Net framework all together
Java and C++, I would have to say C#. Seems like the next logical step to me, I really enjoy that language.
Personal preference though...
PHP - its got its flaws, but you can be a web wizard in no time.
Perl - Impress your peers with obfuscated code no one can read!
TCL - Readers choice for most underrated language.
There are 2 languages I could recommend, depending on which way you want to go.
For higher level languages, learning C# would be a definitely plus. C# is starting to gain widespread prominence in the workplace, so knowing it opens up your options a lot.
Learning x86 assembly language could also be useful, as it will better help you understand how things work from the lowest level. Also it's invaluable for reverse engineering and debugging code that interfaces with third party libraries where you don't have access to their source code.
Perl is great for many little tasks that Java or C++ are too heavyweight for.
I use it practically every day, and it fits very nicely into unix pipe commands.
RIA development seems to be getting stronger and stronger. I would learn a language for developing RIAs:
- C# Silverlight
- Flex/Flash
- Javascript/Ajax
Tiobe keeps track of language popularity if you'd like something a little more in depth: http://www.tiobe.com/content/paperinfo/tpci/index.html
For my own 2 cents I'd say C# is the way to go. It's good for web or application development, it's flexible, Object oriented, and there free IDEs for it.
And if you learn C# you may be surprised to know you almost know Java:)
Edit: It's also occasionally beneficial to go out on monster and just see how many people are hiring for the language you are considering, who those people are, and what they are paying:)
I have been having a blast writing iPhone Applications using Objective-C for the past two years.
As someone coming out of college, you can build apps for the iPhone where the total scope of the project is smaller than other platforms.
Obj-C is currently a very marketable skill.
Scheme, to expose you to a new way of programming. (Maybe F#; I don't know much about that.)
This falls into the "fun to tinker with" category, but you'll find experience with it to be very helpful down the line.
I'm surprised no-one's mentioned Ruby yet. That's definitely going to be my next challenge.
I suggest something as different as possible from Java/C++. This has both direct and indirect value: employers who are looking for programmers will see that you're not Just Another Java Programmer, and it will show you new ways of thinking about programming even if you only ever write Java.
In that vein, I'd suggest languages like Haskell, Prolog, Lisp, Erlang, or Self.
Since you only used imperative programming languages so far I'd say you should go for the long shot and learn a functional language next. Why? Functional programming will help you shaping your understanding of programming languages- and style.
So my recommendation would be Haskell or something alike.
JavaScript. First you think you're in C, then it gets weird. Closures, first-class functions, arrays that can hold multiple types at once. Functional programming. The home of JSON. It's like a carnival.
And it turns out that there are quite a few JavaScript interpreters out there in the wild. You're soaking in one now.
I have been using PHP professionally for the last 3 years, but I lean towards Python, Java and C#
since no one else has suggested it, Lua. It has very understandable syntax, tons of useful libraries, and is quite flexible.
looking at the tag stats on the sidebar of SO, questions on C# (approx 24750) far outnumber the next tag (.net, at approx 15600) . This might not be a good indication of workplace usefulness, but it does imply that there is demand for C# knowledge out there.
For me, Python is the one whose syntax is easiest to remember and most fun to play with.
SQL is something that will always be useful to know.
Erlang would be my vote for a functional language since it also addresses what will be an increasing importance of using multiple processors.
Hard to avoid the importance of knowing Javascript, too.
Ruby (on Rails) is great fun and so quick to work with. And coming from a M$ .NET background I enjoy the feeling of freedom I get from finally using opensource tools and platforms! Sure, it doesn't scale like the big boys (or so I am told) but it's perfect for weekend tinkering :)
JS
Since you're proficient with Java already, I HIGHLY recommend learning Groovy. It's kinda like Java++. 100% Java compatible - in fact, it is built directly on top of Java, but is super sweet. Then, check out Grails (ala Ruby on Rails conventions). You can thank me later.
If you want to make sure you're miserable for the rest of your programming career, learn Smalltalk. Because once you've worked in it, you'll be ruined for the "industry standard" languages.
- You'll be wondering why you have to cast a value when you know it's going to return the proper object.
- You'll wonder why it's so hard to change code while debugging and immediately try it in the same session.
- You'll hate how you can't pick up right where you left off the night before. I'm talking right in the middle of stepping through code in the debugger.
- And a million other things that this little language from the 80's does better than the "modern languages" of today.
C# and the .net Framework if you want to go the way of the Microsoft.
JavaScript is going to be your best bet if you want to do front end web stuff.
PHP is a good choice for free web development on the backend.
C#. Everyone loves C# (even the VB.NET developers lol), and from what I can tell, most of the web application developers are using it. It can be something that can make you money right off the bat if you can get some certifications online, or even a decent entry level job.
I'd say it depends on if you want to learn the language for your own development, or if you need to find a job - and then it could depend on where you live. When I was looking for work 4 years ago or so, I wanted to know whether I should learn C#/.NET or Java, since it seemed those were the two "languages" at the time that I saw a lot on job requirements. After talking to some consultants in the area, the consensus was, "If you want to work on this side of the mountain (Salt Lake City), you need .NET and C#. If you want to work on the other side of the mountain (Utah County, Provo, Brigham Young University area), you need to know Java."
To cut my post short, I use and love C# :) The choice can depend on what you want to develop for and who you will develop for. Either way, it's great fun to learn a new language. Good luck!
As I am currently living in the C# world I would of course suggest C#. I have to say that it is the most marketable language that I have ever taken the time to get proficient with! It is not a language that is limited to working in any one place either. It is not a web only language, a platform only language, etc. Once can just as easily build a web site, a server, a desktop, a windows service, a web service, etc. It is very powerful and has many features that make coding FUN and EASY. I have never been out of work with this language listed on my resume...even in the hardest of times. It is an ever growing and expanding language which leaves room for blogging, writing books, and interacting socially in various other ways (if you are so inclined). As many business are on the Microsoft bandwagon, C# is an easy sell. Many of the Microsoft products have been rewritten to work on the .NET framework which generally means that writing C# inside that environment is also generally easy. BizTalk takes C# in the form of inline scripts. SQL Server interacts with C# in the form of assemblies and can communicate with it directly via SQL (very nice). Of course there is the always nice aspect that C# can easily communicate with any other .NET language. And while C# can communicate with other non-.NET languages currently, the next version of C# (4.0) will be able to communicate even easier with external languages/objects by way of Dynamic Lookup feature (and new COM interop features). All of this not only makes C# worth learning...but exciting to be a part of! And did I mention that C# can be used on Linux platforms with the Mono project?
You should take into consideration what's popular in the city where you want to live. I would normally recommend Python as a good next language, but here in Brisbane there are 10x as many job opportunites if you know PHP. Join a few meetup groups and see which languages have a strong presence locally.