14 ms·
Why Don't Computer Scientists Learn Math?
- sheeshkebab 10y agob/c any math I learned was long forgotten while was figuring out how to compile javascript...duh
- boxcardavin 10y agoI have noticed that CS majors tend to be separated into two groups, those who got linear algebra and those who got THROUGH it. Programmers are very logical in their thinking but most are not what I would call traditionally mathematical in their approach to problems.
- kasey_junk 10y agoPut me in the got "through" it camp. To this day my Pavlovian response to any linear algebra is "put it in a matrix & solve", even if I don't have an intuitive understanding of what that means.
- aswanson 10y agoPerhaps its time to rethink the sanctity of mathematical symbolic communication. Seriously, that equation borders on parody in attempting to relay a rather simple concept. We dont expect CS people to communicate concepts through compiled, machine language style syntax (minimum number of bits uber alles) so why not revisit the communication of mathematical concepts with weight given to clarity over compression?
- Ar-Curunir 10y agoBecause mathematics is a very dense language; building in redundancy does not scale when you're reading mathematics papers.
- gravypod 10y agoWould it make sense to say "building in redundancy does not scale when you're reading source code"? Not to me it doesn't.
- DollaWilliam 10y agoThat's a false equivalency. Mathematics, in practice, is more of a domain specific language that encapsulates more and more precise information as you increase the level of abstraction. The levels of abstraction layer upon one another to be able to handle more complex concepts while retaining all of the underlying precision.
- gravypod 10y ago> Mathematics, in practice, is more of a domain specific language that encapsulates more and more precise information as you increase the level of abstraction Isn't that the point of any DSL? Also, wasn't the advent of DSLs meant to make it easier for non-programmers to understand the flow of control in a system? I think generally the idea was to make things easier to understand by factoring out the complicated bits (implementation) and leveraging abstraction to provide clarity on top of an implementation. If this is the case for every DSL I and every other CS major designs, why should it not be the goal of every math major? Sure to you and many other math-centrist people these symbols are "how I learned it so it must be the best" but to everyone else it's difficult to grasp and hard to understand. The lingo is half the battle for most things but for math it seems like the lingo is the entire battle.
- DollaWilliam 10y ago> The lingo is half the battle for most things but for math it seems like the lingo is the entire battle. There's a kernel of truth there. To abuse the DSL metaphor further, even mildly complicated mathematics concepts are only expressible using layer upon layer of ever-more-abstracted DSLs. Lower-level expansions of the building blocks to improve clarity for reading would be useless in practice, since mathematics is intended to be written and understood by humans and such an expansion would exceed our ability to keep the entire intended concept in our working memory. Proficiency in mathematics is proficiency with understanding and extending the lingo itself. Mathematics /is/ the lingo, which is why it can't be unraveled from it. >"how I learned it so it must be the best" Not at all. It is, however, a very practical approach to getting someone up to speed to be able to do actual mathematics (as opposed to the basic symbol manipulations that most people confuse with actual mathematics.)
- kristianov 10y agoWe are sudo scientists. Sorry.
- gumby 10y agoI see what you did there!
- pcr0 10y agoIt took me a little while to parse the syntax, but understanding the formula itself was simple. I think more people struggle reading math than understanding the concepts.
- OJFord 10y agoI'm surprised anybody calling them self a 'computer scientist' couldn't follow that - developer, sure, but as far as I'm aware everyone on any CS degree programme in the world "learns math"; enough to follow that for sure.
- geoka9 10y agoYes, to me "Computer Science" has always been a branch of (applied) math that deals with mathematical theories that apply to computing - complexity, discrete math, numerical methods, operations research, automata, etc.
- robryan 10y agoSure, write the same thing out as a programming language function and the CS people should understand fine. I think even when I was spending a lot of time on this in my CS degree that kind of notation gave me issues.
- Ar-Curunir 10y agoThis is literally the definition of an onto function; if computer scientists don't get this, they should be ashamed. How do you do any computer science without knowing the symbols for "for all" and "there exists"?
- kapitza 10y agoI suspect most of the CS researchers in the room were, in a sense, lying. I'm going to guess (a) they could all understand the notation if they tried; (b) they were in fact taught the notation in some undergraduate class, math camp, etc, etc; and (c) what happened is that they intentionally forgot it. At least, this is the case for me! I think one of the dirty secrets about the CS distaste for many areas of math, including conceptual areas like category theory that are in fact quite closely related to computing and directly applicable there, is that when judged as CS, they don't seem like very good CS. For example, a programming-language designer who uses symbols that aren't on any keyboard deserves to be laughed out of the room. What are these weird 19th-century squiggles? I see what you're doing, sort of, but why are you doing it? This is obviously a petty example. But computer scientists, at least ones with a certain kind of systems background, have put a lot of work into designing abstract logical structures for human beings to use. They've learned a lot of rules about how to do this well. The corpus of pre-CS math that gets applied to CS doesn't seem to care about any of these rules. It takes a lot of work to come up with a CS aesthetic, and when you have one, your brain only has room for "good" systems that play by your rules. If a system doesn't map to your rules, it's almost physically painful to have to contemplate it. Practicality is not quite the issue. TLA+ seems to be a very useful thing and Lamport has produced a large, large, body of extremely useful work. At the same time, I can't help feeling it would be neat if someone did for TLA+ what Ousterhout did for Paxos.
- tedsanders 10y agoOf course, the alternative hypothesis is that they weren't lying and they did forget it. As someone who majored in math quite successfully within the last decade, I can honestly tell you I didn't remember what ":" meant and therefore had trouble parsing the expression. I don't think I forgot intentionally or was lying.
- gizmo686 10y agoAs someone currently majoring in mathamatics, I can honestly say this is the first time I have seen ":" used in this way. The "standard" way I would expect to see that would be for the first ":" to be replaced with a "|", and the second one to be replaced with a "," (or omitted entirely). The third ":" does not look out of place, although I would probably omit it, or right it as "st". EDIT: for clarity, I would right the set as: "{f : [1..N ⟶ 1..N] | ∀ y ∈ 1..N , ∃ x ∈ 1..N st f[x]=y}" The ":" in this case indicates that f has the indicated type. As long as I am commenting on my sense of "standard" notation, I should also note that the "[1..N ⟶ 1..N]" notation also seems weird (as in, I have never seen it before). I would expect it to be written as [1..N] ⟶ [1..N]. Perhaps replacing [1..N] with Z_n for the appropriate audience; however the speaker seems to be aware that this is a strange notation, as he commented about it in the beginning. In this particular case, I would probably also omit the entire predicate in favor of writing "onto" above "⟶", which I can do because the particular property being described is common enough to have a name; however this would defeat the point of showing the notion. Once I have entirely omitted the predicate like this, I would probably omit naming f entirely, giving the notation {[1..N] ⟶ [1..N]} (again, with "onto" written above the arrow). Actually, depending on audience, in this particular case I would replace the entire set with either "The symmetric group of order n", "The symmetric group S_n", or just "S_n". The f[x] notation looks a bit weird out of context, but does come up when the distinction between a function and a function application is important (often times f(x) is used as a convention to remind the reader that f is a function)
- noobermin 10y agoAlright, hold up a section of C++ or js code and repeat similar questions, and then ask why mathematicians don't learn to code given how relevant computer programming is to applications of mathematics today. Not that I believe mathematicians should learn how to code as a perquisite for their degree, I don't. I also have similar feelings for CS students and understanding mathematical notation. Yes, if you're headed for grad school or a researcher, then it's a different story (so the grad students/academics should have tried may be). But should knowing that notation, say, be on the same level of importance for understanding programming concepts like cache-locality for someone headed to a typical dev job? Probably not.
- pjmorris 10y agoI was struck by Butler Lampson's observation along the same lines, in 'Programmers At Work', Lammers [0] INTERVIEWER: What kind of training or type of thought leads to the greatest productivity in the computer field? LAMPSON: From mathematics, you learn logical reasoning. You also learn what it means to prove something, as well as how to handle abstract essentials. From an experimental science such as physics, or from the humanities, you learn how to make connections in the real world by applying these abstractions. [0] http://research.microsoft.com/en-us/um/people/blampson/37a-ProgAtWork/37a-ProgAtWork.htm http://research.microsoft.com/en-us/um/people/blampson/37a-P...
- manyxcxi 10y agoI loved math and sailed through it in college. Algebra, calculus, linear algebra, theoretical classes- no problem, I never got less than a B+. We had a lot of classes where using the calculator was forbidden and you had to actually know how to break these things down. When I was practicing math I can't understate how easy it was for me. The problem is that's it's been 12 years since I used a differential equation or any of my other 'hard' math. It's really frustrating that I used to be able to look at these equations and know what they meant and now I can barely make heads or tails of simple f(x) type stuff. I could solve (simple) differential equations without even jotting a note down, I honestly don't know if I could read one now. It sucks.
- deleted 10y ago[deleted]
- louthy 10y agoI suspect if you wrote some code to solve differential equations 12 years ago, and went back to that code today, you'd understand it without much hassle. This is the failure of maths as a language IMHO.
- OJFord 10y agoThat's not a fair comparison, since (it sounds like) the parent commenter's been coding for the last 12 years. The analogy would be more like studying both, writing a formal type system for a programming language, then practising mathematics for twelve years, and still understanding the type system.
- bloaf 10y agoBut you'd be looking at two different things. When looking at a math textbook on differential equations, you're looking at why a class of expressions constitutes a solution to a differential equation. Looking at code, all you'd get is the mechanical how something is computed, and you'd have to take it on faith that what was computed constituted the solution you were looking for.
- PNWChris 10y agoHonestly, this is mostly an issue of syntax (a problem, but one that is remedied with a quick look-up table/cheat sheet). Giving a legend explaining those symbols would turn the statement into this: Given a function (f) that maps integers in the range 1 to n onto the same range (1 to n), for every y in that range (1 to n) there exists an x in that same range (1 to n) where applying the function (f) to an input x results in the value y. (please correct the parts I got incorrect, it's been a while since my last discrete math class). These symbols are important tools in discrete mathematics, but are easy to forget or get lost in due to the very high information density they achieve. Adding to the complexity, we explain the range of both inputs and outputs before defining the function. Intuitively, I feel CS folks would prefer to define the input range, the function's mode of operation, and finally the mapped output range. This is especially complex when these discrete mathematics symbols operate upon one another. Throw in some sigmas and boolean operations, and it quickly become very difficult to parse. The underlying intuition the author is trying to communicate is likely something that entire audience could understand. They simply weren't fluent in the "language" of mathematics. It's like being very articulate in English, and having to defend a thesis in French. Not only do you have to translate your thoughts, many idioms you may usually rely on are no longer valid in a new language. Finally, why not define that same statement in Python or matlab? It's just as valid in my opinion.
- gravypod 10y agoThis is like "Why Don't Mathematicians Learn to Program?" "I had this talk where I wanted to feel superior so I showed an obtuse way to notate a simple situation" "You can see my code I showed a room full of people who have more important things to do then to study arcane math symbols that are of no use to them:" https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition/blob/master/src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/Main.java https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris... "I mean who in the hell could call themselves a mathematician without learning how to recognize obscure abstraction principles and language features of Java, something they'll probably never need to use?!?!" "Some of these people where even smart, I tell you! They are big people who are productive but I have no idea how you could be productive or smart without knowing how to recognize this obscure thing" Seriously, if you pulled in a bunch of CS people and showed them this: lambda x: x And they didn't know what it meant, you have a point. If you pull them in and show them something they don't use often, probably will never really use, and use that as a basis of their worth then I don't feel you have a correct set of KPIs for what makes a good scientist or researcher.
- empath75 10y agoIt's sort of weird that a mathematician would confuse 'notation' for 'math'. This is like giving an algorithms class to a mixed group of perl and Haskell programmers, using Haskell for all the examples and wondering why perl programmers don't learn computer science.
- nabla9 10y agoHe is not confusing notation with math. If you don't speak the language, It indicates that you never learned the stuff that is spoken in that language. At least well enough to be fluent in it.
- gravypod 10y agoDo you think that the people in his room didn't understand the concept of a function mapping over x coordinates whereby the height of each y component equals that of it's position on the x axis? Or more simply put, do you think these people have never taken a math class in high school that went over y = f(x)
- nabla9 10y agoLamport is not talking about basic math. If you study math enough, you learn to read this math notation fluently. From his toy example you can infer that they have not studied much math very deeply. Like topology or advanced algebra.
- morgante 10y ago> If you don't speak the language, It indicates that you never learned the stuff that is spoken in that language. At least well enough to be fluent in it. Not true. I learned all the maths necessary to understand that formula and, in fact, have previously seen all the symbols used before. Once I looked up the syntax I had no trouble understanding what was being said. The problem is that the language is simply bad. I haven't written PHP for years (in fact, the last time I wrote PHP was around the last time I took a math class), but if you give me a snippet of PHP I'll have no trouble understanding it.
- joelbondurant 10y agoLOL rrrright, why don't poly-sci majors learn math?
- johnwheeler 10y agoThis feels like naivete and arrogance of the question asker. Why should a group of computer scientists understand a particular equation? What does it mean if they don't?
- dllthomas 10y ago> Why should a group of computer scientists understand a particular equation? Because it's incredibly simple, and expresses concepts they should already be familiar with as they're both incredibly basic and plenty relevant to CS. The notion of "one-to-one" and "onto" functions is taught in high-school algebra! > What does it mean if they don't? It mostly means they've not been using this notation, which is a problem not because the notation is necessarily perfect (although I dispute those saying what's used here is particularly arcane - this is super basic stuff) but because there is a whole lot of relevant knowledge encoded that way (including plenty of CS papers!) and clearly they haven't been accessing it.
- intralizee 10y agoProbably because some don't need to and don't want to spend more of their life on it.
- kentf 10y agoWe do
- koga-ninja 10y agoAs far as I know, linear algebra and discrete math are Prerequisites for CS majors. I didn't formally study math after grade 11. A lot of Math anxiety is simply being too young to have enough Knowledge or neuroconnections. I'm 40, and while I do not understand Roger Penrose's Books, they don't intimidate me like they would have At age 20.
- trelliscoded 10y agoI understood it. They covered this stuff in the discrete math class I took at community college.
- deleted 10y ago[deleted]
- Gruselbauer 10y agoI'm npt a CS major, and I also don't have the slightest idea what that formula is about. Don't even know half of the symbols. Granted, my bachelor's isn't even a scientific degree, I'm an ex-addict turned sysadmin recently turned programmer, self-taught entirely. But I'm freaking sad I was a dumb kid who thought math was stupid once and that our school system (Germany) made it so easy to use my talent for language to average out my dare-I-say intentionally bad grades in the subject. It's not even that I was bad at it. What drove me to computers, to code or crafting ridiculous zsh scripts in the first place was formulating my own approach to solving a problem. As much as I sucked at "solve these twenty equations like this", I used to love problems stated in natural language and coming up with a solution. Should've built on that. Anyway, besides the late night regret... Can anyone of you recommend a book for me? Think little to no familiarity with the terminology, many years of only using what math a supermarket or insurance situation entails, eagerness to learn and fascination with the subject. No delusions about becoming a regular mathlete in my early thirties, I just want to fix a lack of knowledge caused by pubescent idiocy. Thanks!
- billsix 10y agoIntroduction to Automata Theory, Languages, and Computation https://www.amazon.com/dp/8131720470/ref=cm_sw_r_other_apa_4a8lybXX8SA2X https://www.amazon.com/dp/8131720470/ref=cm_sw_r_other_apa_4...
- wott 10y agoHe obviously runs though the speech he had ready (there is not half a second of a break at any point) whatever the actual assistance response may be. Also note that he inundated the audience with a different formula popping in random places of his screen every 5 seconds for at least the previous 2 minutes, with constant more or less related babbling. It sounds to me like a dishonest behaviour and conclusion. I must say I am neither a mathematician, nor a computer scientist, so I don't have a side to take, and I understand the formula, but I would not have raised my hand due to the fact there was only 5 seconds between the time the formula popped up about at the third of an already filled screen, and the request to raise one's hand. (And also because the one who raises his hand may end up cleaning the toilets. Beware.)
- gumby 10y agoThat kind of math was common on the whiteboards around the MIT AI lab in the early/mid 1980s when I was there. Then again, (to kapitza's comment) ∀, ∃, and ∈ were on the Lisp Machine keyboard (and the KTV keyboards on which it was based).
- cs2818 10y agoAs a CS researcher I probably wouldn't have raised my hand, thinking it was some sort of a trick or that the speaker was making a point about how simple concepts are sometimes conveyed in confusing ways. I appreciate mathematics, but because I don't use this notation on a regular basis, I wouldn't have been confident enough to raise my hand.
- dllthomas 10y agoYeah, I don't judge those in the audience too harshly. I could certainly see, given limited time allotted, thinking "it's probably not that simple, maybe I'm missing something...?"
- Animats 10y agoThis is Leslie Lamport's writing, and he's complaining that nobody uses his TLA+ formal specification language. (Here's the TLA book.[1] Read the introduction, and it's much the same rant.) I used to work on formal specifications and program proofs, around the time Lamport was developing temporal logic. I took the position that, rather than trying to make programmers learn math, we should automate and divide up the problem so that they didn't have to.[2][3] This meant minimizing the formalism and making the verification information look like ordinary programming. It also meant carving out the harder math problems into a separate system where someone using a theorem prover would prove the necessary theorems in a way which allowed their use and reuse by ordinary programmers. The underlying math is still there, but not in your face so much. There's a mathematician mindset: Terseness is good. Cleverness is good. Elegance is good. Generality is good. Case analysis is ugly. This is unhelpful for program verification. Program verification generates huge numbers of formulas to be proven. Most of the formulas are very dumb, and can be dealt with automatically by a simple theorem prover. Where it's necessary to prove something hard, our approach was to encourage users to write more assertions in the code to narrow the thing to be proven, until they were down to "assert(expra); assert(exprb);" Getting to that point is much like ordinary debugging. Now they just needed a theorem, independent of the program, that could prove "exprb" given "expra". That job could be handed off to a theorem-proving expert. A library of proved and machine-checked theorems would be built up. Some would be general, some project-specific. This is the software engineer's approach to the problem. The mathematician's approach is to capture much of the program semantics in mathematical form and work on them as big math formulas. Most of the work is done in the formula space, where mathematicians are comfortable, not the code space, where programmers are comfortable. This seems to hold back the use of formal methods in program verification. Much effort has gone into trying into trying to find some clever way to make program verification elegant. "A great variety of program logics are in use in computer science for the specification of (software and/or hardware) systems; for example: modal and temporal logics, dynamic logic, Hoare logic, separation logic, spatial logic, nominal logic, lax logic, linear logic, intuitionistic type theory, LCF."[4] We used to call this the "logic of the month club". [1] http://research.microsoft.com/en-us/um/people/lamport/tla/book-02-08-08.pdf http://research.microsoft.com/en-us/um/people/lamport/tla/bo... [2] http://www.animats.com/papers/verifier/verifiermanual.pdf http://www.animats.com/papers/verifier/verifiermanual.pdf [3] http://portal.acm.org/citation.cfm?id=567074 http://portal.acm.org/citation.cfm?id=567074 [4] http://homepages.inf.ed.ac.uk/als/PSPL2010/ http://homepages.inf.ed.ac.uk/als/PSPL2010/
- lesserknowndan 10y agoWhen I went through Uni we learnt several different types of Math including discrete math, advanced calculus, and probability and stats. The math described in the article falls under discrete math. The notation used is similar to that used within formal methods. However, since Uni I have rarely needed to use the math notation, and so I am unable to understand it without "interpreting" it. Such notations have most relevance to understanding database schemas and other set theory type problems, however, generally speaking, in software development using such a notation is unneeded. In summary, the reason computer scientists don't know math is not because they haven't been taught it, but rather that the notations are not very relevant, and therefore soon forgotten.
- dahart 10y agoDoes anyone else feel like the font made it harder to read? It doesn't look like latex. :P I have no problem reading math formulas, but this particular one is harder to read than normal for some reason. Who am I to argue with Leslie Lamport, but still I reject the premise. Computer scientists do learn math, regardless of whether they read Greek-letter math notation. Write a function with a for loop or array map, and you've used all the same math concepts as this example formula. All the best math comes with pictures anyway. ;)
- mcbits 10y agoHere is some math notation. What does it mean? x It means nothing. Or it could mean anything. The surrounding text is what explains the meaning you're supposed to derive from mathematical glyphs. Of course there are conventions. "x + y" usually means what most people would assume it does. And sometimes it doesn't. Read the paper to be sure. I haven't finished watching the talk yet, but he seems to be arguing that programming languages aren't expressive enough for mathematical purposes. I suspect he's not counting all of the wordy scaffolding necessary to support those terse equations. Can it all be combined into a formal language that stands on its own? If so, might it look like a programming language?
- mannykannot 10y agoThis is not about mathematical notation. It is about a lot of people working in computing, researchers even, not being able to follow what is going on at what may be the leading edge (cue the arguments that it is not relevant...) On the other hand, what percentage of physicists understand string theory? I do not know where that figure lies, whether a low number would be a problem, or whether it would be relevant to the computer science case. I do suspect that I would be better at computing if I understood category theory or TLA+ (I would at least be better able to evaluate their prospects for advancing the field), and I am not going to make any excuses for my ignorance.
- theobold 10y agoMaybe the CS people don't know set notation for the same reason that Lamport dismisses Homotopy Type Theory and Galois Connections at the 2:00 minute mark.
- throwaway2016a 10y agoI certainly learned enough math to understand this when doing my CS degree. The better question is "Why do people who don't use something every day forget the details of how it works?" When phrased that way the answer is more obviously. I've learned plenty of things I have let myself forget.
- dllthomas 10y agoI am a programmer and not a mathematician. I studied more math than typical (almost minored in it) but all of it undergrad and it's been more than a decade since I've done anything formally academic. I read some of the comments here before reading the article, and I was expecting something significantly more complicated and esoteric. Set builder notation, element-of, and quantification - it's practically Python. I find myself genuinely shocked that people here are finding it inscrutable, much less those in the audience at the talk. I can't help but wonder whether most of those with their hands down weren't able to understand but lacking confidence that their read was correct?
- paulmuaddib 10y agoLong story short : but they do.
- paulmuaddib 10y agoLong story short : they do.
- czheo 10y agoMath notations are so badly designed (if there exists any design) If you'd spoken in plain English, Lamport, most people in the room could have understood the concept of your tedious formula. So it's not because we don't understand math - it's because the math notations are usually over abbreviated, obscure and inconsistent. Math itself is strict but there's no strict common language to express it, which eventually prevents people from understanding it.
- Smaug123 10y agoThere is a strict common language to express it. The speaker used that language (except for the nonstandard replacement of brackets with square brackets, which was apparently clearly pointed out at the start). The problems start when you speak in plain English: then you get things like everyone using different definitions of continuity and thinking everyone else is just spouting nonsense until someone comes up with epsilon-deltas.
- wtfishackernews 10y agoMy university teaches discrete math, which covers this formula, in the first semester of computer science. Is this not standard?
- kaa2102 10y agoI took a few CS classes while studying engineering undergrad. I also have a grad degree in Industrial Engineering from Columbia U. Now-a-days, I develop software and apps. The training in mathematics, operations research, and mathematical modeling has been extremely helpful in the way I approach and solve computer science problems. It has helped with everything from smart SQL queries to developing scalable software and enterprise architecture for software.
- aabajian 10y agoThis is entirely dependent on the program. My undergrad had few set-theoretic math classes. Sure we had to take discrete math and combinatorics, but this kind of notation was lacking. I learned it by way of double-majoring in mathematics. Conversely, my master's program pretty much assumed you were comfortable with set theory. CS103 is a freshman/sophomore level class at Stanford and is a prerequisite/foundational course for the master's degree. I was out for five years before returning for my master's. It is 100% true that programming skills are more useful in industry, and re-learning the mathematics was the hardest part of returning to school after being out for five years. With that said, machine learning is eating the world, and it requires a very good understanding of the underlying mathematics.
- douche 10y agoI think I remember this particular notation, but only because I beat it into my brain trying very hard to not tank my GPA in a ridiculously useless discrete mathematics class that was required for me to finish my CS minor.
- paulddraper 10y agoFor the same reason mathematicians don't learn computer science. And that answer is: most do. The fields are very complementary. Set theory? I personally don't have need for that right now. But I've been working my way through https://pomax.github.io/bezierinfo/ https://pomax.github.io/bezierinfo/ which the most complete resource to bezier curves I've seen, including closed-form solutions, analytical methods, and interactive demos.
- j-pb 10y agoI would argue that this formulation is outright confusing not because it is so dense but because it has so much unnecessary cruft to misguide the reader. The entire formula of {f ∈ [1..N ⟶ 1..N] : ∀ y ∈ 1..N : ∃ x ∈ 1..N : f[x]=y} could actually be written as [1..N ⟶ 1..N] Most CS people myself included will not trust their own senses when confronted with such a tautological statement and continue to search for meaning where there is non because it is so common to encounter cases in your everyday code where something that you thought was dead code has actually semantic meaning.
- berbc 10y agoIf by [1..N ⟶ 1..N] you mean the set of functions from [1..N] that have values in [1..N], I think you are wrong. The formula in the post describes a subset, the set of such functions that are surjective.
- deleted 10y ago[deleted]
- j-pb 10y agoYeah I think your right, in this context I saw the case of [ A -> B ] as a function from coimage A to image B which are all bijective. But it is meant as the more standard domain A to codomain B. His natural language description is somewhat lacking in that aspect > I had already explained that [1..N ⟶ 1..N] is the set of functions that map the set 1..N of integers from 1 through N into itself,
- sampo 10y agoWell, he did say "into itself", not "onto itself".
- ryanSrich 10y agoI wasn't a CS student, but the story at my college seemed to be that if you liked math then you were a CS major, if you didn't then you were an SE major.
- droidist2 10y agoI wish my college had SE <sigh>
- KKKKkkkk1 10y agoThis post requires some context. This is not about math, which is the field that studies things like stochastic PDEs and elliptic curves. It's about the notation of predicate calculus, which is a somewhat obscure field of logic that used to be in vogue in the early 20th century, and that programmers fixate on for some strange reason.
- BipolarElsa 10y agoand philosophers of logic, they obsess over it as well.
- dekhn 10y agoodd comment from lamport. He wasn't referring to learning math, just learning a specific type of math notation.
- GFK_of_xmaspast 10y agoAs a mathematician, I understood Lamport's notation, but that doesn't mean it's good notation. For that audience, why do you even need it? Just say "the set of all permutations of N elements" or "the symmetric group S_N" if you're nasty.
- shoefly 10y agoWe should rephrase the question as "why don't computer scientists learn traditional math symbols?" Try writing traditional equations with your keyboard. Try posting your answer online. Modern computer science breaks down these symbols into plain english.
- j2kun 10y agowe do have math typesetting you know... With a standard programming language for typesetting handled by all major browsers. Just head over to Mathoverflow and see it in action
- skeuomorf 10y agoAlso, when writing code it's not unusual (at least among LISP and Haskell programmers) to have the editor replace a word for its corresponding symbol, the most famous example of which is (lambda -> λ) because some people find it easier to parse e.g. in emacs[0]. You can easily imagine doing that for other expressions, like (forall, there-exists, ...etc). All in all I think it's a matter of preference which is in turn related to each individual's experiences. [0] https://www.emacswiki.org/emacs/PrettyLambda https://www.emacswiki.org/emacs/PrettyLambda
- j2kun 10y agoIndeed, Slack has native support for ~2k emojis, but not basic math symbols. It's clearly a matter of priorities, not feasibility.
- guerrilla 10y agoSeems like a deficiency with computers, not humans or math. Fix it.
- pera 10y agoBut why he decided to use f[x] instead of just the very common f x?
- CalChris 10y ago> For example, a programming-language designer who uses symbols that aren't on any keyboard deserves to be laughed out of the room. Not quite. APL. https://en.wikipedia.org/wiki/APL_(programming_language) https://en.wikipedia.org/wiki/APL_(programming_language)
- eli_gottlieb 10y agoWait. That's just the set of all functions from naturals to naturals whose image covers the entire codomain. Mind, set-builder notation is a horrible crock, since you wind up not being able to say "image covers the entire codomain" in plain language.
- Smaug123 10y agoWe like having small sets of primitive notions ("exists", "for all", "set"). The reason we have words like "surjection" is to abbreviate things which are otherwise unwieldy to state precisely using our small set of primitives. It's analogous to the reason we might program in high-level languages and then compile down to machine code: because the low-level code is much easier to execute directly (analogously, the primitives "forall", "exists", "set" are extremely intuitive and we're nearly all sure that they are non-contradictory).
- novaleaf 10y agoMy reason: Math is boring. Cryptic math is... cryptic. CS is interesting because it's about logical expression. You have an idea, now figure out the steps to make that become reality. Sure, some higher maths may be required along the way, but almost always as an ancillary task.
- davidivadavid 10y ago> You have an idea, now figure out the steps to make that become reality. A.K.A. writing a proof. Isn't that what mathematicians do all day?
- novaleaf 10y agoi suppose, but one reason I had no interest in math in school was I saw no practical point to a formula, and less-so for a proof. It may be a personality issue with me, compounded by less-than-engaging math education techniques, but I think a good analogy would be: I always loved legos as a kid, and programming is like grown-up legos to me :)
- CosmicShadow 10y agoAt the University of Waterloo a CS degree was a Bmath degree with a CS major up until like 12 years ago, when a BCS was an option with slightly less Math courses. It was so much math I almost dropped out because I hated it, felt like no programming or real world stuff, I just kept waiting for it to get better until I finally realised this is it, it's mostly just math, that's what makes it "computer science". I grunted through it and got my degree and learned everything I use today mostly on my own. There was a good base but I've forgotten most of the math and notation now because it's mostly useless to me and I didn't like it or fully get it. Maybe that was just a UW experience as it was a highly touted math school. TL;DR Comp Sci I took was all math so I don't get the title!
- baking 10y agoSlightly off topic, but the video linked in the OP was worth watching for more context. However, he mentions at several points that the Virtuoso operating system for the Rosetta spacecraft was designed using TLA+. That is not the case: http://research.microsoft.com/en-us/um/people/lamport/tla/correction.html http://research.microsoft.com/en-us/um/people/lamport/tla/co...
- lithos 10y agoThat's not testing for math, it's testing for notation.
- thiht 10y agoI'm a computer scientist in France and I think it's weird not to know these symbols, don't you learn how to use them in other countries? I mean, I learnt how to read this kind of formula in high school and used them intensively during my scholarship
- wickedjust 10y agoSuch an arrogant thing to say about computer scientists. It's like saying why don't mathematicians know how to write an app?