Executable design notations: Standard C++, Smalltalk and LISP
The most influential design and programming mindsets that have shaped my own frame of mind are: Standard C++, Smalltalk and LISP.
Many things nowadays considered new on software design have been –in fact- already present on those mindsets since time ago. I am so glad to see people at Microsoft taking sound concepts from those mindsets.
Just as natural languages have deep impact on how wide or narrow our thoughts can be, the same is truth in the case of the artificial, symbolic programming languages we make use of to instruct computers. The practice of multi-paradigm design is yet another helpful part of what makes a professional software designer.
I have been researching —for some years now— about the properties of the medium of expression for design decisions made by professional design practitioners in several engineering disciplines and looking for what in software design exhibit those very same properties. The results of my research are spread all over my digital stores, taking many formats, e.g., essays, experiments, executables, designs. There is a project in place to put all together in a coherent and shareable form. As part of the conclusions is the —already known— thesis that programming languages, related compilers and programming environments are our actual medium for design expression. In other words, the source code is the actual design of software. No other medium has the properties for which can be called a design. No diagrams or any other non-executable notation whatsoever, only the ill-fated denomination: source code.
Instead of source code —since time ago— I use the more proper term of detailed design; being the technical document from which a software product actually is made. In fact, this is only a bit closer to the measurable objective reality. There is another perspective, by Clemens Szyperski, which insightfully accounts the source code (a.k.a. detailed design) as the blueprint for a software factory: the executable. The executables are in fact a software factory that produces the actual software products: the in-memory active instantiations of executing programs.