tags:

views:

239

answers:

10

Hi,

I am a computer science student and currently finishing my bachelor - master will come afterwards.

I know Java and PHP pretty well and had oCaml in class.

So I am wondering what language I should learn next to broaden my horizon and if possible also to become a better/faster programmer, because I know what language gets the things done the fastest.

I am currently thinking about those languages:

I will learn C++ - I don't think anyone would say "don't do THAT!" ;)

I want to learn Python to be able to accomplish some throw-away scripting and file-manipulating tasks as fast and uncomplicated as possible, or even as an alternative to learning shell-scripting.

For Web-Development I currently use PHP or Java+Wicket. So is it useful for me to look into Ruby on Rails? Is the prototyping really that much faster than with PHP+Zend or Wicket? Or should I even look at Django instead of RoR?

So after that I am not sure of what I will benefit most:

Common Lisp (Or what is the most used Lisp-Dialect?), Haskell, F#, Clojure, Smalltalk?

I don't have a certain purpose for these languages other than to broaden my horizon and expand my ability to solve problems the most elegant way. So what language would supplement my current skills the most?

Thank you for your answers.

+2  A: 

I suggest Python and/or Tcl. Those languages are sufficiently different from C and Java to give you another perspective. Both also have GUI toolkits, so once you learn the fundamentals you can attempt some simple GUI programming without much extra effort.

Bryan Oakley
+1 Python. But TCL? :-)
Warren P
@Warren P: yes, Tcl, for exactly the reason I stated -- it's very different from many languages and will open your eyes to a whole new way of solving problems. I was tempted to say LISP, but it takes a while to grok LISP. Smart programmers can learn the fundamentals of Tcl in just a few hours (though it takes quite a while to fully appreciate how powerful the language is).
Bryan Oakley
A: 

From a Java background, I would suggest Scala as an introduction to a Functional Programming style but re-using several parts of the Java syntax and running on the JVM.

Wysawyg
Isn't Scala pretty close to OCaml?
Eric Mickelsen
Given that he says he already knows OCaml, another functional language like Scala would be more a change in syntax than a new style.
Jerry Coffin
+7  A: 

Learn C++. And when you're done learn more of it. Trust me, you'll never run out of things to learn.

navigator
C++ exposes you memory management (which is good) and some very subtle aspects of object orientation. I'm not a big fan of the type system it inherited from C, however. It all combines to be slightly overwhelming, but it's a superb language to learn.
Eric Mickelsen
Don't learn C++, except as necessary for job placement. To learn memory management, go with straight C; to learn OOP learn Java or C#. C++ has half of one and half of the other and winds up doing both poorly.
JSBangs
@JS Bangs: I don't see how you can learn C++ without learning C, and since the OO should come fairly naturally, why not? OO and the STL can make your life easier.
Eric Mickelsen
I think you should learn C before C++.
Warren P
C is a dinosaur. After you learn C++, you'll be able to do it, you'll just be annoyed that there's no STL and none of your objects deal with their own memory.
Brendan Long
@Warren: learning C before C++ has been discussed many times, nearly always with the same conclusion: doing so is pointless. OTOH, learning C++ does *not* teach you to use C -- although some C can compile as C++, well written code in one is little like well written code in the other.
Jerry Coffin
I'm with Linus Torvalds. We think C++ is useless. :-) If you want to leave behind ANSI C, leave it behind completely, and get yourself a real language. ;-) How's that for subjective and argumentative! :-)
Warren P
+3  A: 

To increase hacker street cred, try Lisp, Smalltalk, and (insert-functional-programming-language-here). (Squeak is a good place to start for smalltalk.)

To increase your value in the job market, C# and .net framework.

To increase your ability to do a million different things fast, use a huge library of extensions and libraries (such as Perl's CPAN) and be part of a very active community for your chosen language, try a very high level language, such as Python, Ruby, or Perl.

To live on the bleeding edge, try Google's GoLang.

To live in the past, try amazing forgotten languages like Prolog, or Logo, Fortran, Strongtalk, or Snobol.

To be a real hacker, to contribute to the Linux kernel, to be a real programmer in fact, you need to become a god of ANSI/K&R C, and the standard C language tools and libraries commonly used in open source projects.

Warren P
+3 for representing.
Marcus Adams
+1 for C# -- People will hire you for it.
Brendan Long
If I wanted to get massively down voted, I could also add, "don't learn C++". :-)
Warren P
A: 
  1. Any language (just learning the logic)
  2. C/C++ (it's useful!)
  3. Anything that you find useful (it's a matter of personal taste)
arthurprs
+6  A: 

While I've used different programming languages at different jobs, I've used SQL at all of them, so if you haven't taken the time to master SQL (and database design), spend some time on it.

Marcus Adams
SQL is for DBAs. It's not a programming language. :-) (Grinning, running and ducking)
Warren P
+1 for mentioning SQL, I almost forgot about that. Definitely learn that ShoX, for one thing because it's so useful, for another because it won't go obsolete on you so fast (and yes learn database design).
JohnB
yeah, I know SQL pretty well, except optimizing querys. But that's sth I learn on demand.
ShoX
Great answer. Regardless of what language you learn knowing SQL will help you out.
Ben Burnett
+1  A: 

ShoX,

You mention mostly open source technologies (except for F#), but you might also want to consider C# and ASP.NET.

You might also get more perspective by getting some real world experience before going back for your masters.

JohnB
Also, learning Regular Expressions is very useful.
JohnB
What advantages has C# over Java? Isn't it pretty much the same?
ShoX
@ShoX - C# relaxed a lot of Java's requirements, so you have more power if you want it, and it lets you interface with all of Microsoft's fancy new .NET stuff. Also it's more hyped than Java right now, so possibly better for getting a job. There are other differences, but I see these as the main ones.
Brendan Long
Well that question is a huge philosophical debate. A lot of it comes down to preference. But also, it comes down to what a company uses. Probably most enterprise companies are either mostly Java or mostly .NET, so you are somewhat limited by what you choose to specialize in (but there's a lot of stuff out there for both, so you're not really limited either way). One big difference is what OS you will use. With .NET, you have to use Windows (BSD an option for academia), which IMO is easier to learn than Unix. For Java you can use either one, but typically Unix.
JohnB
Well, I'm currently not looking for a Job, and if I know Java I think, according to your description, learning C# would be a matter of a week, so I think I will consider this when the demand is actually there.Thanks for your help and your comments!
ShoX
@JohnB: Actually, I'd look at it slightly differently: although there's little difference in the frameworks or languages, in real use the two are almost entirely different. Java is used primarily for server side programming, while .NET is much more client programming.
Jerry Coffin
@Jerry Coffin: well I'm not an expert, but I suppose that would be true if companies preferred Unix for their server OS, and Windows for their client OS. However, Windows comes in a *server* edition too!@ShoX: probably not a week, but yes they are probably more similar than any other 2 languages.
JohnB
Thanks for the heads up, I will keep that in mind!
ShoX
+1  A: 

If you want something bit more ugly try VB.Net and see how that goes. Just an idea that may be worth tossing out there to get away from some C-style syntax and see how that works for you.

JB King
Well, just to get to know a new syntax isn't worth my time .OoThanks anyway
ShoX
A: 

Based on your list, I would recommend picking up some OS scripting languages (shell scripting, windows batch scripting, maybe powershell), learning TCL (specifically expect, its a neat tool when coupled w/ OS scripting), Perl, and maybe even learning some .NET once you've had your fill of C++, RoR, and Python.

baultista
But is RoR worth lerning when I have python, PHP and Java at my fingertips?
ShoX
+3  A: 

Do you want to make 3D video games? Learn C, C++, Assembly, OpenGL, DirectX API

Do you want to make iPhone apps? Learn Objective-C.

Do you want to build websites? Learn PHP, ASP.NET, RUBY, C#

Do you want to design databases? Learn SQL.

As with most tech questions, the answer is, it depends.

I'll definitely agree with what someone earlier posted. If you want a job, learn .NET/C#. There are a lot more jobs for the Microsoft stack than anything else.

I'd also skip the Masters degree unless your employer is paying for it. It really won't increase your salary demands.

Jack Marchetti
read my question again, then it doesn't **depend** any longer.....
ShoX
Not quite, it still **depends** on what you want to do.
Jimmy
He didn't answer any of my questions...
ShoX
All you asked was, what else should I learn? And it depends on what you want to do.
Jack Marchetti