There is so much information out there today, that it has become almost impossible to differentiate between signal and noise.
Our brains are great at making connections - the quality of these connections depends upon the information we feed it. Garbage in, garbage out.
So it is extremely important to consume quality information and learn from the best - not just for engineering, but for everything that you are trying to learn. In this post I am sharing a few resources that have helped me become a better engineer.
A Philosophy of Software Design by John Ousterhout
This is one of my favourite books on software engineering. It talks about breaking down complexity in the context of software engineering - which is exactly what we do on a daily basis. It introduces quite a few concepts and patterns that can really help you avoid costly mistakes.
The Pragmatic Programmer by Andy Hunt and Dave Thomas
This is one of the most popular books on programming and can be considered as a guide for anyone who is starting out in the field. Like the name suggests, it talks about low level concepts that you can apply right away to improve your programming skills.
Head First Design Patterns by Elisabeth Freeman and Kathy Sierra
This is very useful if you are working with Java and explains when to use what pattern, with real world examples. Knowing these patterns and understanding when to apply them correctly can really help you become a better engineer and avoid costly mistakes.
Clean Code by Robert C. Martin
This is a classic book and helps you recognize the common mistakes everyone makes while programming and teaches you how to write clean code. Rather than the book I prefer this youtube playlist where the author himself talks about a lot of the concepts covered in the book.
I think there are tons of good youtube channels to learn software engineering and programming from, but here are some of my favourites:
Computerphile - this channel coverts topics in computer science and engineering like compilers, algorithms, cryptography, networks etc.. I love how every concept is explained by experts with detailed, easy to understand presentation.
thenewboston and Derek Banas - both of these are amazing channels run by amazing people for people who are looking for tutorials to follow along and learn by doing. Both of them have tutorials on multiple languages and topics.
sentdex - if you work with python, you have definitely watched a sentdex video at some point of time. One of the best channels for software engineers in my opinion because of the wide variety of topics covered, simplicity and detailed explanations. Lots of great series on machine learning, data science, deep learning, self driving cars, NLP, robotics and many more.
Traversy Media and Web Dev Simplified - if you are interested in web development, then both of these channels can be great resources to learn about web development concepts and some beginner friendly projects to follow along. Traversy Media has a crash course on almost every framework or library available for web development.
Gaurav Sen and Tech Dummies Narendra L - both of these are great channels to learn about system design and architecture patterns. They have detailed videos on how to design popular applications with great explanations on the concepts used and why they are important.
freeCodeCamp.org - this is a great channel for almost every tool and subject in software engineering with detailed tutorials from various people. Some of the videos are really long, so I recommend watching only parts that you need.
The Cherno - if you are someone who is interested in game development, then you definitely need to check out this channel. There are tons of videos on C++ and even an on going series about the guy building his own game engine.
Hussein Nasser - a great channel especially if you are interested in backend engineering. Hussein talks in detail about concepts, tools and even has tutorials that can help you become a better engineer.
These are only some resources which I found useful with good signal to noise ratio. I have only included books and youtube channels here keeping a beginner engineer in mind. But there are tons of websites, podcasts, courses, newsletters and github repos out there with great information on software engineering.
I think the the core skill for all of us to master is the ability to differentiate signal and noise. It can help us look into the right places, consume the right content from the right people - eventually leading to better connections and ideas.