Pistacia Vera

Every few years a developer, usually a really talented one, will makes a reductive and exclusionary statement that amounts to "You are not a real developer if you do not know (or do) this…". This statement is usually followed by declarations that the layer of abstraction a set of productive developers have invested in is simply not appropriate for a professional programmer. Here are some of the more notable examples I have encountered:

  • C++ vs. C#
  • Visual Basic vs. C
  • Assembler vs. C
  • JavaScript vs. Every JavaScript framework

As the person on receiving end of this kind of critique it can be genuinely distressing because the abstraction layer you have chosen represents an investment of time and energy, and the hope is that you have become successful in the creation, delivery and maintenance of an application. Yet some expert developer, probably more senior to you, has trivialized and minimized your hard won experience and by extension work you have produced.

This is no limited to developers either, design elites for example will often insist that only work created in Adobe Illustrator ... on a Mac represents the only relevant workflow. Regardless of the discipline this idea remains problematic for a number of reasons, but for now I do not want to focus on what you lack, but on what you can accomplish.

Chocolatier vs. Chocolate Maker

For those of us only interested in consuming chocolate, the chocolatier and the chocolate maker represents a distinction without a practical difference. In reality the chocolatier chooses not to be concerned with making her own chocolate, she is satisfied with producing delightful treats made from a raw material produced by someone else. This does not make the masterpieces any less tasty, or her skillset less important to consumers. The chocolatier has decided not to be encumbered with chocolate in its unprocessed form.

Chocolatiers do not have to be chocolate makes. Cooks do not have to be farmers. I am not even sure it would help.

It is not about you

While this kind of exclusionary messaging is confusing and generally espoused by seemingly brilliant engineers I would like every developer, regardless of the tool you have invested in, to consider this question "Can you craft a product that is useful to you or others?". If the answer is yes and it is working for you, great!

We tend to judge others (their habits, tools, etc.) based on the path we have personally taken, often when we give advice we can make the mistake of giving advice to a younger version of ourselves. This idea of encouraging others comes from a good place but can do real damage when poorly stated, so taking the time to listen, identify and empathize with developer in front of you is critical when sharing experiences.

I want to encourage you to master your layer of abstraction as necessary and when you find some natural limit that is frustrating or halts your progress, consider taking a look at another tool or, indeed, a deeper and possibly more robust abstraction. Understanding the next layer down is empowering, however, if you are producing useful and valuable work for yourself and others, not knowing the layer below is fine also.

For developers already inhabiting that deeper abstraction consider the ways you can encourage exploration or even how you can help fill the gaps in layers above you that might assist others.