I started my programming career in a large waterfall company working on their C++ software. We had multiple layers of analysis documents describing what should be done to implement each feature. We had no unit tests. The software was so large the current version of Visual Studio couldn’t handle it all. It took so much time to compile (over six hours to compile everything) that we were doing partial compilations refering to a nightly build and it still took over an hour to build if you had enough code modified. Launching the software to test your features often took over 5 minutes. We were working on two different features at the same time because of all the waiting and you worked on your features alone for weeks if not months at a time. The company was hiring developpers by batches of 20 to 30 and giving them two weeks of classes when they started. Refactoring was pretty much out of the question because we couldn’t deliver features fast enough.
I then switched to a smaller company working in an agile process. I learned about not writing analysis documents, sprint reviews, retros and plannings, unit testing, refactoring, compile and execute cycles requiring seconds instead of minutes. They taught me about Uncle Bob and Clean Code and even offered me to go follow one of his classes.
It surprised me how much he was accurate when talking about large companies as it was exactly what I had lived previously. It encouraged me to continue learning even more about clean coding, Test Driven Development (TDD), Domain Driven Design (DDD), architecture and to transfer my knowledge to others around me. It started with doing small sessions with my coworkers, and it is now evolving into this blog.
So what is Proper Code? It’s everything surrounding clean code, TDD, DDD, architecture. How to code properly so it’s easy to make changes down the line and so that the development process doesn’t slow down as the code base grows. It’s also best practices of the languages and frameworks you work with and knowing the new developments for those languages and frameworks.