views:

179

answers:

7

There are a number of threads discussing which language to learn next. However, these threads fail to take the tasks themselves into consideration. I'm curious what how the community feels about criteria for learning a new language. I see a few criteria:

  1. Your interest in a particular language.
  2. Your interest in a particular project.
  3. The benefit to your career of learning a language (i.e. practical vs. academic)
  4. Time investment to learning the language.

What criteria do you use? What importance do you put on each criteria?

I find that I tend to read about a language itself and become interested. Then attempt to solve a problem using this language, which is of course the age old problem of when you have a hammer everything looks like a nail.

Has anyone successfully become interested in a project (Open Source, etc) and learned the language in order to contribute?

+1  A: 

I learn a new language if I find a clear benefit in its libraries and frameworks that I cannot find in a reasonable amount of time in an another language's. This is why I learned WPF: nothing could be done at the time with a similar degree of ease concerning attractive desktop application interfaces. For a similar reason I learned Cocoa-Touch/Objective-C => programming for the iPhone practically imposed the language to me at the time I wanted to write something on the platform.

luvieere
+3  A: 

Boils down to three concerns. I've provided examples of each:

1) Will people pay me to use this language?

examples here: Java, C#, Ruby

This is about marketability and the market price of the skillsets.

2) Does this language improve my productivity/enable me to do new things?

Languages that prove themselves to enough people in this category might get promoted to the first category (above) and become mass-market.

Ruby - even if you don't find well-paid work in it, enhancing your personal productivity might help in your personal projects and boost your confidence.

Objective-C - again you might me keen to program the iPhone just for the coolness factor, or to be able to write your own personal apps.

3) Does this language enhance my education as a developer?

Smalltalk - Allows people to grasp extreme programming and advanced object-orientation considerably better than just about any other language.

Lisp - Opens up access to whole libraries of artificial intelligence literature and algorithms. It might be worth learning just to gain access to vast swathes of computer science material that's written in terms of lisp.

Self - to gain experience of some revolutionary UI work and prototype-based OO

cartoonfox
+4  A: 

Alan Perlis says it best.

A language that doesn't affect the way you think about programming, is not worth knowing.

So that's my criteria!

Jeff Foster
Alan Perlis said that as a Computer Scientist and an academic. Computer Science study is great, but most SO readers will also have to think about earning a living writing programs... ;-)
cartoonfox
+1  A: 

Has anyone successfully become interested in a project (Open Source, etc) and learned the language in order to contribute?

This is how most good programmers operate. Today's popular languages share similar abstractions and have minor syntax differences. So...

  1. First, find a good searchable reference
  2. Then start reading the code of your interesting project
  3. Figure out the part you want to modify
  4. Take it slow and use printf's or a single-stepping debugger
  5. Now you are ready to contribute your first patch
  6. The comments will be much more helpful then asking about textbook exercises

There is no more enjoyable way to learn something new, so good luck.

Devin Bayer
+1  A: 

For me there are two reasons to learn a new language need and interest.

In the first case I need to do something, usually for work, like "automate a command line tool and possible add a gui", or "convert xml data into a pretty web page." In these cases I make a decision based on the most practical approach.

  • How much better/quicker/easier is the new language than my current ones? For example automating a command tool is much easer in python than C++, so learning python makes sense, esp since a gui might become a requirement later on.
  • Am I likely to use the language in the future? For example is my xml data a small and well defined that parsing it with a DOM in C++ is easier than learning XSLT or is this just the tip of the iceberg for transforming xml?
  • Am I placing a fair burden on other developers in my team? Is it reasonable that everyone know this language to maintain my new code? I should only add a new language to an organisation if it makes strategic sense.
  • Am I choosing this language to fleshing out my CV, if this is the case I should not choose it for real work.

In the second case, it comes down to what interests me.

  • Maybe I think that it might be a useful language for our organisation in the future and I want to learn more about it.
  • Maybe everyone is going on about it and I want to see what all the hype is about, like Ruby-on-Rails, can I learn some new techniques from this that I can apply to my existing langauges? Eg convention over configuration.
  • Sometimes what interests me is a project an not the language or technology and then I might choose the language for appropriate for the new project, as if it is for work.
  • Sometimes the I am intersted in a new paradim, like functional programming so I look for the most interesting language to explore this in.
  • Sometimes it just looks like fun and it beats watching tv.
iain
+1  A: 

I read somewhere several years ago that one should learn a new different type of programming language every 2-3 years. This process simply widens your overall perspective on programming and design. My personal trajectory went something like this:

  • C programming language (the first one I learnt in College)
  • C++ (when I really worked on real life projects in industry, multi-paradigm language supporting object oriented programming, generic programming, procedural structured programming)
  • Python (great fully object oriented, dynamically and strongly typed, scripting language, I specifically used it to develop web applications (from the server side) )
  • JavaScript (the one and only language for developing great client side interaction in web applications, a prototype based programming language)
  • Haskell (the culmination of 20 yrs of research in functional programming, A lazily evaluated functional programming language)

Apart from them, good study of other smaller domain specific languages also helped:

  • HTML, XML, Latex
  • Restructured Text, Wiki markups
  • Design languages like Verilog, VHDL

Generally the guiding forces were the industry projects I was involved in. Initially they were guided by the seniors with whom I worked on existing projects. On starting new projects, I would typically spend time experimenting with different languages which could be better suitable for different aspects of the project. Some of these attempts failed, while others led me to choosing good tools for improving the overall productivity.

Whenever program performance is required, I now would choose C/C++. Wherever programmer productivity is required (like development of web applications), I would use Python / JavaScript combination. Haskell is still more for academic interest (for me).

A lot of it also depends upon the tool set, platforms etc. you work with. To keep the development costs low, I prefer mature languages with open source tools. Thats why I avoid ASP.NET, C#.NET etc. and go for Python. Cross platform development requires using C++ carefully.

Time investment is really a critical component. When introducing a new language in an existing group of experienced programmers, its a hard-sell if the time required to learn it very high. Python excels here.

Shailesh Kumar
A: 

Sometimes the criteria for learning is a new project you have been assiged. Take example an asp.net project written in asp.net 1.1 that is being upgraded to asp.net 3.5. For such a project you go from

Asp.net 1.1 Ado.net Javascript

to

Asp.net 3.5 Entity Frameworks Linq JQuery Asp.net 3.5 Web Forms Asp.net 3.5 MVC

Programming is a every changing area of study. Basic programming concepts don't change. How things are done does change. Job boards or magazines guide us towards the next great thing to learn that might bring us more money or make are lives easier.

Todays world has one learing wordpress, ruby on rail, visuals studio .net, flash, dream weaver, design patterns, test driven development.

Identify web or desktop first. Everything else will fall into place. Wrox publishing or apress books are a great place to start to learn. Each one starts you out from the beginning an lets you jump around in the learning process.

Chuckie