views:

461

answers:

17

Hi, I am programming with C++ and C# for over 3 years. Currently I'm having a good control over these language (and the .net platform) and I am getting pretty professional with them. The problem is that I sometimes feel like I have to know more languages, each time I am getting into stackoverflow and I see questions regarding all those kinds of different languages like: Ruby, Python, Lisp (etc.).

metaphoric speaking Begin

I am feeling like there is a Huge happy world outside of alien languages that celebrate together every night, going to clubs, drink beers... And only I am missing the party.

metaphoric speaking End

So I am currently at a point at which I want to decide what would be the next thing I want to learn as a professional developer. I would like to have some advice on what kind of language is a good one to learn.

Please don't give me comments like:

  • You should learn the Java because... (Java is not a different kind of language other from C#/C++ which I know)
  • You should learn Ruby because it is cool and it has lot of features and cross platform and you can shoot laser from your eyes using it (well, those kind of answers actualy tell me nothing because those answers do not explain to me how my work may be practically affected by knowing the language).

I want advice that is related to the PRACTICAL BENEFITS of learning a language. By the way, an answer telling me I don't really have to know another kind language is also accepted, but please explain why (again, give me a practical reason).

+13  A: 

Learning a functional language, or even one that makes functional idioms easy, has practical benefits. Functional programming is a different method of solving a problem from the procedural programming most people are familiar with. Learning new methods can make you a better programmer, for various professionally-useful definitions of "better".

Anonymous
I absolutely agree: many things that are absolutely normal in functional programming languages can be very useful when applied to OO languages as well. And OO languages slowly gain some functional aspects as well ...
Joachim Sauer
+5  A: 

There seems to a shift of focus towards more functional languages so you could give one of those a try. F# runs on the CLR so that may be a good choice.

Practical benefits:

  • It's far better suited for writing parallel programs than C# for example. Considering the fast increase in the number of CPU cores this can be very practical.
  • As already mentioned in another answer, it offers you a new way to solve problems that you may also be able to use in your C/C# applications (considering C# has become a more functional language since lambda expressions were introduced).
Ronald Wildenberg
+15  A: 

Yes.

If you're a C++/C# developer, a good language to have under your belt would be a scripting language.

Practical benefit: You may have one-time tasks (backing up some files, batch renaming) which you may not want to write a full-blown application using object-oriented programming. With a scripting language, it is generally faster to write simple programs which perform simple tasks.

coobird
Chosed this answer only because I had to chose something. There are some good answers besides of this one.
+10  A: 

One good reason for learning another kind of language is that it exposes you to a different way of thinking. As a C# developer myself, I've recently been dabbling with F# and had a first exposure to functional programming. F# isn't a purely functional language; it's a hybrid of imperative and functional idioms. However the functional paradigm (immutable variables, piping results from one function to another) is significantly different from the imperative style of C-derived languages and shows you a different way to solve problems. Even if I don't use F# in my day-to-day work, I expect that the new techniques I have picked up from learning the language will influence and enhance the skills I use for my mainstream work.

pmarflee
+2  A: 

If you looking to expand then I would make the recommendation of trying out the world of web development.

The sort of technologies i would recommend you take a look at are ASP.NET/HTML/CSS/JavaScript/JQuery/AJAX

The likes of HTML/CSS/JS are fundamental in learning web development, with the likes of JQuery/AJAX giving you the ability to develop rich, visual, user interfaces. A technology like ASP.NET of course gives you the building blocks to create business/data layers within your web app.

Practicle Benefits

Web based applications are becoming more powerful and new and better development tools are continually appearing on the market to help you create them. Having the versatility so that you can develop web based application or standalone applications is a huge feather in the cap, in my book.

kevchadders
+1  A: 

I would greatly advocate learning Ruby. It is a great scripting language and knowing a scripting language makes automating repetitive tasks a breeze, freeing your time for more "real" development.

Also, as a ASP.NET MVC web developer by trade, knowing Ruby and playing with Rails gave me a lot of ideas of features I want to implement and also gave me a different perspective.

Every developer should have one main language, but the more languages you can learn, the better you will understand your own.

Garry Shutler
+2  A: 

You'll find lots of suggestions for why you should learn other languages in this question: http://stackoverflow.com/questions/362226/whats-your-next-programming-language-and-why

Brian Rasmussen
+1  A: 

learning a new language can benefit you in two ways:

  • you could do new things: e.g.learning a scripting language such as javascript lets you do things on the web in a very different and more responsive way, and take advantage of using libraries on top of it like jquery makes you go far beyond what classic ASP.NET lets you.

  • you start thinking differently.

pomarc
+5  A: 

Learning different languages exposes you to different concepts for which those languages tend to encourage.

For example, Haskell for functional and formal correctness, Lisp for various reasons, Ruby for learning about how "Blocks" can be used and learn how passing in a "block" of code can lead to rather novel and elegant designs - erlang for exploring massively multi-threaded applications, and so on.

The key is to realise that all languages are just... syntax - if they're turing complete, then, yes, you can do anything you could do in one language in another - however, different languages tend to expose different concepts, many of which are not well supported in C++ or C#.

Arafangion
+4  A: 

Learn SQL and relational DB concepts. It is:

  • different, so you'll need some knowledge to write even basic statements;
  • useful even in everyday life (at least as a concept);
  • time-proven - has been around for decades mostly unchanged in principles;
  • frequently needed to integrate with in your client code (4 out of my 5 jobs required this).

Another useful thing to understand would be HTML mostly for the same reasons. This way you'll cover code-behind (c#, c++), data retrieval and manipulation (sql) as well as presentation (HTML) techniques.

Stanislav Kniazev
+1  A: 

Yes. You gain perspective by learning how things could be different. That's invaluable for every aspect of life.

+5  A: 

From "The Pragmatic Programmer", by Andrew Hunt and David Thomas:

Learn at least one new language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet

...

It doesn't matter whether you ever use any of these technologies on a project, or even whether you put them on your resume. The process of learning will expand your thinking, opening you to new possibilities and new ways of doing things. The cross-pollination of ideas is important; try to apply the lessons you've learned to your current project. Even if your project doesn't use that technology, perhaps you can borrow some ideas.

Jacob
+1  A: 

I think that it's important to keep open-minded because the language/technology used in each of your projects shouldn't depend just in your preferences or in what you're got used to. There are a lot of examples of this like people using J2EE for any project avoiding LAMP just because they're not used to that technology or using plain C because of the lack of OOP design concepts. Besides, once you know different paradigm languages you shouldn't have much trouble to learn a new one.

ktulur
+1  A: 

Yes.

Some examples:

Eiffel. Practical benefit: design ideas such as Design by Contract and Command-Query Separation.

F#. Practical benefit: a taste of functional programming can't hurt.

C++/CLI. Practical benefit: native/managed interoperability. Downside: it's ugly.

Common downside to all options: Opportunity cost. You can live a happy life without learning them, and use your free time for beers with friends, jogging, listening to Bill Callahan's albums, etc. (or learning new stuff about software engineering which are not new languages, such as keeping up with the C# and .Net updates, unit testing, requirements gathering techniques, etc.)

Daniel Daranas
already done lot of c++/cli interop :)
you didn't mention it.
Daniel Daranas
+2  A: 

What I can recommend is to try different technologies, that need different mindsets.

Try functional programming. You'll need to think somewhat different than object oriented. Try database programming (SQL, DDL, DML). You'll develop a different set of skills, getting the habbit of thinking in terms of set operations. Try some web technologies. Different problems appear. Try developing some cross platform projects in C++. Other sets of problems...

I think that the most important is not the programming language, but the technologies. In the end, you'll end up knowing the relevant technologies and domains, with good things and bad things.

Cătălin Pitiș
+1  A: 

Speaking as one who considers C++ his main language, but has at one time or another been paid for using over twenty other languages (I sat down and counted once, but have forgotten the exact number) I'd say that you must learn at least four or five other languages. Our industry is plagued by know-nothing bigots who think that the first language they learned is the greatest, when of course their is no such thing - it's horses for courses.

As for the practical advantages? Well, everyone can always use a little more money...

anon
+1  A: 

A real practical thing to do would be to look at something you're doing in C++ / C#, and seeing if you could expose some of that to another language. A "scripting language".

Some cute, common choices for scripting languages to hook into C / C++ / C# codebases seem to be

This is especially common for applications where you're essentially creating a framework or a stage or backend where other "creative" people are going to do interesting things.

In games people use this to let level or game designers do a lot of interesting and powerful work without needing to bother coders.

This also puts some more pressure on coders to create good code since they're essentially creating a framework for other developers to use now, not just a product for an end-user.

xkcd150