Monday, July 13, 2009

Concepts and principles over technologies

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, 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.


  1. >> 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?

    You have to learn because you are working on outsourcing company. If you are still sit on that chair, you HAVE TO learn. Or you will be fired! You might think I am kidding but who knows? If you dont learn them, you will be redundant then you have a strong feeling that you must quit your job and find another firm which your (obsolete) skill set is matched.

    We cannot capture all the newest technologies because we are human. I believe developers at MS even cannot master all of their technologies because they are a result of a huge people or at least, the whole MS devs. So this is the point I agree: OO Design Principles, Patterns and Pracices are keys. These knowledges help learning new tech 'easier' as well as being able to eveluate and leverage them effectively.

  2. Nice post.

    Looking for your next posts about how to learn PPP (principles, patterns, practices) efficiently.

  3. @Huy: agree with you, but don't take them as burdens, take it easy.

  4. @cuongle, why did my last comment disappear Cuong?

  5. @Thoai: I don't know, I never see your previous comment in here, maybe your comment have not yet upped

  6. Hahaha... i like your post... you'r on the road being an "architect"...

  7. Nice post. Hungry for similar posts like this.

  8. Just a small addition. It's sometimes better for me to get my hands dirty before trying to understand nitty-gritty behind the scene.