Michael Platt's WebLog

Computer Engineering

Blogs

Architects and Developers

  • Comments 55
  • Likes

So one of my colleagues reading yesterdays blog shouted out to me across the office “You only like architecture because you are a c**p developer”. I took this as British humour (I hope!) however it is reasonably accurate; I am a poor programmer. The last time I had to do any serious programming was 5 years ago when I had just started at the Office Strategy Group in Microsoft at Redmond. The group was working on the digital dashboard and they needed some sample web parts to ship with the kit. As I was the new boy and everyone else was busy I got detailed off to write them. Given that it had been many years since I had done any programming, I didn’t know anything about web parts or the digital dashboard and I only had a week to do it (all excuses!) the very buggy code I produced wasn’t a great surprise but even so a decent programmer would have done a lot better.

 

So whilst I am a poor developer I am actually a pretty good architect. Indeed most architects I know are not great programmers and most great developers I have come across are not very good architects. This is of course a generalisation but I think its a reasonably valid one (and please lets not have the “My Aunty Gertrude is a red hot C# programmer working on the Longhorn Kernel and she architected the whole of the Megabank customer processing systems in a day on a napkin” comment, there are always exceptions!)

 

I think this is because the skills required to be a good architect are subtly different from that of a good developer; typically an architect is working with complex, multidimensional and in many cases conflicting requirements and solutions whilst a developer is working a complicated set of programming constructs and techniques. Typically developer problems are solved by the well known divide and conquer (D&C) approach; however D&C does not work for architectural problems because of their multidimensional nature. Typically good architects work with a simulated annealing approach to problem solving where you expand the problem domain and then use D&C. This means that architects are much more comfortable with multidimensional complexity; it also means they are a lot slower in getting a solution, especially if the problem is simple!

 

I have done a ton of interviewing of architects and typically look for this simulated annealing in their problem solving approach using a number of architectural problems that I have come across that cannot be solved by D&C (in fact make the problem worse). One of my favourite non technical interview questions is very simple and designed to see how people analyse problems. Their response allows you to categorise them roughly into mathematical, logical or analytical thinkers. Developers tend to be logical, architects tend to be analytical, I not sure what the mathematicians are! Again, these are generalisations so please don’t tell me about your Auntie Gertrude. Here’s the question if you want to see what you are:

 

I have a cup of coffee and a cup of tea. I take a teaspoon full of coffee and put it in the tea. I then take a teaspoon of the tea and put it in the coffee. Which is the purest, the coffee or the tea? Explain your thinking.

 

I will put the answer to this in the feedback. Have fun!

Comments
  • Most people use a logical approach to this problem the first time and that will give you the coffee as the purest. This is the wrong answer. You tell them it is wrong and ask them to do the problem again, again explaining their thinking. There are now two approaches, the mathematical (which is actually quite difficult) and the analytical which is very easy. The key to the analytical approach is to take the limit case, if I put a cup full of coffee in the tea and then a cup full of the tea + coffee in the coffee cup then the answer becomes obvious... they are the same.

  • WHAT?!?!?!?!?!

    :)

  • How about physicist, who will ask you to accurately define term 'purity', cofee and tee surface tension and their density to evaluate the 'purity'? Do I have a chance to be a good archtect? :-)

  • Nope, that's a pretty typical dev response actually! :)

  • Hehe - I thought logical (probably why i am still a programmer!)

  • Well I dont want to sound strage or anything, but, even without using the limit I'd have said "the same" after some thinking but not thanks to the limit case. You brought back some coffee with you when you took a spoon of tea+coffee, so you'd intuitivly think you made the coffee more pure by bringing back some coffee into it, but doing so, you removed some coffee from the tea :) And the exact quantity you removed that made the cofee "purer" is also what made the tea "purer", so they're the same... I don't know, just seems more intuitive to me that way, than the limit (which I agree works too) :)

  • To easily quantify the problem, think of ten atoms of coffee in a nano-teaspoon. Put them in the tea.
    Then whatever ten atoms you take from the tea will leave the opposite matter behind. If you return 7C and 3T then 3C and 7T will remain in the tea and therefore both retain the same purity.

    Now apply to any dimension and quantities and the result will always be the same.

    Rule: Assuming that the structure of atoms don't change ;-)

  • I came up with the same answer as Julien Ellie for the exact same reason. It was almost intuitive that they would be the same, but I recognise this as the mathematician's approach and in order to prove Julien's theory is correct you have to prove that the amounts are all equivalent, which is non-trivial.

  • So, I still don't get it.. :) I mean, I get the answer, but I don't get which answer maps to developer versus architect in your original post :)

    The person who says the coffee is purer is the developer or the architect? And since that is the "wrong" answer - what does that say about the difference between developers and architects?

  • I sort of get the analytical approach but I find it easier to justify it mathmatically:

    C - Cup of coffee
    T - Cup of tea
    x - Tablespoon

    Tc - Final state of cup of tea after a tablespoon of coffee has been added and a tablespoon of tea+coffee has been removed.

    Ct - Final state of coffee after a tablespoon of coffee has been removed and a tablespoon of tea+coffee has been added.


    Tc = T + xC - xTc ...........1
    Ct = C + xTc - xC ...........2

    Assume C = T = y
    Tc = y + xy - xTc ...........3
    Ct = y + xTc - xy ...........4

    Solve 3
    Tc = y + xy - xTc
    Tc + xTc = y + xy
    Tc(1 + x) = y(1 + x)
    Tc = y

    Sub value of Tc into 4
    Ct = y + xy - xy
    Ct = y

    Meaning both are the same. I'm a developer so what does this make me?


  • the easy way is to reduce cup to one teaspoon

  • Ok, so I wasnt very clear on the answer. After someone has got it wrong they can do one of 3 things:
    1 Redo the Logic correctly as Julien and Sam did - that is the developer approach
    2 Do the Math - I suspect that is an algorithmic person who is happiest doing the structure which the underpin the program - Is that right Confused?
    3 Do the Analytic approach which is the architectural way - like Madhatter and Ian

    Again milage may vary and so on

  • Dont think so, that was one of the best math solutions I have seen. Of course your assumtion C=T=y may not be true but simplifies things no end. Try without that and it gets much more difficult (which is where I failed when I first did it)

  • Maybe, but I think it could be down to a lack of imagination on my part :-)

  • Definitions
    V = vol in 1 cup of tea
    s = vol in 1 teaspoon
    dC = final vol of coffee in Tea
    dT = final vol of tea in coffee

    Description 1: We start with 1 cup of liquid, remove 1 teaspoon, add 1 teaspoon, the result is: V - s + s

    Description 2: We start with 1 cup of cofee, remove some cofee and add some tea, the result is: V - dC + dT

    Since it is the same operation (we're just describing it differently), the resulting volume is the same. We have 1 linear equation (1st degree):

    V - s + s = V - dC + dT
    ==> dC = dT

    There is as much tea in the coffee as coffee in the tea.

    Up to here, I'm on the same line as the previous answers, however for a full analysis, I think

    If we define impurity as the relative volume: dC/V and purity as its one's complement 1 - dC/V (and 1 - dT/W for the other cup) we can see that the bigger cup will be "purer". Purity will be the same only if both cups have the same size.

    Assumptions
    1-The spoonfuls have the same size (if the cups are the same and the spoons are different, the cup that ends up with more liquid will be purer, if both the spoons and the cups are different, it is not possible to determine the result without having more information)
    2-We're dealing with reasonably "real world" items (e.g., no negative volumes, no zero volume cups, no infinite sizes
    or spoonfuls that are bigger than cupfuls)
    3-We're considering a closed system (volumes don't change because of external reasons e.g., none of the cups have a leak, nobody takes a sip from one of the cups, evaporation doesn't have to be considered, there are no significant temperature or pressure changes that affect the volume, etc.)

    Thank you Michael, I'd heard this a long time ago but revisiting the problem was a fun exercise on examining assumptions and thinking out of the box ':)