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:
- Distributed Operating Systems
- Windows Internals (again)
- For fun: Show Stopper! The Breakneck Race to Create Windows NT and the Next Generation at Microsoft
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.