One main cause for this belief is that in a programming there is one true noation (or rather, a separate one for each language) that is unambiguous and clearly defined.
I dislike maths notation as I find it lacks rigour.
One main cause for this belief is that in a programming there is one true noation (or rather, a separate one for each language) that is unambiguous and clearly defined.
I dislike maths notation as I find it lacks rigour.
I was filled with crushing disappointment when I learned mathematical notation is "shorthand" and there isn't a formal grammar. Same goes for learning writers take "shortcuts" with the expectation the reader will "fill in the gaps". Ostensibly this is so the writer can do "less writing" and the reader can do "less reading".
There's so much "pure" and "universal" about math, but the humans who write about it are too lazy to write about it in a rigorous manner.
I can't write software w/ the expectation the computer "just knows" or that it will "fill in the gaps". Sure-- I can call libraries, write in a higher-level language to let the compiler make machine language for me, etc. I can inspect and understand the underlying implementations if I want to, though. Nothing relies on the machine "just knowing".
It's feels like the same goddamn laziness that plagues every other human endeavor outside of programming. People can't be bothered to be exact about things because being exact is hard and people avoid hard work.
"We'll have a face-to-face to discuss this there's too much here to put in an email."
Are you sure it's laziness? Maybe it's a result of there not actually being any universal notation (not even within subfields) or the exactness you refer to really isn't necessary. This doesn't mean that unclear exposition is a good thing. Mathematical writing (as with all writing) should strive towards clarity. But clarity doesn't require some sort of minutely perfectly consistently notation which would be required by a computer because humans are better than computers at handling exactly those kinds of situations.
> People can't be bothered to be exact about things because being exact is hard and people avoid hard work.
I think you have it wrong. People can't be bothered to be as exact because they don't need to. People can understand things even if they are inexact. So can mathematicians. Honestly this is a feature. If computers would just intuitively understand what I tell them to do like a human assistant would, that would be a step up not a step down in human computer interfaces.
Shall we be satisfied with the same low standards in a technical field, because it is how it is?
Hands-on users of math notation are complaining that it sucks. I'm not sure why a dismissive "works for me" is so often the default response.
It is really easy to complain. People also complain about every popular programming language, but it is really hard to make something that is actually better. It is easy to make something that you yourself think is better, but it is hard to make something that is better in practice.
Are you sure this is because the notation is unclear/imprecise or because you just don't like it? I like certain programming languages and certain programming styles and really don't like others. But in none of the cases (those I like nor those I don't) are they not 100% "clear". The code compiles and executes after all so there really isn't much of an argument that somehow it's underspecified.
The same thing exists in mathematics. There are certain fields of math whose traditional notation/style/approach/etc. are totally incomprehensible to me. There are also many mathematicians who would say the same about my preferences as well.
So my point is that all people are _different_. Some people like certain things and some people like others. How can you hope to please everyone simultaneously? In my experience, there is no field at all that is as precise as mathematics. Sure "code" is precise, but (imo) professional programmers are nowhere near as precise in any general design or conversation than mathematicians. So I find the attack on supposedly bad mathematical notation a bit odd.
Mathematicians constantly try to come up with better methods of explaining things. They put more effort into it than basically any field in my experience. The problems are really that we as humans don't all think the same and that mathematics is just plain hard. We've improved mathematical communication immensely throughout history and we will continue to do so. But we'll never reach some sort of perfect communication style because no single such style could ever exist.
I made this point in another comment, but I think it bears repeating and elaboration: Consistency isn't required (at least outside any single paper), but explicitness would be a tremendous boon.
Software incorporates outside context all the time, but it pretty much always does it explicitly (though the explicitness may be transitive, ie. dependencies of dependencies). Math papers often assume context that is not explicitly noted in the citations, nor those papers' citations, etc.
Instead, some of the context might only be found in other papers that cite the same papers you are tracking down. You sometimes need to follow citations both backward and forward from every link in the chain. And unlike following citations backward (ie. the ones each author considered most relevant), the forward links aren't curated and many (perhaps most) will be blind alleys (there also may be cycles in the citation graph, but these are relatively rare). But somehow you have to collect knowledge (or at least passing familiarity) with an encyclopedic corpus in order to at least recognize and place the context left implicit in any one paper in order to understand it.
It's maddening.
That is just an example of bad exposition in my opinion. It's also not technically "unclear" in any notational sense so it's a bit of an aside from this argument. But I agree with you 100% that it is bad bad bad. This is a perfect example of why arguments like "does this proof make coq happy" totally misses the point.
In theory, some kind of checker could validate the semantics of a paper to just tell you whether the arguments made are complete. Not whether there is a correct formal proof, just pointing out any obscured leaps of faith[0]. A rough analogue to test suite coverage for code (which is also not any sort of guarantee of correctness, just basic reassurance that all (or most of) the code is tested and isn't broken in any obvious way, especially while making changes).
I'm trying to think of an equivalent for prose, and am coming up with examples like detecting conflicting descriptions of locations or named characters, or whether the author lost track of which character said which lines in the dialog.
> It's also not technically "unclear" in any notational sense
Perhaps not necessarily, but unfamiliar/borrowed/idiosyncratic notation is a perfect (and common) place for insufficient exposition to be hiding.
Math notation is the way it is because it's what mathematicians have found useful for the purpose of doing and communicating math. If you are upset and disappointed that that's how it is then there's not a lot we can do about it. If there was a better way of doing it, people would be jumping on it. If a different way of doing it would let you achieve more, people would be doing it.
It's not laziness, and I think you very much have got the wrong idea of how it works, why it works, and why it is as it is. Your anger comes across very clearly, and I'm saddened that your experience has left you feeling that way.
Maths is very much about communicating what the results are and why they are true, then giving enough guidance to let someone else work through the details should they choose. Simply giving someone absolutely all the details is not really communicating why something is true.
I'm not good at this, but let me try an analogy. A computer doesn't have to understand why a program gives the result it does, it just has to have the exact algorithm to execute. On the other hand, if I want you to understand why when n is an integer greater than 1, { n divides (n-1)!+1 } if and only if { n is prime } then I can sketch the idea and let you work through it. Giving you all and every step of a proof using Peano axioms isn't going to help you understand.
Similarly, I can express in one of the computer proof assistants the proof that when p is an odd prime, { x^2=-1 has a solution mod p } if and only if { p = 4k+1 for some k }, but that doesn't give a sense of why it's true. But I can sketch a reason why it works, and you can then work out the details, and in that way I'm letting you develop a sense of why it works that way.
Math isn't computing, and complaining that the notation isn't like a computer program is expressing your disappointment (which I'm not trying to minimise, and is probably very real) but is missing the point.
Math isn't computing, and "Doing Math" is not "Writing Programs".
I often wish people were more like computers. It probably wouldn't make the world better but it would make it more comprehensible.
It might also help to think of "scope" in the computing sense. Often you have a paragraph in a math paper using symbols one way, then somewhere else the same symbols crop up with a different meaning. But the scope has changed, and when you practise, you can recognise the change of scope.
We reuse variable names in different scopes, and when something is introduced exactly here, only here, and only persists for a short time, sometimes it's not worth giving it a long, descriptive name. That's also similar to what happens in math. If I have a loop counting from 1 to 10, sometimes it's not worth doing more than:
for x in [1..10] {
/* five lines of code */
}
If you want to know what "x" means then it's right there, and giving it a long descriptive name might very well hamper reading the code rather than making it clearer. That's a judgement call, but it brings the same issues to mind.I hope that helps. You may still not like math, or the notation, but maybe if gives you a handle on what's going on.
PS: There are plenty of mathematicians who complain about some traditional notations too, but not generally the big stuff.
This example works against you. Scope shadowing is nearly universally considered bad practice, to the point that essentially every linter is pre-configured to warn about it, as are many languages themselves (eg prolog, erlang, c#, etc)
To a programmer, you're saying "see, we do it just like the things you're taught to never ever do"
.
> You may still not like math, or the notation,
The notation is probably fine
What I personally don't like is mathematicians' refusal to provide easy reference material
Programmers want mathematicians to make one of these: https://matela.com.br/pub/cheat-sheets/haskell-cs-1.1.pdf
It doesn't have to be perfect. We don't need every possibility of what y-hat or vertical double bars means. An 85% job would be huge.
So you never used the same variable name in two different scopes ever? Like, if a function takes argument "name", no other function you ever write again in any program can have a variable named "name" unless it is the same exact usage?
Or, as is commonly complained about in math, every programmer in the world then use the variable "name" only for that usecase and otherwise comes up with a new name for it?
Having different scopes doesn't imply shadowing, it just means that you define it and then use it and then scope goes out and it no longer exists. No mathematician knows even close to every domain, so different domains of math uses notation differently. It is like how different programmers programs in different programming languages. It is such a waste to have so many programming languages, but people still do it for legacy reasons.
That's not what shadowing is.
.
> Having different scopes doesn't imply shadowing
I didn't say that it did.
.
> No mathematician knows even close to every domain
this is irrelevant to a lightweight two page cheat sheet for simple mathematial symbols
part of the problem is that if we ask you for a simple thing that isn't perfect or exhaustive, you lecture us on how no document could contain every concept
that's very clearly not what's being requested of you. the same is true of haskell. that sheet doesn't contain all of haskell. i doubt anybody knows all of haskell, which of course is far smaller than mathematics.
i'd like to stay in the practical world. it was clearly stated that an exhaustive solution was a non-goal.
let's try to do one thing that doesn't have a limit at infinity. (i'm sorry, i'm a programmer, math jokes are hard)
surely you've made food, right? did you learn the recipe from a cookbook? did it contain every ingredient and recipe that any cook ever knew? did it go over the chemistry of the protein denaturing, the physics of the water boiling, the ethics of importing the burner fuel, allergy responses, cultural backgrounds, molecular weights, how to make things in a duck press?
no?
was that because the cookbook was just good enough? it was just like "use this much chicken and this much onion, two tortillas, some cilantro and lime?"
nobody wants exhaustive anything. if you managed somehow to produce that (ie by just giving the manual page to the wolfram language) it would be rejected as the exact opposite of what was being requested.
the thing you're protesting is the i'm saying is the wrong job.
cool beans. the thing i'm actually asking for is straightforward.
someone already gave me one, but the difficulty level was aimed at children, instead of professional programmers, the space requested, while also calling me ignorant. it's a shame; that one was almost it.
but it should be things like `ŷ` and `||x||` and whatever. it should include sum, integral, and product for the juniors. For `|x|` it should say "Absolute value, magnitude, length, or cardinality."
it doesn't need `||x||` because we need someone to teach us what absolute value and cardinality and so on mean. it needs `||x||` because we forgot what double-bar says, and if we have that list of four things, we can figure out which one it is just like you can.
we know what magnitude is. we just don't know what `||foo||` says.
we just need our cracker jack decoder rings. we get the ideas. we don't get your letters.
It's not explaining anything. It's just a cheat sheet. You aren't solving education. C'mon.
This isn't too far off: https://en.wikipedia.org/wiki/Glossary_of_mathematical_symbo...
.
> It is such a waste to have so many programming languages
if you say so. i rather like the several that i created.
things aren't a waste just because you don't know what they're for.
you might as well assert that it's a waste that there are so many tools in the shop.
The statisticians can do it: http://web.mit.edu/~csvoss/Public/usabo/stats_handout.pdf
.
> every programmer in the world then use the variable "name" only for that usecase and otherwise comes up with a new name for it?
this isn't terribly uncommon, primarily because our culture is to use long descriptive names, which have a far lower natural collision rate
i do get that symbols can overlap. that's okay! nobody's complaining about that. it's fine for `||x||` to mean four things. we're just as bad as you are about that. there's half a dozen meanings for stack, another five for heap, seven for map, five for vector, i don't even want to get into what a mess "array" is, et cetera.
but if i was writing a cheat sheet for you, I could write `< > generally means a generic type, a tuple, greater than less than, an HTML/XML/SGML tag, an email inclusion, or an IRC handle`
Is that exhaustive? Naw. I can name another dozen off the top of my head.
But that's generally going to be good enough.
All I want is generally good enough. just please write down what they are?
But that is what mathematicians do. Why did you bring up shadowing if it isn't relevant?
There are lots of maths cheat sheets like that. Maths is big, like all-programming-languages big. Just like in programming, notations are re-used in different areas with different meanings, and different authors sometimes use different notation for the same meaning. A universal cheat sheet is impossible (just like a general programming cheat sheet is), but many cheat sheets or notation reference pages exist for particular contexts, one of which is "the basics", e.g. https://www.pinterest.nz/pin/734016439237543897/. Try searching or image searching for [math cheat sheet], [linear algebra cheat sheet], etc.
> mathematicians' refusal to provide easy reference material
This is an absurd claim. There is no such general refusal. On the contrary, many mathematicians provide their students with relevant easy reference material constantly. We sometimes spend entire semester-long courses providing easy reference material, and there are many books with exactly the kind of cheat-sheet you want inside the cover, or in an appendix or front matter (as well as the ones on the internet mentioned above).
I have never found one that gets me through the average undergraduate CS paper.
If you know one, I would greatly appreciate a tip. Unfortunately, I saw what you offered, and that's not it.
.
> A universal cheat sheet is impossible
I explicitly stated that this was a non-goal.
.
> one of which is "the basics", e.g. https://www.pinterest.nz/pin/734016439237543897/.
That one is far too basic. It doesn't even have things like average, or absolute value. It includes things nobody needs explained, like subtract, and things that aren't math, like logical operators.
This is why I said "yes, people have tried, but nobody has succeeded."
The explicit context was the average software paper. We're talking about programmers.
.
> > mathematicians' refusal to provide easy reference material
> This is an absurd claim.
Lots of people in here seem to agree with me. YMMV.
Feel free to provide me easy reference material.
.
> On the contrary, many mathematicians provide their students with
> We sometimes spend entire semester-long courses
The explicit context is "to people who aren't mathematicians or mathematics students."
Remember, we're talking about programmers who are appealing to the mathematics community for help.
If your response to "you guys won't give programmers a short easy two page PDF at the level we need" is to remind me that you give your own students semester long courses, then you've absolutely failed to understand what's being said.
.
> there are many books with exactly the kind of cheat-sheet you want inside the cover
Every time I ask for one, I get something with symbols meant for children learning arithmetic, like the one you gave. It explains plus and percent.
Again, 𝗧𝗵𝗲 𝗰𝗼𝗻𝘁𝗲𝘅𝘁 𝗶𝘀 𝗽𝗿𝗼𝗳𝗲𝘀𝘀𝗶𝗼𝗻𝗮𝗹 𝗽𝗿𝗼𝗴𝗿𝗮𝗺𝗺𝗲𝗿𝘀 𝘁𝗿𝘆𝗶𝗻𝗴 𝘁𝗼 𝗴𝗲𝘁 𝗵𝗲𝗹𝗽 𝗿𝗲𝗮𝗱𝗶𝗻𝗴 𝗖𝗦 𝗽𝗮𝗽𝗲𝗿𝘀 𝘄𝗿𝗶𝘁𝘁𝗲𝗻 𝗯𝘆 𝗺𝗮𝘁𝗵𝗲𝗺𝗮𝘁𝗶𝗰𝗶𝗮𝗻𝘀.
If you think we need plus explained to us, and that the next step is an insular semester long lecture course that isn't offered to us, then how can you possibly be surprised that we think you failed us?
.
> as well as the ones on the internet mentioned above
You only mentioned one. The other one is something I gave, from our community, trying to explain to you the kind of thing I want.
It covers topics like monads, pattern matching, infix, operator precedence, typeclasses, infinite lists, codata, higher order functors, special folds, tuples, numerics, modules, tracing, list comprehensions, and dealing with the compiler itself.
You patted me on the head and taught me that * means times.
I continue to feel that the mathematics community refuses to understand the needs of the programming community, or provide appropriate reference material.
It's either "this is arithmetic" or "let's do linear equations in russian"
There's no practical middle ground and you seem resistant to even understanding that such a thing exists
Programmers aren't ignorant like the other mathematicians in here have repeatedly said. You can't do our things any more than we can do yours. We've seen your code.
It's just that when you ask us for appropriately costed reference, we comply, and you do not even grok.
You really put up a thing that explained `less-than`, as if that was what you were being asked for.
It turns out that most programmers know what the equals sign means.
There is nothing of practical value in the actual domain space being talked about, here.
Nothing here is beyond a highschool pre-calculus class. That is not the level that professional programmers need.
I don't mean to seem rude, but it feels a little bit like being talked down to, having it suggested that this is the level of help my occupation is asking for.
The statisticians can do it: http://web.mit.edu/~csvoss/Public/usabo/stats_handout.pdf
This isn't far off: https://en.wikipedia.org/wiki/Glossary_of_mathematical_symbo...
That cheat sheet would be written by CS folks, since every applied domain uses their own quirks in their notations. Mathematicians can't help you there. You can't blame mathematicians for the shortcomings of CS researchers.
But it doesn't make sense to put lists of notation everywhere mathematical notation is used like in a journal or because the audience is already expected to know it. If the author does something weird or non-standard it's typically explained, sometimes it's even explained if it's pretty standard.
Different branches of math, physics, statistics,etc. will redefine the same symbols to mean different things but that's not much different from programming languages. & in C++ has a different meaning than & in R. Like the first step of understanding someone else's code is to know what language your looking at it's important to understand the context of what you're looking at. Look at previous cites, relevant textbooks, ask around, reread the paper again. I've read some papers a dozen times easy before it clicked.
That's only really a good description for the most well trod areas, where people habe bothered to iterate. I think a more realistic statement would be:
"Math notation is the way it is because some mathematician found it sufficient to do and communicate math, and others found it tolerable enough to not bother to change."
Personally, though, my problem has always been where publications use letters and symbols to mean things that are just "known" in some subfield that isn't directly referenced. It's not a problem for direct back and forth communication during development, true, but it dramatically increases the burden on someone who wants to jump in.
That all said, it would still be quite nice if it was somehow more accessable. A lot of papers containing material that's probably actually quite standardizable remain opaque to me, and the notation invariably falls by the wayside if there's a code or language description available.
Many times, math notatons have been thought to be minimal, or most clear possibly, only to fall by the wayside
Whereas this notation serves domain specialists well, it still leaves people like me somewhat confused
A cheat sheet - even to the practical norms - would go a long way
Yes, we are too lazy to be 100% formal and many times we are too lazy to be mostly formal. This is mostly because we target our writing to other mathematicians who have no need to see every small step and including every step makes the proofs long. On the other hand, I do feel that generally speaking mathematicians should show more of their work and skip fewer steps.
I find your statement "People can't be bothered to be exact about things because being exact is hard and people avoid hard work." to be very true. Being precise is difficult.
Math is difficult, and a lot of what we have is the result of the sharpest minds doing their best to eke out whatever better understanding of something they can manage. Getting any sort of explanation for something is hard enough, but to get a clear theory with good notation takes an order of magnitude more effort and insight. This can take decades more of collective work.
Imagine complaining about cartographers from a thousand years ago having sketchy maps in "unexplored" regions. Maps are supposed to be precise, you say, there's actual earth there that the map represents! But it takes an extraordinary amount of effort to actually send people to these places to map it out -- it's hardly laziness. Mathematics can be the same way, where areas that are seemingly unrigorous are the sketches of what some explorers have seen (and they check that their accounts line up), then others hopefully come along and map it all in detail.
When reading papers, there's a fine balance of how much detail I want to see. For unfamiliar arguments and notation, it's great to have it explained right there, but I've found having too much detail frustrating sometimes, since after slogging through a page of it you realize "oh, this is the standard argument for such-and-such, I wish they had just said so." You tend to figure that something is being explained because there is some difference that's being pointed out.
I've been doing some formalization in Lean/mathlib, and it is truly an enormous amount of work to make things fully rigorous, even making it so that all notation has a formal grammar. It relies on Lean to fill in unstated details, and figuring out ways to get it to do that properly and efficiently, since otherwise the notation gets completely unworkable.
I see this a lot from programmers, but in essence, you seem to be complaining that maths notation isn't what you want it to be, but is instead something else that mathematicians (and physicists and engineers) find useful.
CS as a field just seems to have a higher base standard for explaining their notation and ideas. It helps in cross-collaboration by making it significantly easier to self study.
Related to this, I'd say math books have a significantly worse pedagogical culture in regards to both notation and defining pre-requisites. It's very common for a math book to say "we expect readers to have taken a discrete math course" and not defining notation despite knowing the topics covered in discrete math vary greatly from school to school and may not overlap. Math professors frequently have to paper over these problems at Uni as they realize the class does not understand some notation. CS are just better about this, and I can only explain it as a part of the culture and tradition.
CS professors writes just as incomprehensible math as everyone else, as you can see many here brings up examples of CS professors writing incomprehensible math in their papers.
Math notations are two-dimensional and don't suffer very badly from structural ambiguities, so that actually fixes almost nothing.
The problem in unfamiliar math notations is rarely the chunking of which clump is a child of which clump.
E.g say that some paper uses, say, angle brackets, with some deep meaning that you can learn about if you recurse three levels down in the list of references.
I'm not confused that in <Ap>, the Ap thing is a child of the angle brackets; and calling it (frob (A p)) doesn't help much in this regard.
However, at least you can search literature for the word frob more easily than for angle brackets.
Also it's perhaps more likely to occur to the person using the frob notation that maybe they should define frob somwewhere.
Doesn't help that then notation is often poorly defined, and sometimes a weird mix of notations is presented.
Overall the situation is also not pleasant for math people changing topics, or physicists reading papers from physical chemistry professors who 'grew up' in mathematical chemistry.
Take sequential Monte Carlo / sequential importance sampling for instance. This powerpoint on it is clownishly bad: http://people.eecs.berkeley.edu/~jordan/courses/260-spring10...
This is supposed to be an algorithm implemented in code. It's essentially illegible without code examples, which it doesn't feature. Code examples tell you what the cipher signifies; at no point does the cipher provide any value to the learner. Fanciful bayes-theoretical statements and so on basically reduce to "iteratively build enlarging valid states." Given the fact that this simple statement is missing, I question if the professor has some sort of communication disorder or if they're just a troll. Similar to pomo philosophers, it's probably a mix.
Try to understand programming based on a programming lecture powerpoint, it is usually impossible.
Edit: Also you can't write code for what he is talking about in that lecture. Code cannot deal with infinities or continuous values. You'd get approximations which isn't the same thing, then you'd need to prove that those approximations are good enough which would have to be done without code anyway.
Haskell is unreadable to one who has not trained in it or similar languages ... why don't they make the syntax more readable? Or C++ with its modern templating ... why don't they change the syntax to make it more readable?
You might be tired of wandering into someone else's area of expertise and telling them:
You must change! You must make it more accessible!
Believe me, mathematicians are tired of non-mathematicians wandering up and saying:
Look! Computer programs are easy and intuitive and everyone can understand them, even without training! Make math like that!
Do you really believe that math notation is deliberately designed to make it hard for people untrained in math to learn how to use it? Do you really believe that no one has tried to make it more accessible?
Do you really believe you know more about why math notation is what it is than mathematicians and trained mathematics educators do?
It looks that way, to many people, even in this thread.
> why don't they change the syntax to make it more readable?
They do, actually. Quite often at that. It's called releasing new version.
> Look! Computer programs are easy and intuitive and everyone can understand them, even without training! Make math like that!
No. Computer code is as far from intuitive as it can be. Nobody says otherwise. So you don't need to do anything to get there, the notation's good on that front (meaning: completely non-intuitive).
That's where the IDEs come in. And debuggers. And other tools. Lots of tools. They really help. You could use them, because the IDEs-for-math already exist. In college I had exactly one semester to familiarize myself with one of them, and it was never mentioned again until graduation.
> Do you really believe that math notation is deliberately designed to make it hard for people untrained in math to learn how to use it?
Why, do you believe it's not possible for it to be that way? See: https://en.wikipedia.org/wiki/Pythagoras#Prohibitions_and_re...
> Do you really believe that no one has tried to make it more accessible?
Why did they fail? (If they didn't - where's the exponential growth of first years' mathematicians in training)
> Do you really believe you know more about why math notation is what it is than mathematicians and trained mathematics educators do?
I'm 100% not interested in why it is like this, it's not my problem, so I really wouldn't know. Would you be interested in how at some point you had to write `class X(object):` and that it later changed to simply `class X:`? Would you go hunt on the mailing list to see who exactly came up with the idea? Or why they thought it would be better that way? Would you be interested in that if you just had to write a 10-lines of Python, to scrape some web site?
Did you just use an example from 2600 years ago to make a point? You don't think much changed since then?
Yes? What's wrong with that?
I'm pointing out the most widely known example, to make a point, which is: "it is possible to design notation specifically for keeping outsiders out". I'm not saying that modern math notation is like that. I think, as a layman, that it probably evolved over a long time and so is full of idiosyncrasies that made perfect sense back when they were introduced (my GP seems to describe it in similar terms, so I hope I'm not that far removed from reality).
Surely you must realize that you're protesting this because it has this reputation, though?
And surely you must realize that it has this reputation for a reason?
When I was a teenager and took my first calculus course, I struggled with summation for three days. When I finally went to my dad he looked at me funny and said "your teacher is an idiot, isn't he? It's a for loop."
I had been writing for loops for seven years at that age. I almost cried. It was like a lightswitch.
The problem was always that nobody had ever actually explained what the symbol meant in any practical way. Every piece of terminology was explained with other terminology, when there was absolutely no reason to do so.
Mathematics has the reputation for impermeability and unwelcomingness for a reason.
It's because you guys are ignoring us saying "we want to learn, please write out a cheat sheet" and saying "yes, but don't you see" instead of just building the easy on-ramp that every other field on earth has built
.
> > You might be tired of wandering into someone else's area of expertise and telling them: > > You must change! You must make it more accessible!
No, we generally just fix the problem. If people are saying "this isn't accessible enough," we just work on it.
I would like for you personally to be aware of Bret Victor's work. He's incredibly potent and clear on these topics.
Programmers work really really hard on learnability and understandability. This is a big deal to us. That's why we can't understand why it's not a big deal to you.
http://worrydream.com/LearnableProgramming/
We have, in fact, mostly given up on waiting for you, and started to make our own tooling to understand your work, using obvious principles like live editors and witnessable effects.
http://worrydream.com/MediaForThinkingTheUnthinkable/
Edit: those are the talk notes. Wrong link, sorry. I should have used this instead: https://vimeo.com/67076984
This is a big part of how we criticize ourselves, is for failing to provide the tooling to allow new modes of approach.
https://www.youtube.com/watch?v=PUv66718DII
We frequently think of our programming languages as new modes for thought. This line of discussion is particularly popular in the Lisp, Haskell, and Forth communities, though it crops up at some level everywhere.
We frequently think that the more opaque the language, the less useful it is in this way.
That's why programming languages, which are arguably 70 years old as a field, have so much more powerful tools for teaching and explanation than math, which is literally older than spoken language
You guys don't even have documentation extraction going yet. We have documentation where you have a little code box and you can type things and try it. You can screw with it. You can see what happens.
This is why we care about things like Active Reading and explorable explanations.
http://worrydream.com/ExplorableExplanations/
This is why we care about things like live reactive documents. It really changes your ability to intuitively understand things.
Math hasn't grokked non-symbolic communication since Archimedes, that's why it took nearly two thousand years to catch up with him.
We are asking you to come into step with the didactic tools of the modern world. It's not the 1850s anymore. We have better stuff than blackboards.
Are these flat symbolic equations cutting it for you guys to communicate with one another? Sure.
Are they cutting it for you guys to onboard new talent, or make your wealth available to the outside? No. (Do you realize that there is an outside to you, which isn't true of most technical fields anymore?)
These problems are not unique to mathematics, of course. Formal logic is similar. Within my own field of programming, the AI field is similar, as is control theory, as tends to be database work. They don't want to open the doors. You have to spend six years earning it.
But the hard truth is there are more difficult fields than mathematics that have managed to surmount these problems, such as physics (which no, is not applied mathematics,) and I think it might be time to stop protesting and start asking yourself "am I failing the next generation of mathematicians?"
An example of who I believe to be genuinely good math communicators in the modern era are Three Blue One Brown.
.
> > Believe me, mathematicians are tired of non-mathematicians wandering up and saying: > > Look! Computer programs are easy and intuitive and everyone can understand them, even without training! Make math like that!
Then fix the problem.
It IS fixable.
.
> Do you really believe that math notation is deliberately designed to make it hard for people untrained in math to learn how to use it?
Given the way you guys push back on being asked to write simple reference material?
No, but I understand why they do.
.
> Do you really believe that no one has tried to make it more accessible?
No. Instead, I believe that nobody has succeeded.
Try to calm down a bit, won't you? People tried to explain Berkeley sockets in a simple way for 12 years before Beej showed up and succeeded. The Little Schemer was 16 years after Lisp.
Explaining is one of the very hardest things that exists.
We're not saying you didn't try! The battlefield is littered with the corpses of attempts to get past Flatland.
We're just saying "you haven't succeeded yet and this is important. Keep trying."
.
> Do you really believe you know more about why math notation is what it is than mathematicians and trained mathematics educators do?
No. The literal ask is for you to repair that. Crimeny.
I've never heard anyone make this accusation until I read it here on HN today. The reputation doesn't seem to be widespread.
> Programmers work really really hard on learnability and understandability. This is a big deal to us. That's why we can't understand why it's not a big deal to you.
How to better teach math is like one of the most studied topics in education since it is so extremely important for so many outcomes. People learn programming faster since programming is simply easier, not because more effort has been done to make programming easy. There hasn't, way more effort has been put into making math easy and the math we have is the results of all that work.
https://en.wikipedia.org/wiki/List_of_mathematics_education_...
> Given the way you guys push back on being asked to write simple reference material?
Nobody pushes back on writing simple reference manuals. There are tons of simple reference manuals for math everywhere on the internet, in most math papers, in most math books, everywhere! Yet still people fail to understand it. Many billions has been put trying to improve math education, trying to find shortcuts, trying to do anything at all. You are simply ignorant thinking that there are some quick fix super easy to implement things that would magically make people understand math. There isn't. It is possible that math education could get improved, but it wont be a simple thing.
blinks really?
It's kind of a famous thing. Teachers are taught how to cope with math phobia; other subjects (with the exception of dissection) generally do not create this effect.
.
> How to better teach math is like one of the most studied topics in education since it is so extremely
Unsuccessful
Many other disciplines are equally important and don't have the desperation for repair that math does
It's so bad that it's gotten into popular music a dozen times; you can easily point to Tom Lehrer, Weird Al, even 2 Chainz for broaching the topic
.
> People learn programming faster since programming is simply easier
Keep telling yourself that
Remember who's cracking things like four coloring.
.
> There hasn't, way more effort has been put into making math easy and the math we have is the results of all that work.
You seem not to be results focused.
.
> Nobody pushes back on writing simple reference manuals.
The person I was responding to was. Three different people have with me in this thread alone.
Notice that you've changed the topic to "reference manuals," which 𝗶𝘀 𝗻𝗼𝘁 𝘄𝗵𝗮𝘁 𝘄𝗮𝘀 𝗯𝗲𝗶𝗻𝗴 𝗿𝗲𝗾𝘂𝗲𝘀𝘁𝗲𝗱
Ostensibly this is the part at which you launch into an explanation about how a simple cheat sheet that says things like " || usually means absolute value or magnitude" somehow isn't possible, even though it totally is
Next you'll explain how simple summary symbols like that are somehow harder than Haskell, which was able to produce a cheat sheet just fine
In reality, mathematicians just don't have the faintest clue how difficult other fields are, and are too busy patting themselves on the backs for their challenging intellects to realize that their work is under-used due to their inability to produce legends and keys
.
> Yet still people fail to understand it.
You're not producing what's being requested, then you're surprised that what you're actually producing isn't working.
.
> trying to find shortcuts, trying to do anything at all.
All that's being requested is a two page operator cheat sheet. If you'd stop wisely pontificating and just try it, you'd find it's really quite straightforward.
I produced one for my students. It's just that my own education in mathematics only goes so far.
𝗜𝘁 𝗴𝗲𝗻𝘂𝗶𝗻𝗲𝗹𝘆 𝗶𝘀 𝗻𝗼𝘁 𝗱𝗶𝗳𝗳𝗶𝗰𝘂𝗹𝘁
You are doing the refusing you insist nobody's doing, right now
.
> You are simply ignorant thinking that there are some quick fix super easy to implement things
Not really, no.
I've succeeded at this.
You are protesting against things that were not requested. Nobody asked for any "quick fixes." Nobody asked for any "magical make understand."
These are things you said, not things I said.
I said something very simple and very practical. Something that very much can be done.
I want a two page PDF which puts operators next to their names, so the load on my memory is lower.
Every time I ask that, some math fan goes on forever about how things I never asked for aren't possible, and ties that up with personal attacks.
𝗧𝗵𝗶𝘀 𝗶𝘀 𝘄𝗵𝘆 𝗺𝗮𝘁𝗵 𝗵𝗮𝘀 𝗶𝘁𝘀 𝗿𝗲𝗽𝘂𝘁𝗮𝘁𝗶𝗼𝗻. 𝗬𝗼𝘂 𝗴𝘂𝘆𝘀 𝗰𝗮𝗻'𝘁 𝗮𝗻𝘀𝘄𝗲𝗿 𝘀𝗶𝗺𝗽𝗹𝗲 𝗾𝘂𝗲𝘀𝘁𝗶𝗼𝗻𝘀, 𝗮𝗻𝗱 𝘁𝗵𝗶𝗻𝗸 𝘁𝗵𝗲 𝗽𝗿𝗼𝗯𝗹𝗲𝗺 𝗶𝘀 𝘀𝗼𝗺𝗲𝘁𝗵𝗶𝗻𝗴 𝗼𝘁𝗵𝗲𝗿 𝘁𝗵𝗮𝗻 𝘆𝗼𝘂𝗿 𝗶𝗻𝗮𝗯𝗶𝗹𝗶𝘁𝘆 𝘁𝗼 𝘀𝗽𝗲𝗮𝗸 𝗽𝗹𝗮𝗶𝗻𝗹𝘆 𝗼𝗿 𝗽𝗿𝗼𝗱𝘂𝗰𝗲 𝗮𝗱𝗲𝗾𝘂𝗮𝘁𝗲 𝘀𝘁𝗿𝗮𝗶𝗴𝗵𝘁𝗳𝗼𝗿𝘄𝗮𝗿𝗱 𝗱𝗼𝗰𝘂𝗺𝗲𝗻𝘁𝗮𝘁𝗶𝗼𝗻.
Please keep the insults to yourself. Thanks.
.
> It is possible that math education could get improved
Please stop trying to solve every problem. Nobody asked you to take on that Herculean task. What was actually requested was a simple two page PDF. That's a thing that a single person can do in an hour (well, maybe as a webpage, making an actual PDF is a hassle.)
The constant attempt to change the topic to some greater thing blinds you to how easy fixing this actually is.
The statisticians can do it: http://web.mit.edu/~csvoss/Public/usabo/stats_handout.pdf
This isn't far off: https://en.wikipedia.org/wiki/Glossary_of_mathematical_symbo...
Seriously, nobody is saying "solve math education for all people."
For `|x|` it would just say "absolute value, magnitude, length, or cardinality."
It's a quick reference chart for people who already know the material but haven't actively used it for ten years, and to help know what to google for the rare cases where you don't. It doesn't teach anything.
This shouldn't be a big deal, and people keep asking for it because it would *really* help
But this is impossible, because, as I learned today, "math is a small field without money for things like this".
Thanks to my discussion here I was able to shift my perspective. Instead of thinking about an abstract thing, like "improving readability of math papers to non-mathematicians", I understood that I have to focus on people! In other words, on a bunch of guys frustrated that other STEM guys earn multiples of what they earn, even though their fields are so much "easier". Why would they help those various others use their work? They worked so hard to create the papers, living in a (shared with a philosopher) one bedroom apartment, writing their revolutionary insights on tissues stolen from McDonalds with a piece of charcoal - while those others can afford to buy computers (and even paper) easily, even though they don't work as hard as mathematicians at all!
It's just so unfair, and of course it's not like mathematicians are jealous or anything (not at all! really! honest!), it's just genuinely so much "harder" to do math, that most of those others won't be able to understand no matter what! Even if they actually listened to the masses and did as requested, the mathematicians already know that it would be useless, so there's no point in trying. Also, this is obvious, but worth noting: saying that most people are simply too dumb to ever understand the intricacies of math is not a prejudiced bias, ok, that's simply a conclusion of centuries of research into math education!
I honestly stopped expecting they'll do anything sensible ever, unless they really have no other choice. You might win against some people, but you won't ever defeat human nature.
> But this is impossible, because, as I learned today, "math is a small field without money for things like this".
Of course it isn't impossible, that was never the problem here. Mathematicians have written plenty of such cheat sheets, you can find them everywhere just by Googling. Here is one for physics:
https://en.wikipedia.org/wiki/List_of_common_physics_notatio...
Here is one for math:
https://en.wikipedia.org/wiki/Glossary_of_mathematical_symbo...
Can you please understand that you are complaining that nobody created something that many many people have created many times over? I found those by googling "physics notation" and "math notation". Was that really too hard for you? If you want a cheat sheet specific for CS related papers, then that cheat sheet has to be written by someone with a CS background since a mathematician wont know what is useful to you, and neither will he know what quirky notation CS people use in their own papers since every domain of math has its own quirks.
What you are doing here is the equivalent of a guy wanting to learn python, and then going to the C++ comitee and complaining that no language is well documented online, and even when the C++ committee nicely shows you that in fact there is documentation of python online you still complain and say that nobody cares about your woes because that python documentation was in fact not easy enough for you to read!
Millions of programmers that work hard and for a long time to master their trade are just dumb for not learning it instantly, like you. Poor bastards, deluding themselves they do somehow advance the field, while in reality programmers are just doing "tabs vs spaces" over and over again, and any kind of advancement is given to them by our benevolent mathematical overlords.
No. We've worked for decades to make programming this simple. You're driving an obviously overpowered car in a race, but choose to conveniently forget about its specs once you win.
> Mathematicians have written plenty of such cheat sheets, you can find them everywhere just by Googling. Here is one for physics
Sure they were created. I never said they weren't, so please stop insinuating that. I (not GGP) said specifically:
> It has literally nothing to do with explaining the syntax *close to where it's used*.
And that is not being done, so I really don't understand how the rest of the paragraph has anything to do with me.
> say that nobody cares about your woes because that python documentation was in fact not easy enough for you to read!
So? What's wrong with that? Are you telling me I'm dumb? Is it really all you can do?
Well, it's either that I'm simply an uneducated idiot, or that the documentation indeed could be better. You seem to default to the former. Well, I feel differently about that.
No, I am saying that people take a long time to understand this. Programmers expects things to have a simple explanation behind it since in programming everything does have a simple explanation, since computers can only do very few things. But in math you quickly expand to concepts beyond, even as early as calculus you add infinities and continuous quantities and how to work with those, you can't ever program those things since those operations cannot be expressed using finite instructions. There is no "this function performs an integral on this other thing and is expressed using these steps of operations".
For example, lets say you want to sum 1/N^2 for N from 1 to infinity. How would you express that? You can't do it in a loop, since the loop never ends. You can stop at an arbitrary point, but how do you know that stopping there results in a good value? You can't, unless you do the math, calculus is a good tool to solve that. With it we can show that summing 1/N results in an infinite result, while 1/N^2 settles on a value and creates a way for you to calculate that value with error bars.
And now you're telling me that Mathematica, Maple and the like don't exist. Yeah, we can't express the concepts directly, but if we're very good at one thing, it would be emulation.
> How would you express that?
Like this:
>>> from sympy import *
>>> i, n, m = symbols('i n m', integer=True)
>>> # For example, lets say you want to sum 1/N^2 for N from 1 to infinity.
>>> Sum(1 / n ** 2, (n, 1, oo))
∞
____
╲
╲ 1
╲ ──
╱ 2
╱ n
╱
‾‾‾‾
n = 1
Would do the same with the integral. There's even that strange elongated S and everything... >>> summation(1 / n ** 2, (n, 1, oo))
2
π
──
6
Dunno, seems legit? How come it appeared, even though my computer has only 32gb of ram, waaaay too little to hold infinity?EDIT: obviously, I still didn't program it myself! I'm dumb, after all. But someone apparently did.
EDIT2: and that person also made sure that even the dumber coders (like me) can use, and benefit from, the tool they wrote.
For example, when you write a sum in python then the computer will sum the values and do the work for you. But when you write an infinite sum like that, you the human still has to do all the math work figuring out what to do with it, so you didn't circumvent the need to do math at all. The computer doesn't understand the sum. You can program simple simple rules for it to try to simplify it, but it still isn't nearly as versatile as a skilled human. For example this problem is a basic problem from a first year course, it makes sense that someone programmed in the human derived solution for it, but they haven't actually programmed the logic for infinite sums into the computer.
That's obvious? Computers don't understand anything. They're just machines. What did you expect?
> you the human still has to do all the math work figuring out what to do with it
Yeah. But with this tool, as dumb as I-the-human am, I am able to do that math even if I don't understand it, but more importantly I also have a much better chance of understanding what's happening. That's because the explanation is close to the place where it's needed (in a docstring, one key press away) and it is expressed in a way that I'm most familiar with (as code).
You're going to tell me that if I want to use math, I have to let go of every preconception I had and crawl into Plato's cave, to see the light in the darkness. I'm too dumb to do this, unfortunately, and a little bit too busy. It took me almost five years to really master C++ programming after all, while you skimmed Stroustrup's book and went on to write Qt the next day.
> but they haven't actually programmed the logic for infinite sums into the computer
They did. Just not the whole of it. Are you sure it's impossible to improve to the point where a skilled human no longer holds the definitive advantage?
Computers can't understand anything. But they are very good at blindly following the rules. The question is not what to do to make computers understand infinity, but what set of rules can emulate the real thing well enough. We're getting there. Maybe in another 100-200 years CS will swallow maths, who knows?
They do arithmetic's perfectly.
> You're going to tell me that if I want to use math, I have to let go of every preconception I had and crawl into Plato's cave, to see the light in the darkness.
No, math is a huge with an extreme amount of flexibility and power. You have lists of solutions like this one, you can add those in a program and then have the program look them up and spit out answers, with maybe some simple algebra testing:
https://en.wikipedia.org/wiki/List_of_mathematical_series
But nobody will be able to just program all solutions to all math problems like that, or give you a bible of everything to look up, as nobody knows what math is useful to you specifically. This is why every field that applies math tend to create their own subfield in math, like mathematical physics or chemistry or statistics or computer science. They create their own compendiums of useful notation and results that you can use. Nobody understands even a fraction of all of that and where it is useful, instead you will have to understand what discipline the paper you are reading is coming from, usually noted somewhere on the paper, and then look that up. For someone doing computer science you mostly look at the subfields statistics, probability, combinatorics and algorithmic complexity. Most of those papers will be written by people who do math mostly on the side though, not pure mathematicians. Pure mathematicians mostly works on problems that are too abstract for programming. (Pure vs applied, probability statistics and combinatorics are examples of applied math fields).
Edit: So from my perspective the main problem you have is that CS professors have yet fleshed out and formalized the subfield Computer Science math. When I studied higher level physics all the math was taught by physics professors, since mathematicians doesn't understand that math, it is mostly developed by physicists. Why doesn't CS do the same? You can't expect mathematicians to do that work for your field, as there are too many fields depending on math and too few mathematicians to handle everything.
So does abacus. Even something like this: https://www.youtube.com/watch?v=GcDshWmhF4A is capable of doing arithmetic. Does that mean that the marbles somehow understand what addition is?
> look them up and spit out answers,
Wolfram Alpha does this, and let me tell you: things I couldn't understand listening to lectures and trying to work through handbooks (well, most of them were hand-me-downs from the '60s, so take that as you will), became clear in just a few days of work. I didn't cancel my subscription for 2 years after that, out of gratitude.
But, most of the papers out there don't use interactive platforms for publishing. Even though they could. But as you said, that would be too much work, so they simply don't. I accepted it, it's all good now.
> Pure mathematicians mostly works on problems that are too abstract for programming.
I was pretty sure we're not talking about "pure" math. I mean, we both agree that that particular branch is of interest to a tiny minority. Of course the pure mathematicians can stay inside their ivory tower forever, nobody cares. Notice that I repeated the word "use" multiple times. I was trying to imply having a goal that's not mathematical in nature.
EDIT:
> Why doesn't CS do the same? You can't expect mathematicians to do that work for your field, as there are too many fields depending on math and too few mathematicians to handle everything.
I... don't know. That's a very good question. Yes, teaching math in CS depts is generally outsourced to mathematicians. It was like that for me. You may be right, that could be the reason to all my problems.
So, you mean that if we want to have math that's understandable for programmers, we need to make it ourselves? Fair enough if so, I think.
Wolfram Alpha didn't program everything, but it includes most things you will see in an undergrad. In my undergrad we used a 500 page reference book containing most of the formulas and notations of STEM undergrad programs, wolfram alpha is basically that book written as a program.
> I was pretty sure we're not talking about "pure" math. I mean, we both agree that that particular branch is of interest to a tiny minority. Of course the pure mathematicians can stay inside their ivory tower forever, nobody cares. Notice that I repeated the word "use" multiple times. I was trying to imply having a goal that's not mathematical in nature.
But then your main problem are mostly with computer scientists or statisticians math papers, not mathematicians. The problem with papers written by people who apply math is that usually they don't really understand the math, they just apply it, so they can't explain it well. There isn't much you can do about that. And papers written by pure mathematicians, they sure do understand what they do, but it uses mountains of abstractions in order to make the problem possible for a human to reason about so it wont be easy to understand either.
For example, most who study statistics views the math as a tool to solve problems. They wont put in the effort to fully understand it, and can therefore just give you the second hand explanations they learned themselves, and the result is that those explanations likely will be missing a lot of things. Pure mathematicians however wont understand the way you want to use the math as a tool, so they might have a full explanation or the math but they wont understand how to apply it in your field, so their explanations will also be bad. What you need is someone who did the work to study the pure math side, and then did a lot of work applying math, and then explain it. Such people are extremely rare though. I went that route, I knew a few others who did, but most of those I know didn't. They either went pure or applied, not both.
Exactly! Which is why I love it, and why I think it would be good to extend it to encompass more than just that one book, too.
> The problem with papers written by peo I went that route, I knew a few others who did, but most of those I know didn't. ple who apply math is that usually they don't really understand the math, they just apply it, so they can't explain it well.
This is already a third time you said something that made me really think again about the issue...
It sound very plausible. I think I've probably never even seen a proper maths paper. I've been struggling with math, but it didn't occur to me that a part of the reason (other than me being dumb) was that the authors struggled with it too! Were I in their place, I would definitely also try to reduce the amount of explanations to the absolute minimum, so that there's less of a chance I'll be called out for it.
EDIT:
> I went that route, I knew a few others who did, but most of those I know didn't.
I'm not joking, this is very serious: is it possible to learn from you somewhere/somehow? Because you're incredible, honestly, your patience is not running out even now, this deep into comments thread; and you really can speak in programming - this much I can see - and I think you're at least as competent on the other side (though I obviously can't judge it myself, so I'm deferring to (your) authority that I came to believe in). I'd be incredibly happy if I could somehow get a bit of your help.
(Seriously, I'm not sarcastic or anything, this is 100% honest. EDIT2: well, I still disagree with you on some points :P but I think if it's from you, I wouldn't have a problem with actually listening to you)
I agree with this. Just that writing such programs is hard, it isn't something anyone can do.
> I've been struggling with math, but it didn't occur to me that a part of the reason (other than me being dumb) was that the authors struggled with it too!
I studied both theoretical physics and pure maths to a grad level. You really notice how the physics professors struggles explaining the math and gloss over things, while the mathematicians doesn't. The physicist are experts at solving and reasoning about physics problems, not maths, as soon as the math solves their problem they stop thinking about the math. It is a part of the reason I went to math afterwards, I wanted better explanations.
> I'm not joking, this is very serious: is it possible to learn from you somewhere/somehow? Because you're incredible, honestly, your patience is not running out even now, this deep into comments thread; and you really can speak in programming - this much I can see - and I think you're at least as competent on the other side (though I obviously can't judge it myself, so I'm deferring to (your) authority that I came to believe in). I'd be incredibly happy if I could somehow get a bit of your help.
I think I have some mental disability where my feelings don't remember things. So even though I hated some of your other comments that doesn't mean anything about other things. I just like discussing things and explaining, taking my time to think etc.
If you want to talk about something you can reach me at {removed}. I'll remove this later. I don't really care much about people learning who I am, but I don't want it to be obvious. I love discussing things, but few people really like discussions like this. So just hit me up and we can talk. I don't always have the right views and opinions, but I never stop thinking about arguments or reasons. I just changed my mind so many times that by now I've seen most arguments and it is rare to change my mind more now.
Edit: You can ask me about math or anything.
You're not the only one - I also hated some of the things you've said about programming; I couldn't help it, programming is a large part of my identity, so I got defensive really fast.
But that doesn't matter, I mean, we're just talking here, I think none of us has really any bad intentions, and I really benefited from this exchange a lot. And it's not like you wanted to specifically hurt me with what you said, so even if I felt hurt I won't cry you a river because of that :)
> If you want to talk about something you can reach
Thank you! Saved it. The thing is, I have this inferiority complex caused by not understanding much about math even if I try to learn it. In college I was already good at programming, so I didn't have much interest or need to learn math back then. And later, when I realized that it would actually be a good idea to learn some, I found myself completely alone with it. I mean, nobody around me cared at all, there were no lecturers to go and ask questions to, no peers that would be solving the same problems at the same time, nothing, just the Internet, Wolfram, and a lot of head banging. I realized too late that I've made it this hard for me basically myself.
But what's done is done, so I started thinking about how to cope with the situation. And I came up with the idea that if someone explained maths to me in terms I'm familiar with from programming, it would be much easier for me to digest. But, there are no materials like that. That's understandable given the very specific path you'd need to take to be able to write or create them... And you've taken that exact path. Honestly, at this point I wouldn't mind you calling me an idiot and programming a children's game, if only I could understand the things that were eluding me for years.
Again, thank you. I will write an email, definitely.
Also, although I'm saying that learning programming is relatively easy, it is a field that is hard to master. The difficulty isn't understanding what a function does, but understanding how to architect a huge complex system so that you can still reason about it afterwards. Those systems will all be made up of those simple instructions though. That is different from math, in math the systems you invent often are entirely new things and can't get divided into simpler things.
Honestly
Leave math notation whatever it is
Just do a better job of documenting it
This is such a disingenuous take. How many of the source code files you write are 100% self contained and well defined? I'd bet not a single one of them are. You reference libraries, you depend on specific compiler/runtime/OS versions, you reference other files etc. If you take a look at any of these scientific papers you call "badly defined", did you really go through all of the referenced papers and look if they defined the things you didn't get? If not then you can't be sure that the paper uses undefined notation. If you argue that it is too much work to go through that many references, well that is what you would have to do to understand one of your program files.
When you get down to the microcode of the CPU that implements the ISA you might have an issue if it's ill-specified. You might be talking about an ISA like RISC-V, though, specified at a level sufficient to go down to the gates. You might be talking about an ISA like 6502 where the gate-level implementations have been reverse-engineered.
You can take programming all the way down boolean logic if you need to and the tools are readily available. They don't rely on you "just knowing" something.
I doubt you actually can do that and understand it all. A computer can do it, but I doubt you the human can do that and get a perfect picture of any non trivial program without making errors. Human math is a human language first and foremost, its grammar is human language which is used to define things and symbols. This lets us write things that humans can actually read and understand the entirety of, unlike a million lines of code or cpu instructions.
Show me a program written by 10 programmers over 10 years and I doubt anyone really understands all of it. But we have mathematical fields that hundreds of mathematicians have written over centuries, and people still are able to understand it all perfectly. It is true that a computer can easily read a computer program, but since we are arguing about teaching humans you would need to show evidence that humans can actually read and understand complex code well.
Someone hasn't read the C spec, with all its specified as undefined behavior.
Programs working on real systems is very different from those systems being formally specified. I suspect that if you only had access to the pile of documentation and no real computer system - if you were an alien trying to reconstruct it, for example - you'd hit serious problems.
All behavior in an implementation can be teased-out if given sufficient time.
> if you were an alien trying to reconstruct it, for example - you'd hit serious problems.
I can't speak to alien minds. Considering the feats of reverse-engineering I've seen in the IT world (software security, semiconductor reverse-engineering) or cryptography (the breaking the Japanese Purple cipher in WWII, for example) I think it's safe to say humans are really, really good at reverse-engineering other human-created systems from close-to-nothing. Starting with documentation would be a step-up.
Can it? Given what? You would need to understand how the CPU is supposed to execute the compiled code to do that. In order to understand the CPU you would need to read the manual for its instruction set, which is written in human language and hence not any better defined than math. At best you get the same level of strictness as math.
If you assume you already have a perfect knowledge of the CPU workings, then I can just assume that you already have perfect knowledge of the relevant math topic and hence don't even need to read the paper to understand the paper. Human knowledge needs to come from somewhere. If you can read a programming language manual then you can read math. Every math paper is its own DSL in this context with its own small explanations for how it does things.
That's really the point though: not every piece of software defines it's own DSL, nor does it necessarily incorporate a DSL from some library or framework (which in turn may or may not borrow from other DSLs, etc.). It is also impossible to incorporate something from other software without actually referencing it explicitly.
Math, though, is more like prose in this respect – while any given novel probably has a lot of structure, terminology, and notation in common with other works in its genre, unless it is extremely derivative it almost certainly has a few quirks and innovations specific to the author or even unique to that particular work that you can absorb while reading or puzzle out due to context, as long as you accept that the context is quite a lot of other works in the genre (this is more true of some genres/subfields than others). Unlike novels, at least in math papers (but not necessarily books) you get explicit references to the other works that the author considered most relevant, but those references are not usually sufficient on their own, nor necessarily complete, and you have to do more spelunking or happen to have done it already.
Finally, like prose, with math you have to rely on other (subsequent) sources to point out deficiencies in the work, or figure them out on your own. Math papers, once published, don't usually get bug fixes and new releases, you're expected to be aware (from the context that has grown around the paper post-publication) what the problems are. Which means reading citations forward in time as well as backward for each referenced paper. The combinatorial explosion is ridiculous.
It would be great if there were something like tour guides published that just marked out the branching garden paths of concepts and notation borrowed and adapted between publications, but textbooks tend to focus on teaching one particular garden path.
No, some programming languages just injects symbols based on context. You'd have to compile it with the right dependencies for it to work, so it is impossible to know what it is supposed to be.
And even if they reference some other file, that file might not even be present in the codebase, instead some framework says "fetch this file from some remote repository at this URL on the internet" and then it fetches some file from the node repository, which can be another file tomorrow for all we know. This sort of time variance is non-existent in math, so to me math is way more readable than most code.
And you have probably seen a programming tutorial or similar which uses library functions that no longer exists in modern versions, tells you to call a function but the function was found in a library the tutorial forgot to tell you about, or many of the other things that can go wrong.
Well, okay, yes, not all software projects deliver reproducible builds of their software. Some software is, in fact, complete garbage.
I'm also not using Gene Ray's TimeCube theory[0] as an example of a mathematical paper.
> This sort of time variance is non-existent in math
Not... entirely. You could cite a preprint that then changes in the final version.
> And you have probably seen a programming tutorial or similar which uses library functions that no longer exists in modern versions
Sure. And cited papers can be retracted entirely.
[0] https://web.archive.org/web/20070718050305/http://www.timecu...
And not all math papers are properly documented either. Some math papers are in fact complete garbage. Why are you complaining about an entire field just because some of it is garbage.
You said:
> because programs can't work without being specified.
.. what I think you may have meant was "can't work without being implemented", because your subsequent comments are all about implementation.
> Undefined behavior isn't a feature
Yes it is, it's a feature of the C specification.
This is where a whole load of pain and insecurity comes from, because as you say the implementations must do something when encountering undefined behavior, and people learn what usually happens, then an improvement is made to the optimizer which changes the implementation.
If programmers would write code like that (even fortran programmers use 3 characters), noone would be able to understand the code...
Mathematical writing is similar. At some point you have to assume an audience, which may be more or less mathematically literate. If you're writing for graduate students or experts in a domain, you don't include a tutorial and description of literally every term, you can assume they're familiar with the domain jargon (just like C programmers can assume that others who read their program understand pointers and other program elements). Whenever something is being used that is unique to the context, a definition is typically provided, at least if the writer is halfway decent.
If the audience is assumed to be less mathematically literate (like a Calculus course textbook audience), then more terms will be defined (chapter 1 of most Calculus books include a definition of "function"). But a paper on some Calculus topic shouldn't have to define the integral, it should be able to use it because the audience will be expected to understand Calculus.
It doesn't carry over to programming where explicit variables are better suited. In mathematics one is dealing with relatively few concepts compared to a typical program so assigning a single letter (applied consistently) to each is not a problem. This is not so in programming, except for a few cases like using i and j for loop variables (back when programs had explicit loops).
Take a look at this and tell me it would be easier to understand if all the symbols were words instead of single characters: https://www.grc.nasa.gov/www/k-12/airplane/nseqs.html
1. They explain all abbreviations at the top.
2. There is a lenghty text explaining the formula.
3. It's mathematically pretty easy if you know partial differentation.
Also scientists and engineers write pretty horrible code....
From a more science based background i often think programmers write horrible code as i search in vain for where anything actually happens in a sea of abstractions.
https://docs.oracle.com/javase/tutorial/java/generics/types....
I recall my disappointment when as an artist I started studying different maths for use in animation. I would open a book from a university library and expected to find a page with summary of notation used in the book. Maps have this, I would grumble, why not math books?
I disagree. Math notation has evolved to be as it is because it is useful for the purpose of doing math. If there were some way of doing it better, people would be evolving to be doing so.
In some ways they are ... people are using computer algebra packages more for a lot of the grunt work, and are using proof assistants to verify some things, but there's a lot of math that's still done by sketching why something is true and letting the reader work through it. Math notation isn't about executing algorithms, it's about communicating what the result is, and why it works.
"Doing Math" is not "Writing Programs", so math notation is different.
I don't see why wouldn't it be some kind of local maximum. Maybe there are better ways, but they are sufficiently far away from current notation, that they aren't even thought about.
It's absolutely not used only because "this is how people have been doing it for a long time". It's a very efficient notation to decode.
Yes this is why we all use Hungarian notation and GNU indentation.
And then there is SQL.