Geeks With Blogs
Code Curve Chris Smith on tech and meta-tech
I’ve been doing development professionally now for maybe 18 months and my experiences over the last 8 months in an agile shop have made me realise just how much there is to know in the development arena and, more importantly, how much I would like to know in order to be really creative in my job and produce truly excellent software.
In my previous job, I used a text editor to write Perl. There was no such thing as unit testing and copying and pasting was viewed as an aid to productivity rather than a horrific sin.
In my current job, I write C# and a lot of XAML. We use MbUnit for our unit testing and TeamCity for continuous integration. I work with guys who know a lot more than me both at the technical level (custom IL generation anyone?) and the architectural level (a la “I think we’ve reached the point where we need an IoC now”). I’ve produced some code that I’m proud of, and I’ve also spent some time wondering which way was up. Happily, we pair program most of the time, and for this I am eternally grateful.
I’ve become a regular attendee at the Bristol DotNetDevNet group, an avid consumer of RSS feeds from topical blogs and a blogger myself. Exposure to this whirl of information has given me a broad view of things I aim to get to grips with over the coming years, and so I thought I’d compile a shopping list to refer back to.
Also, my current company is very Alt.Net-ish, and there has been a lot of discussion on the UK mailing list for Alt.Net about barriers to entry to doing software development the Alt.Net way. I think this shopping list proves them right.
Nuts and bolts
I use C# on a daily basis and it seems to me that being intimately acquainted with the language(s) you’re using is common sense. I’ve read a book or two and at some point I intend to (skim) read ECMA 334 and ECMA 335.
I’d also like to become very familiar with the .Net framework. The C# 3.0 Cookbook is on my list and maybe I’ll take a Microsoft exam or three?
As well as knowing the language and the BCL, I’d like to be conversant with WPF, WCF, WF and Linq. I have books on all of them sitting on my bookshelf and I’m about half way through the gargantuan Apress tome on WPF.
So that will give me technical knowledge that will be very useful for my current job, but there is oh so much more after which I hanker.
How does one go about writing good software? I’ve read a couple of design patterns books, but they were at an introductory level and so I have these in my sights:
-          Head First Design Patterns
-          The Gang of Four book
And with those firmly tucked under my belt, I’d like to explore DDD (Domain Driven Development). Evans’ book is good, apparently.  I’ve heard about n-tier architecture too, but don’t have much idea what that entails. And I’d like to explore ORMs a bit more, especially NHibernate.
Other things that spring to mind here are refactoring, Patterns of Enterprise Architecture and Working with Legacy Code. I hope I get through all the reading before my eyes wear out. One day, I might even dream in code, write beautiful code or become a pragmatic programmer.
The Development Process
And then there’s TDD. This has a famous toolkit, and the things that spring to mind that I’d like to spend more time with are:
-          MbUnit
-          Mocking (e.g. Rhino Mocks)
-          IoC (e.g. Windsor from the Monorail project)
-          Msbuild
-          TeamCity
I can hear terms like “programming to interfaces” and “loose coupling” here.
I’ve heard the term Git bandied about a bit too, and not just when I break the build. How is that different from more traditional source control systems like SVN?
Is it all about objects though?
C# blurs the boundaries slightly between OO and functional programming with lambda syntax and Action<T> and Func<T,...> and I’ve found this to be very powerful in my limited use of it so far. So I’d like to explore functional programming. F# anyone? ML? Haskell?
And what about concurrency?
Also, I’ve tussled with multi-threading over the last few months and I’ve wondered why it seems so fraught with danger. How do languages like Erlang get round this problem and produce high availability, massively parallel systems?
This is going to become more and more topical as multi-core processors become ubiquitous.
Can I lose the chaperone (and possibly get into trouble)?
And then there’s unmanaged code. C# and .NET are amazing, but at some point I’d like to get down and dirty with the guts of the machine just for the experience. I wrote a simple pixel shader for use with WPF recently and that was great fun.
Back to Uni?
And finally, I am aware that my colleagues have a Computer Science degree and I don’t (I’m a mathematician and an actuary). I have heard it said that these CS degree thingies are a bit overrated, but I’m not so sure that’s true. I don’t know about different sorting algorithms and I don’t understand O() notation. I sense that my colleagues have a familiarity with certain key concepts in computing (e.g. networking) that I don’t share, and I’d like to get there. Reading may do it (there’s a networking book on my pile) or maybe at some point I’ll get the opportunity to go back to school.
Every journey of a thousand miles starts with the first step
It’s a daunting list. I have the joy of learning though and I expect to have it indefinitely.  Clearly it’s going to take me years to get to grips with the main stuff. And all the while Microsoft (and maybe even other organisations and individuals) will be bringing out new stuff to stimulate my grey matter.
I like the article “Learning Programming in 10 years”. It seems to me that it’s spot on.
Posted on Tuesday, September 30, 2008 9:33 PM Developer education | Back to top

Comments on this post: So much to learn...

# re: So much to learn...
Requesting Gravatar...
If you're in an agile shop doing TDD and Continuous Integration in you first 18 months, you're miles ahead of the curve.

Left by Lee Brandt on Oct 01, 2008 5:40 AM

# re: So much to learn...
Requesting Gravatar...

I'd say you're way ahead of the game. Sure, there are several mountains worth of information to acquire that can never realistically be acquired but you already have the perfect attitude. Many developers will never learn that. I'd buy that over accumulated knowledge any day.

On another more depressing thought though... I used to think my full time job was simply keeping up with technology given the astonishing rate of new information. I gave up on that idea about 5 years ago. My new approach is to try to get further and further behind as slowly as possible.

Left by Guy Smith-Ferrier on Oct 01, 2008 10:56 AM

# re: So much to learn...
Requesting Gravatar...
Thanks for the encouragement chaps.
Guy - someone at work saw this post and said "what about C# 4.0". You're right - slippage management is the name of the game.
Left by Chris Smith on Oct 01, 2008 2:50 PM

# re: So much to learn...
Requesting Gravatar...
Spot on! I am feeling pretty much the same way as you except that I do NOT have the luck of working in an agile/TDD shop. I am doing this all on my own with the help of all the blogs/articles/etc that I am able to consume and eventually grok.

Please keep us up to date on your success and misses during this learning process. I can then "code and learn" vicariously through you!

I do have to say this is an exciting journey to know all the possibilities out there but it is sad as well when one realizes how far behind one is...but then I love to learn so it's right back at it for me.

Left by Brian Lee on Oct 07, 2008 10:48 PM

Your comment:
 (will show your gravatar)

Copyright © CodeCurve | Powered by: