The Pragmatic Programmer.
This book is a classic that will help you create better software and rediscover the joy of coding. You'll learn how to approach tackling different problems in your future professional career.
Working Effectively with Legacy Code
This book will teach you how to get legacy code ready for testing and how to identify where the code needs to be changed. It will help you understand the general mechanics of software change like adding features, fixing bugs, optimizing performance, and improving the design.