5 ms·
Programmers should know math.. just not all of it
- Dellort 17y agoThen you start looking at foundational mathematics. So you learn ZFC set theory, but wait axioms in ZFC are in FOL. Right so FOL is a foundation that comes before ZFC, but wait sets are used in FOL... Back and forth like this for a while and then you're tired of looking for where the beginning is.
- ntownsend 17y agoI'm not sure what this has to do with the original post, but I'll go with it... You also have category theory, proof theory, model theory, recursion theory, type theory... They all fail as "foundations" because they all emit paradoxes. In some cases these can effectively be ignored because they don't play into anything (ZFC, for example), and in others they can be ignored because we can work around them (e.g. category theory). In fact, few working mathematicians actually care about mathematical "foundations" because there is no way to know if they are "correct".
- ionfish 17y agoIn what way is ZFC paradoxical? One could certainly accuse it of being arbitrary (given the independence proofs) and incomplete (given Gödel's 1931), but I wasn't aware that one could derive a contradiction in ZFC. Russell's paradox, for example, is not a paradox in ZFC but a proof that there is no set of all sets.
- ntownsend 17y agoGood catch. I'm using "paradox" very loosely here. What I was trying to say is that we ignore the shortcomings of ZFC: undecidable statements, unnecessarily strong axioms added (regularity and replacement). In some ways avoiding Russell's paradox have made ZFC a weaker theory.
- ionfish 17y agoObviously paradoxes don't have to be actual contradictions, merely results which fail to conform to our intuitions (e.g. the Banach-Tarski paradox), but in my experience when the term is used in the context of the foundations of mathematics, it does mean that a contradiction is derivable within a foundational theory (the class paradoxes being the obvious case in point). This is not a complaint, I'm just explaining why I took your remark in slightly the wrong way. Working mathematicians ignore the shortcomings of ZFC because foundational issues just aren't what they concern themselves with day-to-day; I'm sure you're aware of the remark that mathematicians are platonists during the week and formalists at the weekend. It's generally left to logicians and philosophers of mathematics (two tribes which, while not coextensional, have a rather large intersection) to worry about these things. Certainly according to structuralists like Shapiro, this is not actually a problem. [1] [1] Shapiro 1997, http://bit.ly/3om0CO http://bit.ly/3om0CO
- Dellort 17y agoWell that's not entirely true. There has been a vast effort to make a foundation for mathematics with the various set theories. Naive set theory is usually used as a language for creating the mathematical primitives most working mathematicians deal with.
- ntownsend 17y agoI agree, there was a vast effort, but that was decades ago. As I said, most working mathematicians don't concern themselves with these issues and just stick with ZFC.
- chanux 17y agoThe writer is not talking about average programmer I guess.
- wtallis 17y agoGraph theory is conspicuously absent from the list. Is that considered computer science these days, or does the author not think it is particularly important for programmers?
- Dellort 17y agoIt's basic thing that is usually always part of a CS curriculum.
- elblanco 17y agoYou'd be surprised at how many places don't dig at all into graph theory as part of the their CS coursework.
- matthw 17y agoI'd throw in some order theory too. Posets, lattices, boolean algebras etc. All crop up pretty often, if you know how to recognise them. In fact I think often when people recommend graph theory for computer science, they're thinking more about order theory (trees, DAGs, posets etc), or failing that, more the "basic algorithms over graphs" stuff than the "let's prove a bunch of clever theorems about k-colourings" kind of graph theory which you might get if you bought a book on it.
- jackfoxy 17y agoBoolean algebra is conspicously missing from the Basic List, probably because the parts of Boolean algebra that are most useful are the first thing any programmer learns (although there are plenty of people making a living programming who can't even do basic bit twiddling). Babbage conceptually invented a universal computer a couple of decades before Boole published his major opus.
- Dilpil 17y agoThe Graph Theory which is actually useful has been absorbed into Computer Science, and long abandoned by Mathematics.
- matthw 17y agoWhen it comes to first-order logic, you don't actually need this to reason about conditionals. That's just Propositional Logic (or Boolean Algebra, if you want to put it in a slightly more abstract setting, which wouldn't hurt since you can then apply it to other related things like set union/intersection/complement). First-order logic is really useful for Relational Algebra though. Which you should know if you do anything with relational databases.
- araneae 17y agoI am offended by this post, mostly because math and I generally don't get along. I think very procedurally, and the math-y abstract way of thinking about things seems almost at odds with this. Obviously, abstraction exists in programming, especially if you're using a functional language... which is probably why I feel more at home with oo languages ^-^.
- ntownsend 17y agoProcedural programming is still mathematical.
- anonjon 17y agoProcedural thought isn't procedural programming. And even if it were, procedural programming doesn't have to be mathematical. (It has to be... procedural).
- anonjon 17y agoI don't know why you are getting down-voted for this comment. I think very procedurally too, and although I'm generally pretty good at math stuff, I try to build my abstractions in such a way that I don't actually have to deal with a lot of the mathematical theories behind stuff more than once. (I can look up and understand/implement a math thing, but I have trouble actually knowing and remembering math stuff). I think the distinction is an interesting one, you don't necessarily need to know a lot of this math stuff, but you do need to be able to understand it or figure it out when it is presented to you. In the same sort of way, I kind of boggle at job listings that require 'X years of Y programming language experience'. Certainly it makes sense to hire qualified programmers, but if you have the thought process down for writing good code, and have a reference manual to the language, it really shouldn't matter what language you are coding in. Its more about having the ability to learn things on the fly than about already knowing X, Y or Z.
- timwiseman 17y agoAs someone currently studying math in a masters program, I am a huge fan of mathematics itself and of programmers learning at least the basics. With that said, it is not necessary for a working programmer to know large amounts of math. I have known more than one programmer with a successful career that never studied any math beyond the required introduction to calculus and had long since forgotten most of that. In short, I think the study of mathematics is very helpful to a programmer in both the general sense of improving their overall thought processes and in the specific of helping with certain types of problems, but it is not necessary for most.
- elblanco 17y ago>I think the study of mathematics is very helpful to a programmer in both the general sense of improving their overall thought processes and in the specific of helping with certain types of problems, but it is not necessary for most. This is true. Most of the absolutely best developers I've ever worked with were Math majors. The second best were Physics majors. They had long since forgotten most of their formal training, but they knew how to think about problems in the right way.
- camccann 17y agoHow about some Category Theory? That's used in the theory behind type systems, if memory serves me. On the other hand, it's a field that even mathematicians refer to as "general abstract nonsense"...
- amix 17y agoI would say that statistic and probability theory are probably the most important thing to learn for anyone that analyses data, yet most programmers are clueless and statistics isn't that popular in CS programs (at least the one I had or have heard of).
- jimbokun 17y agoIf you come anywhere near Machine Learning, statistics becomes extremely important. Statistics, Calculus and Linear Algebra are definitely prerequisites for even a rudimentary understanding of the algorithms. You are dealing with inherently probabilistic problems, and optimizing functions on many dimensional spaces. It's pretty much all math, actually.
- btilly 17y agoWhy is single value Calculus on his list of things that every programmer should know? People learn it early because of how important it is to the hard sciences, but it isn't particularly important to computer science. I would definitely move it down to the list of specific applications that you can learn if you need it. I would also be inclined to have basic probability theory join combinatorics for the simple reason that the two subjects are so closely related that you tend to learn about them together. However statistics should remain a specific application of mathematics. Otherwise a good list.
- zjj 17y agoCalculus is very useful in CS. Many CS papers use it, for explaining algorithms that have a discrete implementation, for example (some algorithms for finding edges in images for example), or for probability stuff.
- pgbovine 17y agoi think OP might be thinking along the lines of, "how many working programmers need to know or use calculus in their day jobs?" sure, CS researchers working with physical medium like robotics or computer vision need to use calculus, but the millions of people writing code to shuffle data back-and-forth between sources (which is lots of programming jobs) don't need to know a single bit of calculus
- btilly 17y agoThat is exactly what I was thinking. I do not deny that there are many specific areas where Calculus is useful in programming. However most working programmers won't encounter them.
- deleted 17y ago[deleted]
- mpf62 17y agoBut what if they encounter them? "I could theoretically develop a solution within a day, but I have no idea what you are talking about!" I hope such programmers make sure that they can work on the next twitter and such things and don't have to implement solutions for financial controllers and the like.
- noblethrasher 17y agoI'm starting to realize that calculus (or rather analysis) is pretty important for UI design. Programmers think in terms of discrete things but users think in terms of a continuous world (no sudden jumps between 'things'). However, user interfaces often consist of discrete elements. Yet since users think in terms of continuity they create a mental model that fills in the apparent gaps. So I'm beginning to appreciate that good UI's are the ones where arbitrarily small actions have similarly small effects (e.g. the scroll bar and certain animations) which allows for a smooth learning curve (I'm using the term 'smooth' in the same sense that we use it in calculus). I think one of the reasons that OSX and other Apple products have a reputation of being so approachable is that they give the illusion of a continuous mapping between user actions and results. (I just re-watched the video on seam-carving and even that seems like one of those obvious ideas once you have a good grasp of analysis.)