A path to become a better dev: few skills you should try to learn
When starting as a developer, you may find yourself in a position where seniors or mid-level engineers guide you through the path of learning and improving your skills. Sometimes it is a wide path with multiple technologies, paradigms and projects, but sometimes you can end up using the same tech, architectures and solutions over and over again.
To prevent losing focus of what you learnt in college, or learning all this for the first time, here’s our recommended path of some of the most important things you should try to learn and improve in your career. This is not a “What you have to learn to be a good programmer” but just “You might find these interesting” because I know after a long day digging and looking for that bug it’s a bit tough to open a book about data structures and read a hundred pages of pure theory instead of playing Ghost of Tsushima or just Netflix and chill.
It’s possible you already have many skills we talk about here but in case you don’t, we have a list of books for each skill in case you want to start learning it.
Data structures & Algorithms
A developer should know, not control, a good amount of data structures to use in the real world. A good developer knows when to use a Dictionary instead of an Array and what strategy to apply to it to improve the software you are building. Having for loops inside for loops will tingle your good-developer sense.
Recommended books:
- Introduction to Algorithms by Thomas H. Corman: probably one of the best books to undergraduate students or developers about algorithms and data structures, with accessible analysis and comprehensive explanations.
- Algorithms by Robert Sedgewick & Kevin Wayne: Some people call it “the best book about algorithms in today’s world” and it’s not a brag, the book is used widely in universities and schools around the globe to teach algorithms and data structures for sorting, searching, graph processing, and string processing, for instance.
Best practices and clean code
It’s not casualty there’s a whole section dedicated to best practices and clean code. It is imperative to know when you’re writing something will be understandable and scalable in the future and when it is something shitty you’ll have to rebuild it in two weeks. Clean Code is essential to improve your developing skills.
- Clean Code & Clean Coder by Uncle Bob: Considered the holy bible by a lot of people. We’ll just say it’s a good reference with good examples, guidelines and best practices to start coding better from the very first page. If you can only buy one book from this list, it should be this one.
- Refactoring by Martin Fowler: sometimes you will face poorly designed, coded, architectured programs and you’ll feel the inevitable need to improve it and fix it. This is the book that explains to you how and why.
OOP
Object-oriented-programming can look old-fashioned but it’s one of the most used paradigms nowadays. The principles behind inheritance, aggregation, encapsulation, instantiation and more are very common and mandatory in wide-used languages like Java, TypeScript or C# and can be a good approach for almost any solution you find yourself building.
- Head First Object-Oriented Analysis and Design: A Brain Friendly Guide to OOA&D by Brett McLaughlin: The book that’ll teach you how to do object oriented programming and analysis the good way and very teach-focused. Might look complicated, this book makes it very accessible.
- Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (Pearson Professional Education) by Craig Larman: considered the best book for start thinking in classes and objects. You will learn object oriented programming with case studies and will master UML through this book.
Functional Programming
Functional Programming is not new and it’s also one of the most used paradigms. Widely used in Python, Javascript or Haskell, learning FP will make you rethink the way you code everyday and it’s very important to rethink and learn new ways of solving everyday problems that could arise, for example, in React or Angular. Another reason to learn FP: FP code is stupidly beautiful and concise.
- Haskell programming from first principles by Christopher Allen and Julie Moronuki: I learnt Haskell back in college. Only a few practices and classes but it was a huge change immediately. Coming from the C#/Java world, FP can be challenging but Haskell is perfect to learn and improve your skills in this paradigm. Think different and overcome problems the other way around, this books will guide you through this path.
Testing
Most programmers spend their entire life without writing a unit test or, what’s worst, writing integration tests thinking they are unit tests. Don’t be this programmer. Even though it’s tough, testing is essential.
We all want to code new features everyday but this feature must have a good base to work. Testing gives you a good understanding of where your code is gonna break or where to look for a bug you just discovered.
- The Art of Unit Testing: with examples in C# by Roy Osherov: Do you want a book to learn unit testing ‘from zero to hero’? this is your book. You’ll learn not only test patterns but also organisation, maintenance or data mocking setting aside all the base concepts for unit testing.
Architecture solutions
Ok. You’re a mid-level developer, you know how to work in a team, fix bugs, test, OOP, FP, write clean code, build new features… what about building EVERYTHING FROM SCRATCH. It’s not easy, and some decisions can take down the entire project because you’re not thinking ahead or you’re biased by your experience rather than the solution you are building.
From an MVP app to a ML life-changing platform, it’s good to focus on the solution and the scope and it’s mandatory to know how to build scalable products and take good decisions. Architecture software solutions may appear easy when you have a greenfield to build anything you want but can be very difficult to predict the challenges you’ll face. It happens everyday in every company.
Try to learn in advance as much as you can, solve future problems in the solution architecture. Some decisions like migrating a string to another table can make a huge difference in the future.
- Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans: Not only it’ll help to think and analyse problems in a daily basis but will help give you tools to improve the software before starting the project and after releasing it taking refactoring to the next level. It’s old (more than 15 years ago) but it’s a must-have.
- Clean Architecture by Uncle Bob: After Clean Code, this should be another important book to buy. Not only learn to code clean and better, but learn to take the “Clean Philosophy” to the way to think, plan, build and deploy software solutions. You won’t be a software architect after reading it (you can’t learn and call yourself architect, to be honest) but you’ll have a lot of insights of what an architect must have to be so-called that.