Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: The book that did it for you in math and/or CS?
392 points by debanjan16 on Feb 27, 2022 | hide | past | favorite | 205 comments
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.

Operating Systems: Three Easy Pieces


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!

This book is probably my favourite CS book as well.

> Kudos to Professor Remzi

Please remember that Professor Andrea deserves equal recognition for her work on this book.

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.

[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 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.

I second this

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.

For those who don't know: "Baby Rudin" is Principles of Mathematical Analysis by Walter Rudin. I had to look it up.

Rudin's other two books are called "Papa Rudin" and "Grandpa Rudin", seemingly named due to the increasing difficulty of their contents.

+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.

Incredibly well said!

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.

I agree with you. They assume the level of math of an MIT freshman. And the level of computer experience of a modern 11 year old. So sometimes they lean on the math in situations where a professor today might explain something in terms of a computer. Take a step back and try to understand the concepts that they are explaining, even if your math is a little rusty. I love SICP, it really make functional programming click for me. The other book I recommend in this space is Advanced R.

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.

The book that did this for me:

The Elements of Computing Systems: Building a Modern Computer from First Principles (Nisan and Schocken)


Me too.

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?

Are you talking about integers and floats? Or about the process of storing a bytestring? Or something else?

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.

Apostol Calculus Vol 1

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.

> My dad gave me his book he used in the 70s

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.

Dover Publications has a whole catalog of old math textbooks. It's amazing how good many of them still are.

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.

There are few books with more eureka moments. Mine was discovering functional closures and object instances are two sides of the same coin.

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 :)


Fun fact: Knuth is a devout Lutheran and he recently led a church Bible study on the--I can't make this up--Bible book "Numbers."

_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.

Precalculus Mathematics in a Nutshell by George Finlay Simmons is one I go back to from time to time to make sure I have mastery of basic math. Someone gave it to me in high school.

It’s a tiny book but powerful. It helped me a prepare for college. There’s something very inspiring about understanding geometry, trig, and algebra well enough that you can flip through a few pages, follow along, and basically cover the whole of those subjects as taught in high schools.

I later used it to study for the GMAT and GRE and got a 99 percentile math score both times. I’m reasonably intelligent but not a math whiz. The book definitely helped. It is brief but densely-packed with everything you really need to know.

Hmm I'm looking for an algebra/trig book, curious, that looks more like a book for memorizing stuff than for understanding things? 128 pages seem to little for those three subjects.

There are better explanations out there, but don't judge it on page count alone. It's a compact, to the point, and no-fluff exposition. That's definitely a quality by itself. I've used it with success to teach a young man who for reasons could not attend high school. EDIT: Exercise problems are good and with answers to all, and full solutions to some.

Mathematics: From The Birth of Numbers—picked it out at a Barnes&Noble when I was a kid. It had so much in it. It didn’t go into depth but it had fantastic breadth. Reportedly the author spent ten years writing it. Feels like having a world atlas, but of mathematics.

The Art of Computer Programming—NOT for the reason you expect. The series is simultaneously fantastic and terrible. Being able to articulate why the series just plain sucks even though it’s also really good at the same time. 90% of the time, if there’s something I want to look up in TAOCP, I can just go for a walk, realize whatever I’m trying to do is unnecessary work, and come back and work on actual important stuff I care about. The other 10% of the time, I get better answers from digging through the citations on Wikipedia.

Exercises for the Feynman Lectures on Physics—Yes, the exercise book, not the lecture book. I know it’s not CS or math. The way that the problems build on each other is spellbinding. For example, there’s an early problem where you calculate the mean free path of air, but you’re not given a formula for it—you’re just given a series of problems which provoke you to think about the subject in a way that you can figure out a formula for it yourself.

I discovered Mathematics: From the Birth of Numbers in the summer of 2003 at my local library. At the time I was a high school student taking a summer Algebra 2 class in order to be able to take calculus my senior year for college admissions purposes. This book instilled in me a love for mathematics, even if I sometimes struggled with the topic.

Just a few hours ago my copy of Mathematics: Its Content, Methods and Meaning just arrived; I bought this book as a reference of undergraduate-level math concepts based on Hacker News recommendations since I'm right now in the process of reviewing undergraduate-level math to strengthen my understanding of deep learning fundamentals. I had the opportunity to glance through this book, and I wish I had discovered this book when I was in high school or during my undergraduate years; it appears to be an excellent, more technical companion to Mathematics: From the Birth of Numbers.

Given the direction in my career (I went from focusing on systems software to deep learning and data mining), I wish I had majored in mathematics as an undergraduate instead of computer science. I'm able to pick up computer science concepts rather quickly, but mathematics requires more effort for me. A part of me almost wants to do an online second bachelor's in math, but right now I use some of my spare time studying math.

It sounds like these concept maps might be helpful for you to orient yourself in the UGRAD math topics.

MATH & PHYS: https://minireference.com/static/conceptmaps/math_and_physic...

LINEAR ALGEBRA: https://minireference.com/static/conceptmaps/linear_algebra_...

They are extracted from my books, but can be used to support learning from any other book too. I find it helps a lot to think about the connections and parallels between concepts, and also use the concept maps as a "spec" to know when you've covered all the material.

> Feynman Lectures on Physics

I havy skimmed through the volumes of Feynman lectures, and can confirm this. Especially things concerning computational complexity.

I had such a shitty high school teacher that I still stay away from it. Looking for introductory texts, might give "Exercises..." a go.

SICP. I only read a little, but that little bit was enough for something to really click for me. When I dropped it, I felt like "Before, I knew some syntax, but now I actually understand how to put a program together".

Also, this is kind of cheating since I went through the "Nand 2 Tetris" video course, but there is a book that goes along with it, "The Elements of Computing Systems". The course really drove home for me the power of simple, well-designed layers in building complex systems, since the end goal of building a CPU from scratch sounded impossibly intimidating at the start but by the end I was comfortable in explaining every detail. I think it counts since the book covers the same material.

Baby Rudin, Principles of Mathematical Analysis, was that book for me. It was that book for a lot of people, which I guess means it felt "perfect" for people with a broad range of backgrounds.

I never found a book like that for algebra. Algebra felt opaque, simultaneously hard and boring, and linear algebra felt dry and mechanical, more like a vocational skill than like mathematics. If I had encountered Axler's Linear Algebra Done Right in undergrad, I might have been more interested in algebra.

By the time I encountered "computer science" in my mid-twenties, I don't think the quality of textbook mattered as much to me, but I wish I could remember the name of the formal languages and automata textbook I used to have. It was short and probably not very advanced, but the concepts are still vivid in my head. I see state machines everywhere, and things feel easy to me when I can tackle them as state machines.

Baby Rudin is indeed awesome.

I feel like Linear Algebra Done Right is a great book, but it is a better second book about Linear Algebra, rather than a good first book.

Actually, I think the whole subject deserves a fairly mechanical treatment first, and only then an explanation of the underlying math. I think it would make sense to introduce Matrix multiplication and related concepts to students in high school, so they become completely mechanical - much like we teach students how to differentiate functions as a purely mechanical process.

A pretty good book for abstract algebra is Pinter's "A Book of Abstract Algebra". It's rigorous but not overly terse and provides enough examples and applications as it goes to motivate the student. Chapters are fairly short and end with a large number of exercises, organized by topic, to give you plenty of opportunity to practice the material.

It's available in a Dover edition for under $16 so it is easy on the budget too [1].

[1] https://www.amazon.com/Book-Abstract-Algebra-Second-Mathemat...

“The Art of Unix Programming” TAOUP is something I wish I had read much earlier in my career.

It’s non-technical, far more philosophical, and the very few parts where it wades into the technical side are outdated. That said, what it does is a great job of embodying the sort of Zen of the Unix ethos. Almost a high level “this is how you keep your sanity”, I cannot recommend it highly enough.

I want to say it was formative but it moreso just helped solidify the lessons I had come to on my own.

http://www.catb.org/~esr/writings/taoup/html/ (also available as a physical book or kindle ebook)

If you are young and stupid enough, you don't even realize when a book is too difficult. You just plow through it if you can make any sense of it at all. So for me it was TAOCP, a few different theory books by Aho and Ullman, and Spivak's Calculus. I can't say I understood everything in them, but they got me going.

Spivak's Calculus is fantastic.

DPV — textbook used by UC Berkeley for CS170 (Efficient Algorithms & Intractable Problems). It is the most succinct and understandable book about algorithms I have read, especially if you follow along with lectures. https://cs170.org


More software development than CS, I was waaaaay too young to understand anything about CS but making computers do my bidding was very interesting.

Microelectronics and the Personal Computer Scientific American 237, no. 3 (1977)(Sep.): 230-244. scans at https://www.digibarn.com/collections/books/xerox-parc-1970-8...

Programming Your Own Computer, in Science Year, The World Book Annual Science Supplement, 183-195. (Chicago, Ill., 1978).

Fortran Coloring Book https://archive.org/details/9780262610261

BASIC Cookbook https://archive.org/details/Basic_Cookbook_1978_Tab_Books

and later, in 1984, the Smalltalk-80: The Language and Its Implementation (the Blue Book) http://stephane.ducasse.free.fr/FreeBooks/BlueBook/Bluebook....

If you think you see a theme here, you would be right.

Despite high interest in learning to program, I was confused and bored in my first (FORTRAN) programming course. Browsing at the local bookstore I found 'The FORTRAN Coloring Book' and took it home. Kaufman's approach unlocked some kind of door for me, and the effort of going to find my own resources did as well. Forty years on, 'The Fortran Coloring Book' sits on the shelf next to 'Software Tools in Pascal' (same bookstore a few months later) and many of the other books listed in this thread (e.g. TAOCP, SICP, UPE, OSTEP.)

You would probably appreciate How to Design and Build Your Own Custom Robot by David L. Heiserman. I don't think the text is available online, but you can find it very cheaply for sale. I remember checking this book out from the library a few times when I was a kid.

Feynman’s Lectures on Computation:


You might be familiar with Feynman's Lectures on Physics, but his lectures on Computation (based on a class he taught and his work in 'Connection Machine') aren't any less amazing. Through this short book, Feynman guides us through the concept of computation and the van Neumann architecture in his unique style, from logic functions, to Turing machines, coding and even quantum computers. It will give you a unique appreciation of the finer points in which computers are "Dumb as hell but go like mad" so that you can better squeeze every bit of performance out of your code.

Gilbert Strang's Introduction to Linear Algebra[0] and the associated online course[1].

[0] https://math.mit.edu/~gs/linearalgebra/

[1] https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra...

I paired this with linear algebra done right and the two of them are great to simultaneously understand the computations and theory of what you’re doing.

The three books that I have appreciated the most when it comes to computer science must be:

- Code The Hidden Language of Computer Hardware and Software (https://www.programmingbooks.dev/#code)

- Grokking Algorithms (https://www.programmingbooks.dev/#grokking-algorithms)

- The Little Schemer (https://www.programmingbooks.dev/#the-little-schemer)

These two books I really found interesting as well:

- Nine Algorithms That Changed the Future (https://www.programmingbooks.dev/extra/#nine-algorithms-that...)

- Good Math (https://www.programmingbooks.dev/extra/#good-math)

Computer Networking: A Top-down Approach, Jim Kurose

I read this about 2 years into my study of CS. I found the design of the internet, at times intentional and very often emergent / working around constraints, absolutely fascinating. I couldn’t help feeling that algorithms were things I could pull off the shelf but protocols were something I’d need to be able to design well throughout my career.

Come here to recommend this excellent networking book and it's much better than the Tanembaum's one. If you are in networking field you owe yourself to read this book and the latest 8th edition is the best version yet because the authors have removed the chapter on multimedia networking and focusing more on SDN. Heck, any aspiring textbook writer should read this book as a golden reference on how to write a proper textbook.

Amazing book, though the network layer chapter was kinda daunting!!!

Yes, absolutely.

Learning Perl was the first book I did any kind of programming with, though I didn't end up sticking with Perl.

Learning C# 3.0 made me finally get OO programming and that was when I first started writing programs that did much of anything.

Discrete Mathematics by Epp gave me a basic grounding in the math I needed to understand CS books.

The Algorithm Design Manual by Skiena and Algorims by Sedgewick and Wayne helped me start to understand the "CS" side of programming.

Tanenbaum's Operating Systems textbook taught me a fair bit about operating systems and concurrency.

I'm sure you could have used a different series but without these I wouldn't know how to program, let alone have made a job of it.

Here are 3 applied math gems:

1) Nonlinear Dynamics and Chaos by Strogatz completely changed my relationship with applied math. I'd studied diffyqs and PDEs earlier but that was under duress and hasn't been particularly useful. Traditional books don't tell you that analysis solves only a tiny subset of important real-world problems, and for me, were just another boring dose of plug-and-chug calculus.

Strogatz immediately motivates the subject and uses analysis as a jumping-off point (with some pretty hard analytical HW problems!), but he quickly pivots to numerical methods with a very strong intuitive and visual/geometric approach. Years later, I'm using this knowledge surprisingly often.


2) Linear Programming by Chvatal was the book that made LP duality really click for me. Prior to reading Chvatal I mechanically understood duality but with no intuition. Chvatal explains duality from a bounding perspective, and even better, motivates duality through simple dimensional analysis, just like in physics! (The Strogatz book above also motivates dimensional analysis and dimensionless groups, which has been very useful to me over the long term.)


3) Statistical Methods: The Geometric Approach, Saville and Wood was my bridge from meaningless opaque algebraic and calculus stats to a solid understanding. The book builds everything on vector space projections at the level of undergrad linear algebra. Even a simple mean of 3 numbers now sparkles with intuition and insight.


They also published a short paper that conveys the key ideas https://www.jstor.org/stable/2684537

Saville is a fantastic book. You may like Gemignani’s “Calculus and Statistics” - in the same spirit. Mostly combined problems in high school level stat and calculus, going back and forth between the 2 subjects.

It wasn't a book, but a magazine: Byte magazine. I started reading it in the mid-80s, just as it was transitioning from home computers to more of a computer journal. I still reference some of the articles to this day.

Note: One can freely download PDFs of old Byte magazines from Internet Archive [0].

[0]: https://archive.org/details/byte-magazine

Programming Languages: Design and Implementation by Terrence W. Pratt

Coming from electronics and computer hardware this made me see that those "mysterious" high level languages where all just loops and if-then-else statements.


Algorithms + Data Structures = Programs by Niklaus Wirth

gave a good practical framework for entering computer science and software engineering.

"Thinking Physics" by Lewis Carroll Epstein, read after I received a B.S. in Aerospace Engineering. I suddenly realized that I hadn't learned anything in my degree and was functionally useless. Since then I have built a solid base of understanding of algebra, trigonometry, statistics, and intermediate database theory, although I unfortunately remain mostly ignorant about aerospace engineering.

What initially turned me into a curious person were Surely You Are Joking Mr Feynman & Godel, Escher, Bach. Then Book of Proof & Forallx: an introduction to formal logic helped me develop an interest in mathematics. But what was really a kind of aesthetic crack was The UNIX Programming Environment and The TeXbook.

I really enjoyed reading The TeXbook. I found it very approachable.

Here’s a link for the curious: https://www.worldcat.org/title/texbook-describes-tex-version...

For CS, it was SICP. I read it in high school (accompanied with the lecture series[0]) and it lead to me learning about functional and logic programming, compilation, algorithms and data structures and more. It was more than enough to prepare myself for university, and even in my third year some topics have not been covered to the depth they are in SICP!

For math, it was Gödel, Escher, Bach. I was into mathematics in high school as well, but did not have a proper teacher at the time so I was stuck on trying to absorb some of the more technical undergraduate texts in abstract algebra. However, GEB was at the right level and had a nice layman explanation of the 2nd incompleteness theorem, along with beautiful exposition into philosophy, computer science, math, art, music and cognition. I enjoyed it so much I even wrote a compiler for the programming language in the book to C.[1] The exposition on formal reasoning also got me started in learning the Coq theorem prover, which I continue to use to this day.

[0] https://www.youtube.com/watch?v=2Op3QLzMgSY&list=PLE18841CAB...

[1] https://github.com/siraben/meta-yacc

Code Complete (2nd Edition) by Steve McConnell. It is perhaps the broadest book on programming I've ever read. It oviously can't go indepth on its topics, but it significantly helps to turn a lot of "unknown unknowns" into "known unknowns".

It really helped my to go from knowing how to program to knowing how to implement software.

Code Complete has chapters on classes, functions, then several chapters on statements and several on variables. McConnell also refers to studies throughout - for example, he says studies show it is not necessarily that long functions are bad in and of themselves, but that the longer a function is, the more odds it will introduce more variables, and using too many variables in one function is bad. Somewhat dry, academic, great detail about the topics I mentioned with references to studies.

I also like Clean Code by Bob Martin. It covers similar ground to Code Complete but it is more opinionated, and was an easy read for me and has a narrative drive. As opposed to the more academic Code Complete which covers things thoroughly, and with references to studies. Both are good books, covering similar ground, I like them both.

When I began programming it was a book I respected. I read it twice.

But today it is a book I see with flaws. I think it is a dated book, made for an era changed by web development, agile and functional languages. My criticisms:

* It worries too much about little details on verbose object oriented languages (Java, C++). It is overly obsessed about ahead planning.

* it established myths that I am not sure to be true (cone of uncertainty, orders of magnitude different productivity among programmers).

* it failed to understand the agile philosophy and why it's ideas generate more adaptable software

I think Pragmatic Programmer is a more interesting book.

Introduction to Calculus and Analysis, by Richard Courant and Fritz John. This book clearly explained many of the motivating examples of the concepts in Calculus, which was important to me as a beginning student. Too many times I read math textbooks that simply present a list of definitions, theorems, corollaries, and whatnot, failing to guide readers from one point to another. I agree that for advanced level of math, there're probably no good motivations or 'storyline' that weave these constructs together (they're purely symbolic); however, for a layman level, I feel it's crucial to at least make the readers understand why and how these concepts come to be, so that they can grasp at least a little bit of the 'logic' of math.

Similarly, Analysis I by Terence Tao has a 'Why do analysis' that has made me actually enjoy analysis.

For math, I would say nothing. What made the difference for me there was the teacher I was working with. A good teacher could help inspire me to get an A+ in College Algebra through Calc III while a bad one could result in me to get a D- in anything from Calc I through Calc III. Yes, I took Calc I and Calc III twice, because I got a D- the first time through both of those classes, and it was the same guy who taught me Calc I and Calc III for my second time through, and in both of his classes I got an A+.

I barely scraped through with a C for Engineering Math (Differential Equations).

For me, the teacher made the difference in math.

For CS, the most influential books for me were Knuth, Sorting and Searching (although I actually bought all three books in the series, unlike most others I knew), as well as the original Kernighan & Ritchie book on the C programming language (before ANSI C was published).

In 5th or 6th grade in Belgium (circa 1977) they had a self-paced “programmed math” book where on each page they introduce concepts, with a few questions and you try to answer them, with answers on the next page. If you answered correctly you could move forward, else review. It was absolutely gripping for me and I advanced way ahead of the rest of my class, through concepts like sets, vectors, etc, which in hindsight seems quite advanced compared to what’s in “Common Core US” math today in those grades.

I have been searching for those books online but couldn’t find them, or maybe I am not searching for the right keywords.

If anyone knows the books I am referring to, I would be willing to pay premium :)

Continuing on the theme of math books, it is a really sad state of affairs in US schools these days: there is not even a single textbook that is followed. I am in one of the top public school districts and when I see my son’s class materials, they are a jumble of materials pulled from the internet.

You can google for the key terms: "programmed instruction" and "programmed learning". These were popular, I loved them too. I remember some had a tear-out flap so you could hide the answer while you're reading the text!

The Little Schemer uses programmed instruction.

If you end-up finding one of these books, please let me know the title/author. It sounds like a really interesting approach... almost like a choose your own adventure.

WP is rather informative about the approach:


Indeed, this was exactly the kind of book we had. Nice to see this background, thanks for sharing.

Will do! These books were introduced as an experimental format under “nouveau mathemathique”, probably were discontinued.

Possibly "TutorTexts"


I had Lasker's chess one as a school prize - it was awesome.

Interesting will look this up. The book we had in Belgium was in French, it had a horizontal layout, blue cover, page looked minimal, almost typewritten.

Judging from this one - I think these are the series you remember:


Wow great find, thank you, I will look them up!

There is a picture of the French edition of the algebra one here:


Some links to Grace Martin's books here - which include the French editions of her math TutorTexts:


So these are now unavailable I guess, other than at specialty bookshops or collectors?

Well, the chess one is still in print:


and i can see several of the others on secondhand sites (eg ABE books) for varying prices, but often not too expensive, if you don't need to deliver outside of the US.

If the chess one is any guide, they may have lost the explicit TutorText branding (and changed title slightly) if and when they moved to other publishers so best to search by author.

Mostly because I never cracked a programming book in all of college, I’m going to say the Wrox PHP book. I’d been working with PHP for 4 years at the point that I bought a book on it to try to figure out something I needed to do. On a page next to it, I saw something else that I never knew how to do that made my life a lot easier.

After that I sat down and binge read the entire tome. I haven’t really touched PHP in 10 years but now my first step when I want to learn something is to read an entire book on it cover to cover.

I only wish I’d learned the lesson sooner. Assorted guides and blog posts on the internet just don’t come close to the level of thoroughness and understanding that a book will.

>Assorted guides and blog posts on the internet just don’t come close to the level of thoroughness and understanding that a book will.


I keep saying this to anybody who will listen but the Internet has really ruined people's view of Learning.

1. Math for the layman. Ken Iverson (kills two bird's with one stone, CS & Math)

This my sound arrogant but I believe Iverson's work is the pinnacle organized thinking (the bridges the gap between programming and maths elegantly).

His work is also closely related to that of Leslie Lamport's TLA+ project. Lamport describes TLA+ as "thinking above the code".

2. The Singularity is near by Ray Kurzweil.

This is more of a popular computer science book. I don't any other book articulates the true (optimistic) potential of the computer better than this. It made me appreciate computers more than any other machine.

Where can I find a copy of 1 (Math for the layman) - it doesn't turn up in searches.

Math for the Layman(it uses the J programming language to teach Maths) and more are available at : https://code.jsoftware.com/wiki/Books

PS: You might also find Ken Iverson's Turing Award Lecture Notation as a Tool of Thought relevant.

For curiosity: Understanding Digital Signal Processing, by Richard G Lyons. I read it when I was starting college as an undeclared major, and I honestly didn't understand half of it, but I was getting into music production and it taught me the ins and outs of impulse responses. I later declared a major in Applied Computational Math primarily because of that book.

For intellectual ability: it wasn't a particular book, but it was an honors-level Real Analysis class that forced me to re-learn the way I learn mathematics.

Many good suggestions here. It's also the case that the 3rd book you read on a topic often makes more sense than the 2nd, and 4th more than the 3rd. Understanding is cumulative, so it's not a question of "which" book, but "how many".

I remember finding sometimes on my journey that I'd open a book and think "well, I can't make heads or tails of it." Then a few months later I'd try again and in the meantime I'd have read simpler ones and then the difficult book had become approachable.

Math: J+J, programming: K+R.

Jeffreys, Harold, and Bertha Swirles Jeffreys. Methods Of Mathematical Physics. Cambridge At The University Press, 1950. http://archive.org/details/methodsofmathema031187mbp.

Kernighan, Brian W., and Dennis M. Ritchie. The C Programming Language. Prentice-Hall Software Series. Englewood Cliffs, N.J: Prentice-Hall, 1978.

https://www.logicomix.com - a graphic novel about Bertrand Russell and the quest for the foundations of mathematics

Elementary Number Theory by David Burton. I started reading this book in 8th grade to get a bit better at math competitions. Oh boy did it open my eyes.

As an adult, it’s Shannon’s The Mathematical Theory of Communication. I read it at least once a year. It’s the most intellectually powerful paper I’ve ever read.

It would be Graham Hutton's Programming in Haskell. That one little chapter on parser combinators was totally worth it.

If I can include this functional pearl "A play on regular expression", Not a book though.

These two showed how composition and simple abstraction could make the solution super beautiful.

>If I can include this functional pearl "A play on regular expression"

For anyone intereted :


Rodnay Zaks - Programming The 6502 - Fourth Edition - 1979


I learned assembly from a French translation of this book! It was in 80 or 81.

I credit teachers more than books but a partnership between teachers and books makes education great.

I found "Introduction to Algorithms" [1] very accessible for a CS student and also "Introduction to Automata Theory, Languages, and Computation" [2] very complete.

[1] https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

[2] https://en.wikipedia.org/wiki/Introduction_to_Automata_Theor...

Not a general computing book, but the one that I really enjoyed reading and following was File Structures by Michael J. Folk and Bill Zoellick. It introduced B trees to me and a certain way of thinking about computing problems.


1. How to Prove It: A Structured Approach, Velleman (perfectly prepares for reading of pretty much any math book)

2. Higher Algebra and before that Elementary Algebra, Hall (just some intro stuff; general public license, can be freely downloaded from archive.org)

Another book along the same vein is Introduction to Logic, Sets , and Relations by Nancy Rodgers is a beautifully written book.

I made a mistake ,its learning to reason using logic, sets and relations.

Computer Systems, a Programmer's Perspective

Especially chapters about virtual memory and memory hierarchy and the one about processes and traps.. I didn't know anything about these things when I started reading the book.

The Annotated Turing by Petzold (On Computable Numbers broken down, annotated, explained, and talked around. Would recommend to anyone interested in CS but without (yet) having formally studied it. I read it in sixth form, and it probably swung me more towards CS from my since-childhood intention of studying electronics. (Ended up doing a mix, but applied to some straight CS too.))

Theory of Computation by Sipser. (More subject specific and just a textbook really, I just thought it was a really great one and was able to read it ahead of my most relevant course.)

Sipser's book was the point I tried to give up pencile-pushing/parroting, before every proof there is a "Proof Idea" that really fills the gap between the theorems and proof, and the more important ideas you should take away, I suddenly realized every thing I learned had this discontinuity between things you do in problems and proofs, and the general understandings and usefulness and philosophy behind it.

Thanks for this. "Proof idea" is a phrase that concretizes a vague intuition I had about something that exists between a theorem and it's proof

+1 to Theory of Computation. It was the book that got me excited about computer science as being a field bigger than just “how to write programs”.

The (unpublished) book "Introduction to Higher Math"[1], along with the professor who taught the course, was probably what got me going on the road to a PhD in math. It's very accessible (no prerequisites to speak of), teaches the reader how to write mathematical proofs, and includes some really interesting material, e.g. cardinality. It's also freely available now.

[1] https://www.whitman.edu/mathematics/higher_math_online/

Tanenbaum's Structured Computer Organization, Computer Networks, and Operating Systems: Design and Implementation

+1. These booked happened to line up with being taught by favorite professor too, so perhaps I'm biased.

When I was a teenager who wanted very much to make videogames and demoscene productions (in the pre-ubiquitous-internet era of Wolfenstein), I had worked up through basic, and pascal, and finally arrived at c++ for speed. The C++ books dealing with graphics were all using really cheesy and slow libraries, totally inappropriate for games.

The one book that really made everything come together was "Flights of Fantasy" https://www.amazon.com/Flights-Fantasy-Programming-Video-Gam...

This covered how to write a simple flight simulator in C++ on the hardware of the time. It also gave a really good practical primer on the linear algebra needed for 3d graphics. Inline assembly and a bunch of fun algorithms for quick and dirty approximate math were there too.

That book, along with the free time and obsession that a 14 year old can muster, was probably what started me on my (in my opinion) successful hacking and optimization trajectory.

It's a bit dated now that most CPU's have amenities like built in floating point math but not too long ago I was doing embedded audio synthesis on an 8bit AVR micro and Bresenham's line drawing algorithm was just what I needed to efficiently generate saw waves.

While I was in elementary school in the 1990s, my mom returned to college. Sometimes I would attempt to read some of her textbooks from courses she already finished. One book that I will always remember and helped spark a lifelong interest in computing is a 1995 book that introduced people to computing called New Perspectives on Computer Concepts by June Parsons. It was a comprehensive book that started with basic computer literacy information (e.g., what is a personal computer, what is a disk, what is a mouse, etc.) but covered a wide range of topics, such as the Internet (including the then-nascent Web), very basic computer architecture (e.g., what is a processor, what is a bus, etc.), ethics and legal matters, and even programming (there was a program written in BASIC for computing the price of a pizza). While I was interested in computers before reading this book, this book set a foundation that would influence the rest of my life.

Another book that influenced me at an early age was a QBASIC textbook written by a Sacramento State University professor; I received this book from my mom's friend when I started learning QBASIC at nine years old and was seeking out resources. I still have this textbook; it was my very first programming text, not counting the computer literacy book I mentioned.

Discrete Mathematics with Applications by Susanna Epp is the one book that I feel took me from simply knowing how to write programs to being a software engineer by filling in the theoretical blanks I had from being self-taught. Discrete mathematics in general is so wonderful and applicable to day-to-day software engineering problems and to me, that book is the best, most coherent, and most thorough one available on the topic.

“Complete Turbo Pascal” by Jeff Duntemann and “The Peter Norton Programmer's Guide to the IBM PC” blazed my trail into professional computing. Both are near-ideal models of nonfiction writing and teach a practical skill through the joy of discovery. No CS textbook I've read since can compare, though Allen Downey's “Think” series probably comes closest.

I learned programming and math mostly by self-driven exploration. But for computer science there was a book that hit at the right place and time: Feynman Lectures on Computation.

It's bounced around between publishers over the years and is generally a pain to get. I have the 1996 edition[1] which is out of print. Then there's a 2002 edition[2] and a 2000 edition[3].

[1] https://www.amazon.com/Feynman-Lectures-Computation-Richard-...

[2] https://www.amazon.com/Feynman-Computation-Frontiers-Physics...

[3] https://www.amazon.com/Feynman-Lectures-Computation-Frontier...

I will recommend books that I have and books that I heard of:

Books that sparked my interest in all of Mathematics (BTW, I'll be glad if you recommend any Abstract Algebra books):

- Calculus, Howard Anton.

- Calculus, Spivak

- Advanced Engineering Mathematics, Erwin Kreyszig

- Elementary Number Theory, David Burton.

Computer Science/Engineering:

- Data Structures and Algorithms, Adam Drozdek

- Digital Design, Morris Mano

- David Patterson and John Hennesey's books

- Mastering Embedded Linux Programming, Chris Simmonds.

I can recommend "Universal Algebra" by P.M. Cohn

CS: Design Patterns by GoF. It truly made me understand object oriented design. I'd claim at least 95% of programmers in our industry programming in an object oriented language don't know object oriented design.

Math: - The Code Book by Simon Singh. - Chaos by James Gleick.

Eventually I came full circle and think OOP is a mistake. Everything is functional for me now, even OOP languages. Statelessness, functional programming, avoid objects and hidden logic.

Same, with one exception. I think there are specific situations that call for an abstract data type. And some subset of those times calls for an interface so you can have multiple kinds of that interface.

But rarely. Only when specifically called for by the problem at hand. A very far cry from “everything is an object.”

Same. I actively avoid OOP and have embraced functional programming.


DOM Scripting: Web Design with JavaScript and the Document Object Model by Jeremy Keith

Great book and interacting with the DOM is essential to performance in any kind of browser work. Unfortunately most developers today are completely terrified of the DOM, as in PTSD and need counseling terrified.

* A german book about functional programming in Haskell, Opal, ML and Gofer. [1] * Some introduction into "Communicating sequential processes" (I cannot recall which one) to get a proper concept about safe ways of multithreading. * "Linux for dummies" to get a firm understanding about unix, the shell etc.

[1] https://www.weltbild.at/artikel/buch/funktionale-programmier...


After Sophomore year in High School, I realised that I have been doing Math all wrong. Although I always got scores close to 100%. I was just memorizing algorithms and formulas to solve problems. Something changed in me, and then I started asking- "why" and "how"? With the risk of sounding a little dramatic, this changed my life. I started to read Math for the first time in my life. I started to get them. There was a set of local textbook that contributed well in High School- Rudimentary Mathematics by four authors whose names I don't remember.

In college, I decided to be a Physics major, and I had to take two Mathematical Physics classes. Big impact in my life. I mainly studied the textbook by Arfken, Weber, Harris, and Vector Calculus by Spiegel. Then, in that year and the next, I actually applied what I learned. That also made a big difference.

I now work in Deep Learning. When I was learning Machine Learning and Deep Learning, my habit of properly understanding Math since the age of 16 paid me back very generously. I got the Math of Deep Learning instantly, with no struggles. Then I made projects and found employment. Here, too, I actually applied what I learned.

I see being able to apply Math in your job as a sign of being fortunate and I am grateful.

Anyway, I would advise you learn Math with a purpose. Rather just learning Math for tests or math's sake, learn Math with a purpose. Do something with the math you learn. It may be Data Science, may be computer graphics, may be cryptography, maybe anything. This will make a huge change in how you see math.

Watching MIT OCW Calculus course videos in HS had a big influence in me.


I would say that learning to program well made the field worthwhile for me.

Others have mentioned Code by Petzold.

When I was learning Deep Learning, Jeremy Howard's book "Deep Learning for Coders with fastai and PyTorch" and the lecture videos made Deep Learning easier for me. I did not rely upon only that. But it was a great starting point.

The Little Schemer was great, too. This little book is worth much more than one who hadn't read it might think.

The C Programming Language by Kernighan and Ritchie is one of the books I read early in life. Did not finish it. Still, a great book.

I always feared the breadth of Algorithm books. "A Common Sense Guide to Data Structures and Algorithms" fro PragProg Bookshelf gave me very nice overview of DSA.

Python Crash Course by Eric Matthes made programming click for me when I was in my second year in college.

"The C Puzzle Book" by Alan R. Feuer

For anything C/C++ related, grinding these little puzzles yielded tremendous value for the time spent and removed any lingering questions I had about annoying low level details of the languages for the rest of my career. There are a lot of heady academic books that consume a lot of time, but this one impacts the 80% of time you actually spend at the keyboard.

Stroustroup's "The C++ Programming Language" is eloquently written and surprisingly accessible to beginning/intermediate developers.

Accelerated C++ by Andrew Koenig and Barbara Moo. I'm sure it's hopelessly outdated and irrelevant today. It was one of the first CS books I read and I really dug into and grokked it. I think it played a large role in the developer I became.

It's very pragmatic, but also pushes into thinking through the design of your system and also digs into the "why" and "how" of what is going on and balances all of this quite well IMO. I still have my copy on my shelf.

Introduction to Algorithms - Cormen et al.

- Kicked off learning about Big O Notation through this. The concepts completely changed the way I looked at code, especially being mostly self taught beforehand.

Numerical Analysis - Sauer

- Learned about Newton's Method from this book which blew my mind at the time and got me hooked.

Paul's Notes - https://tutorial.math.lamar.edu/classes/de/de.aspx

The Information: A History, a Theory, a Flood by James Gleick.

1. Discrete Mathematics with Applications by Susanna S. Epp


2. Mathematics for Computer Science by by Eric Lehman, F Thomson Leighton, Albert R Meyer


Definitely _Mathematics: A Human Endeavor_ by Harold R. Jacobs for me. I read it as part of a ~World of Math~ course way back in Junior High and I fell in love with math as a result of reading it. It whisked me away from the antiseptic world of rote arithmetic and it opened my eyes to how fun and exciting math can be. As a kid who reveled in puzzles of all types this was an excellent gateway to the world of problem solving.

Second grade, my mother took me to a library which was closing and they were selling off a lot of books. We got this for two dollars. It had pictures and the name was simply "Mathematics", so it was what I wanted. Had the name been more complicated I might have moved on.

Anyhow, this is a general survey of math complete with pictures of what is going on, and how it can be seen in the real world. It really helped develop my math mental picture for how a lot of things worked well before I ever got to that level of math.

APUE Advanced programming in the unix environment, http://www.apuebook.com/apue3e.html, got me into Google as an SA. If you have some programming skills and know this book front to back then you can also probably get in as an SRE (learn some graphing/charting and stats also!)

Everything W. Richard Stevens

Seconded. He had such a strong and clear style of delivery.

But if I had to pick one, it’s a toss up between Unix Network Programming and TCP/IP Illustrated, Volume 2.

Those two books had a significant impact on me in terms of demystifying the network stack.

I don't claim expertise in math or CS, but the book that sparked my intellectual curiosity was GEB. I read part way through it in high school and was really grabbed by the concept of recursion (brand new to me at the time). I ended up carrying that spark with me until it consumed me enough to change careers, from teaching music to programming.

"Ruminations in C++" really helped me a great deal long time back. People will complain that it was just a recollection of earlier prints, which is true, but as a cohesive set it was really good. It beat the concept into one's mind as to how to control the lifetimes/resources of things with classes.

I know it's kinda cliche, but as a youngster (10 years old) I read "Mathematics for the Million" by Lancelot Hogben and life was never the same. At 14 I read "How to lie with Statistics" by Darrell Huff, and I learned that maths was not the certainty I had thought.

Everything after that was just detail.

Data Structures and Their Algorithms by Lewis and Denenberg, used during my junior year of CS major program

My interest in mathematics is traceable directly to The art of the Infinite (by Robert & Ellen Kaplan).

A lot of comments have praised SICP on this thread. I'm a data analyst but I don't have a computer science background. I somehow prefer the ML family languages to Lispy parentheses. Could anyone please suggest an SICP equivalent book in Standard ML, Scala, F# etc? Thank you.

I learned a lot (particularly the beauty of recursive functions) reading the first half of ML for the Working Programmer. The second edition is online.[1] I did not like it as much as the first edition TBH.

The other ML book that would be in the spirit of SICP is Programming in Standard ML.[2] I did not read the whole thing, but the parts I read influenced my programming style.

[1] https://www.cl.cam.ac.uk/~lp15/MLbook/

[2] https://www.cs.cmu.edu/~rwh/isml/book.pdf

Thanks mate, I'll have a look.

Don't know how equivalent is this to SICP, but this is very good resource: https://cs3110.github.io/textbook/cover.html

Thanks mate. I was honestly hoping for some F# resources as I'd started learning it a bit. But would mind glancing over this. Cheers.

If you are not happy with Lisp parenthesis, why don't you try Elm or Elixir?

I thought Elm was very much about web development. And Elixir is too in some ways. Both Scala and F# have a lot going on in the data space. Scala more so than F#. Standard ML is exciting because it's not big. And probably a better choice for understanding the fundamentals but Scala or F3 for something serious? This is just my best guess. Actually that reminds me of a very nice course in Standard ML from the University of Washington on Coursera, but it's not a book.

Are you talking about the Programming Languages course on Coursera? I intend to do it someday. The first few videos seemed very nice, indeed.

Phoenix is about webdev, but Nerve is not. There was a recent thread on HN on using Elixir for Machine Learning. Maybe look into that? Elixir is just very pretty in my eyes.

Scala is dominant in big data for almost a decade now. Haven't heard that about F#.

Yes, the programming languages course on Coursera! Yes, you're right, Scala is a lot more prevalent mostly because of Spark. I work on Spark occasionally but mostly use pySpark. But I'm fascinated by the world of functional programming. I think I tried setting up Elixir on my Mac a couple of years ago and it didn't work for some reasons and I almost forgot about it after that. I'm a bit interested in F# as a lot of finance companies use it. It's not that popular. I learned a bit from a Udemy course and I really liked the language even thought I'm not a fan of Microsoft. And it works perfectly on Macs! :)

Building Java Programs: A Back to Basics Approach, by Stuart Reges and Marty Stepp, was my first computer science book and the first book that got me on the road to programming.

When I was a student I carried it around like a bible. I still keep my copy from school, out of nostalgia.

Build Your Own Database Driven Website with PHP and MYSQL, from Sitepoint.

I checked it out from a public library around 2004, at age 13 or 14, and can credit my entire career to it (and a lot of incredibly supportive adults that encouraged and grew a passion in me from a young age).

Physically Based Rendering was a great primer into linear algebra, statistics, sampling theory and whatnot. It's also available online for free these days: https://pbr-book.org/

Vector Calculus, Linear Algebra and Differential Forms: A Unified Approach - This is my all time favourite math book. It teaches Linear algebra in very intuitive manner. Along the pure math side it also gives examples of the introduced concepts from Physics, Machine learning etc... You can buy new one on [author's own publishing company](https://matrixeditions.com/5thUnifiedApproach.html).

I own Spivak's Calculus (which is a great book), but if you are not interested in the pure math side or you just don't want to grind a 700 page tome I recommend Calculus made easy. Contrary to the title and the small size of this book, it's an amazing and intuitive. When I read Calculus Made Easy I also read Infinite powers by Steven Strogratz they complete each other very well.

I have a copy of "The Art of Probability: For Scientists and Engineers" by Hamming it's a really good book.

If you are interested in Bayesian probability, machine learning or information theory I recommend "Information Theory, Inference, and Learning Algorithms" by MacKay it's an amazing book. It's available as in PDF format on the author's website.

"Linear Algebra: Gateway to Mathematic" by Robert Messer. I'm not sure it's particularly great, but it showed me a level of elegance I hadn't seen in CS at that point. So I switched my minor to math and hasn't regretted it.

CLRS algorithms book changed the game for me. Dense and at times difficult to read but incredibly thorough and no hand waving whatsoever. Brought rigor to my approach and helped me clean up the way I think about some things.

I read through the algorithm book by Skiena, and it was OK, but for the most part, I found my current intellectual curiosity to be far more driving than a book. I guess I'd say I learn to do rather learn to learn.

Programming: Principles and Practice Using C++ by Bjarne Stroustrup. I discovered that book by chance in my school's library, but it changed everything for me. It's basically why I started programming.

The Commodore 64 Programmers Reference Guide

The Transactor magazine

Godel, Escher, Bach: An Eternal Golden Braid

Tannenbaum - all his text books are good but my favourite was the one on computer architecture. I read it cover to cover like a novel. It was fun to read and didn't feel like effort (mostly anyway).

Hmm, mine was a movie not a book. The movie was the original Star Wars. Had the insight that we will only be able to settle other planets when computers control everything when watching Star Wars.

The lensman series for me - wanted to know how inertialess drives worked :-)

The Mathematical Tourist by Ivars Peterson when i was 15. Years later when my wife and I combined our pretty extensive book collections it was the only tile we had in common.

Classical Mechanics by Taylor

Relearning mechanics from first principles is fun!

"The Music of the Primes" by Marcus du Sautoy, about history of prime number theory and the Riemann hypothesis. Beautiful and inspiring.

The Theoretical Minimum by Leonard Susskind --> My background is in software engineering. I loved these books and their associated videos.

Math: Art of Problem Solving (read in jr high)

Computer Science: CLR Algorithms book and Skiena's Algorithm Design Manual (read both in college)

Unix for programmers and users by Graham Glass. Excellent book that explained everything concisely from shells to system calls.

Statistics, 4th addition by david freedman. Read it years ago but still remains the most lucid book ive ever read.

Knuth, vol. 1.

Volume 1 served me a decade+ ago as an approachable survey of the history of computer science up to that era- super useful and enjoyable!

What did you find in it?

Not me but someone I know got a lot of this mathematically:

A Tour of the Calculus by David Berlinski

Programming didn't make sense to me until I read C++ Primer Plus by Stephen Prata

My very first intro to math was through "Learning to Reason: An Introduction to Logic, Sets, and Relations" by Nancy Rodgers.

Many books of this kind are usually called "Intro To Discrete Math" because I think discrete math is easier and neater than its continuous counterpart. Most such books consider a sampling of topics from number theory, combinatorics, graph theory and discrete probability. Obviously, they do not even scratch the surface of the subjects they teach as that's not the goal. For example, compare what's in the counting section of a typical intro to discrete math book to an intro to counting proper. For example, my very first discrete math textbook was "Discrete Mathematics with Applications" by Susanna Epp and for counting it was "Combinatorics: A Guided Tour" by David R Mazur. Epp's books covers much, much, much less. Similarly, currently one of the very best intros to elementary number theory is "Number Theory: Step By Step" by Kuldeep Singh. The latter also contains much more material than a typical intro to discrete math.

Beyond that every author of an into to discrete math likes to include a little taste of their own personal favorites. For example, Susanna Epp has a chapter on algorithm analysis whereas, say, Edward Scheinerman talks a little bit about group theory in his book "Mathematics: A Discrete Introduction". Yet other authors include chapters on geometry, vectors spaces, generating functions etc.

I noticed (almost) every math/CS adjacent thread on HN gets mention of Big O notation. IMO, the best place to learn that is a textbook on discrete math. For example, Susanna Epp has a whole chapter dedicated to this topic in her intro to discrete math book. Consider [0] from Epp's book. Since it's a math book it's very careful and thorough meaning if you don't understand something in that example reading the material that precedes will clarify everything; just a matter of backtracking far enough. Since it's an extremely introductory book, it's also very patient. I personally struggled with the motivation for defining total derivative through little-o notation.

There are a ton more textbooks on discrete math like, say, " Essential Discrete Mathematics for Computer Science" by Lewis & Zax or "Discrete Mathematics: An Open Introduction" by Oscar Levin.

Some intro books also attempt to include a tiny bit of real analysis and general topology. Topics include ways of using least upper bound, epsilon-delta arguments, open/closed sets, a little on metric spaces etc. Obviously, such books don't get carried away by ditching epsilon-delta/balls arguments in favor of more general open sets to define continuity, for example. One such book that comes to mind is "Mathematical Proofs: A Transition to Advanced Mathematics" by Chartrand, Polimeni, Zhang.

I think the best book in this introductory genre is "Book Of Proof" by Richard Hammack. It's freely available. I see the latest edition added a few techniques for proving convergence and continuity on the real line: epsilon-delta and epsilon-N stuff.

I call the books mentioned above "Intro To Math 1". After these books one can get started with more in depth books on the subjects considered in the aforementioned books or pick up an intro to real analysis, topology, abstract algebra, whatever.

One of the most effective textbooks on elementary math analysis is "Principles of Mathematical Analysis" by Rudin. But one will have a real tough time with it even after studying the aforementioned books. But there are fantastic preparatory books like "Linear Algebra: Step by Step" by Kuldeep Singh which one needs because Rudin considers Euclidean Spaces proper, not just the reals. Other helpful books include "Yet Another Introduction to Analysis" by Bryant, "How to Think About Analysis" by Lara Alcock, "A First Course in Mathematical Analysis" by Brannan, "Real Analysis: A Long-Form Mathematics Textbook by Jay Cummings" etc. None of these books are perfect. For example, none of them (but that of Cummings) include the necessary topological concepts. Also, even though the book by Bryant is chatty, his exercises can be tough. Case in point, he expects you to prove that rationals are incomplete in the very first chapter. To his credit, he gives a lot of hints and every one of his exercises have detailed solutions. When I first saw Alcock's book I got the impression that her book was an excuse to explain how we think about the convergence in reals. The rest of the book felt like a filler, even though the book is worth it for that chapter alone. It's good to look into many different books because the authors make different choices. For example, Cummings proves Bolzano-Weierstrass theorem through the fact that every sequence has a monotone subsequence whereas Brannan does it by way of bisection argument. Other authors might make yet other choices. In math the more techniques you have in your tool chest, the easier it is to attack problems. If you solve a problem one way, but the solution given is different it's worth memorizing the alternative solution as it's another technique that will come in handy in a different situation.

Ok, I didn't say anything about abstract algebra and other subjects, but this post is already turning into a novel.

After making very first and wobbly steps into math through the intro to discrete math books, the other path is to study what I call "Intro To Math 2". There are books like "Mathematical Concepts" by Jost or (especially) "Essential Mathematics for Undergraduates" by Giossi. Wanted to say more about this or the other topics above. Maybe next time.

Please, excuse the grammar and inconsistent notation (& naming convention) as it is very late here.

[0] https://ibb.co/Q81b96R

Algorithms + Data Structures = Programs by Niklaus Wirth.

* The Art of Unix Programming

* Code Reading: The Open Source Perspective


Mathematics for the Million by Lancelot Hogben

Knuth volumes 1-3

I still have these on my shelf looking dog-eared and well read You can probably tell from these exactly which year I took CSEE :)

- Biggs: Discrete Maths

- Stroud: Engineering Mathematics

- Solkolnikoff: Mathematics of Physics and Modern Engineering

- Sommerville: Software Engineering

- Aho: Compilers

- Kernighan and Ritchie: The C Programming Language

- Kernighan and Pike: The UNIX Programming Environment

- Ben Ari: Principles of Concurrent Programming

- Clements: Microprocessor Systems Design

- Tannenbaum: Distributed Operating Systems

- Dean, Allen, Aloimonos: Articficial Intelligence

- Knuth: The Art of Computer Programming

- Yourdon: Object Oriented Systems Design

- Abelson and Sussman: Structure and Interpretation

Maybe the one that ones that changed me most:

- Polya: How to Solve it - Hofstadter: Godel Escher Bach

Math: Robert A Adams' book Calculus

spivak calculus

really taught me how to think about math

The Elements of Programming Style

Spivak Calculus. Fantastic book.

Mason - Thinking Mathematically

Convex Optimization - Boyd

Boyd has more books online too: https://web.stanford.edu/~boyd/books.html

Agner Fog manuals on C++

a decade of the berkeley math circle early college


Please don't do this here.

I don't get it. Is this somekind of popular joke? If so, please help me understand it.

Applications are open for YC Winter 2024

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact