Books

If you have time, reading good books is one of the best ways to get a deeper understanding of software engineering. This, in turn, can also help on the interviews, especially on the system design round.

I recommend the following books:

  • Effective Java – best book on Java, and I would recommend reading it even if you mostly use some other language.
  • Designing Data-Intensive Applications – a very good overview of the big distributed systems, and one of the best technical books I've ever read.
  • Clean Code – classic book on writing a good code.
  • Building Microservices – good book on microservices (without any unnecessary hype around them) that also provides a good overview of topics of security, testing, deployment and others.
  • Design Patterns by Gang of Four – classic book on design patterns. If you don't read all of it, make sure to at least know the following patterns: Singleton, Builder, Observer, Decorator, Facade.
  • Cracking the Coding Interview – I've read just several interesting chapters from there, but it's still a solid book about interview preparation in particular.
  • Modern Operating Systems – some chapters in this book provide a nice overview of hardware, memory management and other systems related concepts.
  • Learning PHP, MySQL & JavaScript – this book, which you can just skim in one evening, surprisingly provides a good overview of many important web concepts.
  • Coders at Work – book of motivating interviews with great programmers.