* This is a living document and will be update over time*
Why these Resources?
Along a software developer’s journey from post-grad to seasoned vet, you come across articles and literature that enlighten you, propelling your skills forward by miles rather than inches. This is a collection of those essential resources that I feel a software engineer should know to be an informed, efficient, and effective engineer.
- Maintaining Clean Code
- Database Design
- Lean Engineering
- Technical Decision Making
- Managing Deployments
- Container Orchestration
- JVM Tuning
- Machine Learning
1. Maintaining Clean Code
Clean Code (Book by Robert Martin)
“Clean Code” is one of those books that after reading it, you come out with an immediate feeling of both excitement (You know how to write maintainable code now!), and regret (you realize the code you have been writing your whole life is smelly!). While a few chapters are pretty dated technically, it successfully outlines sound practices to maintain hygienic object oriented codebases that can be borrowed for other programming paradigms. This book is a must-know!
Dependency Injection (DI)/Inversion of Control (IoC)
2. Database Design
Normalization is easy to avoid early on, but tough to ignore its effects later down the road. When designing databases, five extra minutes spent thinking about and adhering to normalization will save days, if not weeks, later on in redesign and data integrity issue resolution. Trust me.
Short walkthrough on Normalization:
3. Lean Engineering
Implementing Lean Software Development (Book by the Mary and Tom Poppendieck)
Those needing to prune, or cherry pick certain testing practices into their operations, can benefit from the diagram “Agile Testing Quadrants”. It outlines each test type’s organizational boundaries, initiation mechanism, and outcomes.
Is Unit Testing Worth it?
Chances are you eventually started work at a company whose culture had a baked-in focus on quality, where you set off following orders to test, then realized the benefits later. For some, you are one of the testing thought-leaders at your organization and have to sell the benefit! This article gives you the points that express why unit testing is more than a nicety.
Testing in a Microservices Architecture
5. Technical Decision Making
Building Consensus Before Commitment
Encroaching on the famed “How to win friends and influence people” genre, this article explains how and why you should take a holistic approach to presentations and multi-org affecting decisions.
A must in every developers exposure toolkit. The Thoughtworks team hand curates languages, frameworks, and practices organizations should adopt, trial, and assess.
Site Reliability Engineering Learnings
6. Managing Deployments
While not critical to know intimately, Terraform is an amazing option as a multi PAAS hosting framework and Infra as Code management tool.
7. Container Orchestration
Kubernetes vs ECS
While this article will quickly grow stale, it is a great comparison of two of the leaders in cloud container orchestration and hosting.
Class and Package Naming Strategies
While we all like to think we always execute the best file and class packaging practices, this naming and scoping refresher from Nikita Volkov can keep you sharp!
Scala Interview Questions
Extensive Learnings from JVM Performance Tuning
Profiling with VisualVM
This tool is awesome for investigating how JAVA options affect performance, and getting a feel for your apps overall health.
9. Machine Learning
10 Algorithms Software Engineers must know
Disclaimer on References
The resources in this list are intended to be self referencing and imply the original authors are the ones that are due an immense amount of credit.
Think a resource should be added to this article? Please submit it here: