So tonight I got to help demo what a fishbowl was at the ALT.NET Canada (thanks Doc!) conference and the topic of discussion was on the Fundamentals of Software development. During the session I started to realize that what I considered to be fundamental seemed to be far from what others did. After a few discussions I started to think that the fundamentals were different based on generational divides.
I'm speaking for myself, but hopefully for my generation, but when I hear "The Fundamentals of .NET development" I think, Object Oriented Programming, Design Patterns, a knowledge of the syntax of a language, and at least a base understanding of what the CLR is and what it provides for us.
Some other takes on fundamentals were focused on understanding how the underlying operating system works, Algorithms and Data Structures.
This got me a little depressed because I don't have an intimate knowledge of how the underlying operating system works, or how to perform a deletion from a red-black tree, or how to implement a half decent hashing algorithm. Ask me to build an AVL tree and I might puke, or at least ask "why? it's 2008" I have a base understanding, but I'm not sure if that counts as the required fundamental knowledge to build a decent app.
When I was writing C, I cared a lot about writing well optimized code. I cared about memory allocation/de-allocation. I cared about protecting from buffer overruns. I cared about so many things, that I just don't think about, as much, now as a .NET developer. All the things I don't have to be concerned about allows me to focus on other things that I want to care about.
It seems like we developers are proud of being an expert at something, but when that something becomes less and less relevant in building applications today, we tag it as "fundamental". Perhaps in 10 years or so the next generation will wonder why they would need to understand object oriented programming to build valuable applications. After all it will all be written in DSL's, right?
Couple of more pennies for ya!