The software skills engineers need
Alex Egeler
Finding parents energizing jobs | Career coach for parents | Lead dad of 4 boys | Certified EQ coach | Former aerospace executive |
I was recently asked a great question by an engineering grad student: "What software skills do I need and how can I learn them?"
As an mechanical/aerospace engineer, I never took a CS class in college (huge mistake) so I have had to learn on the fly, but I tell every engineer of all stripes that on top of engineering and specific domain knowledge, software engineering is going to become more and more critical in the future. Additionally, much of the software engineering that I use on a daily basis is not necessarily about data structures or compiler syntax, but the process of developing professional grade software. The world of software development has evolved so much and integrated so many different processes together to reduce errors and streamline production - many of these processes have been co-opted back into design and manufacture of physical systems. I believe that the more of these techniques you can learn and get in the habit of using, the more your professional options will open up.
Here are some of the things that I wish I had learned, and would be thrilled to have candidates know coming in the door:
- Basic software architecture - how to sit down and write a well organized, object oriented program from scratch. I "learned" how to do this watching Stanford's CS106 lectures online but I'm sure there are a lot of options to gain these skills and many of the interviewees we see today know this a lot better than I do.
- Test driven development (TDD) - understanding how to separate out the difference between designing code and writing code, and using test-first principles to think about what you are writing and why before you dive in and start writing. This video from lynda.com gives a good overview, but it isn't enough to dig into the details. Uncle Bob does a much more in depth version that provides three laws of TDD that are succinct and elegant. If everyone followed them I think we would live in a very different world.
- Agile development - what it is (and isn't). It is important to understand why it came to exist, and I think this is a nice summary of the history and how the shift from waterfall methods to agile came about. The agile manifesto is something that I remember reading for the first time and thinking that it made perfect sense to always keep code working and that the process was such an important part of software development. I'm not advocating for using Atlassian tools (although we do and they are certainly pretty good), but this is a solid overview of the difference between scrum and kanban.
I'm sure that there are more things that would be great to know from a software perspective as an engineer, but these are the main ones that jump out at me. What else have you engineers out there found useful in your career from the software development world?