A post on reawakening ideas from my past and modelling the future
Wolfram technology has always been one of those things I think I would like to know more about but some inertial stops me from getting more deeply involved.
However, over the 2019/2020 holiday period I was able to catch up on some podcasts and the TWIT network’s Triangulation came to the top of the list including an Interview with Stephen Wolfram. The whole interview is pretty cool and worth a listen. Critically, I learnt that there is a free tier that lets any use the Wolfram Language via the Wolfram Cloud for free. This is really enabling as it lets you explore the language only needing a browser and really helps take the inertia away to exploring it. It limited to the amount of computation and support available, but pretty amazing anyway.
Over the next few days I was able to learn the basics of the language and tie that back to points that Stephen was highlighting in his interview. I will admit that I have not had so much fun for years. Two major things that I think are worth further exploration because the resonated so much for me are:
- Symbolic Computing
- Computational Thinking
Symbolic Computing
Why did I resonate so much with symbolic computing. For that I need to take a small digression into the past (apologies) …
I like to think of my first 10 professional years (1999-2009) a Career 1.0. I joined a startup company called InforSense in parallel to working on a PhD program. Although I started as a software engineer, I spent most of my time in product management working on the design of the platform. InforSense developed what we might call today a Data Science Workbench: Our users built visual programs (we called them “WorkflowsW) from a toolbox of Data Access, Data Manipulation, Machine Learning (Supervised and Unsupervised) & Visualisation components. We subsequently developed extensions this workbench to include Bioinformatics, Cheminformatics, Text and Imaging Mining.
The history of InforSense and its underlying technology is another story, but it’s important to know that the semantics of our workflows were based on functional programming (Haskel, ML, etc) principles. Each workflow was a function, typically over a collection of data such as a relational table. Data was immutable, Workflows had no side effects. This has some great advantages in allowing a workflow to be automatically partitioned into HPC environment, but made workflow construction complex as there are subtle dependencies between components that needed to be managed. To solve this we developed a technology called “Metadata Propagation”. This allowed a workflow designer to use a symbolic representation of how each component would transform data to assist in the building of workflows. This symbolic representation of “Metadata” would “propagate” around the workflow and enable the much more sophisticated control of the complex component dependencies.
Why the long trip down memory lane – Because symbolic computing is at the heart of the Wolfram Language. For InforSense it was a highly powerful but unappreciated part of the system. For Stephen Wolfram symbolic computing became the core of everything he built in Mathematica and the Wolfram Language.
Why is symbolic computing powerful? For me it is because it allows top down programming. I can write a program that models the logic of a process, without having to apriori define all of my components in the process.
For example: recently I have been working on technology to optimize the control strategy for bioreactors for antibody production. You start by modelling the reactor control set points, the reactor transfer functions, the reactor input and output materials. Typically in most programming languages you would need to define some some sort of object or type for each of you entities and then you can program the logic between them. In Wolfram I can program the logic between them and just have a symbol representing a concept that has not been fully thought through. Critically. The Wolfram language will still execute code that is written with a symbol representing an uncoded idea. Which means you can play and explore with the high level computational logics without having to do lots of the details upfront.
For complex system design this is hugely helpful because you can really think through and get your computational logic right without having to write heaps of scaffolding code. It the type of work I love to do as a programmer more thinking and less yack shaving.
Computational Thinking
Beyond the symbolic computing paradigm, there is another factor about both the interview and the associated API library of the Wolfram Language that really resonated with me – that was the approach to computational thinking that Stephen Wolfram was articulating. It started when he described the approach the Wolfram team use to develop new language features and how that increases their computational vocabulary. He viewed this is so useful the design review meetings are actually broadcast live online (see an example here).
Stephen’s rational for this is that when the language is designed, it forces the designers to create a computational model for the underlying topic. Essentially defining an API creates a way of thinking and vocabulary for the computational manipulation of an object. When hearing this I immediately started to reflect on the computational topics I can think very clearly about and the type of computation I do not have such clarity about.
The answer to this comes again for thing I have either become an expert in or designed. So going back to InforSense. I am very comfortable in thinking around the core InforSense components:
- Relational Table Manipulation (Selects, Filters, Derives, Joins, Grouping, Pivoting)
- Unsupervised Learning (Various Clustering algorithms)
- Supervised Learning (Various Classification and Regression algorithms)
- Dimensionality Reductions (Algorithms like Principal Components Analysis)
- Data Visualization Approaches
I would say I am even more comfortable in components sets where I was responsible for the API design:
- Cheminformatics
- Bioinformatics
- Translational Informatics
- Statistical NLP
- Image Minings
These are areas I have built a good computational vocabulary around. What Iam finding is there are areas that I am finding myself needing to operate in 2020 such as Tensors or Graphs that I have not developed such a sophisticated vocabulary. These areas however are things that the Wolfram Language has very good models for already.
So simply by starting to internalise the Wolfram API’s (as I did with the core InforSense components 20 yrs ago) I are able to increase the range of vocabulary and range to design systems that base their computation on these types of structures.
Summary
I’ll wrap these post up at this point – Symbolic Computing and Rich APIs for complex computational structures – These are the things I like very much about the Wolfram Language. I like them both because of the elegance in modelling computation. But also because they resonate so deeply with ideas my colleagues and I used to play with everyday 20 years ago.
They are unfamiliar to many programmers and you’re not going to get a fancy app built using these technology. But you will design a much better application architecture or service back end if you have designed in Wolfram first.