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.
Defintions
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.
Examples
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
- Blender
- WordPress
- Extensible in place
- Excel (and Microsoft Office in general)
- Tradestation/Metatrader/CQG/Bloomberg
- Maya3D
- Photoshop/After Effects
- Postman
- Google Chrome
- Static in Runtime
- TurboTax/Quicken/H&R Block
- Windows Movie Maker
- Photobooth
- iMessage
- 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.
Financial Trading
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.
Graphic Design
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.
Music Production
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.
Task Management
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.
Conclusion
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.
Hi Chris, this is a very inspiring article! It makes me want to try Blender again even though I don’t have a specific need to at the moment, apart from the fun of playing with computer graphics.
You mentioned wishing your task manager was customizable which made me wonder what you use. My manager wants us to move to Jira since he had that successfully implemented at his last job, particularly because the developers there had been able to customize it for their needs. I haven’t used it yet so don’t know if it qualifies as modifiable-in-place, or just extensible-in-place. I understand it is customized with Java so this hits your “programming language not macro language” point, although it wouldn’t be my favorite one to use.
You also mentioned WordPress as a modifiable-in-place system. I’ve just been learning it recently due to an upcoming website upgrade for our company. I’ve been thinking that one could write a plugin to provide a task management system. I know there are some project and task management systems for it but haven’t tried any of them yet. But I think the WordPress environment is fertile ground for building a modifiable and personalized task management system where lots of parts of the system have already been provided: storage, display, admin and management, etc. I’ll let you know if I make any progress towards it!
Todd
Cool stuff! Best of luck on your projects.
To your question on task management: I think WordPress would offer the closest solution to a modifiable-in-place task manager at the moment, given you start with an existing scheduling plugin. The guys at Teamwork.com have a decent API to work with their task manager, but not to modify it.
Good article. I really like this about Blender as well. And Blender is the perfect type of software for Modifiable in place.
Not so much for WordPress. Partly why I like building sites with other CMS. CraftCMS for example. Craft is extendible in place but, in all the right places. You can still see the source to better understand what’s going on behind the scenes but, it’s a framework and needs to be treated as such (it’s OSS and build on FOSS but, currently, it’s not FOSS.)
Think of it as being in the middle between Modifiable in place and Extendible in place. With WordPress, on the other hand, it can end up being like the wild wild west and one can end up being the horse whisperer to some bucking bronco. Ever take over a less than stellar WordPress build before? Not fun.
It’s not a huge deal in Blender, for example, when I open up a .blend file and things are all over the place it takes just a second to get it back to where I like it. That’s not the case with WordPress. Plugins alter how Blender works. And most of the plugins fall into the extendible in place category, as they should, but, on WordPress, when I need to remove a plugin, it could break all the things. Not so much in Blender.
You’re partly talking about Blender from the context of a Python developer and how Blender really makes it easy to learn what it’s doing under the hood directly inside the GUI? Yes, I really like that about Blender too. And I realize I might not fully understand your grand vision here and how it should be applied to other categories of software but, for me, I like some structure to things. That is to say, Extendible and Modifiable both have their place and we shouldn’t completely to one over the other.
Having a unified front (in this case, a GUI/Admin panel etc.) is okay by me, in a certain context, anyway. CMS for example. Sure, I lose a bit of freedom and sure, freedom comes with a price but, that freedom provides me some peace of mind and makes my life quite a bit easier.
Opening up a hand-me-down client site for the first time and wondering what’s on the menu for the day gets tiring. Sometimes I want to know what I’m dealing with beforehand. With WP, every time I open a new site I have to learn the admin panel all over again because all the themes are different. All the plugins the devs used to build the site are different. Visual Composer one day. Advanced Custom Fields and Timber the next day. Some crazy custom theme that some dev thought would be cool because he was learning on the job and having a joy ride at the expense of his clients another day kind of tiring.
Anyway, the point I’m trying to make is that although Blender is amazing in this regard, and that I fully understand where you’re coming from, not everything is well suited for Modifiable in place. If done right, Extendible in place can be very nice too.
I agree with you because I was also thinking about the possibility that the structure of Blender can be applied to other softwares related to financial data providing or analysing like Reuter or Bloomberg. There is already most customizable and well-known platform, Eclipse, though. So I am trying to figure out how I can apply layered object relation concepts to software that deals with financial information, rather than the aspect of customization.