This post is about my reflections on the last several years as Mechanical Engineer and then transitioning to Software Engineering. Over the years I've thought about what it takes to become good at any engineering field. I've narrowed down three things:
- Basics
- Tooling
- Composition
Basics
You can not be a good Mechanical Engineer if you don't understand physics and likewise, you can't program well if you don't understand basic Algorithms and data structures. Basics, typically taught in the first year of degree programs are the most essential building blocks for surviving as Engineer, yet students often tend to give very little regard to them as they are just "starting out". Whatever you're working on, you can likely trace it back to something you have learned in the first year of your professional education.
Tooling
You are only as strong as tools in your toolbox.
A computer, CAD/CAE software, Spreadsheets, debuggers, Text editors, version control system, web search... are all tools used by Engineers. You need to identify what tool you use and spend considerable time mastering it. This is usually never taught in colleges, so you have to figure out a way to master them on your own. You should have will to spend 1 hour to automate a manual task that would have taken 10 minutes.
Composition
Finally, the way you compose multiple tools, basic knowledge into something that solves a problem is the ultimate power of a good engineer. This is often called problem-solving, but problem-solving is nothing but breaking a problem into tractable parts and then solving those with tools and knowledge you already possess. All the knowledge and mastery of tools are of no use if you can't compose them to solve a real problem. It is unlikely that you'll be exposed to problems in college that test your composition skills well, so spend some time dealing with real problems.
Conclusion
I only have advice for myself and anyone who wants to get good at engineering. Don't forget the basics, sharpen your tools, and solve real problems.