views:

1846

answers:

17

What would you suggest what will be the next choice of language that could benefit an engineer in his career utmost? I am a Software Engineer and almost everything I engineered is for WWW.

I have decided to learn a language and keep it learning parallel. I'm fluent in C# and JavaScript. But, apart from it I want to learn a language which would have a future in the industry.

Please, suggest.

I would appreciate if we use real stories in the discussion to make the decision more meaningful.

References:

A discussion on Haskell vs F#

Haskell and Erlang: growing up together

A: 

".NET" is not a language - it is a framework, a group of libraries.

If you are fluent with leveraging the .NET framework, then you should get proficient with either C# or VB.NET, either of them will be around for a very long time. Aside from those, commonly used languages are Java, C/C++ and Delphi. F# is the first (?) new commercial functional language in a very long time, it has a growing base of fans. Once you get proficient with one or two of these then learning new languages becomes quite easy.

But the reality is, it doesn't matter what will be around for a long time, what matters most is what is being used now. F# is not going to get you a long way in the immediate future, because there are not so many projects using it. But that doesn't mean you shouldn't learn it.

But you don't need me or anyone else to tell you all this, just take a look through your local job advertisements, they usually specify the languages and skills required. And often the required skills are not language based, they are technology based.

slugster
+8  A: 

First of all: C++ is not recommended. Not even by the experts. As one of the reasons for C#, the lead architects at Microsoft state: "C# was invented because C++ was too hard." There is no good point in torturing oneself is there? See the Visual Studio Documentary for background information.

For some hard job market data have a look at this website on language trends. It shows demand and supply for a number of popular languages. The advice: "Go away from Java (or well, from everything else for that matter) and start on .NET!" PHP might be a good choice, although PHP hourly rates are low.

If you want to learn a functional language I would suggest F#. Although the language has been released only a few years ago. I do expect F# to catch up. In the end of the day Microsoft always does. If you wish to learn F#, Visual Studio 2010 in combination with the free online book 'The F# Survival Guide' is a good start.

I believe that for a C# developer an investment in F# is a good choice. Three reasons: 1) it is a different language paradigm 2) leverage your existing knowledge of the (uninteresting) support libraries and 3) C# has some functional programming features that you might better understand after learning a real functional language. What I am basically saying is: learn F# to improve your C# skills.

Learning a new paradigm is a good thing since it broadens your understanding of computer science as whole. But also learn available tools, framework and libraries. Examples are: Microsoft Message Queue, Microsoft Enterprise Framework, ASP.NET MVC, code contracts, StyleCop/FxCop or unit testing/PEX.

Microsoft has done a good job with the .NET framework and C#. It has good performance; it is a multi-purpose language and there are continuous improvements. Even as important: the framework, language and tools are very well supported through an active community, books and certification. There is no need to run away from C#. The neighbor’s grass will not be greener.

One could criticize Microsoft for not being an innovator. Apart from its very first product , BASIC, it has never been. Not even with Windows. But one thing is for sure. You can also trust Microsoft to be Microsoft: a slow starter who is very good at catching up. If you are fluent with C# and the .NET framework stick with it and strive to become even better. Even for C# experts there is still a lot to learn.

Florian
regarding why `C++` isn't a good choice, it may also be good to point out is that `C++` was NEVER intended for web development, where `C#` finds the web very comfortable.
Carson Myers
-1 for "Erlang, Haskell, Python and F# are all functional programming languages. So it does not really matter which one you choose". You wouldn't say C++, C#, Java and PHP are all imperative languages, so it doesn't matter which one you choose either. And C++, Java, C# have much more in common than Erlang, Python, Haskell and F#.
nikie
@nikie: I agree. In the mean time I had already updated the text to reflect the fact that it does not matter 'from a learning perspective'. Erlang, Haskell, Python and F# all allow you to learn functional programming.
Florian
@Florian: It's still wrong. Python isn't a functional language, no more than C#. Learning Erlang teaches you a lot about distributed programming that you won't learn from Haskel while Haskel can teach you a lot about type systems that you won't learn from a dynamically typed language like Erlang. It's like saying you won't learn anything new in Java or PHP once you mastered C because they're all imperative.
nikie
@nikie: Thank you for your suggestions. It seems I was out of my league.
Florian
Python is definitely NOT a functional language. It have some functional sugar, but the programming style is imperative: do this, print that, etc...
Rafael S. Calsaverini
"As one of the reasons for C#, the lead architects at Microsoft state: "C# was invented because C++ was too hard."" - and yet Microsoft still has huge C++ codebases, and not just for legacy projects.
Pavel Minaev
+11  A: 

If you want to stick on Web development, you don't need to consider C++ or Haskell. C++ is a great language, but it has less relation with web development. Haskell is more and more popular, but there are few companies using it for web technologies.

In my opinion, Erlang is a good language to explore. Facebook chat is developed by Erlang. The chinese facebook xiaonei.com also uses quite a lot of Erlang. Erlang is very good at distributed applications, think about message passing between 100 computers.

Python has strength in web development, has a big community, and is very easy to learn.

I am not sure F# will be popular in web development. I use F# for most of my data analysis tasks now. I like the language very much.

Yin Zhu
you said Erlang would be a good choice over Haskell. Could you explain more?
Ramiz Uddin
@Ramiz Erlang is made for distributed systems, and is now used in a few large companies. It has successful stories in industry and has tutorials, books and documents. Until now I haven't seen Haskell has an impact on large web applications. Also Haskell does not support distribute computing as naturally as Erlang.
Yin Zhu
I would suggest F# for web development as you can unify client and server side code using quotations. See my answer for details.
thinkhard
Erlang is used in del.icio.us and facebook chat, for example.
Tobu
Not to mention tools like ejabberd and RabbitMQ.
Tobu
Haskell has success stories in industry, tutorials, books, documents and a huge open source community. It focuses on multicore parallelism and performance far more than Erlang, as well as emphasising tools for correct-by-construction software. http://haskell.org
Don Stewart
+2  A: 

Understand the concepts behind following types of languages:

  • Imperative
  • Object Oriented
  • Functional

Given that you understand imperative languages like C, the conceptual understanding of lambda and functional languages is the key to understand various languages. Erlang, Haskell are pure functional languages. Other languages like Ruby and Python are very expressive due to lambda expressions, closures and also provide object oriented features. You can pick a language like Ruby, Python which have state-of-the-art web frameworks and learn a functional language like Erlang, F#, Haskell or Scheme.

Chandra Patni
+28  A: 

As per the languages listed in the title of your question, Python would probably be the best choice.

There is a list of Python web development frameworks, and you can find a list of popular online projects using Python, as well as some more information about using Python on the web.

A few features you may find interesting (that actually sparked my interest in python):

  • Generators
  • List comprehension
  • Easy multi-threading
  • Function and class decorators
  • The with statement
  • List and dictionary unpacking for procedure arguments (I find this awesome)
  • Great built-in functions (enumerate, zip, map, reduce, etc.)
  • Extensive standard library (you will be used to this luxury coming from .Net)

The list goes on. Although C# can already do most of this, some of it is more verbose and more difficult, though not all of it (I'm not fluent in C# myself, I just know a couple of its features theoretically). Even better, Python is interpreted (quickly) so there's no need to re-compile every time you make a change. Similar to C#, Python is supported well on the web and on the desktop, with many libraries and frameworks supporting both kinds of development.

Aside from that, ASP.NET and C#.Net are some good options for web development as well.

Also, as much as everybody hates it, PHP is one of the most popular web programming languages in use, and there exist many frameworks to make PHP less painful to work with. A few: CodeIgniter, CakePHP, Yii, Zend and WASP found at PHP Frameworks.

It's always good to learn new languages, you can learn a lot more ways to approach the problems you run into. Lots of well-versed developers use idioms from other languages to make their language easier to work with.

However, you should be careful not to invest too much new time in learning languages that aren't going to benefit you at your job. If learning a particular language is going to benefit your productivity and increase the Business Value of your application(s), then go for it; otherwise it will probably be an academic exercise.

Over time learning a language and some new concepts here and there could greatly increase your worth as a programmer, however. But you should be more focused on using your current technology right, and getting into the new stuff when it becomes relevant to your job.

As for finding new jobs, sure, a long list of languages might help you. But what will help you more is being the type of developer that can quickly pick up any language you need to, while applying your experience in previous languages to make you even better in that language.

Carson Myers
+1 for recommending something far this guy, all others wrote more about what he shouldn't learn. Also, Python looks like a very safe bet and is not limited to Web.
Sorin Sbarnea
Perhaps you would like to say a few words *why* you think Python would be a good choice as a first/next (the title differs from the question) language. I have used it but would not use it out of choice in most cases. The cases where I might use it is to script java (or other) packages together.
paul
you're right, I'll add some more.
Carson Myers
+1 For the suggestions. Also in my humble opinion PHP is a good second choice!
daitangio
+6  A: 

Keep in mind the power of scarcity. Mastering PHP and/or Java and/or .NET may sound like a good idea if you just look at some popularity or language trend statistics or job advertisements with "the more, the better" attitude, but then you'll be having lots of competitors when looking for a job - and there's almost always someone better than you. But if you master something off the mainstream, for instance Erlang, Haskell, F# or Clojure, you'll be in a way better position.

It's like choosing between working at McDonald's vs. working at a software house. There are more jobs at hamburger restaurants than at software houses. There are also more people able to grill hamburgers than there are people able to write software, so grilling hamburgers is more popular than writing software. Grilling hamburgers may even be a more important skill: people can live without computer programs, but not without food. Regardless, this doesn't imply that becoming a programmer is an inferior career choice.

Joonas Pulakka
a better position if employers from mainstream-language shops see the value in knowing some functional languages, or if he can even find an Erlang, Haskell, etc. shop that will pay him more than a more mainstream job. There are lots of PHP/Java/.Net jobs because there are lots of PHP/Java/.Net developers
Carson Myers
imho, a "reverse principle" is at work here : if you become a mid-level competency C# programmer, with some mastery of Linq to Objects, to XML, to SQL, etc., I predict the chances of your finding work are much greater than if you become a mid-level competency programmer in "opportunity-scarce" languages like Erlang, Haskell, etc., where, imho, few positions available would require "guru-level" competency. F# : who knows, yet, what the future demand will be ? Ruby, Python look like "safer bets" for finding web-related programming work which, we suspect, will continue to be in demand.
BillW
Granted, this depends on one's goals. If one wants to be a mid-level competency C# programmer in a mediocre web dev firm, so be it. Safe bet so far, like being a mid-level competency "HTML programmer" and avoiding "opportunity-scarce" languages like Java was in the mid-90s ;-) My point is that *there is no such thing as safe bet* in the world of programming. So, better to be diverse.
Joonas Pulakka
A: 

I'd like to take the exact opposite view of Joonas Pulakka: if you learn Erlang, Haskell, F#, or Clojure (or any of the other more esoteric languages) then expect to not be able to find a job that leverages any of those languages directly. They're very outside the mainstream, so serious projects that use them are very hard to find (ie: only a few in the whole country). Erlang and Haskell don't even have the excuse of being "new" languages; it's unlikely that they will ever be commonplace.

However, this doesn't mean that you shouldn't learn these languages. They're all "functional" languages, and knowing a functional language in addition to a more-common imperative language will give you an advantage. ("Mainstream" languages like python, ruby, and C# are adopting functional language features all the time). Just don't go into the learning process expecting that you'll be able to score a job with that language right away.

Craig Walker
Just for fun - applying my hamburger analogy, you're suggesting that becoming a hamburger baker is better to *start with*, and then learning programming while grilling hamburgers gives you edge compared to other hamburger bakers. Well, why not :-)
Joonas Pulakka
Actually, I work at a gas station and am waiting for school to start because no software shop in my area will hire someone so young with no degree. I believe I have an edge over my co-workers because I can view many possible 'algorithms' in my job and pick the best one, as well as 'debug' the tills more quickly :)
Carson Myers
From what I understand Erlang is used a great deal in telecommunications, so it can be helpful, but not for web development.
James Black
It is true that it is hard to find gigs for Haskell and Erlang. Moreover, for the opportunities that _do_ exist, you will be competing against a group (though small) of functional wizards.
Michael Easter
@Joonas: Except that hamburgers and programming have nothing in common with each other, while C# and F# do
Craig Walker
Michael has a good point. The Erlang pond is small and attracts the big fish.OTOH, this isn't necessarily bad. Programming isn't a dog-eat-dog world; it's more like a team sport. You *want* to be working with the best and the brightest.
Craig Walker
A: 

If you want paying work, the I got one word for you. Java.

fuzzy lollipop
+1  A: 

I would recommend learning SQL at least to the point that you are able to distinguish a set problem from a procedural problem. It will make whatever other language you use so much better when you know the right way to use a database. It also looks good on any resume!

Andrew
In last few years, I hardly typed a procedure/query. The fact is it all to easy to do with IDE. The other fact is my work is not to bother too much with database stuff but little should be known.
Ramiz Uddin
+6  A: 

This (very frequent) question does not make a lot of sense to me. I really don't think it's that difficult to completely master 3 ou 4 different languages, be very fluent in some 4 or 5 more and get your way around a dozen of other languages.

Languages are not that different and if you master one proeminent language for each of the major programming paradigms (imperative, object oriented and functional) you'll probably find yourself able to read code in most languages. And I don't think it would take more than six months of intense study to completely master a language like C# or Python.

Every good programmer I know are able to write code effortlessly in at least 5 different languages and to make a short transition to any other language he needs, cause there is not that great a difference between languages within the same programming paradigm. Perhaps functional languages are a little more complicated in this aspect (it´s not that easy for a Haskeller to get accostumed to Scheme´s syntax), but still not that complicated.

Rafael S. Calsaverini
A: 

It's definitely Python. Readable, Scalable and a nice pet!

Marconi
+2  A: 

I would say that it all depends what do you want, this is an oversimplification so take it with a grain of salt;

You have two options:

  1. Steady income, boring job as part of a large flock of sheepgrammers in a large software house that provides half-assed enterpricey solutions for large companies.

  2. Fun job is start-ups and in companies that exist to make the world a better place or trying to create the next Google/Facebook/Twitter.

In case you choose #1; learn Java, .NET, Perl, PHP, Oracle, SharePoint, etc,. in case of 2#: learn Python, Ruby, Erlang - or even Go, Haskell or Scheme.

Kimvais
+1  A: 

OK look, Python is a completely awesome language, everyone who uses it loves it. But you have to keep mind the "real world roles" that languages fall into. Python's real world role is network programming. Need to do anything at the socket level and Python is your man. Python's failure to capture mindshare in the web framework world is something that's been blogged about a lot.

For the web: JavaScript is #1. You say you've got that covered, so moving on to server-side... Rails is honest-to-got legit now. My buddy at whitepages.com was one of the main dudes porting the entire public-facing site to Rails. My former co-workers who started outside.in use Rails.

I think Python is superior to Ruby but even so, for web work, nothing can touch Rails. Nothing. So learn Ruby. That's my advice.

darkporter
That blog entry is over four years old. A lot has changed since then; most notably, python-based web frameworks like Django have risen in popularity and acceptance
Robert Harvey
Nothing can touch Rails? Even *Django*? Django and Rails both have their relative pros and cons, but I think Django is at least *competitive* with Rails. Furthermore, what makes you say that Python's domain is *only* networking programming?
mipadi
A: 

There's a big difference between learning languages for the mind and learning languages to improve your market value.

Erlang and Haskell IMHO are not yet ready for prime time, and I'm not sure they ever will be. If you search for jobs that require them, you'll not find many.

In the list you proposed, C++ and Python stand out as commonly used languages.

I think that C++ is great and is very important for a well-rounded developer to understand , but it's tricky to truly master without day-to-day use. I don't see that much use for it if you stay in the domain of web programming.

Python, on the other hand, is a great language for scripting and rapid prototyping. You can apply it for automation tasks. You can apply it for some server backend prototyping, etc. It is also a gentle introduction to functional programming - You're not forced to use it, but you'll be glad to wield it when you can. I can see a lot of value in it for someone with your background, and it is also very easy to pick up. The web-based tutorials and documentation are very good.

Uri
Erlang has been used in real-time systems for YEARS, it is extremely proven and ready for "prime time".
fuzzy lollipop
I strongly disagree with "there's a big difference between learning languages for the mind and learning languages to improve your market value." Learning (and being able to solve problems with) languages outside the mainstream most definitely has a positive impact on your personal marketability.
James Moore
@fuzzy: I would still argue that outside that very specific domain it is not very practical. And yet I see people who are just core Java developers talking about Erlang as a "trendy" thing to learn.
Uri
@jamesmoorecode: I wish we could put it to a scientific test. Approach 20 hiring managers with OP's resume, and ask which extra item would be more attractive - a web developer with Python or C++ or a web developer with Haskell. The sad truth is that unless you're a senior developer, most junior-to-mid would benefit more from "mainstream" languages. It's very likely that the person screening their CV would not have even heard of these languages.
Uri
@Fuzzy: Just to be clear, I think Erlang is a great language. I just think that most folks looking to hire .NET programmers with an extra would pick that one as an extra.
Uri
A: 

I would suggest Haskell... I am learning it in my free time. I am really enjoying Haskell, just like how much I enjoyed learning and using C# for the first time 8 years ago.

BM
+1  A: 

I would suggest F#, the main reason being "F# quotations". The implications here are huge and I would recommend looking into this further before making some arbitrary final decision: http://tomasp.net/fswebtools/files/fswebtoolkit-ml.pdf

thinkhard
A: 

Erlang rocks! Because it is very supportive for concurency work.

rajendra