Should you learn frameworks or principles





/* Font Definitions */
{font-family:”Cambria Math”;
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-signature:0 0 0 0 0 0;}
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-signature:-1610611985 1073750139 0 0 159 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
mso-bidi-font-family:”Times New Roman”;
a:link, span.MsoHyperlink
a:visited, span.MsoHyperlinkFollowed
font-family:”Times New Roman”,”serif”;
mso-fareast-font-family:”Times New Roman”;}
mso-bidi-font-family:”Times New Roman”;
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;

/* Style Definitions */
{mso-style-name:”Table Normal”;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-fareast-font-family:”Times New Roman”;

There was a comment on the On
Learning Boo
post along the lines of : I only focus on learning
frameworks, because they increase my marketability, learning new languages,
ideas like DSLs just takes time away from that effort
. It is a fairly
common attitude. I have spoken to people who have told me that their focus is
on learning the Microsoft .NET toolset, commenting that they feel that
is enough of a challenge and one that translates best into career
opportunities. I have seen recruiters and companies assessed with statements
like 2 years of ASP.NET MVC as some means to indicate the competence of
a developer to join a team.

At the same time for many developers the number of new frameworks tumbling
out of Redmond makes it seems like a struggle to keep up. Those who feel that they
must keep up, naturally feel overwhelmed. Restricting their focus to just what
comes out of Redmond seems like a good strategy to manage the problem.
Unfortunately, focusing on learning vendor frameworks is a trap. There will
always be another new framework to learn to do what you were doing yesterday.
Look at the churn in data access frameworks in the Microsoft space. Knowledge
gained is quickly outdated. You end up on a treadmill, learning one vendor
framework after another. You fall into the trap of appraising your next job
solely on the criteria of what frameworks your prospective employer is using, just
so that you can gain some experience using that new framework and keep your
C.V. up to date.

Assessing developers by their knowledge of them, especially through
certifications is an equally bad trap for employers to fall into. At best it is
deceptive about what skills developers actually need. At worst it is a prison
because the investment of knowledge in a particular technology becomes a
ball-and-chain that makes individuals and corporations resistant to change.
Having hired all those skilled Webforms developers and learnt all those vendor
control kits, how could you rationally adopt ASP.NET MVC for your next project?
After all you don’t have any experience with it. Should you now dismiss your
entire team and hire experienced ASP.NET developers? Or if you do change, what
good did it do you to recruit people based on their understanding of the
ASP.NET page lifecycle. Would it not have been better to hire people who had
the skills to learn new frameworks?

When I was younger, I used to focus on learning the latest toolkit because I
saw that as the best way to improve my marketability.  I spent ages poring
over the internals of MFC, ATL etc. I could talk about the details of the STL,
Boost, Loki with the best of them. I wanted to be an expert on those libraries.
I looked for new jobs when old ones did not offer me the opportunity to use the
latest and greatest frameworks. Did it make me better developer? Maybe, but not
in the way I expected. What I gained from poring over those frameworks
eventually was an appreciation of the common underlying patterns. I might have
learned something from understanding how the internals were implemented too,
but it was pattern recognition of ideas like iterators, factories, template
methods that gave me the most benefit. The next time I tried to learn a
library, seeing how it solved problems I understood, seeing how it use patterns
and principles I recognized, meant that I was able to being working with the
framework faster. But I did this hard way, not by recognizing patterns I was
aware of and seeing where they were implemented, but by discovering them seeing
them repeated.

The reason so many of us get excited by books like Fowler’s Patterns of Enterprise
Application Architecture
, his work on GUI Architectures of
(and the work of others) is that they capture those patterns and principles. 
A solid knowledge of the principles relating models, views, and controllers
would enable you to learn a range of web frameworks ore quickly because you
look to see how they solve problems.

Learning new skills such as how to write a DSL in Boo will give you the breadth of aproaches that enable you to deliver better architected applications. The burden of maintenance is greater than the burden of writing, so a better architected application is always a good investment for a company. Far more than squeezing some obscure feature out of your latest framework is.

If anything the industry has moved on from those nuts and bots frameworks,
and the abstractions have gotten better. Less and less do you need to
understand the how and more and more the why? Knowledge of the patterns and
principles provide continuing value to you as frameworks change. It also helps
you understand how to use the frameworks, how to judge their quality against
some kind of best practice yardstick and how to manipulate them when they fall
short of best practice

As someone who interviews people I look more for understanding of the
principles than the minutiae. The problem is that there will always be a new
‘better’ framework, a new popular paradigm. There is always the possibility
that a new language comes along that we want to use instead for a given
project. People who understand the principles can adapt. People who focus on
the detail are intransigent to change, because they have too much invested in
the framework that they have become an expert in.

Now before someone suggests otherwise I am not implying that people do not
need to know how to use their tools to get the best out of them. Of course they
do. But you will find a more efficient path to assessing and learning new
frameworks through understanding the principles behind them than through
learning each one in isolation.



About Ian Cooper

Ian Cooper has over 18 years of experience delivering Microsoft platform solutions in government, healthcare, and finance. During that time he has worked for the DTi, Reuters, Sungard, Misys and Beazley delivering everything from bespoke enterpise solutions to 'shrink-wrapped' products to thousands of customers. Ian is a passionate exponent of the benefits of OO and Agile. He is test-infected and contagious. When he is not writing C# code he is also the and founder of the London .NET user group.
This entry was posted in Uncategorized. Bookmark the permalink. Follow any comments here with the RSS feed for this post.
  • Discount Furniture

    I agree, thanks for the article it was good!

  • stock brokers

    I am not really sure if best practices have emerged around things like that, but I am sure that your great job is clearly identifed. I was wondering if you offer any subscription to your RSS feeds as I would be very interested and can’t find any link to subscribe here. Please come visit my site online stock broker when you got time.

  • vacation packages

    You may have not intended to do so, but I think you have managed to express the state of mind that a lot of people are in. The sense of wanting to help, but not knowing how or where, is something a lot of us are going through. I would love some feedback on my site vacations when you got time.

  • Jkgofdxe


  • vacation rentals

    Wow! Thank you! I always wanted to write in my site something like that. Can I take part of your post to my blog? Please come visit my site vacation rental and give me any valuable feedbacks.

  • vacation rentals

    Wow! Thank you! I always wanted to write in my site something like that. Can I take part of your post to my blog? Please come visit my site vacation rental and give me any valuable feedbacks.

  • retirement communities

    You got a really useful blog I have been here reading for about an hour. I am a newbee and your success is very much an inspiration for me. Please come visit my site retirement housing when you got time.

  • Oakland Business Directory

    I was thinking of looking up some of them newspaper websites, but am glad I came here instead. Although glad is not quite the right word… let me just say I needed this after the incessant chatter in the media, and am grateful to you for articulating something many of us are feeling – even from distant shores. Please come visit my site Oakland Yellow Page Business Directory when you got time.

  • Fregas

    Sadly, few employers look at patterns or principles on a resume other than some basic oop. All they care about is whether you know sql 2008, wcf, wpf, wf, LinqToSql, etc.

    I totally agree with you. Even knowledge of a programming language syntax is less important to me than just being a good programmer that knows good principles.

  • TD

    Hi there. I wrote that original comment, so allow me to elaborate before you flame on. I do agree in the importance of learning new concepts and principles. In the past year and a half, I’ve read Jimmy Nilsson’s DDD book and dabbled in Python and IronPython. Before that, I fell in love with design patterns.

    However, on the specific matter of learning a new language every year, I have mixed feelings. If I had the time, sure, I’d love to. I’m very curious about F# at the moment. But sometimes I wonder if that advice was given at a relatively slower time in the industry, i.e., before the .NET avalanche.

    What about the idea of taking the time to master your primary language? Doesn’t it take years to approach a mastery level with a language? How many of us fully understand the .NET event model? I can create and raise custom events, but I don’t know the steps off the top of my head. Many developers have never applied custom delegates. Have you researched how you might apply custom attributes to your code?

    The bottom line for me is, well, the bottom line. In the limited free time I have, I have to pick and choose what to learn. In my opinion, I’m better off using that limited time doing what the market compels me to do.

  • Jibey Jacob

    What I meant was that the “friend” keyword has to be deprecated in C++.
    And in this industry where companies hire people in place of criminals that can’t show up at work, I guess Ethernet would make sense. I know that if I work for such companies I’ll never really get paid.

  • Bill

    First of all, I agree with you fully 100%. Learning a new IDE or upgrades in the tools that you use or even a new framework can be time-saving and professionally useful. However, the rate of change is getting to be so fast that depending on a framework rather than principles is a fool’s errand–full of sound and fury; signifying nothing.

    One of the things it took me too long to work out is that Design Patterns are essentially a helpful set of models for applying principles. In fact, I see design patterns as a cheat sheet for applying good OOP principles, and not some stultifying set of modes that limit one’s ability to think.

    If you don’t first get the principles straight, you’ll never get the frameworks right.

  • Saibou

    IMO, there’s no opposition between a good knowledge of the frameworks and a better comprehension of the principles and patterns.
    likewise, you need a pretty large experience to figure out the principles and best practices.
    I consider it’s natural to begin by learning the frameworks in details and month by month you get enough experince to see beyond these details.

  • 5x1llz

    Sorry I’d like to add that sometimes some frameworks are so good and enticing, it’s hard not to just adopt them and get to bed ontime… i.e. S#arp Arch.. But I’ve refrained only so that I can learn MVC as much as possible first before jumping on a quick-fix OSS framework that hides all the plumbing a little too well.. that being said I still study it’s use of principles and the tool to see how others are leveraging and combining both for a super clean solution.

    It is really more work this way but the responsibility of learning is on the student… and it’s nice to actually know what’s going on as much as you can, so don’t always go for the magic-bullet OSS without knowing how to do most of it on your own.. this is another benefit to OSS.. you can just use them to learn…

  • 5x1llz

    great post…

    to be honest there has to be a balance because I have gone through enough job interviews to know that while they question you about OOP e.t.c. when you START the job they really want to know if you can do X with the set of tools they’re using.

    I find you need to have a good understanding of principles… and also keep up with all flavours and mixtures of tools

    In the past few weeks I’ve spent so much time on frameworks, because as you said they’re new frameworks OSS/MS coming out every freaking 3 minutes it’s ridiculous… I still have parts of C# 3 I’d like to play with but also have to find out all the innards of MVC and MVC Futures to keep up with the project I’m on and deliver this baby on time..

    it’s a real balancing act I tell you.. often times, I learn the framework, get it working and then refactor to principles as I learn them ( i.e. I start seeing more and more code smells and then refactor them or add new language acrobatics to them to keep them clean e.t.c. )

  • Joe Chung

    Don’t argue false dichotomies.

  • Jibey Jacob

    I’ve been working in this industry for well over a decade, and after a recent revelation I’ve had to make a broad overview of what’s been happening. I’ve learned lots of new frameworks, programming paradigms, programming languages, etc. during the course of my career. All this time I never knew that I was being robbed though. Almost everywhere I worked, they used Ethernet at Layer 2 to run IP over, and I never knew about Ethernet’s hierarchical nature. Why is Ethernet hierarchical? How is this hierarchy formed? Is there any documentation on this?

    I’ve sworn to never again work for any employer unless:
    1. Everything attached to the Internet around the planet is upgraded to IPv6. This implies use of InfiniBand at Layer 2, in lieu of Ethernet.
    2. The Internet is enhanced with the logic to biometrically authenticate human users and determine that the person being authenticated cannot be at more than one place at the same time. This requires the development of a new routing protocol that enhances IPv6 and one that uses GPS-bases addressing in addition to the functionality in IPv6 addressing.
    3. WiMAX is rolled out around the planet so I can use a VoIP phone on this newly enhanced Internet wherever I go. My phone must be intelligent enough to tell me whether any phone number is on a PSTN, cell network or if its a VoIP number, and I wouldn’t want to deal with anyone on a PSTN or cell network.
    4. When I do start working again, I wouldn’t want any device drivers running in the Windows kernel other than signed drivers from Microsoft. All other drivers will have to be user-mode drivers signed by their respective developer companies and certified by Microsoft HQL.
    5. The “friend” keyword has to be obfuscated in the C++ language.
    6. All monies that are due to me must be paid to me ASAP.

  • Peter

    Ayende covered a similar topic, which may interest you: “The difference between derivation and innovation” –

  • Ezequiel…

    Great Post…
    I think the error is to learn a new framework like a black box… Ok, if you have to learn a new one, go deeper into the code and understand what all those methods are doing.
    That will be you a better developer…

    sorry for my english, grettings from Argentina

  • David Hayden

    Well said, Ian.

    I think you’re saying, however, that learning new frameworks is not a bad idea as learning new frameworks often leads to learning new concepts, principles, and patterns.

    In fact, I think learning a framework, if it is a good framework, will help bring value to principles and patterns that are not often easily digested into value by merely reading them. Often you need to see them in action, which is what a good framework can do.

    That being said, however, you must be able to separate the principles from the framework and understand its value outside of the context of the framework to become a better developer.

  • marko

    excellent post :)
    I have a friend, and from college until now he was always trying to learn as he calls it: Concepts…so he learn about networking, about drivers and so on and so on…so now wherever he find job, doesn’t matter is technology mvc or actionscript, soon he becomes the best in that area…so, I can tell from this example and from my experience, you are right.


  • Parag Mehta

    Hi Ian, Nice Article!. I fully agree with your thoughts

  • Dave the Ninja

    +1 Ian. Very well put!


  • Dario Solera

    I completely agree: it’s very important to learn patterns, principles and best practices. You get better at solving problems, and that’s an invaluable thing.

    At any rate, I can see that some frameworks are pushing new/improved design paradigms that later became patterns. This would be an interesting discussion topic.