views:

284

answers:

9

This is sort of a "best language" question, but hopefully with enough of a twist to make it worthwhile.

As someone who only uses C and C#, I'm curious to learn a dynamic language to expand my knowledge. I don't know which to choose.

The thing is that my motivation isn't necessarily to create any "real world" projects, or projects that integrate with other systems, but rather just to learn.

With that said, for someone only familiar languages such as those I mentioned, and possibly ignoring obscurity and lack of support..

  • Which dynamic language would be the biggest departure?
  • Which would introduce the most novel concepts?
  • Which is the exemplar of dynamic languages?
+1  A: 

It is hard to say, it is definitely a matter of personal taste in a lot of ways. I like learning Python but I am sure that you could learn just as many good things from Ruby about a dynamically typed language.

If you are used to C and C# then any dynamically typed language is going to be a departure. So I say you should use Python because that is what I like, and hopefully you will like it too. If you start using it and you hate it then try something else (like Ruby, Perl, PHP, etc.).

Andrew Hare
+4  A: 

The functional languages (LISP, Scheme, etc.) are always worth checking out. They may be some of the bigger departures.

JavaScript is a great stepping stone to go from the C arena to the functional arena. From there you can mess around with JQuery, which, although not a language, forces you to do things in non procedural ways.

Another often overlooked language is SQL. It's obviously a niche language, and as Josh points out, not really 'dynamic', but acquiring a deep understanding of they way set based languages work can really progress a coder.

Careful, if you 'Learn' to much you may end up frustrated with the older languages.

Tom Hubbard
Not sure I would classify SQL as a dynamic language but it is still something most developers should know (Especially web / enterprise type applications)
JoshBerke
+3  A: 

I would suggest any Lisp dialect or Smalltalk. These are dynamic and had heavy influence on the design of other, more mainstream languages. They also include interesting concepts that are not found in other languages.

Another interesting dynamic language to have a look at is Lua.

boxofrats
+2  A: 

I would say that Lisp fits most, if not all, of your criteria. It's definitely a big departure from C/C++ and C#. It has got alot of novel concepts, and many would argue that it's hard to find a more dynamic language.

Barring Lisp, I myself would go for Ruby.

Mikael Auno
+3  A: 
  • Which dynamic language would be the biggest departure?
  • Which would introduce the most novel concepts?

I guess that would include Scheme, Erlang and Oz

  • Which is the exemplar of dynamic languages?

I'd say Ruby and Python

Niki
A: 

I've been a C++ and C# developer for a long time, and recently started experimenting and learning other languages. I played with Ruby for little while and like it, but it wasn't what I wanted.

I ended up choosing Erlang. After reading about Erlang, I've decided that I really wanted to learn it. I'm not learning Erlang with any hopes of getting a job writing Erlang code. I'm learning Erlang only to become a better developer.

I really do like this language so far. It's only been about a month, and the syntax still gets me sometimes, but I can really see the power of the pattern matching and get excited to write it again. I struggled with the concept of everything being non-mutable at first. But this was mostly because I've "grown up" on C# and C++. C# is a great language and has some amazing tools, but you really have fun with some other languages, particularly something like Erlang. Just don't expect to land a job as a full time Erlang developer. (At least not yet).

For anyone curious, my hobby project is multiple player iPhone app connecting to an Erlang server. For a Windows developer, this has been a major change. But it has renewed my passion for programming, which really was my goal.

marcc
I'd like to second this, I've not learned erlang yet but the next server project I do I was going to try and do in erlang. It's venerable language with impressive abilities.
Kendall Helmstetter Gelner
A: 

If you really want to go crazy but want things to at least be slightly familiar (I know that sounds like a contradiction but it's true), look at F#. It's a type-inferred language but it supports a lot of dynamic type properties. It's a functional language built on top of the CLR so you get full use of the .Net object system which is cool. Because it's a functional language, there are enough novel concepts to really work your brain.

If you really want to go for "biggest departure", Clojure might be of interest. It's a Lisp dialect built on the JVM. It's getting some pretty serious attention both in the Java and Lisp world. It might suit your purposes.

Brett Bim
+4  A: 

I would suggest learning IronPython. As a language it will still be a significant departure for you, but you'll be able to use everything in the .NET framework that you're familiar with. (I usually think it's a good idea to try to vary just one aspect of development radically at a time... work your way through the different aspects one at a time, and you'll always be comfortable with part of what you're doing, which will help you learn the new part more quickly, IMO.)

Also, with C# 4 you'll be able to call into IronPython from your C# code, including using its dynamic features that way.

Jon Skeet
I was going suggest IronPython or IronRuby, its great to learn a new style of programming on top of the same consistent framework. Lets you focus on the differences in the language and not the framework
JoshBerke
+1  A: 

I'm going to have to vote for Common Lisp here. It is a highly dynamic language that can be adapted to just about anything. You get not only functional programming, but also OO, and even procedural if you so desire. And macros in Lisp are very interesting to study, since to my knowledge no other language has its equivalent.

Plus, developing in a functional style tends to help development in other languages as well. For example, I've noticed that I do OO primarily with immutable objects, thanks to concepts influenced by Lisp and Scheme. And with this, I've noticed an improvement in the stability and maintainability of my OO apps. Just my two cents.

Joe M
I would also like add that learning Scheme and reading "Structure and Interpretation of Computer Programs" is invaluable. It has given me a better insight into improving the quality of my data abstractions and APIs in general.
Joe M