* 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.
Contents
- Maintaining Clean Code
- Database Design
- Lean Engineering
- Testing
- Technical Decision Making
- Managing Deployments
- Container Orchestration
- JVM
- JVM Tuning
- Scala
- Machine Learning
Resources
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!
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
Dependency Injection (DI)/Inversion of Control (IoC)
https://www.martinfowler.com/articles/injection.html
2. Database Design
Normalization
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:
http://www.informit.com/articles/article.aspx?p=30646
3. Lean Engineering
Implementing Lean Software Development (Book by the Mary and Tom Poppendieck)
4. Testing
Testing Quadrants
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.
https://stackoverflow.com/questions/67299/is-unit-testing-worth-the-effort
Testing in a Microservices Architecture
https://martinfowler.com/articles/microservice-testing/
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.
https://www.kitchensoap.com/2017/08/12/multiple-perspectives-on-technical-problems-and-solutions/
Technology Radar
A must in every developers exposure toolkit. The Thoughtworks team hand curates languages, frameworks, and practices organizations should adopt, trial, and assess.
https://www.thoughtworks.com/radar
Site Reliability Engineering Learnings
http://danluu.com/google-sre-book/
6. Managing Deployments
Continuous Integration
https://www.thoughtworks.com/continuous-integration
Git Workflows
https://www.atlassian.com/git/tutorials/comparing-workflows
Terraform Up-and-Running
While not critical to know intimately, Terraform is an amazing option as a multi PAAS hosting framework and Infra as Code management tool.
https://www.terraformupandrunning.com/
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.
https://platform9.com/blog/kubernetes-vs-ecs/
8. JVM
Scala
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!
https://stackoverflow.com/questions/17121773/scalas-naming-convention-for-traits
Scala Interview Questions
https://www.journaldev.com/8958/scala-interview-questions-answers
Effective Scala
http://twitter.github.io/effectivescala
Profiling
Extensive Learnings from JVM Performance Tuning
https://www.infoq.com/presentations/JVM-Performance-Tuning-twitter
Profiling with VisualVM
This tool is awesome for investigating how JAVA options affect performance, and getting a feel for your apps overall health.
Walkthrough: https://www.youtube.com/watch?v=z8n7Bg7-A4I
https://visualvm.github.io/documentation.html
9. Machine Learning
10 Algorithms Software Engineers must know
https://www.kdnuggets.com/2016/08/10-algorithms-machine-learning-engineers.html
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: