Improving my Software Engineering knowledge with the giants
Hundreds (or even thousands) of people are finishing their Computer Science studies. Some of them from online universities (if it was not important before the pandemic, now is better than ever); some other students because they enrolled on prestigious universities, and another group are getting some experience from a set of courses that don’t give you any official recognition worldwide accepted, but just a certificate because you completed a specific percentage of their course.
When I was a student, I enrolled in an official institute in the same village where I was born. There, I got two titles related to the Computer Science studies I applied. One was for general knowledge about several topics (including computer building, networking management, software development using C and PHP, and more). The other was to improve my knowledge and get official recognition and title as a System Administrator. Do you know what the funny part is? I started working as a Software Engineer in the morning and a System Administrator in the afternoon. Then, I moved to a DevOps position. Finally, I have ended being a full-time Software Engineer.
The transition
When I started my career, I was aiming to work as a System Administrator. But life went in the way, and I needed to cover a Software Engineering position, using a tech-stack that I never heard about it until that day. And that’s how I started to become a full-time Software Engineer.
At that time, the main problem was I needed to keep myself focused on several fronts simultaneously, and that didn’t allow me to keep improving in the way that I wanted. Still, I was able to deliver functional software. But I realised the most important premise of my life, and I want to share it with all of you:
“The more I learn, the more I realize how much I don’t know.” ― Albert Einstein
The consolidation
After being a Software Engineer for the last 14 years, I realised the true time I started to improve was around 6 years ago when I left my home country and moved to get new job opportunities and experiences. I ended working in the UK, where I have learned and improved the following points:
- Automated testing
- SOLID Principles
- Design Patterns
- …and patience… getting tons and tons of patience…
And this was the time when I started to hear and learn more and more from the three Software Engineers that, in my humble opinion, are the best mentors I ever had, even when they didn’t mentor me specifically, but through books, videos, and publishing. These three people are:
- Robert Cecil Martin (AKA “Uncle Bob”)
- Martin Fowler
- Kent Beck
Robert C Martin
Uncle Bob is an awesome America Software Engineer who has been both an instructor and a best-selling author.
He is well known and most recognised for being one of the founders of the influential Agile Manifesto (what we know as Agile Development) and developing many of the SOLID Principles that nowadays are one of the best ways to prove you are a Senior Software Engineer.
His (probably) most important book that has been a reference in my career is “Clean Code: A Handbook of Agile Software Craftsmanship”.
Martin Fowler
Martin Fowler is another American Software Engineer, author and international public speaker on many conferences.
He is well-known for specialising in Object-Oriented Programming, Object-Oriented analysis and design, UML (Unified Modeling Language), Patterns (such as Dependency Injection) and Agile development, including Extreme Programming. He also introduced the Presentation Model’s architectural pattern.
His (probably) most important book is “Refactoring: Improving the Design of Existing Code”, which popularized the practice of code refactoring.
Kent Beck
Once more, Kent Beck is an American Software Engineer who has been the creator of Extreme Programming and one of the Agile manifesto's original signatories.
Both Extreme and Agile methods are closely associated with TDD (Test-Driven Development), of which Kent Beck is (probably) the most well-known and leading proponent. He also pioneered the Design Patterns and wrote the SUnit testing framework, the xUnit design source.
Kent Beck has been one of the collaborators of Martin Fowler’s Refactoring book. He is also known for being Facebook’s employee for a while. Still, he also described Facebook’s source code development as chaos where no one ever implemented any of the most important Software Engineering principles and patterns. He has talked about it on several events that you can find online.
Resources
Images
- https://www.scnsoft.com/blog/how-to-become-a-devops-engineer
- https://careerkarma.com/careers/software-engineer/
Books
- Uncle Bob’s Clean Code book: https://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
- Martin Fowler’s Refactoring book: https://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672
Websites
- Uncle Bob: http://cleancoder.com/
- Martin Fowler: https://martinfowler.com/
- Agile Manifesto: https://agilemanifesto.org/
- Design Patterns: https://sourcemaking.com/design_patterns
- Code Refactoring: https://refactoring.guru/refactoring