Create shortcuts, learn tools and build muscle memory
Two things matter to be a good software engineer: vision and execution. While you need both to be successful, I believe fast execution is more important than vision for a few reasons:
- It doesn’t matter how good your vision is if you are unable to make it happen – they are just ideas. You don’t even have proof that they are good ideas in the first place
- Executing fast means you can also quickly correct errors (in case you made a non-optimal decision). This allows you to build experience faster and this is the most efficient way for you to develop a good vision for your domain.
I’m a very efficient software engineer today. This stem from three thoughtful and/or lucky investments:
- I learned the tools I need to be effective (e.g. grep, sed, vim etc.) – e.g. you should be able to quickly transform data into the format you want, remove duplicates, sort data etc. The tools themselves don’t matter too much (e.g. you can format data with grep/sed, with Google spreadsheet, with macros inside vim etc.)
- I have built many shortcuts for repetitive tasks but also for the ones that incur a cognitive overhead (e.g. displaying a path between 2 bazel targets, checking out a branch across multiple local copies of a given repository etc.)
- I have built muscle memory on top of all my tools/shortcuts: I can quickly do the boring tasks without thinking which leaves more brain power to think about edge cases, interaction between components and more complex logic. This is what allows me to work on a second pull request while the first one is building/running tests.
All three points above didn’t happen overnight. They are the fruits of years of shortcuts/scripts/config written that I have been carrying around with me – my vim config is ~20 years old at this point and my .bashrc has been in append-only mode since I had a computer.