12 ms·
A Programmer's Introduction to Mathematics
- revskill 3y agoAgain, one more "failure" of attempting teaching Maths to programmers. My expectation is always, teaching Maths without using any of Maths language (forget theorem, signature,...). Is this possible ? Yes. Programmers use code, algorithm, data structure to run the code, and to understanding the theory, instead of understanding Maths language, which is most of the time, "hurt the brain"
- sourceless 3y agoTeaching maths without "Maths Language" is like teaching programming without a Programming Language.
- revskill 3y agoYou don't need to understand "Theorem" to know how to use the theory. You can replace any of Math definition with code. Is this the point of "for programmers" ?
- JadeNB 3y ago> You can replace any of Math definition with code. You often (but not always!) can replace a math definition with code—but either your code is sufficiently precise that it's just another way of phrasing the definition, or you're in the analogous situation to using a language defined by its implementation instead of a specification. And there's plenty of useful space for such languages—but they aren't formally specified languages. Math that isn't formally specified isn't math, in any sense that a mathematician would recognize—which is not to say that it can't be useful.
- d_tr 3y agoRigor and mathematical terminology make it simpler and easier, because you can say more things with fewer words and more precision. Mathematicians are not masochists. Compared with truly understanding the theorems and the concepts, the effort to understand the terminology is basically zero.
- madsbuch 3y agoI would say that the pros of mathematical notation is the opposite of rigor. You get to not write everything out, which is both good for the lazy reader and lazy writer. It is just not very good for the newcomer that needs to learn the implicit assumptions that are not written out.
- klibertp 3y ago> because you can say more things with fewer words You say it as if it was a good thing. It's not. APL, J, and K would reign supreme over all programming if brevity and conciseness were all that good for people actually understanding what the heck is happening. Math notation is a peculiar, loosely defined, context-dependent, ambiguous syntax that requires a lot of memorization, a special keyboard when writing, and a lot of focus when reading. It only benefits people forced to write equations on blackboards all day long. I mean, I feel for them, it's a tough job, but I'm not going to be doing that. > the effort to understand the terminology is basically zero You say it as if it was a fact. I don't believe it's anything else than a gut feeling you have. It's trivial to find people for whom the effort needed to understand the terminology or syntax was too big of a barrier to entry. If you could show a proper, replicated study from scientists working on cognition and memory that proves this statement (zero-cost of alien terminology), it would be great. Otherwise, I see this as a gut feeling coupled with survivorship bias.
- BeetleB 3y ago> You say it as if it was a good thing. It's not. APL, J, and K would reign supreme over all programming if brevity and conciseness were all that good for people actually understanding what the heck is happening. On the flip side, try reading all your programs in assembly. Verbosity is nice up to a point. When I look at the math I did for physics, solving a problem could take 3 pages. If we go with the GGP's approach, it would take perhaps 15-20 pages. Almost everyone would grok it quicker with those 3 pages than trying to read a more verbose 15. It's actually why some prefer functional programming. Which is easier to understand: "Take these student papers, and split them into two groups based on whether the student's name begins in a vowel or not." OR "Create two groups. Call them vowels and consonants. Take the first paper. If it begins with a vowel, put it in the vowel group. Otherwise put it in the consonant group. Once done with that paper, repeat the steps with the next paper. Keep repeating till there are no papers left." And I won't even bother describing how one would do it in C (have a counter variable, at the end of each iteration explicitly check for termination, etc). The difference between math formalism and verbosity is analogous to the difference between the two descriptions above. At some point, more verbosity lets you see the fine details at the expense of the big picture. > It's trivial to find people for whom the effort needed to understand the terminology or syntax was too big of a barrier to entry. It's almost impossible to find someone who can do, say Griffiths level electromagnetics or quantum mechanics without that formalism. Your refrain pops up all the time on HN, but I have yet to see someone do even undergrad level physics in any of the alternatives suggested.
- okaleniuk 3y agoI thought so too. When I started Geometry for Programmers, I was going to write all the formulas as SymPy snippets. I thought that was a brilliant idea because, yes, normally programmers are much more comfortable with code rather than with math notation, and math is not about notation anyway. Case in point, you can turn any SymPy expression into LaTeX with the `latex()` function. It doesn't make the expression any more mathematical, so the other way should apply just as well, right? But the very first review shown that I was wrong. Very few people saw this as a good idea. Most wanted both formulas and code. Apparently, there is a certain "comfortable" level of math language in a math book readers do not wish to give up.
- franknstein 3y ago"...and math is not about notation anyway". It most certainly is!
- triyambakam 3y agoEnglish is not defined by the Latin alphabet that it uses.
- consilient 3y ago> math is not about notation anyway Well, yes and no. It's true that notation is a tool and not the actual object of interest (except when it's both), but some tools are much, much better for certain tasks than others. Imagine, for instance, trying to teach someone about databases and having them demand that you translate everything into x86 assembly first, since that's what they're comfortable with. Once you get past the basics, this is the level of mismatch we're talking about.
- okaleniuk 3y agoI agree on yes and no. If notation mattered little, there would not be that many different notations. Leibniz and Lagrange notations for derivatives, Einstein abbreviation for sums, Iverson notation for tensors that later became APL, or any language for any computer algebra system ever. If notation mattered little, inventing your own notation would matter little too. But if notation mattered a lot then... there would not be that many different notations either. There would be one and only notation that works and no one would dare to divert from it. Math notation is a cultural artifact with its own significance pretty much like SQL or x86 assembly language indeed.
- auggierose 3y ago[flagged]
- citizen_friend 3y agoI do the opposite, I figure out the math to describe a problem, then write the program to do it.
- RugnirViking 3y agolearning the language of a field is vital if you ever want to use anything somebody else figured out. You can't read a paper to understand how something works if you dont learn the language they use in the paper. The reason they don't write the paper in "normal english" is because that normal english would make the paper thousands of pages long with lawyer-speak listing everything they dont mean. It turns out there isn't a shortcut to learning it, and after a couple lonely evenings slowly translating you will eventually be able to skip over that part of notation when you see it. repeat for all the maths youre interested in and you will be good
- madsbuch 3y agoThis seems to be interesting stuff! It seems to be heavily focused on Algebra and arithmetic. My own recommendation would be to pick up Coq or Idris and use that to bridge programming, math and logic. In my experience this is the best way to leverage the knowledge. Understanding monads and category theory will immediately let you make better API designs, architecting larger applications, etc.
- gjadi 3y agoAny books or links you recommend? Also, won't learning two things at once be harder than learning each independently?
- sva_ 3y agohttps://www.ma.imperial.ac.uk/~buzzard/xena/natural_number_game/ https://www.ma.imperial.ac.uk/~buzzard/xena/natural_number_g...
- nebulous1 3y agoHere's a link that was on HN before: https://www.neilwithdata.com/mathematics-self-learner https://www.neilwithdata.com/mathematics-self-learner There's no quick fix in there though.
- madsbuch 3y agoBenjamin Pierce was my go to guy: https://softwarefoundations.cis.upenn.edu/index.html https://softwarefoundations.cis.upenn.edu/index.html And when that is digested: https://www.cis.upenn.edu/~bcpierce/tapl/main.html https://www.cis.upenn.edu/~bcpierce/tapl/main.html And I think the learning should be fun. It is much more like taking an adventure into these areas. Especially when it is not a part of a course. So learn everything at ones and write about it (this is an area that is serious in need of some good written blog articles) - Maybe that will also create some serendipitous moments :)
- jfoutz 3y agoI'd throw in Agda with that list. I've enjoyed https://github.com/jespercockx/agda-lecture-notes/blob/master/agda.pdf https://github.com/jespercockx/agda-lecture-notes/blob/maste... > Also, won't learning two things at once be harder than learning each independently? kind of, yes. But it's kind of funny. Like, it can take a while to get your head wrapped around functional or object oriented programming. But once you get a sense of it, you can kind of puzzle out any of that style of code. Math is written in proofs. after you prove a + (b + c) = (a + b) + c a few times, you kinda get a sense of what to look for. I'm not saying it's easy. I am saying it's not that different than becoming fluent in another style of programming. functional hello world is still just hello world. deeper, more complicated programs are hard no matter the language/style. Getting a handle on writing proofs has been personally rewarding. (I've been pretty casually studying over the last few weeks/months). I don't think it'll advance my career or anything, but it's neat.
- irajdeep 3y agoI used to do some "competitive programming" back in university - which I think helped me grasp quite a few Mathematics concepts.
- madsbuch 3y agoWhich mathematical concepts would you say that you got to grasp? Having done competitive programming also, I would not say that it made any difference for my mathematical perception.
- irajdeep 3y agoTo name a few concepts: "Permutation & Combination", "Proofs with induction", "Probability". I did learn some of them from university courses, but writing code for them(in terms of coding problems) helped cement few of the them for me.
- madsbuch 3y agoHow did you apply induction proofs in competitive programming? Even using recursion is rarely a good idea as you loose control with your memory layout. And using a language that supports the concept of proof by induction would surely leave you on the absolutely last place for competitive programming as most of the algorithms used use guarantees that are extremely difficult to reason about even with some of the most recent advances in formal methods. I do see how combinatorics work with competitive programming, though. and to an extend also probability theory, though I never used any probabilistic algorithms myself.
- irajdeep 3y ago> Even using recursion is rarely a good idea as you loose control with your memory layout. Used recursion at tons of Codeforces / ICPC problems with some caching(commonly known as "dynamic programming")
- 3y ago
- crabbone 3y agoWhy did the author choose such an awful example to start with (polynomials with real coefficients)? This is just upsetting: one would hope to understand things (i.e. to derive them from first principles), but instead are given another hand-waving "trust me bro, it works" kind of start... Why even go into anything that requires "real" numbers when talking to programmers, if no real numbers can possibly exist in computers? You don't need "real" numbers for logic, nor for algebra, neither for combinatorics and many, many more useful areas of mathematics (from programming perspective). And yet the reader is required to take on faith some "math wizardry"... Even if the author wanted so much to have polynomials, why not take polynomials with rational coefficients? -- A much easier to digest concept that requires no hand-waving and works just as good for the purposes of illustration?
- detrites 3y agoFor me, and I guess for programmers in general, as presumably anticipated by the author, the concept of floating point numbers as a pure construct without having to cram them into n bits was easy to grasp, even relaxing. Perhaps that was the intention there. As for choosing polynomials in general as a starting point, a potential answer is maybe found in the text: > Polynomials occur with stunning ubiquity across mathematics. That is, beyond the concept of basic arithmetic that's surely already known, it's possibly a logical place to begin.
- crabbone 3y agoIf you read my argument... I'm not against polynomials. I'm against using "real" numbers for programming-related examples. Floating point numbers with arbitrary precision are not the same thing as "real" numbers. They are still rational numbers. See, even you made this mistake, not surprisingly, this will confuse (or even worse, will give a false sense of understanding) to programmers reading such examples. Arbitrary precision floating point numbers exist and are quite tangible, while, perhaps, not very common, and that is the concept that's easy to grasp. These behave like almost any other number you know: you can add them, multiply, take a natural logarithm of etc. You cannot do any of those operations on "real" numbers in computers because of the way arithmetic operations work, you'd have to start with the least significant digit (to know if there's a carry), but there's no way to find out what the least significant digit is going to be.
- zelos 3y agoI found this a great introduction to 'proper' mathematics. It gave me enough context to be able to read more mathematics without feeling so lost. It also showed me just how bad the mathematics part of my (non-computing) engineering education was.
- photochemsyn 3y agoInteresting work, but I think it neglects one of the profound distinctions in mathematics that people coming from a programming/compsci background often stumble over: that between the discrete and the continuous. This looks like a good discussion: > "The distinction between the discrete and the continuous lies at the heart of mathematics. Discrete mathematics (arithmetic, algebra, combinatorics, graph theory, cryptography, logic) has a set of concepts, techniques, and application areas largely distinct from continuous mathematics (traditional geometry, calculus, most of functional analysis, differential equations, topology). The interaction between the two - for example in computer models of continuous systems such as fluid flow - is a central issue in the applicable mathematics of the last hundred years." http://philsci-archive.pitt.edu/16561/1/Discrete%20and%20Continuous.pdf http://philsci-archive.pitt.edu/16561/1/Discrete%20and%20Con... With respect to programming and mathematics, this line is worth thinking about: The problem is that the continuous is easier to imagine and prove results about, but the discrete is unavoidable when it comes to calculation.
- Tainnor 3y ago> The problem is that the continuous is easier to imagine and prove results about [...] Why would that be true? A cyclic group of order n, or even all of Z, seems to me easier to think about than the real numbers which employ philosophically tricky notions such as uncountable infinity, limits, convergence, etc. There are a lot of weird and counterintuitive results even in elementary analysis because of the way the real numbers work. Of course, there's also discrete objects that are hard to reason about.
- penteract 3y agoI think this is written from the perspective of a continuous mathematician or physicist, and the examples of discrete maths they have have in mind are numerical simulations, which are certainly harder to reason about than their continuous counterparts. I also suspect that this is a fairly orthodox attitude among mathematicians - in "The two cultures of mathematics" (https://www.dpmms.cam.ac.uk/~wtg10/2cultures.pdf https://www.dpmms.cam.ac.uk/~wtg10/2cultures.pdf) Tim Gowers says with more authority than I could: > the subjects that appeal to theory-builders are, at the moment, much more fashionable than the ones that appeal to problem-solvers. This isn't precisely the discrete/continuous split, but it's mostly aligned and the article puts combinatorics is firmly in the latter category.
- chazeon 3y agoLooking through the toc I hope I had known this book earlier. Now I am looking for books for the math of more advanced topics, such as stochastic calculus, etc.
- weinzierl 3y agoI like that - in addition to covering the usual topics - it has a chapter about groups. Maybe this is just my bubble but in my experience math courses for non-mathematicians are often lacking in this area. In the same vein a basic introduction to topology could be a nice addition to a future version of the book.
- j2kun 3y agoOh hi! I'm working on a second book: Practical Math for Programmers. Some details at https://pmfpbook.org/ https://pmfpbook.org/ Every weekend I livetweet my notes and research on the new book over at j2kun@mathstodon.xyz, e.g., https://mathstodon.xyz/@j2kun/110283189611214753 https://mathstodon.xyz/@j2kun/110283189611214753 Happy to entertain any ideas folks have for topics! Got a long backlog to go through, but there's always room for more.
- gdcbe 3y agoAwesome, I do not have or want mastodon or any social media like it, but did sign up for your newsletter. Thank you for all your hard work. Once the next book comes out, I’ll buy a couple of copies immediately! Looking forward to it!
- hintymad 3y agoNice. Years ago practical maths to my programming needs was Concrete Mathematics for algorithm analysis, combinatorics for data structures, queuing theory for performance analysis, mathematical stats for data analysis, and optimization theories for discrete optimizations. Calculus and linear algebra came in here and there as tools for those maths. It looks nowadays there's less need for diving into such maths as well-packaged systems and libraries solve most of my problems. I'm very curious what topics your book will cover for the new generation of programmers.
- codepoet80 3y agoThank you for making this. I'm a good programmer, but was awful at math in high school and college. I've often thought that now that I'm older (40s) and more patient (most days), I would like to try again, but have never found the right resource. I don't know if this is it, but I appreciate your effort and will order the book ASAP!
- gdcbe 3y agoI bought it back in the days when it first came out, loved it a lot. Helped me a lot as a “self-made” programmer. Shortly afterwards I actually started a formal pure math education in my 30s at uni, but with a second child on the way that journey stopped after only completing the first year. In the meanwhile there’s also a third kid. Still, really fell in love with mathematics during my career as a programmer and when the kids are bigger it will be a hobby that gets more attention again. Suffice to say. Love the book. Will it make you a fully fledged mathematician? Of course not. Can it teach more or better, sure, what not? But it’s a great introduction anyway and it may inspire many that otherwise might not be inspired. Mathematics is really fun if you’re not afraid to feel uncomfortable all the time. Luckily most good programmers probably have that same feeling all the time anyway. I can only hope for more books like this, I have some space reserved for them on one of my dusty shelves! Big thanks for the author to write this book!
- martingalex2 3y agoWe need something similar for quantum physics.
- vasili111 3y agoWhat are prerequisites of math for this book?
- quasarj 3y agoLoved it up until the introduction of proofs. Still can't wrap my mind around it. I'm beginning to think it's because "proofs" don't prove anything, they are just an argument that someone might find convincing.
- tutfbhuf 3y agoA computer program can also be considered a form of constructive proof. One may be confident that the program functions as intended until a bug is discovered. This is why theorem provers have such a strong type system, which reduces the likelihood of bugs compared to mainstream programming languages. However, it is important to note that bugs may still be present, just as they can be found in formal proofs on paper.
- quasarj 3y agoDo they have a strong type system? Maybe I just haven't gotten to that. My issue is that, there doesn't seem to be any rules for "evaluating" a proof to see if it is valid. Everything seems subjective? Maybe I'm just missing something. But coming from programming, I'm obviously used to a situation where I can put my code through a mechanical evaluator which will tell me if it works. Or at least, will tell me if the syntax is right!
- lying4fun 3y agoWhen you proove something you are esentially prooving that a statement logically follows from some other statement(s) for which we know that are true You can evaluate the validity of a proof by checking the truthfulness of every statement which was used to argue that the proof holds Miniature example of a proof with relaxed rigor: Proove that 3+0=3 Proof: The above statement is a direct consequence of the additive identity axiom which states that x+0=x, if x is a real number. So the only thing we need to check is if 3 is a real number, and we know that it is. The statement holds, end of proof So to check the validity of this proof you could check if that axiom really exists and check if 3 is a real number, if some of those is false than the proof is invalid Edit: Or imagine that you have a DB full of axioms, theorems, prooven statements which you can use to proove a given statement. Then you could proove something by just referencing those. Eg. in the example above lets say that the neutral identity axiom has id 3, and the fact that 3 is a real number has an id 103. Then I could just say since 3 and 103 3+0=3
- 1uptime 3y agoThough I haven't yet finished it, this one of my favorite books! Approachable and friendly writing style reminiscent of the "3 Blue 1 Brown" channel on Youtube.
- deterministic 3y agoThis is THE way to learn math as a programmer: https://softwarefoundations.cis.upenn.edu/ https://softwarefoundations.cis.upenn.edu/ With the added bonus that you learn how to prove software correct.
- dqft 3y agoLinear Algebra (chap 10) always reminds me of this quote: “Classification of mathematical problems as linear and nonlinear is like classification of the Universe as bananas and non-bananas.” And its standard reply: "It's actually bananas all the way down."