Do we know why we’re doing this? A post on the golden calves of software development


Today, I want to talk about various practices that we as software engineers follow as a matter of tradition. As such practices go, we sometimes ascribe meaning to these practices that deviate from the original purpose of the practice. These practices sometimes consolidate into “best practices” or “cultural axioms”. To reify this, I’ll present a favorite interview question that all Oregon State students taking CS 261 learn to solve: Reverse a Linked List.

According to Hillel, a CS scholar that shares his wisdom via tweet, the question, reversing a linked list, became popular in the 90s. Decades afterward, we still ask software engineers this question; ergo, the question is a timeless one that evaluates problem-solving ability as the greybeards intended, right?

Hillel’s findings show that this is not the case. Hillel points out that back when the question became popular, software developers were living in a memory-constrained world. Indeed, a python dict takes approximately 5% of the Apple II’s entire RAM! In this environment, it was crucial that developers use languages that are low-level. C, the most popular language before the aughts, fits the bill. It then also makes sense why linked list, a data structure with low memory overhead, became popular during this era. With all things considered, Hillel argues that our famous linked list question was never designed to assess problem-solving ability but rather to assess language proficiency in a language close to bare-metal.

I wonder if there are any other practices we hold as axioms that we hold in our minds that are wide deviations from the intended task. A good example is how we assume that enterprise projects must be object-oriented in nature. How else could developers be able to visualize such large projects if we didn’t express our codes as entities talking to each other?

However, the rise of functional programming begins to poke holes in the supremacy of OOP languages in enterprise systems. We see that many big data applications use Scala instead of Java to handle high-performance tasks at scale. We see that Kotlin, a programming language with functional characteristics is beginning to supplant Java in the Android dev world. Even Java 8, an older implementation of Java language supports streams, which allow developers to take a functional approach.

I will take the preceding developments to try to minimize the number of assumptions I make. I will pursue the following questions: Do I truly understand why I’m doing something or following best practices? Or is this just a golden calf that I’m holding in my mind?

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *