The Pragmatic Programmer is a classic and is written in a very readable way.
The book covers core programming best practices from a pragmatic point of view, so the best practices are encouraged as guidelines you should follow as they are useful without making the best practice an extra rod for your own back. Alot of the topics here are the same as in Clean Code, although the philosophy in pragmatic programmer is abit more focused on getting the job done rather than creating the best possible code.
Some of the main topics are:
- DRY (do not repeat yourself)
- SRP (single responsbility principle - a function or class should do one thing with no side effects)
- Feedback loops (original specifications are just a starting point, programming is collaborative and dynamic and the spec will change alot so make small changes with the minimum viable spec and get constant feedback and watch it evolve.)
- TDD / BDD (testing code)
- Backup everything
- Care about code
- Delight your users
It encourages a breadth of knowledge over depth of knowledge approach, which has always been my favoured approach. I've always been more of a generalist than a specialist. One of my takeaways was from the challenge to read one professional book a month. Having read around 5-6 novels a month for the last two years swapping one of them out for a professional book seems reasonable.