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?
Howdy all, I will be at Tech Ed Developer this week doing several things. First of all, I will be giving two talks: the first on Application Compatibility in Windows Server 2008 outlining the top issues developers need to be aware of when developing for it, and second, a talk on Transactional NTFS as it pertains to Windows Server 2008.
Also, I will be "manning" the Ask The Experts booth for Windows Server 2008. So if you want to chat about Windows Server 2008 (or just say hello), make sure to drop on by (I will have the hours I plan on working the booth posted there at the booth).
Here's a rundown:
- Monday, 3pm - [INF203] WS08 For Developers - App Compat, Tent 1
- Thursday, 4:30pm - [INF307] WS08 For Developers - Transactional NTFS
I'm also hoping to attend some sessions myself. These will mostly be around C++ (TLA323, TLA302, TLA404, etc.).
So, if you're going to be at the conference, please, drop on by the Ask The Experts booth for Windows Server 2008 and say hello!
Well, another day, more work done, more lessons learned, and some new and exciting discoveries and announcements made as well. First of all, Soma announced on his blog today that F# is becoming an "official" .NET language, joining the ranks of languages like C#, VB, C++/CLI, JScript, IronRuby, IronPython, etc. If you're not familiar, F# is a functional language that started out in Microsoft Research as a project of Don Syme's. I think this is great news. And I'm thinking that perhaps I should give F# a try before I try Haskell or Erlang. The other discovery of the day was the XSI ModTool from SoftImage, a free modeling tool that also has XNA integration. It sounds and looks like a pretty comprehensive tool (especially for "free") and I am excited to give this a try. You can find more information on XSI ModTool here: http://www.softimage.com/products/modtool/. Enjoy! Other than that, just more work. Working on some presentations for the upcoming trip to Tech Ed Developer in Barcelona, Spain, continuing to work on Transactional NTFS, programming other Windows Server 2008 enhancements like Wait Chain Traversal, etc. I'm also back to spending time doing game development with XNA. I spent quite a bit of time with Torque X which I'll talk about here and on Xna3Way in the coming week or so. Fun, fun, fun :). Now back to work (so I can hurry up and get stuff done in order to spend time with the wife and son today (oh, my son, there's another post I have to make, he's SUCH a joy!)).
Test cross-post
Posted in
Well, nearly a month after George's throw-down (and Chris's follow up), here I am posting my list of how I plan on becoming a better developer. Most of the focus on this list is around technology internals and diving deep. Some of the other points are around topics that are definitely not developer related. I feel that those items will help bring me a fresh set of eyes to my development efforts by limiting burn out and providing me with some non-computer-related experiences to help think "outside the box."
Read 2-3 books on Operating System Design and Implementation:
Most likely, this list will look like:
Dive deeper into .NET and Win32/COM Interop:
To achieve this one, I'm going to continue working on the managed wrapper for Transactional NTFS. There are some very interesting interop scenarios with this wrapper. This gets into areas like device driver communication via DeviceIoControl and direct manipulation of memory buffers. Since this is an area in .NET I haven't dived much into, this will provide a lot of experience and knowledge for me.
Learn a functional programming language:
My first "serious" programming language was C#. Since then, I've really been diving into C/C++ as well. However, these all are basically within the same family of languages. To break this habit, and to "open my mind", I will learn a functional programming language. Specifically, I will learn Haskell. Why? Well, because I feel like it :P. Plus, Simon Peyton Jones has done a good amount of his Transactional Memory research with Haskell, and I want to dive deeper into that research.
And none of those boring "hello world" algorithm problems that you usually see. I'm going to go ahead and pick up this book and work through some multimedia examples.
Learn a new editor:
There are some "rite of passages" that I feel I never went through as a developer since I came to the ball game so late. I've already started backfilling my knowledge via C/C++, and I want to continue this trend. This time, I will be focusing on an editor. Yes folks, I will spend the time to learn (or try to learn) Emacs. This will go hand-in-hand with learning Haskell above. I plan to use Emacs exclusively when writing Haskell code.
Not only that, but I want to try to put in some effort to make Emacs more than just a code editor. In that vein, I want to check out Gnus and use that to read blogs. If that goes well, I may even look at checking my email via Emacs as well.
Fly R/C Airplanes:
Yes, you read that correctly. And yes, it is part of the right list. I feel that developers can draw inspiration from many different areas that aren't even computer related in any way. My problem has been that when it comes to recreation, I haven't exactly been "well rounded." I have zero outdoor activities that I really do, so this will get me out of the house and help me clear my mind when it gets a little foggy. Of course, the added benefit of this is to spend more time with the family.
As a developer, it's really easy to become obsessed with computers. I tend to take this overboard. When I get excited about something, my modus operandi to date has been to dive into it full force. Normally, this wouldn't be such a bad thing. However, I tend to burn myself out and then settle into a "downer" time where I become disillusioned with what I'm doing. I'm hoping this item will help me avoid this so I can stay in this for the long haul.
That should basically do it. There were some ones that almost made the list but not quite. For instance, compiling and running a research kernel/OS in a virtual machine. That kind of goes together with the first item on the list, but it could become pretty time-consuming. Then again, it would give something to apply my new skills to.
So I've gotten into a new hobby as of late. Why? Simple: my son. You see, many of the hobbies I've had in the past are "loner" hobbies that don't involve many people well: playing RPGs, programming video games, etc. I had some criteria that I was thinking about. First of all, I wanted it to be a family friendly hobby (so my son can get involved if he's interested). Second, it needed to be outdoors (I'm stuck inside enough because of my day job, no reason to make it worse). Lastly, it needed to be somewhat "geeky" still. After doing some research, I found one that fit the bill quite well that piqued my interested: R/C Airplanes. Yes, you heard me right, I'm getting into R/C Airplanes. I put some research into it to make sure I got the right way, went down to check out one of the local R/C clubs and their flying field, and even attended their Open House and was able to fly the plane I eventually bought in person. It was a GREAT experience and somewhat of a "high" to be able to fly an R/C plane. GREAT hobby with lots of great people. I also figure that getting into a hobby that has NOTHING to do with computers will also help make me a little more "well-rounded" that I possibly was before. You know, give me some fresh life experiences that I can bring into the other areas of my life. So in that vein, yesterday I went down to the LHS (Local Hobby Shop) and picked up my new baby:  Oh yeah! All the goods I needed to get started. The Arrow has a 63" wingspan and a semi-symmetrical wing that makes it a good training airplane, as well as still being able to maneuverable enough to pull off some easier aerobatics. It is also a Glow Engine ("glow" being a type of fuel). I went this route instead of electric because I wanted a larger, more powerful plane that will handle the higher winds we get here in the Northwest (read: beefier than an electric in the same price range). Tonight, I fully plan on putting this bad boy together and starting to charge the batteries. Then, next Tuesday (weather permitting and if my AMA membership card arrives in time), I'm off to the local airfield to do some training with a club instructor. Oh yeah! Summer is here, and I couldn't be more excited about it! I already bought my second plane as well. It is a SIG Four-Star 40 in kit format. So, basically, I will be putting it together from the ground up myself (from the balsa wood baby!). It will be a great feeling to put something together with my own hands and then getting to fly it through the air.
|