I have spent a lot of time this past year with Blender and the Blender Python API. In that time, I realized Blender does something very unique with its GUI design. Basically, everything in Blender can be modified through Python scripts.
Users typically approach the Python API with the goal of developing new tools. Sooner or later, they realize that everything in the Blender GUI is built with the exact same API. In other words, Blender can be modified in place. Blender is so impressive to me as a software developer, because it has to be the biggest and most complex modify in place software suite I have ever seen. For sake of comparison, we will establish some definitions below.
We define some types of modular software here to aid our discussion.
- Modifiable in place – all or most of the interactive and core elements can be altered within the software.
- Extensible in place – functionalities can be added, but core elements cannot be altered, with in the software. These typically require a platform-specific scripting language.
- Static in Runtime – functionalities can be neither modified nor extended within the software.
In producing this list of examples, I realized that almost all of the software we use in our day-to-day lives is extensible in place. I could not think of any software suite other than WordPress that I felt was modifiable to the degree that Blender is.
- Modifiable in place
- Extensible in place
- Excel (and Microsoft Office in general)
- Photoshop/After Effects
- Google Chrome
- Static in Runtime
- TurboTax/Quicken/H&R Block
- Windows Movie Maker
- AOL Mail
Why, How, and Where is this possible?
Blender can only be modifiable in place because it is open source. In other words, any software that is modifiable in place has to be open source to some degree, because modifying functionalities in place requires the user to view source code. For example, in Blender, if we hover over any button, we can see the Python function that is called by the button. If we right-click, we can click “Edit Source” to edit the source code. From there, we can modify anything we like, and the GUI will respond to our changes within the same Blender session.
Now, I do not think the modifications in the above example are good ones, but the benefits of this functionality are clear. These benefits apply any software that is modifiable in place.
- Users extending the software can learn how from the horse’s mouth.
- Power users can customize their software.
- Users and reviewers can audit the software to certify its reliability and accuracy.
- Contributors can develop open-source projects without the need for a complicated development build.
My Vision for GUI Design
In short, I want to see this line of thinking break into every market of software development.
In my first book, Automated Trading with R, I made frequent mention of the opacity of commercial trading systems. Sometimes, optimization procedures in commercial systems produced unreliable or biased results. I designed my own trading system purely to combat this opacity. This would never be an issue if I were able to modify things like Tradestation and CQG in place, both to audit their algorithms and implement my own improvements.
When I use Photoshop, I do not know what 80% of the words in the menus really mean (e.g. inner shadow, tilt-shift blur, feathering edges). If I could open up the source for any Photoshop function, I may realize some simple truth (e.g. feathering edges is a Gaussian Blur between the picture and a white layer around a polygon). The same goes for After Effects and Illustrator.
The principle is the same as graphic design. I have seen audio effects called “Hyper/Dimension” and “Matrix”, and then each audio effect has a flurry of associated knobs that are equally as confusing. Instead of poking around and figuring out what sounds cool, I would like to know how they affect the audio that pass through them.
I would love if my task management software could be arbitrarily customized with programming tools. I would use it to great effect.
Programming Languages, not Macro Languages
Many of the software suites I use in my day-to-day life are extensible. I am a programmer, yet I do not extend them. These include Microsoft Word, PowerPoint, Excel, Photoshop, Chrome, and many others. I do not extend these software suites because I do not have the time to learn a new macro language specific to the suite. I commend Blender, Maya3D, and WordPress for being extensible via Python, C++, and PHP, respectively, because these are common languages with large user bases. Any extensible software suite that wants to have an active plugin development community needs to rely one of the many languages common to programmers.
I would like to implement a trading platform using these design principles as an open-source project. I feel it could be tremendously helpful to the world of trading and banking. I will continue to develop add-ons for Blender, and may release some as products in the future.