I am a C# developer and have been programming in that for a long time. I have some experience using ASP 3.0, php, VB.NET and C. I would like to learn something else and am not sure where I should focus. I have done a little with Python but wasn't as "inspired" by the language as I would have hoped to be. Thoughts on what I should learn? I would like to go more open source based.
I would say C++. That will get you a lot closer to the OS than your used to with C#.
I started with Borland C++ a couple of years ago and migrated to Java and finally to C#, it defiantly helps to have that lower level experience to understand exactly what your code is doing memory wise.
If you want to stay in the .NET family, PowerShell might be an interesting study. It has a C# like syntax and access to the .NET Framework. There is a lot of open source work going on targeting PowerShell. Just search Codeplex and you'll find about 60 or so projects around PowerShell.
PowerShell has a comfortable, task-based feel, using verb-noun naming for the cmdlets (which are just .NET classes). Being a developer, you would be able to complement your exploration of scripting by having the capability to extend PowerShell as you need.
What are you looking for in a new language? If you want something practical, go with Python, Perl, Ruby, or PHP. If you want something interesting that will teach you something new, then go with something like F#, Haskell, Scala, or LISP
Something - anything - that involves memory management. I know this is a bit of a Joel vs Jeff flamewar instigator of a statement, but getting just that little bit closer to the metal would be very beneficial I reckon :}
I have experience with many years of C# with a lengthy background in ASP, VB and other languages and when I was looking for a language to learn I turned to Ruby. It is a dynamic language which has many great features you can pick up easily. Ruby is a joy to write in and has IronRuby under development for the .NET platform.
I think it is as least worth a look.
Why not try to specialize your experience instead of simply re-learning the same things with a new syntax.
Examples:
- OpenGL or Direct X
- Network programming in general
- Learning protocols such as HTTP, FTP, SMTP, …
- Neural nets / AI
- More with XML XSLT / XPath / …
- Image processing / Video processing
If you’d really like to learn a new language I’d recommend to learn a functional programming language such as Erlang, Haskell, ML, F#, Scheme, LISP. You will learn a lot from the different point of view. And functional languages have the nice feature of being easy to optimize (automatically for you) on multiple CPUs which is a more and more popular thing.
JavaScript - GOOD JavaScript programming is remarkably difficult, even with jQuery, et. al.
F# - Up and coming functional programming language from MS, still uses .NET
Spec# - Contract-based programming with strong static program verification - pretty interesting concepts that may bubble up into .NET later.
WPF - There is a TON to learn about WPF. It's not just about drawing pretty pictures. Especially if you can partner with a designer to add flare.
Good luck!
You might want to try and take a look at Boo. It's inspired by Python but sticks to the CLR and still is object-oriented and statically typed.
If you haven't done Ruby and Perl, I suggest you pick up some books on each and maybe write a small application like Tetris. If you are used to writing somewhat structured application using C#, I am sure you'll be frustrated with those lightweight languages at first, but they do have some interesting ideas/concepts that may come handy.
To really get to know programming languages, writing your own language can be fun too. Using lex/yacc flavors like flex/bison (C/C++) and TP Lex and Yacc (Delphi), you can write your own language with some effort. w:Yacc lists more variants including one for C#.
Alternatively, some are using Ruby to write mini languages (buzzword is dsl, domain specific language). Google "ruby dsl" and you'll find some articles.
Are you looking to stretch the mind or make your skillset more economically valuable?
The most trouble that I had learning any language was Prolog. As with the advice for going with a functional language, it is sufficiently different to procedural languages (even from event based procedural programming) to be challenging.
I can't say that I now use it for much practical, but it's good to have done it.