Being a .NET developer, most of you surely was wondering one thing that why Microsoft releases technologies too fast, I have nearly five year experiences in .NET technologies, but I still feel getting drown and cannot keep up the newest technologies from Microsoft. I have not yet touched Silverlight 2.0, Microsoft has already released Silverlight 3.0, I just got VS 2008 and are learning .NET framework 3.5, again Microsoft has released and framework 3.5 SP1 and even introduces VS 2010 beta and framework 4.0 right after... and a lot of new technologies that I feel that I seem have not enough time to grasp of such as Oslo, Dublin, Azure, Astoria, Velocity, MVC... oops, confess that I cannot grasp of all technologies from Microsoft and I am sure that most of you feel the same way with me, right?
So the question is: whether we are supposed to know all new technologies in the very fast pace like now? if not, what we need to focus on?
As far as I know, a lot of developers, they tried to learn a lot of new technologies asap, but they actually don't understand what is behind the scene, they just tried to learn how to use it, not how to get into it and the concept beyond the wall. For instance, they use LINQ to SQL or Entity Framework smoothly, drag and drop data context, VS then generate code and use it, it's easy huh? but just few developers know some key principles: Unit of works, Identity Map, Data Mapper... behind OR mapping tools, that's it.
Although, I am a .NET developer, use .NET framework for learning and working, but some points from Microsoft that I don't like, don't you notice that Microsoft has a lot of "drag and drop development" tools for you, they will turn you to be a "drag and drop" developer and needless to know anything behind the scene. Can you imagine, wow, it is easy for you to design a web page by drap and drop even without knowing Html (kind of exaggerated in here), use WPF without knowing xaml, use OR Mapping with Linq to Sql or EF without knowing "OR Mapping"... I know that it will improve productivity and performance to get more benefit but honestly I don't want to be a "drag and drop" developer, I wanna have more controls on what I am doing, don't you feel puzzling and shout at Microsoft "what the heck?" because you don't know code, don't know anything. If I have options to opt (normally I have not :D), I will prefer ASP.NET MVC over webform, NHibernate over EF (LINQ to SQL is not counted in because you know the reason)
So, come back the question, for me, I would say "concepts and principles over technologies", I will totally focus on underlying concepts, patterns and principles for each technologies if I have chances to touch, though. Let's be SOLID (principles), be "PATTERNs".
Some of you might ask me WHY? Just simple, you have not enough time for all technologies, because you as well have to spend time for family, friends, and... beers. Why you have to learn all? for me just pick up some of them to learn and focus on principles in lieu of technologies. Pick up one of Ioc Containers: Unity, StructureMap, NInject, Winsor Castle, spring.net... and focus dependency injection pattern in lieu of how to use them, pick up one of OR Mappings: EF, LINQ to SQL, NHibernate or Subsonic... to use and focus on persistence patterns (active record, unit of work, identity map, repository, persistent ignorance, data mapper...). One more thing, if you grasp of principles, you will find easy to learn other similar tools and pick up new technologies much faster, you also give better judgements the pros and cons of each tools and which tool is more appropriate for your project, just what I thought.