Hacker News new | past | comments | ask | show | jobs | submit login

This document is over 900 pages. How long are you supposed to take to read and understand all of this? And is this really all necessary?

On the surface this looks like an insurmountable task with questionable benefits. Don't get me wrong, but in the past 6 years of casual and professional programming, I've needed only a basic understanding of math, the most difficult thing being collision detection in games, and that includes doing RSA cryptography by hand. This paper starts off with proofs, something I've never had in school and which always seemed to me as if they only belong in scientific math papers, not practical life of someone doing computer science.

I don't mean to criticize the document or math in general, I would genuinely like to understand what 900 pages of this is going to bring me, especially when it starts with something I've never needed or seen outside of theoretical math discussions.




In professional programming, most of the time, system design is most crucial and would use less of these mathematics. These 900 pages is not insurmountable. A discrete mathematics course for year 1 computer science students would have covered a good 70% of it. Such a course takes only 3 months and is 1/5 of a student's workload.

The benefits of these is hardly questionable. Its use is apparent when you take a Design and Analysis of algorithms course like https://www.youtube.com/watch?v=JPyuH4qXLZ0. A good example of using knowledge of the pdf is analysing expected runtime of a hashtable. Which turns out to be theta(1) average case. Good analysis of algorithms inspire better design of it in general.

Data structure and software engineering courses would probably be sufficient for many software engineering jobs out there. Databases, networks, OS and security are good to have knowledge. However, if an engineer is building cutting edge stuff, Mathematics will be his/her best friend.

One good property of Mathematics is that it provide guarantees in the form of equality, inequalities or equivalences. Such guarantees can help you ensure that your system holds quantitatively. It is thus your job to reduce your computer science/engineering problem to a mathematics problem.

I find this remark by Terence Tao particularly good: "If you don’t have mathematical background, the classes you take will help you train to analyze existing systems and build things that haven’t been built before. If you want to design something really new, at some point you’ll have to model what you’re doing, which might be different from previous models, and you have to do some mathematics somewhere." This remark is made in this interview: https://docs.google.com/document/d/1rinL25rC8LnMTzZcGjg1axT-...


Yes, mathematics has been, is, and will be at the cutting edge of software engineering.

For historical examples: consider Turing, Knuth, and Page & Brin.

For current examples: consider High Performance Computing (HPC), Data Science, and Data Engineering.

For future examples: wait and see (or study math in the present).

Also, consider etymology: computers are machines that preform computations; software is code that directs computations and their results on computers; software engineers create code that directs computations on computers; computational scientists define the limits of computing on computers that have given properties, and create novel computational solutions to problems; mathematicians discover the theory that computational scientists (and, more generally, all scientists) utilize.

Note_0: There is a field at the cutting edge of computation, computational science, that requires the most mathematical knowledge of any discipline that includes the compute stem.

Note_1: Math goes beyond providing guarantees of equality, inequality, and equivalence: it is the quantitative basis of computer science (and all science); it provides Boolean logic; it guarantees boundaries/possibilities; and it provides scope.


This is, in fact, a textbook for a discrete mathematics course for year 1 computer science students :)


It seems like about two semesters' worth of material in here, so 3 hours classroom time + 7 hours homework/self-study time, for 36 weeks, would give 360 hours. 900 pages divided by 360 hours is 2.5 pages per hour, a rather reasonable rate for study (this is not as dense as an academic paper).

This covers intro to proofs, mathematical logic, number theory, graph theory, combinatorics, and probability. In a typical undergrad math curriculum, these would be five or six different courses. So if you have a two-semester course or self-study covering this 900-page textbook, it's probably more efficient than learning the material in the math department by a factor of 2.5:1 or 3:1.

Yes, stuff's been cut. This is more of a survey of these fields with the emphasis on the most important points, and informing you of the most basic parts. So if you encounter one of the more specialized problems that might have been covered in a more specialized course, you'll have hints on where to look, what to Google for, and what sort of reasoning to use.


There's a lot you can do in programming without knowing a ton of math, just like these days you can drive a car quite well without having a degree in mechanical engineering. But just like with a car, the more you know about the deep underpinnings of things, the more you can do. A person with deep knowledge of how their car works may rebuild the engine and overbore the cylinders for more displacement, put in a camshaft with more lift, and replace the factory exhaust manifold with headers with better flow.

A computer programmer who understands the mathematical underpinnings of his work might replace the standard library implementation of HashMap with one that's better suited to his use case, or do his own derivations to figure out how to implement back-propagation in a neural network, etc.

No, it's not a perfect analogy, but the point stands I think - having the deep knowledge of the theory and foundations in any field enables you to push the boundaries beyond any "black box" that is provided to you.


It depends on what you mean by "read and understand".

My approach with something like this is to breeze through it a first time, just to understand the main point of each section and how it all fits together. If you spend 30s/page on average (obviously there will be a lot of variation), that's 7.5 hrs -- two mornings, afternoons, or evenings.

And for most people, that will provide 90% of the value. And you know what to look up, where, when you need it in the future. And you also know whatever part you might be personally interested in more, and you can go back and read those sections in more detail.

This approach works well with all types of non-fiction, and it can actually be really helpful to first "skim" through every non-fiction book you read, before reading in detail -- knowing in advance where the author is going can often help remove a lot of confusion.


I have found the mechanics of mathematical proof invaluable when programming, because they show you how to be very clear about what you do know and what you don't know. Basically "Is this thing just a random example, or something that is true in all cases?"

When I work on complex algorithms or concurrent systems I really feel the benefit of proof, because there's no way I could just test if the code is correct.

In the book, explaining what a proof is, how proofs are typically constructed and how to write a good one takes them ten pages, all written in very down-to-earth language. Then there are eight pages of problems you could do if you wanted to test your understanding.

I bet if you read those ten pages you'd feel there was nothing special there, just obvious ways to reason about things.


It's hardly insurmountable, but to answer your question, maybe people will read it because you're just curious, want to learn. Also you don't have to learn all, or any of it -maybe you could just use it as a reference book.


It depends on what you want to achieve. Strong fundamentals in maths gives you the tools to solve big problems. The more ambitious the problem you want to help solve, like say a traffic-control system for a high-speed train network, then the more maths you will need.


I just skimmed the whole book and the content were about 70% of what we did in Discrete Mathematics in one term.

A term has ~15 weeks with 4 hours per week.

The exercises are not included in this - so I think 100-150 hours should suffice.




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: