Algorithms and data structures.
“Algorithms” by Robert Sedgewick and Kevin Wayne. The book starts with an introduction into Java language. You can skip it if you can read examples without it. You also can watch it in the form of YouYube videos:
“MIT 6.006 Introduction to Algorithms” course. It is more difficult to watch than the previous videos but it contains some additional information.
Linux / Unix
Linux runs about 93% of Internet servers. You can see you need to have some knowledge of Linux.
“The Linux Command Line, 2nd Edition.” Read at least the first half of this book, practice what you’ve read and you are an advanced Linux user.
“UNIX and Linux System Administration Handbook.” This is if you want to understand Linux/Unix systems on a system administrator level. You can be a great software engineer without it. But you can be even greater if you understand Linux deeper and can setup it by your self.
Motivation and history.
It helps if you know who was doing all it before you. Who belt all those computer and programs we use today. I strongly advise you to read this book. It is very motivating. It is also good to know what the word “Hacker” originally meant.
“Cracking the Coding Interview” book will help you to prepare for really tough interviews. It also gives some general idea of what you need to know to get a job. Obviously some companies have much higher requirements than others. This book covers the most difficult cases.