Moldable Development

Moldable development is a way of programming through which you construct custom tools for each problem. 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.

YOUTUBE Pot9GnHFOVU Tudor Gîrba - Moldable development

See also Moldable Development (Tudor Girba guest lecture) , 5, SMA — Software Modeling and Analysis, Published by Oscar Nierstrasz, Universität Bern on 14 October 2020

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 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 we are like most people, we have checked our 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?