Computational Engineering 101 – Part 3: Skills of a Computational Engineer
Skills of a Computational Engineer
In Part 2, we discussed the definition of Computational Engineering as it relates to the built environment. In Part 3, we will explore the difference between a traditional Engineer and a Computational Engineer and the skills of a Computational Engineer. Again, we will stress once more that to be a Computational Engineer, you must be a good Engineer first.
So what then is the difference between a traditional Engineer and a Computational Engineer? There is a simple litmus test – ask the following questions:
- Do you know Engineering First-Principles?
- Do you code?
The answers to this are ‘yes’ or ‘no’. Given the answers, you can use the matrix below to decide if someone is a Computational Engineer or not:
From this it’s pretty easy to see that a Computational Engineer is an engineer that mixes good first-principles in engineering and computation. In this post, we will describe the skills of a computational engineer
A Computational Engineer’s Two Hats
A Computational Engineer has knowledge of both engineering design and computation. Before we combine these two topics, let us first recall the pecking order of each of them separately. We will start, as always, with engineering first-principles:
Recall that the items at the base of the pyramid are most important. A good engineer will have experience in all of these fields, but with a heavier focus on the items at the base of the pyramid. If all you knew was how to use engineering software, but nothing else, very few would consider you to be an engineer. Equally, if all you knew was Physics/Math/Geometry, you’d probably be called at PHd student or a scientist. An engineer a bit of of all of these fields with a twist of capitalism. Also, it is important note that the base of the pyramid is more about education where the skills at the top of pyramid are more about training (recall from Part 1 the difference).
Let’s have a deeper dive into the Engineer’s Pyramid and see what each level would entail:
- Physics/Math/Geometry
- Education
- linear algebra/calculus/differential equations
- Engineering First-Principles
- Education
- thermodynamics/mechanics of materials
- Engineering Codes
- Training
- ASHRAE/IBC/ACI
- Engineering Software
- Training
- AutoCAD/Rhino/Revit
As stated before, an engineer not only knows how to do something, he knows why as well. It’s like the difference between a cook and a chef:
Now, let’s have a look at the pyramid for computer science first-principles:
Many parallels can be gleaned from the engineering pyramid and this one. Again, let’s look at what each level of this pyramid would imply for a Computer Scientist:
- Mathematics/Logic
- Education
- Discrete Mathematics/Differential Equations
- Programming First Principles
- Education
- Object Oriented Programming
- Programming Languages
- Training
- C#/Python/Javascript
- Computer Science Software
- Training
- Visual Studio/Sublime/Brackets
In the end, if all you knew was programming languages, you would be a coder, but not nearly as useful as a computer scientist who envisions entire framework in which your code exists.
Computational Engineering exists somewhere between all the skills on these two pyramids:
In the figures above, you can see that there are many similarities between the base of knowledge one must have to be and engineer and to be a computer scientist. The wider of a base you have, the more powerful of an engineer/computer scientist you will be – more of a cook than a chef. At this point I want to address those who are saying “Ah, so Computational Engineering is me hiring/sitting next to a computer scientist who codes stuff for me”. Recall our previously defined definition of Computational Engineering from Part 2:
Computational Engineering is the use of bespoke digital tools created by engineers to facilitate the application of first-principles and deliver projects.
Computational Engineering is about the engineer taking responsibility for the digital definition of their design, not somebody else. The reason this is important is because it is inherently more powerful than just teaming up an Engineer and Computer Scientist:
The effect of an engineer knowing code isn’t just linearly adding the power of both pyramids of Engineering and Computer Science, but rather, the power explodes exponentially. Once again, I can think of no better words than our friend Richard Hammering to explain this concept, who back in 1997 said this:
“What is wanted in the long run, of course, is the man with the problem does the actual writing of the code with no human interface, as we all too often have these days, between the person who knows the problem and the person who knows the programming language. This date is unfortunately too far off to do much good immediately, but I would think by the year 2020 it would be fairly universal practice for the expert in the field of application to do the actual program preparation rather than have experts in computers (and ignorant of the field of application) do the program preparation.”
-Richard Hammering,
The Art of Doing Science and Engineering, 1997
Talk about a man ahead of his time – here we are in 2019 and all you can hear about is teaching kids to code because it’s as important as human languages and learning code as necessary part of your modern professional skill set.
So, here’s the good news – given our previous assumptions about your engineering skills, we can assume you have a great base in mathematics and the sciences which will serve as your first step on the road to computational first-principle mastery. You are already have the base of your second pyramid and at least some of the skills of a computational engineer – congratulations! Therefore, the next step on your journey will be to understand a bit better programming first-principles that will help you design the built environment. Equipped with this knowledge, the hands-on training that must happen for how to use programming languages and software will have a solid foundation.
Computer Science Fundamentals for Engineers
As we just discussed, there’s no way around it – if you want to call yourself a computational engineer, you have to know a bit about programming. This is a fundamental skill of a computational engineer. If you cannot understand how a computer works and be able to create or understand how bespoke code can help you design, you are merely operating just as a user and the limitations of your software of choice are the limitations of your value as a designer.
However, as seen in the Computer Science pyramid of skills, the best way to learn about programming is not just to jump in and start learning programming languages, but rather, to know a bit about the overarching computer science theory that is relevant to your problem. Learning just the syntax of a computer language will give you no context as to what you are doing and it will be easy for you to lose your way along your computational journey.
In this the following posts of this series, we will go over some of the technical fundamentals of what to look out for as you go through your Computational Engineering training. These computational first-principles will be present regardless of what software, User Interface (UI), or coding language you may come across. They are (in this order):
- Objects (Part 4)
- Algorithms (Part 5)
If you understand these concepts well, the will form a strong foundation to all the other skills of a Computational Engineer you will need. You will still need to undergo hours of learning the mechanics of various softwares, coding languages, and techniques, however, these fundamentals will form the backbone of your learning and serve to expedite your training in these mechanics. Equally, the backbone will assure that you stay grounded in first-principles problem solving as part of your approach going forward – again, it’s so easy to lose yourself in computation and solve the right answers for the wrong problems. Knowing a bit of Computer Science principles before getting started with Grasshopper or Dynamo will go a long way in your Computational Engineering journey. In the next post, we will show what skills you will need to be a Computational Engineer.