As I am about to complete my undergraduate studies (in Computer Engineering - 2017 to 2021), I have decided to dedicate this blogpost to list down all the reference books/lecture notes I have used in the past 4 years. In the future, if I further recall any important references, I will surely update this blog post. This list will be particularly helpful to students enrolled in Mumbai University. Unless otherwise mentioned, do assume that the books were purchased from amazon.in.
For most of the core subjects in Computer Engineering, I do not recommend reading guides. They are often plagiarized, filled with grammatical and conceptual errors, and contain low-quality images. If you have recently started your undergraduate studies, I highly recommend reading Teach Yourself Programming in Ten Years.
In Addition: Lecture notes by L. Lovasz and K. Vesztergombi (Yale University, Spring 1999), and by Eric Lehman, Tom Leighton, and Albert Meyer (MIT, 2010) are helpful.
In Addition: Competitive Programmer’s Handbook by Antti Laaksonen (Draft July 3, 2018) is helpful. For a dive into advanced data structures, I recommend exploring Topics in Advanced Data Structures (Stanford CS166 - Spring 2019, relevant Hacker News discussion).
In Addition: For a quick summary, I recommend reading Discrete Mathematics and its Applications by Kenneth Rosen (Chapter 10 - Boolean Algebra).
An interesting quote from the book: Two things that can wreck a good CPU run are interrupts and page faults.
In Addition: Prof. V Kamakoti's lectures on Computer Organization and Architecture (IIT Madras) are very intuitive.
In Addition: Operating Systems: Three Easy Pieces by Remzi Arpaci-Dusseau and Andrea Arpaci-Dusseau is a good substitute. While I have yet to go through Think OS: A Brief Introduction to Operating Systems by Allen Downey, do check it out.
In my opinion: Many computer networking courses (taught to Computer Engineering students) in India start with the physical layer and move upwards to the data link layer. While following this approach, the professors often skip the application layer due to time constraints. As mentioned in this book's title, it takes a reverse approach - starting with the application layer and skipping the physical layer. I strongly believe that the book's top-down approach is the best way to teach a computer networking class. Moreover, the diagrams presented in this book are highly intuitive.
In Addition: Lecture Notes by Prof. Dheeraj Sanghi (IIT Kanpur - CS425) are a great resource.
Alternative: I recommend referring to Andrew Ng's weekly lecture notes from Coursera and Deep Learning by Ian Goodfellow, Yoshua Bengio, and Aaron Courville. Moreover, r/machinelearning has a curated list of advanced courses in machine learning.
In Addition: Slides and suggested readings from Stanford CS224N by Christopher Manning, slides and reference material from CMU CS 11-747 by Graham Neubig (Spring 2020), and Jacob Eisenstein's Natural Language Processing (2018 draft) are helpful. For non-neural NLP models, Natural Language Processing with Python by Steven Bird, Ewan Klein, and Edward Loper is a great resource.
In Addition: The authors taught an online course complementing the topics mentioned in this book.
This is not a reference book, however, taking this course will help you understand topics such as shell scripting, version control, debugging, profiling, etc.