Lately, I've been getting a lot more serious about cutting out some time to learn a functional or dynamic language. After watching several Channel 9 videos while traveling today (and listening to several podcasts), I've realized that I've started to grow not only "complacent", but a bit frustrated as well with static languages (currently VB and C#).
It came to mean when I was defining a class. I was working on the properties of that class, of course using encapsulation (read: public properties backed by private fields). Property, after property, after property. Yes, there are some shortcuts by using code snippets. But still, that's a HECK OF A LOT of typing merely for "infrastructure" code. It takes quite a while to get _through_ that infrastructure until I can actually start writing the good stuff.
Now, I realize I could cut those frustrations by just having public fields and the like, but that's not the point. Besides, I think that leads to ugly code that's harder to maintain and just has stronger coupling to dependencies than their needs to be.
This is where I think I would like working with a dynamic language (I remember doing some of this stuff in Python). Instead of going and defining a property in a class, I just use it elsewhere, without having to define it elsewhere. From then on out, it's available to everyone. This way, I could be writing "The Good Code" from the start. Not of this infrastructure stuff. Of course if I went this way, I would certainly have to be doing a lot more unit testing than I do today when I write code to catch those errors you get at compile time in a static language.
Perhaps I will look at writing some XNA code via IronPython, that might be fun.
Another type of language I want to learn are purely functional languages. I want to get into things like High-Order Functions (currently, I like to think I'm somewhat bright, but the idea of a Function that accepts two or more functions as _parameters_, and _returns_ a function on top of that makes my head want to explode).
Regardless, of all this, I feel that I have a lot to learn to become a better programmer. As a programmer, I was practically born-and-raised on C#. Granted, lately I've one back, learned, and program(med) in C and C++ (and I will so in the future as well when I start digging away at future concurrency technologies coming from Microsoft). I think to make the next step as a developer, I need to get away from statically-typed, imperative, object-oriented languages and diversify.
Have any of you (my readers (well, those readers that aren't my family and write code (if there are ANY of you out there :P))) experienced this feeling as well? Do you currently use a dynamic or functional language? What do you like about it over a language like C# or Java?