views:

780

answers:

15

I've been doing C# for quite a while now (2.5 years) professionally after having dabbled in Java and PHP while in college. Now I really want to improve myself as a developer and want to learn a second language. What would be a good choice and most importantly why; What will learning that language add to my skillset (besides the syntax obviously)?

+2  A: 

Perl or Python or Lua (I'm going to learn the last)

I mean - something not so OOP, more scripting, because a huge amount of tasks can be made with non-main-stream-OOP languages

abatishchev
Ruby is properly Object Oriented, much more so than C#. Which isn't to say don't learn it, but it is absolutely OO and very powerful for it.
glenatron
+9  A: 

It depends what skills you want to acquire.

As a good all-round language and a good example of a scripting language, I'd recommend Python, because it has nice, clean syntax and lots of useful features.

If you want to learn more about the machine and lower level stuff, C could be a good one to try, especially as it is quite a small language but you need to understand a lot of concepts quite well in order to use it, so it would be more about increasing your theoretical knowledge instead of just learning some syntax or an API.

I don't know any functional languages (yet :P) but one of those might be good to learn as it's quite a different paradigm to what you would be used to from C#, so it woudl give you a new way to think about programming.

lemnisca
python has lots of functional features ;-)
fortran
+11  A: 

Haskell or Lisp. The functional paradigm opens up a whole new slew of possibilities. You probably won't develop in either professionally, but what you learn from the process is widely recognized as beneficial.

Stefan Mai
+1  A: 

Scripting languages like Ruby or Python. Why? They allow you to quickly write scripts to automate certain tasks, unit tests, ...

Vincent Van Den Berghe
+20  A: 

if you're in C# learn F#. Functional programming in familiar .net environment.

Mladen Prajdic
F# would indeed add an entire new paradigm to your skillset (i.e. Functional Programming).
Ruben Steins
+5  A: 

I think F# is a very good complementary language to C# not at least because it is a different way of thinking (functional programming) but you still have the .net libraries to help you so even if the syntax is different the environment is familiar and that will help you a long way

TT
+5  A: 

Rather than branching out, consider channeling your efforts into the new .Net technologies emerging. I think you'll find that WPF and Silverlight 2 are challenging for even experienced C# developers. If you're a web guy consider getting some practice with MVC and Dynamic.

Echostorm
+1  A: 

Learn whatever language you have interest in irrespective you are a C# coder... Nothing impossible if you say "Its simple and possible" :-)

Samiksha
+19  A: 

I would look at something away from the .Net runtime and probably a dynamic language. Of the eight or nine languages I've used to any degree I think Ruby is probably the most enjoyable to work with so I would recommend that. Having got the hang of it you could probably find it useful with the stuff you know already through IronRuby but go to the original language first.

I agree with the people talking about learning a functional language too- this is next on my list of coding self-improvement tasks. There is plenty of time for both, though - Hunt and Thomas recommend a language a year and I think they certainly have a point.

glenatron
ruby is a fun language. I know C# best and tried ruby about 6 months ago in my spare time.
Ed Swangren
+1  A: 

My suggestion is Python, it's a logical next step.. It's a beautiful language that will allow you to do rapid prototyping very easily.. It's standard library is full of useful tools, and uses very interesting programming concepts/patterns that will help improve your programming skills in other languages also.. Also another bonus point is IronPython, .NET implementation of python that interacts very nicely with Microsoft .NET platform and will also give you ability to interact with your current projects.

Ivan
+2  A: 

I would say Java. If you know a .NET language and Java that qualifies you for 95%+ of the programming jobs out there.

JohnFx
+2  A: 

C++ in order to better understand memory management and data structures. It'll bring on you .NET code a long way, simply by understanding exactly what happens each time you call some memory-managed code.

Ed Woodcock
Not just to understand, but to be able to fall back to C++ from C# where performance requirements necessitate it.
Pavel Minaev
A: 

Python and F#.

Python because IronPython is more mature than IronRuby, therefore better integration with .NET. So you will learn a scripting language without stepping from the .NET VM.

F# because OCaml is such a sweet functionnal language and F# is better. (no more "Error at character 815-820" in your 500 lines module which is a pain each time you see it) I don't know about lisp and haskell, but I don't know if most of the old functionnal language are as polished for developer productivity as F# is.

I just hated the poor compile error in ML and Ocaml frustrating, especially when you learn type inferencing.

A: 

No-one suggested Boo?

I'd look at that, if I could be bothered. I've been doing c# for 8 years. Years ago I looked at ruby and Python, but Boo is based on .NET, yet is structured like them, so it's quite enjoyable. And very 'meta' based (if that floats your boat).

Noon Silk
+3  A: 

How well do you know each end of a web application system? If you know both and are well-versed in each then this isn't going to be helpful.

  • DB programming skills like T-SQL or PL/SQL may be useful for one approach. Making tables, stored procedures, writing queries, and creating indices are all examples of things to use here.
  • JavaScript/CSS would be the other end of web development where the focus is on the UI and making that look good and work. Silverlight would be another option.
JB King
Same suggestions I'd have made. I recommend these books: "professional sql server 2005 programming" and "javascript: the good parts"
Frank Schwieterman