Live data from Hacker News

Ask HN: How did you learn math notation?

news.ycombinator.com

231–240 of 258 posts

Re: Ask HN: How did you learn math notation?

#231

Earlier quoted context omitted.

I wrote one math paper before I went into programming. It is a lot of work, like code reviewing but much much longer. It isn't fun. A big reason I got into programming is because that process is so much work. Of course I, the professor who reviewed it and the professors who looked at it afterwards understood it, but I can't guarantee that someone who hasn't read a lot about research level topology or combinatorics wi…

Yeah, I didn't think about it at all - I didn't realize that what I'm saying is basically demanding people to work for free (and on things that won't be useful to anyone in 99% of cases), and that's on top of already huge effort that is writing the paper in the first place. Honestly, I was behaving like people who open tickets in an open source project just to demand that someone implements a particular feature, just…

Anyway, lots of mathematicians works really hard to make everything as understandable as possible. Learning programming isn't the same thing as learning math. In programming you learn an instruction set, and then you use those instructions to compose programs, therefore learning that instruction set is relatively easy. Mathematics isn't like that at all, instead you just continue to learn ever more complex instruction sets, you don't compose much at all in mathematics because the new instructions typically can't be expressed using the old ones. Therefore learning the instruction set in math is equivalent to learning math, it isn't something you just do once and then is done with it, learning the instruction set is close to the entirety of learning math.

For example, when learning programming you have to learn about arithmetics, pointers, functions and structs. And that is it, now you can program everything as long as you have an API to program against since everything else builds on top of those. That is equivalent to learning algebra in math. You can do a lot of things using algebra, but every new course introduces a lot of new concepts that can't be expressed in elementary algebra. Programming however becomes the art of expressing everything using these very simple instructions, while math is the art of creating instructions that can express things simply.

Re: Ask HN: How did you learn math notation?

#232

Earlier quoted context omitted.

> What was actually requested was a simple two page PDF. 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 o…

The fact that the teaching material is so horrible is probably the biggest reason learning programming is so easy, because if the teaching material would be any good then the CS grads would actually know difficult things and it would be harder for me to compete. But as is it is trivial to learn what they did, because they don't learn much. For programming it didn't take me long to learn programming well enough to get…

> because programming is really really simple

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.

Re: Ask HN: How did you learn math notation?

#233

Earlier quoted context omitted.

The fact that the teaching material is so horrible is probably the biggest reason learning programming is so easy, because if the teaching material would be any good then the CS grads would actually know difficult things and it would be harder for me to compete. But as is it is trivial to learn what they did, because they don't learn much. For programming it didn't take me long to learn programming well enough to get…

> because programming is really really simple 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.…

> So? What's wrong with that? Are you telling me I'm dumb? Is it really all you can do?

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.

Re: Ask HN: How did you learn math notation?

#234

Earlier quoted context omitted.

Yeah, I didn't think about it at all - I didn't realize that what I'm saying is basically demanding people to work for free (and on things that won't be useful to anyone in 99% of cases), and that's on top of already huge effort that is writing the paper in the first place. Honestly, I was behaving like people who open tickets in an open source project just to demand that someone implements a particular feature, just…

Anyway, lots of mathematicians works really hard to make everything as understandable as possible. Learning programming isn't the same thing as learning math. In programming you learn an instruction set, and then you use those instructions to compose programs, therefore learning that instruction set is relatively easy. Mathematics isn't like that at all, instead you just continue to learn ever more complex instructio…

> Anyway, lots of mathematicians works really hard to make everything as understandable as possible

You just said they don't because it's not worth it. So which is it in the end?

> In programming you learn an instruction set, and then you use those instructions to compose programs, therefore learning that instruction set is relatively easy.

Yeah, sure. Elementary arithmetic, like 22 and so on, is also not that hard to learn. What you're saying is barely scratching the surface of what programming is, then misrepresent it as the whole truth.

It's not that programming is easy. It's just that you can still earn a very good salary without ever touching the harder and more complex parts. People who knew how to do 22 were also well-paid at some point in the past, yet Euclid still managed to write his Elements. You're like an actuary (working under a Pharaoh to count the cattle, let's say) who says that writing Elements is as easy as his current job (you could do it yourself, but you're too busy right now, so maybe later).

> For example, when learning programming you have to learn about arithmetics, pointers, functions and structs.

And then you try to write a JIT for a dynamic (and concurrent, let's say, as Erlang succeeded in this in the last release) language and, with just "arithmetics, pointers, functions and structs", it becomes obvious it's not nearly enough. Then you start reading books and papers and soon you realize that 5 years have just passed. And JITs are not really that complex!

> Programming however becomes the art of expressing everything using these very simple instructions.

Programming is an art of creating new instructions, both out of thin air and out of already existing instructions. The fact that you seem to think "the instruction set" (meaning concepts that have to be understood, I think?) is constant suggests to me that you you're not very interested in history of the field.

Re: Ask HN: How did you learn math notation?

#235

Earlier quoted context omitted.

Anyway, lots of mathematicians works really hard to make everything as understandable as possible. Learning programming isn't the same thing as learning math. In programming you learn an instruction set, and then you use those instructions to compose programs, therefore learning that instruction set is relatively easy. Mathematics isn't like that at all, instead you just continue to learn ever more complex instructio…

> Anyway, lots of mathematicians works really hard to make everything as understandable as possible You just said they don't because it's not worth it. So which is it in the end? > In programming you learn an instruction set, and then you use those instructions to compose programs, therefore learning that instruction set is relatively easy. Yeah, sure. Elementary arithmetic, like 2 2 and so on, is also not that hard…

> And then you try to write a JIT for a dynamic (and concurrent, let's say, as Erlang succeeded in this in the last release) language and, with just "arithmetics, pointers, functions and structs", it becomes obvious it's not nearly enough. Then you start reading books and papers and soon you realize that 5 years have just passed. And JITs are not really that complex!

I actually wrote a JIT for one of Googles internal machine learning frameworks, so yes. It was used in production for Google search, Google ads etc. Only a very small part of that traffic, of course, I didn't do something huge, but at least I know what it takes to make such systems production ready and performant enough, as these systems are extreme resource hogs. So I know very well what it takes to create a language, parse it, execute it, optimize it and ensure that there are no errors in production and help the researchers who are supposed to use it to debug when errors happen.

I learned programming by just implementing a lot of complex algorithms and systems. I wrote several high throughput http servers using sockets and threads for example. I also got good enough at competitive programming to occasionally place in single digits in some world programming competitions, but mostly double digits. All of that is very easy to understand compared to math, math just forces you to bend your mind in strange ways, programming is super concrete.

I have no doubts that programming will one day get as deep and mindbending as math, physics definitely is for example, but today it isn't even close.

Re: Ask HN: How did you learn math notation?

#236

Earlier quoted context omitted.

> because programming is really really simple 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.…

> So? What's wrong with that? Are you telling me I'm dumb? Is it really all you can do? 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 infinit…

> you can't ever program those things since those operations cannot be expressed using finite instructions.

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...

Re: Ask HN: How did you learn math notation?

#237

Earlier quoted context omitted.

> So? What's wrong with that? Are you telling me I'm dumb? Is it really all you can do? 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 infinit…

> you can't ever program those things since those operations cannot be expressed using finite instructions. 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, l…

You didn't program the sum, you just created a program that looks like the math symbols.

Re: Ask HN: How did you learn math notation?

#238
post #74

Earlier quoted context omitted.

> because programs can't work without being specified. 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.

Undefined behavior isn't a feature. A spec isn't an implementation, either. 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 (th…

Yes, humans are incredible at reverse engineering. My point was about specification, and what happens if you have only a specification and no implementation. Because that's more closely analogous to the mathematical situation, where you're manipulating the specification.

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.

Re: Ask HN: How did you learn math notation?

#239

Earlier quoted context omitted.

> you can't ever program those things since those operations cannot be expressed using finite instructions. 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, l…

You didn't program the sum, you just created a program that looks like the math symbols.

I said: emulation. You don't actually need to stretch your mind to infinity to reason about it, right? I mean, you're not a matrioshka brain the size of a star, right? (Just making sure) So if your mind can cope with infinities by using just the very finite storage accessible to you, what prevents computers from doing the same? Like this:

    >>> 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.

Re: Ask HN: How did you learn math notation?

#240

Earlier quoted context omitted.

You didn't program the sum, you just created a program that looks like the math symbols.

I said: emulation . You don't actually need to stretch your mind to infinity to reason about it, right? I mean, you're not a matrioshka brain the size of a star, right? (Just making sure) So if your mind can cope with infinities by using just the very finite storage accessible to you, what prevents computers from doing the same? Like this: >>> summation(1 / n ** 2, (n, 1, oo)) 2 π ── 6 Dunno, seems legit? How come it…

A computer understands instructions. You can give it instructs to loop and sum values. Those aren't instructions telling the computer what an infinite sum is. Math is about making humans understand such concepts, we have yet to be able to program those concepts.

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.

Post reply on HN