The contextual nature of software and the importance of tools
Software is shapeless. We, humans, need a shape to reason about anything. Tools provide the shape of software. By molding our tools to match the context of our systems, every problem in software can be exhibited in a way that a human can relate to and reason about.
Software is highly contextual. Context has many forms. Simply choosing one framework over the other will change your constraints, the code will be organized differently, and the debugging problems will be different. All these pose different needs, and tools have to acommodate them. For tools to be effective, they need to take that context into account.
A tool that gives you a button encodes in that button an assumption about your specific question and bakes the solution in the response. However, when context is king, we cannot predict specific problems. We can only predict classes of problems. That is why the environment should focus less on hardcoded buttons and more on providing you ways to build your own buttons.
McLuhan's law, or why tools are essential in software engineering
In a brilliant summary of Marshall McLuhan's work, John Culkin warned us that “We shape our tools, and thereafter our tools shape us”. This is a remarkable statement that deserves closer scrutiny. If it is correct, we should explicitly choose the tools we use because they will determine the way we are going to think.
If you are like most people, you have checked your smartphone within 10 minutes of waking up this morning. This need did not exist before the introduction of the smartphone. The correlation indicates that is not unreasonable to view the tool as having manufactured the need.
Software is data. Data does not have a shape. Yet, we need shape to reason about it. The shape of software is provided by the tool. That makes the tool essential. So, what characteristics should the tool have?