My journey
Programming for me started with the details. I enjoyed tinkering and writing fun small side projects. I would obsess over how to properly setup vim as my IDE. I would take pride in knowing the nuisances of the tool. I spent countless hours figuring out how to piece lines of code statements together to get something that I want come to fruition. I think with any new venture, one does not know where to start and so the best way to start is to pick a place and start learning. The details mattered and that’s where I spent most of my time.
Time is limited
However, I’ve come to learn that all that learning and tinkering will leave me in the same spot. This is fine as a hobby but what if I want to take my skills to the next level? For me, I realized that the next skill up is to build larger software applications, not for a company (which I already do) but for myself. This goal has many challenges, the most important one is time. Writing code takes a lot of time, and I know so because I spend my full time writing software applications for a company. I also have a personal life with family and so time is limited. I’ve learned that given a short amount of time, I can still produce a software application. The key is to build and reuse.
Build and Ruse
Every line of code that you write has bugs, and you need time to flush out those bugs. Code lines that are out in production and are being used have been tested and are less prone to bugs or failures or unexpected behaviors. So the best lines of code aren’t the new ones that are written but the existing ones. Therefore, the best software practice that I’ve come to learn is to re-use existing lines of code. At some point in an engineer’s software career, you’ve come to learn that almost every problem has been solved by somebody, one just needs to find the solution. Therefore, the best tool is to scan over all available software packages to look for examples of battle tested code. That is in-fact the best code.
This kind of thought leads to the conclusion that one does not learn very well in school. That is, copy and paste is the best skill you can have as a programmer. Copy and paste can come from existing code that you’ve written, or it can come from open source publicly available code. Overtime, a great programmer will know what is actually good existing code.
Going fast
So this leads me to the last train of thought, to go fast you need to build components, use them, and then re-use them. Find what works and stick to that. What works doesn’t always have to be the latest technology. Pick a solution that you like and stick to it. Build on top of it.
So how do I go fast? For me, I like use AWS services for my backend. For my frontend, there are many frameworks to choose from. I pick the one that is right for the job and just build on top of that. Every project will re-use existing lines of code from my previous project. The idea is, if it takes me 1 week to build a continuous pipeline, can I reduce that time down to 1 day for my next software project? The answer is yes. I can use AWS CDK code that I’ve written for my first project, and re-use it for my next one. That takes the setup time which was high in the beginning due to learning how the pieces work down to almost nothing due to copy and paste.
And that’s the theme. The first time you build, you will go pretty slowly. But if you find yourself building the same thing again, then it should be much faster the subsequent times.