I also share the thoughts of a handful experts, who were willing to be interviewed by Lisa de Kluijver or me and contributed with their experience. Special thanks to:
- Lieke Melsen – Assistant Professor Computation Hydrology at Wageningen University
- Thijs Damsma – Data engineer at Van Oord
- Jacco Hoekstra – Professor CNS/ATM (Communication, Surveillance, Navigation / Air Traffic Management), and former Dean of the faculty of Aerospace Engineering, at Technical University Delft
- Johan Tuls – Structural Engineer at BAM Infraconsult
- Philip Vollet – Senior Data Engineer at KPMG and Machine Learning and Natural Language Processing (NLP) specialist
- Maaike van Putten – IT trainer and developer at Bright Boost
This is the first of a series of articles about engineering and Python. Each time we will go deeper into engineering content and talk about solving specific problems. The next articles will be publised soon. So: stay tuned! Follow us on LinkedIn, so you do not miss the next article.
Boosting your digital transformation
Eight years ago, I graduated from Aerospace Engineering at the University of Technology Delft. During my study I used all kinds of parametric design models, advanced analysis and optimization techniques. When I started working as a structural engineer, I was disappointed: there was never time, budget, and willingness to create professional software tools that could make a big difference in the long term.
Frustrated by the large amount of boring and repetitive tasks of a typical engineering project, I went on making software tools using project hours. This was taking a little risk and it felt a bit clandestine. I was supposed to just update the models and reports, but it seemed that no one cared as long I was meeting the deadlines. I never regret this decision, as those tools enabled me to react more quickly to the many design changes in a project.
It took me a while before I discovered the best programming language to do this. At university I learned to use Matlab; however, not every engineering company I worked for could afford those expensive licenses. Frustrated by the limitation of my Excel sheets I decided to give it a boost by learning Visual Basic (VBA). What a bad choice. I wish that someone had told me: use Python!
With time I had a small library with codes. It was like having a box with digital building blocks that I could connect and combine to solve a specific problem, making it each time easier and quicker to make those programs. The advantages of having a software library were obvious, but why were the companies for whom I was working not building their own libraries?
It took me some time to understand. Many companies work project-based, and that was exactly the problem. Everything needs to be done between the scope, budget, and limitations of a project. This model does not stimulate creating software as a company, which can be used in several projects. Due the lack of good software, design changes need to be done individually by each discipline, models are updated manually and there is a lot of communication. Therefore, each change has a significant impact on the progress. I call this the sawtooth effect (see figure).
Making custom software tools as a company requires a change in mentality. It is investing upfront and benefiting later. Making a proper software tool from scratch is risky and can require a huge effort at the beginning of the project. However, when done properly, progress can go exponentially. Calculating and reporting a design change can become a matter of minutes (see figure).
At the beginning, progress is hard to track and makes people nervous. I think this is a big reason why many companies are not making the step to make custom software for their projects. The solution is investing in digital building blocks. Once you have a few, you can reutilize and connect them to make software applications quick and benefit immediate. This digital building blocks are assets for the company, which everyone can use and provide a long-term benefit.
Some background info about Python
Python was created by Guido van Rossum and first released in the beginning of the nineties. The aim was to help programmers write clear, logical code for small and large-scale projects. And that is exactly the reason python has grown as big as it is now.
There are a couple of reasons why Python has become so popular:
- It is free and easy to learn! For all programming languages it is probably the one that resembles English most. This means you can go fast from thought to code.
- It is not only about the language. It is also an amazing open and accessible world of knowledge and available resources.
- You can do anything with Python, from simple maths to scientific calculation on a supercomputer, including data sciences, machine learning, web-based applications and much more.
- It is very scalable and suitable for working with several people and from different disciplines. You can start small and slowly build up and digital empire. Do you not believe me? Google, Facebook, Instagram, Spotify and Netflix. They all use Python.
Digital Building Blocks
I noticed that the common approach to build scalable software and cooperate with other specialists is thinking in digital building blocks which can be connected to each other. This make the process versatile and scalable. Some benefits of using the building block approach are:
- You can build code fast by utilizing someone else work!
- It enables people to share knowledge in the form of code.
- It makes het easier to replace parts of your code.
- Makes growing the code controllable, as each block has a specific function!
This approach started in the software development community, with object-oriented programming and packages you could use to make your own software tools. Nowadays, it is becoming more popular in engineering, data science, architecture, and the scientific community.
Anything you can connect and command can be seen as a building block. It could be from a simple script, one of the many free Python packages or a FEM software.
Objects, the building blocks of Python
Python is object-oriented. This allows you to break down your software into small problems (objects) that you then can solve, one object at a time. It is like building something from smaller components. This is similar to how I, as an engineer, look at physical objects that have to be designed, built and maintained.
To make an object you need to define a class, which is a template to make objects where you define its behaviour and properties. A class can be used to make as many objects as you need. The great thing is that you can use properties of different objects for other calculations or creating a ‘larger’ object. For example, you can create many beam objects, and use its mass and stiffness properties to calculate the deflection in the bridge object.
Information between objects can flow very freely. This is totally different to scripts typically made when using Visual Basic, Matlab or in a FEM packages. Here the code runs top-down, meaning that changing something in the code will affect everything beneath it. This is like playing Jenga. The more complex it gets, the greater the chance it will collapse. With python this problem does not exist.
In general, you can see objects as digital building blocks for making a larger software program. Allowing different specialists to build, maintain and improve their objects, and share it with the rest to make something even more awesome!
Free building blocks
The Python Package Index (PyPI) has 243,692 packages you can use for free! Most are not self-standing software but building blocks for making software tools. There are packages for visualizations, machine learning, data science, numerical calculus and much more. Their quality is very high, so use them and build your code fast!
For example: Numpy can be used to do all kind of matrix operations. Its functionalities are comparable to MATLAB; Pandas helps you manipulate and analyse large sets of data without having to learn a specialized data-processing language; and PyTorch enables you to use machine learning without being a specialist. Which ones do you use the most?
External software is just another block
Quite often I hear that engineers are finding the limits of the standard software packages they use, and this is leading to a change in mentality. Nowadays, standard software packages are not considered to be the total solution anymore. These software packages are just part of a greater process and engineers are now searching for connectivity.
These days a large number of external software packages can also be commanded with Python. This is very powerful, as it enables you to use them like any other digital building block in your code. For example, you can combine a cost model made in Excel with a structural calculation to find the cheapest solution that satisfies the structural requirements. This can also be done with e.g.: Grasshopper, Dynamo, SCIA, Plaxis, Diana, Excel, ANSYS and Deltares D-Series.
As a engineering community we still have a great challenge: the distribution of knowledge. What do you think is the best way of distributing digital building blocks and making knowledge available to others? I would like to hear your opinion about this topic, so please leave your comment.
Personally, I think there are two groups: the programmer, who can read, understand, and use a code; and the end-user who cannot program.
For the first group, good distribution channels are still missing. As a result, many of these specialists are programming the same theories or creating programs for solving the same problems again.
I believe soon there will be marketplaces where specialist can offer the software applications they made, so they can used as digital building blocks for solving larger or more specific problems. There should be a financial compensation, such that companies and freelancers see this as an investment, and the creation of specific engineering tools is stimulated. Are you interested in this marketplace please like of comment on this article.
For the second group, the ones that cannot read code, another solution must be found. I am a strong believer in user interfaces and online software applications. This is the topic of a next article: how to make a professional application. Turning your code in something everyone can use.
Want to know more?
This is the first of a series of articles about engineering and Python. The next articles will be published soon. We will talk about how you can make professional engineering applications that everyone can use, as well as on how you can make parametric design tools using Python and common engineering software like Grasshopper, Dynamo, SCIA, RFEM and IDEA. To write these articles we interviewed engineers that make these kinds of tools on a daily base. Real pros!
Stay tuned! Follow us on LinkedIn, so you do not miss the next article.
Maybe you wonder why we are writing this. VIKTOR is on a mission to unleash the world’s real engineering potential. We are developing a platform where engineers can build their own web-based applications using Python. We work closely together with engineering, construction and manufacturing companies and help them boost their digital transformation. We would love to hear your feedback on our ideas, try out the platform, and help us create the perfect tools that enables you to:
AUTOMATE THE BORING. ENGINEER THE AWESOME!