Do you credit any particular set of books for the advent of your expertise in math and/or computer science? The book that was of the right difficulty at the right time to ignite the intellectual curiousity that has made you go forward since.
I failed the interview for an internship I really wanted in my 2nd year of engineering; I did get a shit internship that summer, but being really shaken at my incompetence, I took up this book, and quite honestly, it changed everything!
It truly sparked an interest in systems for me. The book helped me build a strong foundation in systems; Processes, memory, filesystems, networks, concurrency, synchronization and more. After reading OSTEP, it felt like an epiphany, and I charted a path for the rest of 2 years of college around distributed systems, systems research, and virtualization.
And the best part is that all this knowledge is free! Kudos to Professor Remzi and his work!
Authors deserves respect for keeping this book free.
We were lucky to have a paperback low-cost-poorer-countries edition of The MINIX Book[1]. The code in the Minix book was an eye opener.The code clarifies the concept and sharpens the understanding.
Later on in my career as driver/firmware programmer, Computer Systems - A Programmers Perspective[2] and Unix Systems for Modern Architectures[3] helped a lot to clarify confusions and mysteries.
This book broke down a hard and mysterious topic (operating systems) for a new CS student like me into everyday analogies, which almost eradicated my fear of the subject matter. It had the appropriate amount of technical details to be usefully informative for a college class while also inspiring a more in-depth read of other material that are much more boring. The book is the reason why I love operating system so much, and I continued to take more CS classes as a math major.
Although I haven't completed it fully, but it is absolutely a masterpiece. The structure and the lucid explanation is something every author should learn from this. Not too yechnifal and yet covers every fundamental aspect.
This alongwith Nand2Tetris course can make your understanding of computer and programming works almost complete.
I was lucky enough to take Remzi's OS course. Both he and his wife are excellent teachers, and really truly caring people. I haven't kept up with him since school, but he was the best professor I had and it wasn't close.
Remzi was my favorite teacher by far. His OS class took me from being somewhat interested in computers and CS because I knew there were good jobs on the other side, to being fully interested in computer science and learning everything I could. Truly a wonderful teacher.
SICP for CS and programming. That book (and its exercises) really instilled in me the thought patterns that drastically improved my programming skills and made me realize how important fundamental CS knowledge is to being a good programmer. What I learned from that book was: becoming comfortable with recursion, realizing the importance of abstractions, functional programming concepts and it gave me insights into how interpreters and the machine work.
I studied math in university and the book that really improved me mathematically was baby rudin. I really struggled with this the first time I worked through it and had to also fall back on Abott's analysis book, but after my first analysis course I worked through Rudin again and it just clicked. The exercises are really well chosen and the text is just so on point. Every sentence in the book is extremely carefully chosen and of fundamental importance to what Rudin wants to teach you.
It's really rare that you find textbooks that almost kind of have a certain magic to them, like you are directly taught by one of the greatest minds in that field. These two books definitely meet that criteria.
+1 for baby Rudin, while I wouldn't say it was THE book for me, it was certainly one that gave me a proper understanding of mathematical proofs as opposed the mroe applied mathematics books I had read until then. And the exercises are excellent!
The best programmers have deep understandings of both the physical and theoretical theories of computation. Most programmers have a better understanding of the physical: Processors, memory, networking, operating systems. Functional programming is the super power that reconceptualizes the endless tape wiggling of the Turing machine into a coherent, flowing calculus.
Regarding SICP. The first chapter is too mathematical. At least at first glance. Is that true? When did you do SICP? How mathematically mature were you?
Highschool math is all that is required for it from what I remember, definitely doesn't require a lot of mathematical maturity. Even if you would somewhat struggle to completely understand the math, the ideas they try to teach you should still be accessible in my opinion.
Code, by Charles Petzold. It came to me at exactly the right time, and broke through the biggest conceptual barrier I’d had until that point; how do you actually go from logic gates to general purpose computing? Having Petzold walk you up the ladder of abstraction, never missing a link, really got me over the hump of treating all that complexity as a black box. On a meta level it gave me confidence to go approach apparently impossible things with an open mind and dig deep enough that you see how the “magic” works.
I'm not sure, but I think that when I looked into it, I found out that Code started from a level or two lower, but doesn't go up as many layers of abstraction as TEOCS.
This is the same answer for me. I picked it up because as a teenager I thought it was about encryption (didn't know the word at that time). It also had the effect of introducing me to the right section of books in the library.
That one is good too, though it can get a little obscure in some sections.. I tried reading it twice! The first time I was stuck on the memory chapter. The second time I was stalled by the clock and synchronization thing, but it's still a great book. I hope I can muster the courage to read his Annotated Turing Paper.
This was going to be my suggestion. I was disparately taught all this stuff in uni, but this book joined all the dots for me. It's really well written and perfectl paced. Seconded!
An introduction to Genetic Algorithms by Melanie Mitchell. I picked it up in a charity bookstore believe it or not and it prompted a lifetime interest in data science and the field that turned into machine learning.
Purely functional data structures by Chris Okasaki. Just totally changed my perspective about all sorts of things in computer science. As well as being one of the most advanced comp-sci books I've ever read, it's truly mind-expanding in every possible way. How many comp-sci books have you read that make you question how something as basic as a number is stored?
All positional number systems but he really goes deep on binary number representations using lists and fancy heaps. I'm not going to post a link because you should buy the book to support the author, but since it is basically a second edition of his PhD thesis you can find that online if you dig around.
The introduction gives a history lesson, a great description of the method of exhaustion with descriptive drawings, and some very straightforward proofs on finding the area under the curve for parabolic segments via some basic infinite sums (no limits), all in 10 pages in a conversational style. And it just gets better from there.
My dad gave me his book he used in the 70s and I read it in high school in parallel to the textbook the school issued. Everyone thought I was some genius because I thought calculus was so obvious and I could explain it so well but I was just parroting the text and proofs from this book, basically verbatum. I told the other kids to use it as well but no one did.
+1 for Apostol V1! I also read it in high school, ended up testing out of Calc 1 in Uni, having learned plenty from reading that on my own.
As you say, it really is so conversational and easy to follow. Starting with integration works really well, you build lots of sums and then use a supremum/infimum as opposed to a limit. I think the mental imagery for that is a lot more manageable than limits, especially if its your first time watching infinities disappear.
That would probably be the second edition, published in 1967. The first edition was in 1961.
If you have a kid and they go to a college that uses Apostol you can give them your 2nd edition without worrying that it will be too far off from the current edition because the second edition is the current edition.
Same with volume 2. The 1969 second edition is the current edition. The first edition was in 1962.
Anyone happen to know of a list somewhere that lists subjects and for each gives you information on how well it can be learned from old books?
For undergraduate calculus for example a 50 year old textbook is fine. At worst some of the example and exercises might be outdated or maybe mildly sexist by today's standards.
On the other hand, that 20 year old book on learning Java with Symmantec Visual Cafe sitting on one of my bookshelves is probably nearly completely useless.
In between would be books where parts of them are still relevant and accurate and parts of them have been superseded and would at best only be worth reading for historical purposes.
"On the other hand, that 20 year old book on learning Java with Symmantec Visual Cafe sitting on one of my bookshelves is probably nearly completely useless."
Hah. I think I learned Java with that book as well, and used Visual Cafe starting out. I think one thing I did pick up (relatively) early was that books written to have a short shelf life were probably poor investments. Some "Word 6.0 for Dummies"-type book is probably meant to get someone up to speed that had pirated the program, and not a more general mind-expander that is going to lead you to thinking about how to implement some idea in whatever you're using today.
The Structure and Interpretation of Computer Programs (SICP).
About halfway through the book, they build an explicit dispatch table, and I instantly understood 1) why my C code was so crappy, and B) why C++ and OO languages miss the boat (hint: they only implement the dispatch table in one orientation)
Worth struggling through, even if you never write a line of Lisp code. It has a lot in it about nice designs, abstraction barriers, and how languages actually work.
I also enjoyed it, but I read it probably a bit late in my career.
I remember reading some parts and thinking "wow, if someone had explained this to me like that when I was learning". But then, I'm not completely sure what would have been my experience if SICP was my first contact with CS. I started with GWBASIC, then COBOL, then C; 1st edition already existed by then, so I could have learned with Scheme!
I'm starting to learn CS all over again at the old age of 40, and had the pleasure to rediscover mathematics thanks to:
- Discrete Mathematics with Applications, by Susanna Epp, or
- Discrete Mathematics and Its Applications, by Kenneth Rosen (both have the same content, choose the style that you prefer), and
- Concrete Mathematics, by our lord and savior Donald Knuth.
I don't plan on reading TAOCP anymore as I would be dead by the time I finish reading everything else, but those introductory books are very good for beginners.
I'm also approaching 40 and dusted of some old books from uni last year. One of which was about linear algebra, it was incredibly dense and proof heavy and I remember not understanding what I was doing, mostly remembering formulas. Then I watched 3Blue1Brown video series on linear algebra and things just clicked, almost 20 years after that first algebra class :)
_Algebraic Topology_ by Allen Hatcher. This is quite an advanced book, but it was the first topology book I picked up and it blew my mind. Without a serious math background you may only be able to read the first parts (some of chapters 0 and chapter 1), but even so it may amaze you. It was insane to see how much mathematical machinery can be built up to understand concepts as simple as “space” and “continuity.” Then these tools can be used to quickly prove facts about mind-boggling higher dimensional objects.
_Introduction to Quantum Mechanics_ by David Griffiths. Not CS or Math, but an amazing book because if you sit down and work through it it gives you a manageable intro to a completely non-intuitive and mysterious scientific field. Prerequisites are “only” multivariable calc and linear algebra.
_Algebra_ by Michael Artin. This was the book I decided to grind through at the right time to learn abstract algebra and get better at rigorous proofs, and it was worth it. Part of why I loved this book and subject is because it feels dry and mechanical at first, but if you work on it long enough you can see the beautiful bigger picture come together.
_Introduction to Topological Manifolds_ by John M. Lee. This was another “right book at the right time” for me. The title is a bit jargony, but it is a rigorous introduction to the foundational objects of modern geometry (namely topological spaces and manifolds in particular). Great warm-up for the first book on my list.
_Algebra: Chapter 0_ by Paulo Aluffi. Weird title, but the first few chapters are the best perspective on abstract algebra I’ve seen. He focuses early on categories in a useful and philosophically interesting way, which is unique.
_Gravitation_ by Misner, Thorne, and Wheeler. Didn’t read the whole thing, but this book taught me a tensor is just a higher-order linear function. Who knew? Most physicists give really crappy explanations of tensors. Also I love that this book, affectionately known as the “phone book”, is so heavy that one imagines spacetime curving around it.
Fwiw, Griffiths QM provides an appendix with all the linear algebra you need to get through the book. People will definitely get more going in knowing about vector spaces but it’s not strictly necessary as long as you start in the appendix.
https://pages.cs.wisc.edu/~remzi/OSTEP/
I failed the interview for an internship I really wanted in my 2nd year of engineering; I did get a shit internship that summer, but being really shaken at my incompetence, I took up this book, and quite honestly, it changed everything!
It truly sparked an interest in systems for me. The book helped me build a strong foundation in systems; Processes, memory, filesystems, networks, concurrency, synchronization and more. After reading OSTEP, it felt like an epiphany, and I charted a path for the rest of 2 years of college around distributed systems, systems research, and virtualization.
And the best part is that all this knowledge is free! Kudos to Professor Remzi and his work!
> Kudos to Professor Remzi
Please remember that Professor Andrea deserves equal recognition for her work on this book.
We were lucky to have a paperback low-cost-poorer-countries edition of The MINIX Book[1]. The code in the Minix book was an eye opener.The code clarifies the concept and sharpens the understanding.
Later on in my career as driver/firmware programmer, Computer Systems - A Programmers Perspective[2] and Unix Systems for Modern Architectures[3] helped a lot to clarify confusions and mysteries.
[1] https://www.pearson.com/us/higher-education/program/Tanenbau... [2] https://www.pearson.com/us/higher-education/program/Bryant-C... [3] https://www.pearson.com/us/higher-education/program/Schimmel...
This alongwith Nand2Tetris course can make your understanding of computer and programming works almost complete.
I studied math in university and the book that really improved me mathematically was baby rudin. I really struggled with this the first time I worked through it and had to also fall back on Abott's analysis book, but after my first analysis course I worked through Rudin again and it just clicked. The exercises are really well chosen and the text is just so on point. Every sentence in the book is extremely carefully chosen and of fundamental importance to what Rudin wants to teach you.
It's really rare that you find textbooks that almost kind of have a certain magic to them, like you are directly taught by one of the greatest minds in that field. These two books definitely meet that criteria.
The Elements of Computing Systems: Building a Modern Computer from First Principles (Nisan and Schocken)
https://www.amazon.com/Elements-Computing-Systems-second-Pri...
I'm not sure, but I think that when I looked into it, I found out that Code started from a level or two lower, but doesn't go up as many layers of abstraction as TEOCS.
Purely functional data structures by Chris Okasaki. Just totally changed my perspective about all sorts of things in computer science. As well as being one of the most advanced comp-sci books I've ever read, it's truly mind-expanding in every possible way. How many comp-sci books have you read that make you question how something as basic as a number is stored?
The introduction gives a history lesson, a great description of the method of exhaustion with descriptive drawings, and some very straightforward proofs on finding the area under the curve for parabolic segments via some basic infinite sums (no limits), all in 10 pages in a conversational style. And it just gets better from there.
My dad gave me his book he used in the 70s and I read it in high school in parallel to the textbook the school issued. Everyone thought I was some genius because I thought calculus was so obvious and I could explain it so well but I was just parroting the text and proofs from this book, basically verbatum. I told the other kids to use it as well but no one did.
That would probably be the second edition, published in 1967. The first edition was in 1961.
If you have a kid and they go to a college that uses Apostol you can give them your 2nd edition without worrying that it will be too far off from the current edition because the second edition is the current edition.
Same with volume 2. The 1969 second edition is the current edition. The first edition was in 1962.
Anyone happen to know of a list somewhere that lists subjects and for each gives you information on how well it can be learned from old books?
For undergraduate calculus for example a 50 year old textbook is fine. At worst some of the example and exercises might be outdated or maybe mildly sexist by today's standards.
On the other hand, that 20 year old book on learning Java with Symmantec Visual Cafe sitting on one of my bookshelves is probably nearly completely useless.
In between would be books where parts of them are still relevant and accurate and parts of them have been superseded and would at best only be worth reading for historical purposes.
Hah. I think I learned Java with that book as well, and used Visual Cafe starting out. I think one thing I did pick up (relatively) early was that books written to have a short shelf life were probably poor investments. Some "Word 6.0 for Dummies"-type book is probably meant to get someone up to speed that had pirated the program, and not a more general mind-expander that is going to lead you to thinking about how to implement some idea in whatever you're using today.
About halfway through the book, they build an explicit dispatch table, and I instantly understood 1) why my C code was so crappy, and B) why C++ and OO languages miss the boat (hint: they only implement the dispatch table in one orientation)
Worth struggling through, even if you never write a line of Lisp code. It has a lot in it about nice designs, abstraction barriers, and how languages actually work.
I remember reading some parts and thinking "wow, if someone had explained this to me like that when I was learning". But then, I'm not completely sure what would have been my experience if SICP was my first contact with CS. I started with GWBASIC, then COBOL, then C; 1st edition already existed by then, so I could have learned with Scheme!
- Discrete Mathematics with Applications, by Susanna Epp, or
- Discrete Mathematics and Its Applications, by Kenneth Rosen (both have the same content, choose the style that you prefer), and
- Concrete Mathematics, by our lord and savior Donald Knuth.
I don't plan on reading TAOCP anymore as I would be dead by the time I finish reading everything else, but those introductory books are very good for beginners.
https://www.3blue1brown.com/topics/linear-algebra
_Introduction to Quantum Mechanics_ by David Griffiths. Not CS or Math, but an amazing book because if you sit down and work through it it gives you a manageable intro to a completely non-intuitive and mysterious scientific field. Prerequisites are “only” multivariable calc and linear algebra.
_Algebra_ by Michael Artin. This was the book I decided to grind through at the right time to learn abstract algebra and get better at rigorous proofs, and it was worth it. Part of why I loved this book and subject is because it feels dry and mechanical at first, but if you work on it long enough you can see the beautiful bigger picture come together.
_Introduction to Topological Manifolds_ by John M. Lee. This was another “right book at the right time” for me. The title is a bit jargony, but it is a rigorous introduction to the foundational objects of modern geometry (namely topological spaces and manifolds in particular). Great warm-up for the first book on my list.
_Algebra: Chapter 0_ by Paulo Aluffi. Weird title, but the first few chapters are the best perspective on abstract algebra I’ve seen. He focuses early on categories in a useful and philosophically interesting way, which is unique.
_Gravitation_ by Misner, Thorne, and Wheeler. Didn’t read the whole thing, but this book taught me a tensor is just a higher-order linear function. Who knew? Most physicists give really crappy explanations of tensors. Also I love that this book, affectionately known as the “phone book”, is so heavy that one imagines spacetime curving around it.