All this after a night of getting up to speed on the best frameworks for build a cross-platform (mac/win/ios/android) graphics-heavy app…

In my other life I am a researcher of psychology, or rather of natural systems which happen to include the human mind. I am currently working through my dissertation which will involve looking at the qualities of theories in a move to unite the sciences. A lot of that work has to do with thinking about the way we think, and I am beginning to see some overlap into software design.

I have written a few times about the ideal software toolkit (The Mythical Toolkit, What makes a toolkit great), and it isn’t until now that I am beginning to think that well designed software shares certain organizational qualities with theories in the natural sciences. Now, there is the perspective that “good” software just does it’s job and doesn’t cost us any more money. This is true. However, I think that this quality of “good” is not mutually exclusive with “good” design. That is, a network of conceptual linking which is robust and scalable, and applicable to other problem domains. I suppose if that is the use of a bit of code then it fulfills the aforementioned notion of “good” software.

I imagine that “good” theories in the natural sciences follow that second notion of good software. They are robust in their predictiveness, and stand the test of time and challenge in the face of new information. I would say that “Good” theories have well-developed concepts which apply to more problem domains and even to other fields. This is the reason I am so intrigued with the idea of systems theory, because it provides a robust abstract framework for building specific theories about anything.

So to improve on my writing in The Mythical Toolkit, I would now refine that a “good” toolkit is one that has well-developed concepts that are somehow more in line with principles found elsewhere in the natural world. I realize that this is a stretch into some pretty deep territory. But it seems like we start with some self-imposed idea (i.e. hypothesis, prototype) of what a natural theory or toolkit should be, and then we compare it with our observations (i.e. experiment/refine, test/retest) until it more accurately answers the problem question (i.e. publication, gold master release). This process helps us move from our ham-fisted hypothetical attempts at problem solving into one that is more “in line with nature,” so to speak.

I remember that one reason I moved from software to psychology was because I was tired of feeling sad when a beloved project or third-party toolkit became obsolete. The software world moves so fast that it’s quite dangerous to get attached to any of it. I began to feel that it wasn’t possible to become a true master of software, which is at the very least concerning. C and C++ have been around for ages because they strike at something more fundamental than the odd javascript library you see be born and die within the course of a year. C and C++ continue to evolve yet strike such a deep chord in the world of computers that they endure as a granite cornerstone amidst this absolute creative and chaotic insanity that the internet has wrought. Something here tells me that the more we understand the difference between a poorly-developed conceptual framework and well-developed conceptual framework, the better we will be able to produce them and also vet them, and the longer they will stick around. I wonder that this topic may not get much attention in the software world, or the world of natural sciences for that matter.