Build Me Up Tear Me Down


It’s rather a peculiar state of affairs, but one sign of a well maintained infrastructure is that there is always some part of it under construction.

Right now downtown Seattle is in various stages of de- and construction as crews build light rail. For as long as I’ve lived here in Seattle there have been at least one or two construction cranes busy erecting a new high-rise. And personal experience tells me that somewhere in the city there is always a street being torn up and repaved. All of this means Seattle is growing and actively being cared for.

The same holds true for software infrastructure. Our automation stack will never be complete but rather is continually being reorganized and rebuilt and added to and subtracted from in order to evolve it to fit the needs we have today. Our dev team is doing the same to our product’s codebase, constantly carrying out small revisions and occasionally performing major renovations as they fix bugs and implement new features. And the whole team does the same to our various processes, changing those that aren’t working as well as we would like to make them work better.

This is true for people’s skills as well. An important factor when I evaluate both people on my current team as well as candidates I interview is what they are doing to keep their brain in tip-top shape. The best devs and testers read everything that might be remotely relevant to their work, have probably multiple side projects and investigations going, and actively look to learn from people smarter than they are. One of my current projects is learning Haskell, which is making my brain hurt worse than anything else I can remember. The brain is a muscle, and just as with any other muscle you have to push it past its comfort zone in order to make it grow.

If you look at something (city, design/code, organization, person) and don’t see any de|construction going on then it’s either dying or dead.


*** Comments, questions, feedback? Want a fun job on a great team? I need a tester! Send two coding samples and an explanation of why you chose them, and of course your resume, to me at michhu at microsoft dot com. Great coding skills required.

Comments (7)

  1. Drew says:

    Are you learning Haskell for the sake of learning or is it ok to write tests and tools in functional languages on your team?

  2. I am learning Haskell for the express purpose of making my brain hurt. But yes, it is perfectly fine to use functional languages or scripting languages or whatever seems appropriate to build tools on my team. Different languages have different strengths and weaknesses; every problem has unique conditions and constraints; for any particular scenario some languages will be more or less appropriate than others. Decreeing that one language must be used in all cases is just being silly.

  3. saraford says:

    You said, "what they are doing to keep their brain in tip-top shape" and "best devs and testers read everything that might be remotely relevant to their work."

    What about doing things that are non-work relevant, like hobbies? How would you rate non-work related activities in comparison to work-related ones?

    thanks,

    -sara

  4. If the non-work-related activities make your brain and/or body work, then certainly those meet the bar. Working out, doing martial arts (as you do), learning ballroom dancing, archeology,…if it makes your body and/or brain stronger it’s all good.

  5. saraford says:

    Cool, just curious. Thanks!

  6. zzz says:

    Have you read this "Haskell for C programmers" ? Especially this last page is moderately interesting:

    http://www.haskell.org/~pairwise/intro/section5.html

    quote: "That’s a big savings in memory, which translates into less memory reads and less page faults. Also, since the order of evaluation is unimportant to the programmer, the compiler can determine the fastest order."

    My question related to this is, could it be easier to make highly parallel-execution optimized compiler (and code for it?) for say Haskell than say C++/C#?

  7. It could be easier to create such a compiler in Haskell than in C or C++ or C# I suppose, but I’m not near enough of an expert in Haskell or compilers to provide a definitive answer. Do any of my other readers know?