[HN Gopher] The Mathematical Hacker (2012)
       ___________________________________________________________________
        
       The Mathematical Hacker (2012)
        
       Author : andsoitis
       Score  : 175 points
       Date   : 2022-12-23 17:33 UTC (1 days ago)
        
 (HTM) web link (www.evanmiller.org)
 (TXT) w3m dump (www.evanmiller.org)
        
       | dekhn wrote:
       | I use math with computers all the time; have since pretty much
       | the beginning of my programming experience 35 years ago. But I
       | don't use it well. I depended a lot on other people to convert a
       | mathematical equation into a program (for example, think of a
       | summation-- that's really just a for loop incrementing an
       | accumulator. And an integration isn't much more than that, just
       | divide by a constant at the end). I learned gravitational
       | simulations that way (amusingly, I was able to do mandelbrot on
       | my own knowing just z = z ** 2 + c and brute forcing myself
       | through the details).
       | 
       | For me math is more of a received wisdom. I'll have a problem I
       | need to solve, and as part of that, I need to compute some
       | function. But the naive version of the function that I was taught
       | (say, factorial function) is slow, and might fail because of
       | integer data types outside their range. In comes my professor,
       | who mentions
       | https://en.wikipedia.org/wiki/Stirling%27s_approximation which
       | allows me to complete my project and graduate in time. Said
       | professor also derived analytic derivatives of our objective
       | function, since at the time (1993-4) we didn't have
       | autodifferentiation.
       | 
       | At the time, I didn't really think too much about it. I had a
       | problem and somebody handed me a practical solution. But I got
       | curious... what was this gamma function and why is it defined
       | over floats (reals!) over integers? And so that led down a rabbit
       | hole of mathematical exploration (most of which was executed
       | using a highly worn copy of Mathematical Recipes in C).
       | 
       | Another example is the mandelbrot set. You can take the raw
       | definition and attempt to compute set members but your
       | calculation will never complete. Instead, clever math people
       | figured out ways to compute an approximately right answer faster-
       | and in some cases, optimized for the limited hardware of the time
       | (see FRACTINT for an integer-based fractal program for x86
       | machines pre-floating point hardware). This and many other tricks
       | made fractal exploration on consumer hardware practical (although
       | probably not very useful?)
       | 
       | Over time I've come to be better at math- at understanding
       | concepts- and the relationship between practical high performance
       | computing and both the underlying math and physics that are
       | required to do it effectively. I've learned so many different
       | ways to approach problems compared to when I started, much of it
       | because I continued to learn more math, and practice at it. I see
       | a close relationship between computing theory and the
       | math/physics that enabled it (IE, transistors and vacuum tubes
       | before them, and mechanical gears and switched before that).
       | 
       | I've also realized that I can learn some math easily- for
       | example, more or less anything on a cartesian grid- while other
       | things, like complex symbolics or tree structured algorithms-
       | take a lot more thinking.
       | 
       | To me it's an endless world of unknown delights that I stumble
       | across and periodically take 20+ years to understand. I am _just
       | now_ solving problems that my smarter grad school friends managed
       | to do in a day, 20 years ago, because they 're better at math
       | (and logic, and memory, and more...)
        
       | sargstuff wrote:
       | Ah, always interesting to see a subject discussion based on
       | centuries old metadata constructs (higher order formal logic &
       | mechanical/electrical/abstract autonoma), ignore centuries old
       | metadata constructs.
        
       | hintymad wrote:
       | > They seem to agree on one thing: from a workaday perspective,
       | math is essentially useless.
       | 
       | The creator of Dilbert advocates stacking, namely learning
       | multiple skills and combining them to achieve better results than
       | any single skill can. His advice applies to maths as well. I work
       | on distributed systems as a generalist, yet I find maths, time
       | and time again, career changing. A few typical examples: queuing
       | theory that helps improving latency of my services by more than
       | 10x. Statistics to identify patterns in data, which led to a new
       | product. Time series analysis that led to a new system. Data
       | mining and information retrieval in search and recommendation for
       | continuous improvement of my search product. Linear algebra,
       | calculus, and combinatorics as foundations to identify or prove
       | certain properties of my systems for later optimization. And in
       | general, the ability to understand papers (or at least know what
       | to learn to unblock myself) to stay on top of what's going on in
       | exciting fields.
       | 
       | One does not necessary need maths to build systems, but boy it is
       | satisfying and career-rewarding when I actively look for real
       | problems that scream for some maths. What's most amazing is that
       | we don't even need graduate-level maths. Entry-level college
       | maths play wonders most of the time.
        
       | bmitc wrote:
       | In Steve Yegge's linked post:
       | 
       | > Math is a lot easier to pick up after you know how to program.
       | In fact, if you're a halfway decent programmer, you'll find it's
       | almost a snap.
       | 
       | This couldn't be more wrong. Mathematics is the hardest thing I
       | have ever done. I'm sorry, but mathematics is orders of magnitude
       | more intensive and difficult than most programming. A simple fact
       | that shows this is the amount of programmers who have no formal
       | training in engineering or computer science but we're able to
       | self-teach the concepts. The same cannot be said of mathematics,
       | which requires deep, dedicated study. Most programmers I know
       | know very little mathematics, and it's not like I'd claim I know
       | a lot either. I've forgotten more than I know.
       | 
       | He even mentions how little math he took, so I'm not sure he's an
       | authority on the subject. Most of his post is just surface level
       | platitudes. I'm generally confused why I see his posts referenced
       | so frequently.
       | 
       | To be clear, this isn't some attempt at gatekeeping. It's just
       | that mathematics is a very deep, difficult, and misunderstood
       | subject. I think maybe only true philosophy is harder because
       | there, it's usually not even clear what the questions are.
        
         | jjtheblunt wrote:
         | He might be describing one bifurcation in the world of math,
         | where constructive proofs reign, but overlooking
         | nonconstructive "existence" proofs.
        
         | eternityforest wrote:
         | The only thing comparable is maybe drawing or playing an
         | instrument. Math can never be learned from a textbook.
         | 
         | Anything that's just algorithmic steps would be done by a
         | computer, so the useful math people want to learn requires some
         | kind of insight or new mode of thought, or advanced methods
         | that have not been made into an app yet.
         | 
         | I suspect when people say math is easy, they mean arithmetic
         | and pre-algebra, and they're not concerned with practical
         | applications at all, just the idea of general education and new
         | ways of thought, and who knows if the level of math they are
         | talking about is even enough to indirectly do much in daily
         | life.
        
         | strangattractor wrote:
         | Implementing numerical solutions for math concepts can give you
         | insight into the math ex. Newton-Raphson Method or FFT. I would
         | not sell yourself short on being able to understand. You may
         | not be skilled at doing all the symbol manipulation required
         | for what people consider typical "math" but that does not mean
         | you cannot understand it.
        
           | bmitc wrote:
           | I do agree that programming is very useful as a medium of
           | exploration, a la what you said. I really like how the book
           | _Turtle Geometry_ approaches this. But that is really
           | something different than what the quoted text is attempting
           | to get at.
           | 
           | > I would not sell yourself short on being able to
           | understand.
           | 
           | I have a master's in mathematics and have continued to take
           | courses while working full-time. It's just that I'm more than
           | aware of the amount of mathematics I do not know compared to
           | an active graduate student in mathematics and above. Or maybe
           | you meant the royal you.
        
             | strangattractor wrote:
             | I am more a recreational mathematician. There seems to be a
             | lot of unnecessary math phobia lurking about. Simply like
             | to encourage people that sound like they fall into that
             | category - obviously you are not one of them:)
        
         | bee_rider wrote:
         | What do you mean by "learning Mathematics?" It should be notes
         | that significantly less than 50% of the US population even has
         | to learn _calculus_ so getting into the stuff that most people
         | would consider pretty advanced is not so hard, right?
         | 
         | I'd be curious what people's coolest math tricks are that
         | they've used at work. I did like one Taylor Series expansion
         | and felt cool for a week.
        
           | dinkumthinkum wrote:
           | You are right about the 50% but you might as well have said
           | "fewer than 99%". I mean, the real number is far, far less. A
           | very small percentage of US residents would recognize and
           | calculus or be able to solve a simple linear equation.
        
             | bee_rider wrote:
             | Apparently around 15% of highschoolers take calculus. I
             | dunno, I think "significantly less than 50%" has a
             | generally right-ish feeling, sort of like, something that
             | most people don't do but not like super-esoteric. But it is
             | subjective.
             | 
             | https://www.edweek.org/teaching-learning/calculus-is-the-
             | pea...
             | 
             | It is possible that the majority of students forget it
             | though, I tutored calculus for a bit and it didn't always
             | seem like their hearts were in it.
        
           | zozbot234 wrote:
           | Never mind calculus; a non-trivial fraction of the U.S.
           | population has trouble learning _elementary algebra_. The
           | fact that the U.S. K-12 educational system is notoriously a
           | failure compared to otherwise similar countries should not be
           | used to draw inferences about the inherent worth of any
           | particular subject. Not least because that same system also
           | often fails to teach functional literacy, or any amount of
           | basic facts about society that may elsewhere be assumed to be
           | known by any educated adult.
        
             | subradios wrote:
             | Then why do all New England states outcompete most European
             | countries?
             | 
             | Why is most STEM research produced in Eastern Europe, the
             | US, or China?
             | 
             | This really depends on what metrics you are using and has
             | infinite room for gaming.
             | 
             | US undergrads (both native and foreign born) absolutely
             | crush all of these nondescript places you are suggesting
             | are better, and graduate programs make the gap even wider.
             | 
             | A non trivial fraction of those are educated K12 in the US
             | system.
        
               | hgsgm wrote:
               | [dead]
        
               | zozbot234 wrote:
               | U.S. undergrads have to complete "general educational
               | requirements" that are taken care of in high school in
               | practically every other developed country. Why does that
               | happen? Because U.S. colleges don't trust K-12 to provide
               | a satisfactory education.
        
               | subradios wrote:
               | We do not trust the average student, however access to
               | universities in the US is less gated on ability or
               | achievement than most of the nations you're going to be
               | comparing it to.
        
               | texaslonghorn5 wrote:
               | or that there's value in a college level comprehensive
               | education as well
        
               | zozbot234 wrote:
               | All other things being equal (including quality), high
               | school is actually _better_ than college at doing the
               | "comprehensive education" thing. College level gen-eds
               | are almost universally reviled as a pointless box-ticking
               | exercise that gets in the way of specialized education.
               | This particular dysfunction has effects even further out;
               | U.S. college education pushes things out to the grad
               | school level that are elsewhere part of the later years
               | of undergrad.
        
               | bee_rider wrote:
               | New England is mostly sanely governed, it shouldn't be
               | used as a stand in for the rest of the country.
               | 
               | The US was a neat idea we had but it went a little off-
               | kilter around the second half of Pennsylvania.
        
               | subradios wrote:
               | Texas A&M is ranked 67, Urbana Champaign 41. (USNWR)
               | 
               | After you pull out HPYSM, these are not ridiculous
               | rankings either.
               | 
               | Georgia Institute of Technology is 38th in _the world_ by
               | research impact, with the top ten or twenty being your
               | standard prestige universities. (Elsevier)
               | 
               | If the US is so bad, why is a poorer southern state
               | competitive with far more prestigious institutions from
               | other countries you would perceive as better?
               | 
               | This is ahead of University of Tokyo, Urbana Champaign,
               | etc.
        
               | bee_rider wrote:
               | I should have been more explicit; I was being a bit flip,
               | trying to inject a little lightheartedness.
               | 
               | To specifically respond to just that one point, New
               | England is in many ways an unusual region so I don't
               | think we should use the scores from here to come to any
               | particular conclusions about the country in general.
               | 
               | This shouldn't be taken as a response to your other
               | points, most of which seem reasonable enough or at least
               | I don't know anything in particular about them.
        
               | subradios wrote:
               | Yeah sorry the issue that I run into frequently on this
               | topic is "US bad because those poorer, more conservative
               | states are terrible and if we just governed them like the
               | utopia of New York City, we'd do much better in
               | rankings", and while I think red states have their own
               | failure modes - the stats show that at least some of them
               | are doing just fine.
               | 
               | Sorry for being a bit reactionary there, sometimes a
               | certain opinion is common enough that you respond like
               | it's being stated due to similar comments being a prelude
               | to it.
        
         | kvathupo wrote:
         | I'd agree: there's a common misconception that math is
         | "objective." Even if one agrees on the axioms (Axiom of Choice
         | [1]), one must reach consensus on definitions, which seem to be
         | consciously chosen to allow generalization of theorems to more
         | mathematical objects; that is, building connections between
         | previously disparate fields of math, e.g. algebra and geometry,
         | calculus and geometry, etc. Why have many domain-specific
         | theorems when we can have one?
         | 
         | One could have a valid proof to a theorem, but there's the
         | human element of having people understand and accept the
         | result.
         | 
         | That said, I think when people speak of math, they speak of its
         | application to the real-world, not the proofs.
         | 
         | [1] - From the Wikipedia page for the axiom, Jerry Bona has an
         | amusing quote: "The axiom of choice is obviously true, the
         | well-ordering principle obviously false, and who can tell about
         | Zorn's lemma?"
        
           | JadeNB wrote:
           | > That said, I think when people speak of math, they speak of
           | its application to the real-world, not the proofs.
           | 
           | I think it very much depends on who the people are. I'm a
           | math teacher, and, when I speak of math, I definitely don't
           | just mean its applications to the real world. I definitely
           | think programming--in the sense of thinking about the craft,
           | not just cudgelling the computer into doing what one wants--
           | is good preparation for learning the proof-theoretic arts of
           | mathematics.
        
         | kccqzy wrote:
         | I learned Haskell before I learned to write proofs. And yes it
         | did help.
         | 
         | But no I don't think experience doing boot camps and churning
         | out React apps and gluing together APIs would help with
         | learning mathematics.
         | 
         | Go learn a language that seriously challenges you like Haskell.
        
         | starwind wrote:
         | Math hard. Can confirm. Starwind have math degree. Starwind
         | much better at programming than Starwind ever was at math.
        
           | shankr wrote:
           | I spend 5 years doing mathematics and still can't wrap my
           | head around lot of maths. If you really want to see the
           | difficulty in Computer science you'll have to go explore the
           | theoretical stuff which at the end is just maths.
        
             | FiberBundle wrote:
             | Same here, I remember putting so much effort into a course
             | on Riemannian geometry and still not really fully grasping
             | the content on an intuitive level. That was by far the
             | hardest thing I've ever tried to learn.
             | 
             | The only areas in CS that come close to that in terms of
             | difficulty are discrete math/algorithms related ones and
             | the CS chairs that are involved in such research also tend
             | more towards the applied side of those topics. Really
             | theoretical discrete math stuff resides in math departments
             | most of the time.
             | 
             | Still, having also taken some discrete math classes, in
             | terms of difficulty those somewhat paled in comparison to
             | differential geometry/topology/abstract algebra kind of
             | stuff. I can't even imagine how difficult it must be to be
             | doing research in those areas.
        
           | woopwoop wrote:
           | A copy of the classic "Mathematics Made Difficult" (which by
           | the way is perhaps the pinnical of human literature) is saved
           | to my desktop as mathhard.pdf
        
         | tombert wrote:
         | I think Yegge is actually completely correct. I started to
         | learn to program when I was 14, and once I understood the
         | concept of functions, I found it much easier to do my calculus
         | and physics work. Fundamentally I understood how to break
         | things down into computable steps.
         | 
         | Granted, I think get the impression we might be overloading the
         | term "mathematics".
        
           | BeetleB wrote:
           | For most mathematicians, calculus as is often taught in
           | typical undergrads is not "true" mathematics. It's just a
           | tool for computation. For them, calculus is analysis
           | (theorems/proofs that are used to build up calculus).
           | 
           | So my question is: Did you study analysis and would you
           | credit programming in helping you get good at it?
        
             | edgyquant wrote:
             | Not them but I def would. I built a fintech/econometric-
             | lite system in python years back and it was mostly just
             | taking in a ton of "obvious" knowledge and realizing the
             | cool stuff you could do in practice
        
             | kaashif wrote:
             | I don't understand this comment. Calculus as taught to
             | _mathematics_ undergrads _is_ analysis, right?
             | 
             | Where is calculus "often taught" without "theorems/proofs
             | that are used to build up calculus"?
        
               | BeetleB wrote:
               | In most US universities, the courses called "calculus"
               | are mostly about computing integrals and derivatives.
               | Yes, they'll have some theorems (Fundamental Theorem,
               | Mean Value Theorem, etc), but most of the problems are
               | related to computation than proving.
               | 
               | Unfortunately, since engineering students outnumber math
               | majors by a large margin, the departments cater to them
               | and not the math majors. The latter study analysis in
               | later years - usually third or fourth.[1] Universities
               | with strong math programs may offer it in the first or
               | second year.
               | 
               | [1] I just checked my undergrad's program. They begin
               | taking analysis in their 4th year, and it's offered only
               | one semester a year!
        
               | defrost wrote:
               | That's just sad.
               | 
               | I was taught Calculus in high school, years 11 and 12
               | (two optional senior years for those that want more
               | education prior to university, etc rather than transfer
               | to a trade apprenticeship or leave school altogether).
               | 
               | That was a mixture of basic theory and proof and some
               | computation (eg: derive an expression for the volume of
               | intersection of two pipes at right angles, etc).
               | 
               | University went straight in to heavy analysis and
               | foundations (for Math 100 - math for the serious (math,
               | physics, hard chemistry)), with seperate streams for
               | "casual math" - engineering, business, law, etc.
               | 
               | Engineering math prepped people for calculating dynamics
               | and kinetics with vary loads, masses, thrusts, harmonic
               | forces, network propagation, mesh computations, etc.
               | 
               | This was Australia in 1980.
        
               | kaashif wrote:
               | > They begin taking analysis in their 4th year, and it's
               | offered only one semester a year!
               | 
               | This is insane to me. In the UK about ten years ago, on
               | literally the first day of my degree, my first class was
               | real analysis. Yes, it was the easy stuff like proving
               | sequences and series converge, various things about
               | continuous functions, but we learnt how to prove it all
               | and the exam was all about proving various things. And we
               | built up to harder stuff as the year went on.
               | 
               | What is even happening if _math majors_ aren 't studying
               | _analysis_ until their _fourth_ year?
               | 
               | Sorry I'm so incredulous, it's just that I literally
               | don't know what I would've been studying if analysis had
               | been delayed so much.
        
               | [deleted]
        
               | jhanschoo wrote:
               | Not US, but for GCSE A's further math equivalent,
               | calculus primarily involved applying intermediate rules
               | (chain rules, trig identities, etc.) to evaluate
               | differentiation/integrals on elementary functions, and a
               | bit on geometric and arithmetic series.
               | 
               | Analysis discusses less well behaved functions and spaces
               | than these.
        
               | zozbot234 wrote:
               | You can do the first part without even relying on
               | analysis in a mathematical sense. You simply define a
               | differential algebra, by introducing a derivation
               | function that just happens to respect the correct rules.
               | Then "calculus" is the topic of how to perform
               | computations in such an algebra. Note however that you do
               | need analysis to rigorously address other parts of a
               | typical "calculus course", especially those dealing with
               | infinities, sequences and etc.
        
             | c0balt wrote:
             | +1 for this comment. Calculus, i.e., Calculating with
             | mostly finite numbers and (usually) a known set of well
             | defined rules is only a part of mathematics.
             | 
             | As a student that currently learns Analysis and linear
             | algebra, it is far more complex and abstract than calculus.
             | It is not neccessarily harder to learn but different. And
             | adapting to this paradigma takes time (and effort).
             | 
             | It is similiar to learning Assembley as a Python developer.
             | Knowing Python will help with Assembley. But the levels of
             | abstraction are obviously different and will require a lot
             | of learning.
        
           | mathgladiator wrote:
           | > get the impression we might be overloading the term
           | "mathematics".
           | 
           | We are; the challenge is there is a near infinite difficulty
           | in both "programming" and "mathematics" and at a certain
           | point, the skill sets diverge greatly.
        
           | bmitc wrote:
           | Mathematics is not just functions and calculus.
           | 
           | And it seems to me that you learned the concept of functions
           | through programming first but that there's not evidence that
           | you couldn't have learned it from mathematics at first.
           | Functions are a pretty easy concept, so I think it's pretty
           | easy to introduce it from a variety of points of view. So I'm
           | not sure the anecdote backs up any argument about learning
           | programming makes mathematics easy.
           | 
           | I am of the opinion that programming can be _used_ to explore
           | and learn mathematical ideas and am a big proponent of that,
           | but that is something different than  "I know how to program
           | so mathematics will be easy now".
        
             | ngcc_hk wrote:
             | Always wonder about this. Other than foundation of maths,
             | the function abd calculus view ... my wonder is about the
             | data part of the maths. Not the process. Yes one can view
             | matrix as a function but could it be data. One can real
             | number line, complex or integer as data?
        
           | dekhn wrote:
           | functions in traditional programming and functions in math
           | are two different things entirely. They should have been
           | called procedures (I think there's historical debate about
           | this but I can't find the reference). Obviously, functional
           | programming is an attempt to address this.
        
           | edgyquant wrote:
           | I grew up programming (from 10 or so) and couldn't agree
           | more. I have almost no formal education yet I've picked up
           | enough math to do ML and (mediocre) cryptography and keep up
           | with people who have scary sounding degrees. in the process
           | I've fallen in love with math and think as programmers we
           | haven't been meeting mathematicians half way.
        
         | constantcrying wrote:
         | For me the opposite was true. My mathematical education made it
         | incredibly easy to pick up programming and programming
         | languages, everything was somewhat familiar and the concepts
         | just came naturally.
        
           | dekhn wrote:
           | How did you feel when you first came across a global
           | variable, or even a pointer? It seems to me that math-first
           | people would probably find C to be an abomination.
        
             | constantcrying wrote:
             | I believe one thing which came really natural was to think
             | in virtual machines, to see a programming language as
             | something which acts upon a fictitious environment, where
             | certain instructions map to certain consequences. Of course
             | programming and mathematics are very different activities,
             | but one core principle that I always relied on was thinking
             | in abstractions. What option do I have to manipulate the
             | environment and what invariants are there? How are complex
             | thing constructed out of others?
             | 
             | >It seems to me that math-first people would probably find
             | C to be an abomination.
             | 
             | I certainly don't. You might do so if you wanted
             | programming to be an expression of pure mathematics, but I
             | do not think that is the right approach. C does well for
             | what it is an abstraction over an underlying, real machine
             | and thinking of it as an abstraction is the right thing.
        
           | bmitc wrote:
           | Most definitely. For me, I have never used any specific
           | mathematical concept in programming aside from some side
           | projects for using programming to explore mathematical ideas.
           | But my so-called training in mathematics taught me both
           | highly abstract thinking and deep, concrete, in the weeds
           | thinking, and that's what really comes in handy in
           | programming.
        
           | BeetleB wrote:
           | Technically, that's the converse, not the opposite ;-)
           | 
           | Someone may be led into thinking you're countering the OP.
        
         | quantum_state wrote:
         | If I may, would like to add that the statement is not even
         | wrong ...
        
         | j2kun wrote:
         | I wrote a book based on this premise: www.pimbook.org.
         | 
         | The ebook is pay what you want.
        
         | edgyquant wrote:
         | I disagree because Math _is_ programming. All those symbols you
         | see map to a set of steps (a program.). It's just knowing what
         | subroutine every esoteric symbol stands for that's hard.
         | 
         | I will agree it's been more difficult learning math than
         | programming for myself as well: but that's because math is
         | geared and targeted for people who like doing symbolic logic by
         | hand. Math people think we're a level below them (we are in
         | some ways from a working perspective) so they tend to write off
         | complaints like this as us just wanting to make math more like
         | programming.
         | 
         | The fact we don't have a nice and intuitive way of writing math
         | via a keyboard is proof that these two fields, which should be
         | tightly coupled, are not on the same page.
        
           | BeetleB wrote:
           | I think the math you've been exposed to is mostly on the
           | computational side (compute an integral, solve an equation,
           | etc).
           | 
           | Much (most?) of math is quite different from it. Proving that
           | there is a well ordering of the reals, and simultaneously
           | proving that it is impossible to _show_ you such an ordering:
           | Very different from skills needed in programming.
        
             | edgyquant wrote:
             | I disagree. You're only able to prove that ordering of the
             | reals (and that it's impossible to show) because you are
             | computing the abstract structure underlying the reals
             | (which is based on some lower level ideas etc.) Just
             | because a problem is computationally hard with a step by
             | step CPU doesn't mean it isn't computation.
             | 
             | This is actually a problem of interest to me, so I've
             | definitely been exposed to it and the limits of modern
             | computation. But I'm not speaking strictly about the modern
             | day CPU.
        
               | bmitc wrote:
               | > You're only able to prove that ordering of the reals
               | (and that it's impossible to show) because you are
               | computing the abstract structure underlying the reals
               | (which is based on some lower level ideas etc.) Just
               | because a problem is computationally hard with a step by
               | step CPU doesn't mean it isn't computation.
               | 
               | The set of computable real numbers is countable and thus
               | has measure zero. In other words, almost all real numbers
               | are non-computable, and almost all has an exact
               | definition.
               | 
               | So you can't compute the real numbers unless you're
               | meaning something else by computing.
        
           | bmitc wrote:
           | > Math is programming.
           | 
           | That doesn't make any sense. What do you mean by that?
           | 
           | > I agree it's been more difficult learning math than
           | programming for myself as well: but that's because math is
           | geared and targeted for people who like doing symbolic logic
           | by hand.
           | 
           | Mathematics is not about symbolic logic. Mathematics is the
           | study of idealized structures, their properties, and their
           | relationships. Symbols are just a convenient shorthand. They
           | are not the mathematics in and of themselves.
           | 
           | > The fact we don't have a nice and intuitive way of writing
           | math via a keyboard is proof that these two fields are not on
           | the same page.
           | 
           | What does that have to do with anything? Although LaTeX and
           | the like are pretty decent at it, there's a lot of things we
           | can't do easily via a keyboard. Why is that a constraint on
           | anything or relevant?
           | 
           | Not trying to be provocative, but I honestly have little idea
           | what you're talking about.
        
           | constantcrying wrote:
           | >All those symbols you see map to a set of steps (a program.)
           | 
           | Simply not true. Most mathematical statements, e.g. proofs of
           | existence have no relation to a "program".
           | 
           | >math is geared and targeted for people who like doing
           | symbolic logic by hand.
           | 
           | No, it is not. There is absolutely nothing interesting about
           | symbol manipulation, it is always the least interesting part
           | of a proof. It usually is the part the author handwaves away,
           | while focusing on the actual interesting parts, the idea
           | behind the proof and the possible intuitions for them.
           | Textbook might include them, but as training and because you
           | need to be more explicit when teaching.
        
             | zozbot234 wrote:
             | A constructive proof of existence is _exactly_ a program.
             | (It might not always be a program for a Turing machine,
             | because  "constructive" and "computable" are not exactly
             | the same - but that's beside the point.) Even a non-
             | constructive proof of existence for _x_ can be significant
             | in a programmatic context; it tells you that you can posit
             | an oracle for _x_ (e.g. asking for it to be input by the
             | user, introducing further assumptions based on some special
             | case, etc.) without thereby crashing the program or causing
             | it to behave incorrectly.
        
               | constantcrying wrote:
               | >but that's beside the point
               | 
               | It seems to me that it is an important point though.
               | 
               | > Even a non-constructive proof of existence for x can be
               | significant in a programmatic context
               | 
               | Which has no relation whatsover to proofs and programms
               | being the same thing.
        
               | logarhythmic wrote:
               | Programs and proofs are the same thing though according
               | to the Curry Howard Correspondence, if I'm not wrong.
        
               | zozbot234 wrote:
               | A type-level program is still a program. Non-constructive
               | proofs are addressing the question "will this program
               | crash or go wrong if I extend it to do X, regardless of
               | how I achieve that?", which is exactly the domain of
               | type-level programming.
        
             | edgyquant wrote:
             | >Simply not true.
             | 
             | Okay. What is a proof other than a step by step explanation
             | for why something's true? You're getting caught up in
             | "program" when it's objectively the case that all math
             | follows a series a steps. A lot of those steps are
             | "handwavy" I'll give you that. That's not relevant to what
             | I said though.
             | 
             | >there is nothing interesting about symbol manipulation
             | 
             | Cool. You missed my entire point again. Math education is
             | geared towards a certain set of people who pick up on (and
             | gain an interest in) the language of math. Only once you
             | get to higher level math do you even start to get
             | alternative visualizations etc (at which point you've
             | weeded out a ton of people who would have benefited from
             | e.g. visualizing numbers as groups of shapes). There are a
             | million ways to teach math and we're leaving a lot of
             | people behind. That was my point
        
               | constantcrying wrote:
               | >Okay. What is a proof other than a step by step
               | explanation for why something's true?
               | 
               | Cooking instructions are a series of steps as well. Would
               | you also claim cooking, mathematics and programming
               | really are all the same thing?
        
             | hnews_account_1 wrote:
             | The first part of your answer is incorrect about
             | programming in a general sense (not the particular software
             | programming most of HN does). I push it so far back as to
             | call it programming in a computer science sense, which is
             | very simply just proof theory encoded into a system.
             | 
             | There is a reason Turing is considered one of the greatest
             | minds to ever live. He didn't just invent a concept. He
             | invented a completely new branch of science. We would've
             | gotten there eventually but his idea to solve the
             | Entscheidungsproblem using his machine was such a step
             | ahead of the times that we christened him the father of an
             | entire science.
        
               | defrost wrote:
               | Errr, Alonzo Church solved it first, Turing followed ..
               | and both of their independent methods were heavily based
               | upon similar earlier work by Kurt Godel, with Church also
               | incorporating ideas from Stephen Kleene.
               | 
               | There is no doubt that Turing was bright, very bright
               | indeed, but next you'll be claiming he cracked the Enigma
               | Code or something.
        
           | tsss wrote:
           | If you want to get technical then programming is also math,
           | provably so.
        
         | dysoco wrote:
         | > mathematics is orders of magnitude more intensive and
         | difficult than most programming
         | 
         | But what level of programming and mathematics are you comparing
         | here though? because college-level algebra and calculus is
         | really not that hard imho (once it "clicks" for you, but it's
         | the same for programming), and if we are comparing math as in
         | what you see in a BSc/Msc of Mathematics (or research-level)
         | then I agree it's hard but you have to compare for an
         | equivalent level of programming.
         | 
         | > simple fact that shows this is the amount of programmers who
         | have no formal training in engineering or computer science but
         | we're able to self-teach the concepts. The same cannot be said
         | of mathematics
         | 
         | I would blame it more on the fact that programming is a very
         | useful tool for people outside Computer-Science, it has very
         | direct applications and you can monetize it very easily, so
         | it's very likely that they might want to learn it, however,
         | rarely you see someone deciding to take Calculus just for the
         | sake of it if they never bothered with it in College.
         | 
         | Overall I agree with you, but personally I find math more
         | difficult, most people probably do but I don't think it's
         | inherently more difficult, it's just that people are less used
         | to study it.
        
           | nickelpro wrote:
           | I would hard disagree that undergrad level Analysis or even
           | just the trickier corners of vector calculus are within the
           | bounds of what programmers can easily pick up without
           | dedicated and guided study. Everybody's gangster until they
           | have to parameterize some bullshit helical structure in R3.
           | 
           | Comparable levels of programming, what we expect of CS
           | juniors, are regularly picked up by "the guy who is good with
           | Excel" in office settings as it's mostly a function of
           | experience and exposure, not theory.
           | 
           | And now my worthless anecdotal evidence: I self taught myself
           | into professional programming and it was a simple matter of
           | banging my head against a wall until shit started working.
           | The feedback loop, "did the thing crash or not", permitted me
           | to learn on my own. I wouldn't even begin to understand how
           | to self-teach myself Stokes Theorem or some shit, and have
           | zero ability to author the proofs required to reach the
           | conclusions higher level mathematics are built on.
        
             | hgsgm wrote:
             | [dead]
        
             | zozbot234 wrote:
             | > I wouldn't even begin to understand how to self-teach
             | myself Stokes Theorem or some shit
             | 
             | Input it into a proof assistant, and rely on the same sort
             | of feedback "does the computer accept your proof, or get
             | stuck". The hard job of formalizing stuff for this purpose
             | has seen significant progress, e.g. by the Lean mathlib
             | project.
        
               | nickelpro wrote:
               | I would quibble with whether this is exactly equivalent.
               | 
               | In programming I knew I needed to sort a list or find a
               | most efficient path because some practical problem I was
               | trying to solve demanded that I do that. Frequently I had
               | a basically crap but working independent solution before
               | I learned the names "EWD" or "A*". I independently
               | discovered that I needed virtual interfaces (before I
               | knew them by that name, "I wish pointers to parent
               | classes could call implementations in subclasses") _and
               | then_ discovered language facilities for polymorphism and
               | OOP.
               | 
               | Without formal or at least guided instruction I would
               | never think to move towards or discover "I wonder if
               | there's a relationship that makes these double integrals
               | of curls of vector fields easier to solve for".
               | 
               | Programming has a high coupling between necessity,
               | experience, and theory. In mathematics that coupling is
               | much, much, much looser. Self learners in programming
               | regularly re-discover and re-implement, typically less
               | efficiently, all sorts of fundamentals of CS. The
               | equivalent in mathematics rarely happens post-algebra.
        
               | nextos wrote:
               | I think your comparison is a bit unfair. Essentially, CS
               | is as hard as mathematics because _it is_ mathematics.
               | 
               | For example, take any good static analyzer that
               | implements abstract interpretation. It generally works
               | using Galois connections, which is just abstract algebra.
               | 
               | Dijkstra's algorithm or A* came pretty early in the
               | history of CS. It would be fair to compare their
               | difficulty to something similar in mathematics, say some
               | basic results in Euclidean geometry.
        
               | nickelpro wrote:
               | CS may be mathematics but programming certainly isn't
               | 
               | If you're discussing pure CS, the thing you can write
               | down in a book and for which a computer is a largely
               | theoretical device, sure CS is mathematics.
               | 
               | If we're talking about the practical reality that CS
               | majors in America today are trying to achieve, and their
               | undergraduate programs are trying to prepare them for,
               | that's becoming a working programmer and has very little
               | relation to mathematics.
        
               | __MatrixMan__ wrote:
               | I wish we'd just start issuing software engineering
               | degrees so it would be easier to get an actual computer
               | science education.
        
               | eternityforest wrote:
               | A* is already intermediate level programming. CS is math
               | because it's what we call the parts of programming that
               | are math.
               | 
               | But so much of programming isn't. It doesn't require deep
               | understanding, static analysers are advanced level things
               | that are way beyond what many working programmers ever
               | encounter.
               | 
               | I can't say I've ever seen "Real math" myself.
        
               | JadeNB wrote:
               | > Input it into a proof assistant, and rely on the same
               | sort of feedback "does the computer accept your proof, or
               | get stuck". The hard job of formalizing stuff for this
               | purpose has seen significant progress, e.g. by the Lean
               | mathlib project.
               | 
               | As a math teacher who disagrees with the premise of the
               | GGP post ("This couldn't be more wrong. ... I'm sorry,
               | but mathematics is orders of magnitude more intensive and
               | difficult than most programming"), and thinks that any
               | _good_ programmer can learn mathematics--of course there
               | are code wodgers out there who don 't really understand
               | their craft of programming, and so can't translate that
               | knowledge to facilitate an understanding of mathematics--
               | I think I also disagree with this. I've never tried it,
               | but I can't imagine someone learning about Stokes's
               | theorem in anything like this way. One of the many axes
               | along which I imagine this failing are that the state of
               | human readability in proof assistants is, well, let's say
               | it's less well developed than the, cough, stellar state
               | of the art in compiler error messages.
               | 
               | But, more importantly, you can, at least in principle,
               | know every single step in a proof of Stokes's theorem
               | without understanding in any real sense _why_ it 's true
               | --and a proof assistant in particular will force you into
               | the weeds of minutiae that absolutely do not help to
               | build any intuitive picture--and, even if you manage in
               | the process to piece together that understanding of why
               | it's _true_ , you will never thereby gain an
               | understanding of why it's _interesting_ (e.g., among
               | other things, its connections to physics and the entree
               | it offers to differential geometry).
        
               | zozbot234 wrote:
               | The flip side of a proof assistant's 'minutiae' (and
               | there's plenty of room to disagree wrt. whether paying
               | attention to those minutiae helps with gaining a better,
               | more accurate intuition!) is its ease of refactoring a
               | proof. A proof assistant can instantly tell you whether a
               | seemingly nicer, better-abstracted proof B really manages
               | to prove the same thing as proof A, something that's very
               | hard to do without the use of precise formalized
               | statements and automated checking.
        
               | dinkumthinkum wrote:
               | Self teach Stokes Theorem by inputting it into a proof
               | assistant? Are you serious? That is very inefficient; the
               | OP was talking about learning the kind of vector calculus
               | taught in first calculus sequence. I think just watching
               | a short YouTube video and doing a few exercises will work
               | and is a proven method. Proofs of theirebs are very often
               | much more complicated than applying them (understatement
               | intended).
        
               | zozbot234 wrote:
               | If you don't understand the proof of any theorem, you
               | haven't really "learned" it in any real sense. Wrt. doing
               | computational exercises in vector calculus, that requires
               | knowing the "rules of the game" which is also something
               | that you can test precisely in a proof assistant.
        
               | dinkumthinkum wrote:
               | Many proofs of theorems in calculus would require
               | topology to understand. You're suggesting that you cannot
               | be competent in vector calculus without knowing the
               | proofs at a professional. I think I, along with probably
               | everyone, will have to disagree with that.
        
               | solveit wrote:
               | First, of course you can understand a theorem without
               | knowing the proof! Uniqueness of prime factorization, for
               | instance, is notoriously tricky to prove, but it would be
               | a stretch to say people who haven't majored in maths
               | haven't learned it in _any_ real sense.
               | 
               | Second, even if you wanted to understand the proof of a
               | theorem, doing it with a proof assistant is an atrocious
               | way to go about it.
        
               | dysoco wrote:
               | Do you have more information on this approach? Sounds
               | very interesting. I've read and toyed a little with
               | things like Lean and I'm interested in that field but the
               | barrier seems a bit high (without pre-existing knowledge)
               | to just "input" a theorem and toy with it.
        
             | geysersam wrote:
             | I think you're hitting the nail on the head here. Something
             | about the learning process makes programming much easier to
             | pick up.
             | 
             | What if we had something similar for mathematics?
             | 
             | Rapid feedback, error messages, maybe even linters and
             | highlighting for the "mathematical syntax".
             | 
             | I've though about this before and I think tools like this
             | could unlock math for a lot of people, and also increase
             | the effectiveness of professional mathematicians.
             | 
             | When learning math / seeing other learning math I've
             | noticed that simple errors such as typos often slow down or
             | hinder understanding of the subject.
        
               | __MatrixMan__ wrote:
               | I'd love to play around with such tools, but I think
               | they'd only get you so far before they'd start to become
               | a hinderance.
               | 
               | The linter in mathematics is whether the other
               | mathematician (whoever you're proving _to_ ) knows what
               | you mean. If you're locked into a rigidly defined syntax,
               | an obvious line of questioning is: what's not expressible
               | in this syntax?
               | 
               | I fear that by the time the tooling was agreed on, built,
               | and taught in schools, you'd have something like APL,
               | which might be cool to code in, but from which the
               | mathematical conversion would have moved on a while ago.
               | Efforts like that, after all, are how math becomes
               | engineering.
               | 
               | Consider, for instance, Russel's theory of types, which
               | was interesting math at the time and now strikes the
               | student with an engineering background as "pretty much
               | just Java" (or any "normal" statically typed language).
        
               | eternityforest wrote:
               | If you're learning math for career reasons rather than
               | just pure curiosity, engineering is the main/possibly
               | only place you'd use it besides statistical analysis.
        
               | __MatrixMan__ wrote:
               | Yeah that sounds about right. I was more musing about the
               | philosophical boundary between math and engineering (math
               | being a creative pursuit and engineering being about
               | outcomes).
               | 
               | I can't quite pin it down, like with a definition, but
               | I'm tempted to say that if it has a linter it's not math
               | anymore, even if it once was.
        
               | eternityforest wrote:
               | Is it the learning process, or the subject itself?
               | 
               | Programming works with manmade abstractions, carefully
               | designed to have very few interactions, keep mutable
               | state contained, and to have all the parts structured in
               | a hierarchy without recursion.
               | 
               | In math you have systems of equations that all reference
               | each other. And they all happen at the same time because
               | there's no steps and time or lines of code just 5
               | equations that all interact.
               | 
               | The atomic pieces are much larger and tied together and
               | it inherently seems to require being able to fit
               | nontrivial ideas in your head.
               | 
               | Programming lets you design a complex architecture one
               | tiny piece at a time without considering other pieces.
        
               | kthielen wrote:
               | I think this is the goal of proof assistants based on the
               | Curry-Howard isomorphism, which the original author
               | thought to denigrate for some reason.
        
               | [deleted]
        
               | deadbeef57 wrote:
               | Take a look at the Natural Number Game! [1] It does
               | exactly that: "Rapid feedback, error messages, maybe even
               | linters and highlighting for the "mathematical syntax"."
               | 
               | After you get the hang of the system, you can play with
               | the interactive theorem prover behind it: Lean [2].
               | There's also plenty other interactive theorem provers
               | (Coq, Isabelle, HOL, Mizar, Metamath, ...) but Lean has a
               | lot of traction amongst mathematicians at the moment.
               | 
               | There are no limits to the math you an do with this.
               | There is mathlib [3], the main mathematical library. It
               | covers a lot of undergraduate material [4], and plenty of
               | stuff beyond that [5]. The community has even covered
               | some state of the art research math in Lean [6a, 6b].
               | 
               | You are very welcome to hang out on the leanprover zulip
               | [7]] and ask questions about the Natural Number Game or
               | anything else that is Lean-related.
               | 
               | [1]: https://wwwf.imperial.ac.uk/~buzzard/xena/natural_nu
               | mber_gam... [2]: https://leanprover-community.github.io/
               | [3]: https://github.com/leanprover-community/mathlib [4]:
               | https://leanprover-community.github.io/undergrad.html
               | [5]: https://leanprover-community.github.io/mathlib-
               | overview.html [6a]: https://github.com/leanprover-
               | community/lean-liquid [6b]:
               | https://www.nature.com/articles/d41586-021-01627-2 [7]:
               | https://leanprover.zulipchat.com/
        
               | sillysaurusx wrote:
               | What a creative, delightful solution. I encourage you to
               | pursue this!
        
           | [deleted]
        
           | kovac wrote:
           | College-level means undergraduate-level? If so, how is
           | algebra/calculus not that hard? Abstract algebra is one of
           | the hardest stuff I've come across. Calculus? Do you think
           | it's not that hard to prove convergence/bounds/limits of
           | random series and sequences... I agree though that calculus
           | is not that hard, compared to the rest.
           | 
           | Programming is child's play compared to undergraduate
           | mathematics taught in math departments. It's important that
           | you take a module from the math department, not from a
           | physical science or engineering department if you want to
           | experience what it is like.
        
             | kthielen wrote:
             | > Programming is child's play compared to undergraduate
             | mathematics taught in math departments.
             | 
             | One thing you might learn in math is to avoid making
             | overgeneralized statements that you can't support.
             | 
             | A valid substitution in your statement for "programming" is
             | writing a compiler. And for "undergraduate mathematics
             | taught in math departments", basic differential calculus.
             | 
             | Yet we regularly teach smart high school students and
             | first-year undergraduates calculus, and almost never try to
             | teach them to write a compiler, contradicting your
             | proposition.
             | 
             | But what do I know? I'm just a dumb programmer. I can't
             | read your mind, so maybe you had something a little more
             | specific you wanted to say.
        
           | throwoutway wrote:
           | Calculus is significant more difficult and requires many
           | Times more studying than algebra
        
           | eternityforest wrote:
           | For practical purposes, a fair comparison would be "a useful
           | amount of programming" vs "A useful amount of math".
           | 
           | You can get hired after a brief boot camp, although it's not
           | common.
           | 
           | A useful amount of math is like, ordinary differential
           | equations in engineering school, since apps have taken over
           | most use cases for simpler math.
           | 
           | The only direct use is to learn to access the "New way of
           | thinking" math people talk about, and even that seems harder
           | than making detailed to do lists.
        
       | anthk wrote:
       | Read The Computational Beauty of Nature and compile the
       | associated examples:
       | 
       | https://github.com/gwf/CBofN
        
       | conformist wrote:
       | Feels like the "modern" data science & python hacker/plumber is
       | typically closer to the Fortan and linear algebra side these
       | days?
        
       | actinium226 wrote:
       | As someone who recently decided to forego future software
       | engineering jobs in favor of an Applied Math PhD, this article is
       | giving me some great confirmation bias.
        
       | cod1r wrote:
       | CS/programming for me was a good balance between practical
       | application and theory. Spending more time programming and
       | getting better at programming will probably land you a higher
       | salary than if you were to spend your time learning complex math
       | which you might/might not use.
        
       | magicloop wrote:
       | When I first was learning to program I was shocked at the logical
       | mistakes and errors I was making. I thought these were an initial
       | bout of bad luck that would pass. But no! And I learned the craft
       | of debugging before my programming hobby took could really take
       | off.
       | 
       | Programming takes high precision thinking. Learning mathematics
       | is what has tuned my mind to better, more precise, thinking. So I
       | am grateful for this and feel I am a much better programmer for
       | it. It also seems to sharpen up ones debugging skills.
       | 
       | There are other things that help also. Second, I'd say learning
       | to write well helps a lot also. Programming is communication (by
       | way of the source code you leave behind for others to read and
       | interpret). A deft hand for exposition sits at the centre of good
       | naming practices for code.
        
       | jll29 wrote:
       | Mathematics is different from programming as an activity and
       | ontologically.
       | 
       | Activity-wise, mathematics is about intuiting and proving
       | theorems to progress the frontier of knowledge about abstract
       | mathematical objects (groups, probability distributions,
       | triangles, matrices, knots, ...) and their interconnections. This
       | has little to do with programming, but proofs by mathematical
       | induction (German "vollstandige Induktion" = "complete(d)
       | induction"), which is actually - like all mathematics - a
       | deductive method, can be better understood after understanding
       | recursion and loops. It is also very hard.
       | 
       | Ontologically, for instance, "x = y" in mathematics means "the
       | unknown value x equals the value y", and that is true always, at
       | any time (until the context changes from one theorem/proof to
       | another, when x and y may be 'recycled' without saying it
       | explicitly). In contrast, "x = y" in (e.g. Python) programming
       | means, "look up the value stored in the memory location labeled y
       | and copy that value to the memory location labeled x." This is
       | rarely said in textbooks and tutorials, so I tend to make a point
       | of stressing this when teaching programming, in particular to
       | non-computer scientists.
       | 
       | What the OP refers to is perhaps more applied mathematics than
       | mathematics, though: using mathematics as a modeling tool.
       | 
       | I like the OP, but what is missing from it is the recognition
       | that a lot of what he talks about is already happening in machine
       | learning: any machine learning is mathematically a numeric
       | optimization process, so all these tools like Tensorflow or
       | PyTorch under the hood use what the OP calls "FORTRAN" way, often
       | implemented in C++ and sometimes actual battle-tested FORTRAN
       | libraries (e.g. via NumPy
       | https://numpy.org/doc/stable/user/building.html#accelerated-...).
        
       | wwweston wrote:
       | > Rather, mathematics is a tool for understanding phenomena in
       | the world: the motion of the planets, the patterns in data, the
       | perception of color, or any of a myriad things in the world that
       | might be understood better by manipulating equations.
       | 
       | OK, so on one hand I love this point, and I'd love for it to be
       | more broadly understood and appreciated, especially since my
       | educational background is Mathematics and my CS has been
       | practical, half self-taught, and frankly patchier than I'd like.
       | 
       | But:
       | 
       | > Fortran-school programmers view the computer as an advanced
       | tool for doing mathematics.
       | 
       | If we're understanding "mathematics" as numerical/analytical work
       | + engineering ( _maybe_ applied mathematics) I can see this.
       | 
       | But the Lisp programmer talking in terms of recursive fibonnaci
       | definitions is doing something that can quite adequately be
       | described as mathematics, though it's also mathematics to figure
       | out the closed form and understand why you might or might not use
       | it. Not sure if it's mathematics to simply know a given closed
       | form, though it's something mathemeticians sometimes do.
       | 
       | And I'm more skeptical that Lisp programmers _don 't_ do all this
       | stuff: recursive demonstrations of fibonacci numbers are usually
       | in textbooks _to teach recursion_ rather than present an optimal
       | way of computing fibonacci numbers, because it 's simpler than
       | starting with dynamic programming, and you're gonna need
       | recursion to effectively solve _some_ problems.
       | 
       | Not only that but a higher level, I think that a lot of
       | developers (Lisp included) are already reaching into the very
       | mathematical skills of domain modeling at one level or another --
       | often first with a different set of tools than a mathematician
       | might bring, but a similar kind of work. If Miller's overall
       | point is that we all could do a better job with more of a
       | mathematician's tools, I agree, but then again as someone who
       | came into industry with a math undergrad's tools the utility of
       | those might be overemphasized here.
       | 
       | Or maybe I just don't appreciate what I already have.
        
         | userxyz wrote:
         | I think the author is making two points among others:
         | 
         | 1. LISP based text/books always present the same two cliche
         | examples
         | 
         | 2. They never go beyond (1) given how much they talk about
         | recursion. He mentions sqrt of 5 in the explicit formula of
         | Fibonacci sequence and how that could be explored in more
         | detail to find out where that comes from. For that you need to
         | know [0]. That's part of a larger suit of theorems on
         | sequences. This stuff together with theory that surrounds the
         | Gamma function can easily take up a whole book. But there are a
         | ton of books that treat either one really nicely: most
         | textbooks on discrete math and real analysis.
         | 
         | [0] https://ibb.co/TR1f5Gz
        
           | zozbot234 wrote:
           | Non image-based link: https://en.wikipedia.org/wiki/Linear_re
           | currence_with_constan... (Also,
           | https://en.wikipedia.org/wiki/Constant-
           | recursive_sequence#Cl... )
        
           | userxyz wrote:
           | I see someone disagreed with me. Not sure about what, but
           | just in case I will show how to derive a formula for
           | Fibonacci using the above. You be the judge if it belongs in
           | a LISP programming textbook, even though this particular
           | result is very elementary.
           | 
           | Recurrence relation for Fibonacci is F_k = F_(k-1) + F_(k-2)
           | for k=> 2 with F_0 = F_1 = 1. Also, t^2 - t - 1 = 0 implies t
           | = (1 + sqrt(5))/2, (1 - sqrt(5))/2. Both of these facts
           | satisfy the conditions of the linked theorem and so we have
           | F_n = x((1 + sqrt(5))/2)^n + y((1 - sqrt(5))/2)^n for n=>0.
           | 
           | Now F_0 = x + y = 1 and F_1 = x(1 + sqrt(5))/2 + y(1 -
           | sqrt(5))/2 = 1 from which it follows that x = (1 +
           | sqrt(5))/2sqrt(5) and y = -(1 - sqrt(5))/2sqrt(5) meaning
           | 
           | F_n = (1 + sqrt(5))/2sqrt(5)((1 + sqrt(5))/2)^n + (-1 +
           | sqrt(5))/2sqrt(5)((1 - sqrt(5))/2)^n.
           | 
           | This math (complete with a universe of theorems and their
           | proofs) can obviously be extended in many different
           | directions in such a way that it can take over your whole
           | book.
        
             | wwweston wrote:
             | I don't think anyone finds recurrence relations, closed
             | form expressions, or their derivation controversial or
             | disagreeable in any way.
             | 
             | On the other hand, the implication that Lisp textbooks --
             | or other language texts that use fibonacci or like examples
             | for recursion examples -- shouldn't be using simple
             | recursive definitions as an illustration if there exists a
             | closed form may well raise some eyebrows. What do you want,
             | Collatz Sequences? Additionally, there's an air of
             | attacking the sophistication of devs who choose Lisp
             | specifically, which is the kind of thing that people
             | frequently _do_ find disagreeable (even _if_ there 's a
             | reasonable case for it).
             | 
             | Fibonacci and other linear recurrence relations are used
             | because they're simple and often familiar intros that can
             | help conceptualize the way recursion can reduce problems to
             | smaller versions of themselves (which is very much
             | mathematical thinking). They're not there because they
             | represent limits of how Lisp devs generally do or should
             | think.
        
               | userxyz wrote:
               | > On the other hand, the implication that Lisp textbooks
               | -- or other language texts that use fibonacci or like
               | examples for recursion examples -- shouldn't be using
               | simple recursive definitions as an illustration if there
               | exists a closed form may well raise some eyebrows.
               | 
               | I didn't imply that. I think the author laments the lack
               | of math in LISP programming books beyond a couple of
               | cliched examples he gave, well the "simple recursive
               | definitions". He is not saying you shouldn't be using
               | them, he is saying that is not adequate. That's too
               | little. He is saying LISPers should go beyond that. My
               | point was that you can definitely go above and beyond
               | that into the math territory complete with coherent body
               | of theory(a bundle of theorems and their proofs), but
               | that will take you way off course. Especially, given that
               | regular math textbooks contain all the relevant info. I
               | am not even arguing the rest of what you said.
        
       | graycat wrote:
       | I was a "programmer", and well paid at the time, but also had a
       | good background in ugrad plus some in pure/applied math.
       | 
       | The math helped, was enough help to be a crucial difference and
       | put me way ahead of the pack, that is, everyone else around. The
       | math I did was to solve problems in the job I had. The job was as
       | a programmer or other computer guy title, but I saw the problems
       | and used math to attack them successfully.
       | 
       | So much for some generalizations. Some examples are needed:
       | 
       | Example 1: One afternoon Fred Smith, founder, COB, CEO of FedEx,
       | stumbled out of his office, tired, frustrated saying "we need a
       | computer". He had just been trying to schedule his fleet of
       | airplanes. Soon the BoD was also concerned, so concerned that
       | crucial, necessary equity funding was seriously at risk.
       | 
       | A guy I knew in ugrad physic class called me. At the time I was
       | being a computer guy at Georgetown U. and also teaching courses
       | in computer science. Several of us met in a conference room in
       | the library to discuss what to do about the scheduling. There was
       | lots of noise. Finally I announced that I would design and write
       | the software. I got an account on a time sharing service offering
       | CP67/CMS (VM/CMS) computing and wrote the software in my favorite
       | language, then and now, PL/I.
       | 
       | Later in Memphis, one evening SVP Roger Frock and I used my
       | software to develop and print out a schedule for the full planned
       | fleet. The next day two representatives of Board Member General
       | Dynamics went over the schedule and announced "It's a little
       | tight in a few places, but it's flyable." The BoD was happy, and
       | the funding came. Smith's remark was that the schedule "solved
       | the most important problem" facing the company.
       | 
       | Role for math? Apparently I was the only one around who could see
       | that calculations of great circle paths was just the the law of
       | cosines for spherical triangles and to do the vector calculations
       | to handle winds.
       | 
       | Right, not much math was involved, but the math was crucial, and
       | I was the only one around who had it.
       | 
       | Example 2: At Georgetown a computer science prof got some public
       | code for some statistical operations, wrote a main program to
       | call that code, and used the result in teaching a course in
       | statistics. In his testing, three of the public routines had
       | problems. Two of the problems I fixed with just some PL/I tricks
       | with memory and some algorithms from Knuth. For the third, there
       | were numerical problems, and I solved those with a version of
       | orthogonal polynomials. Not much math, but the math solved the
       | problems the prof saw, and I was the only one around who knew
       | that math.
       | 
       | Example 3: I was in a software house, part of KMS (early
       | connection with laser fusion), and bidding on some software the
       | Navy wanted. Part of the work was Nyquist sampling, the fast
       | Fourier transform (FFT), power spectral estimation, digital
       | filtering, etc. I had been working close to all that due to
       | working with the FFT, got the Blackman and Tukey book on the
       | statistics of power spectral estimation, quickly wrote some
       | sample code, in PL/I, illustrating how to do much of what the
       | Navy wanted in the bid, showed the code and its output to one of
       | the Navy engineers, and presto, bingo KMS got coveted "sole
       | source" from the Navy. My work with the math put our software
       | house far ahead of the software houses we were competing with.
       | 
       | Example 4: The BoD at FedEx wanted some revenue projections.
       | People around the office had hopes, intentions, dreams, etc. but
       | nothing rational or convincing. We knew the current revenue and
       | the revenue from the full, planned fleet. So, the projections
       | were an interpolation between those two. Argue that the revenue
       | would grow by current customers influencing customers to be so
       | that the rate of growth would be proportional to the number of
       | current customers doing the influencing and the number of
       | customers to be being influenced. So, at time t, let the revenue
       | ($ per day) be y(t), the current time t = 0, the current revenue
       | y(0), and the planned revenue b. Then for some constant of
       | proportionality k, we should have
       | 
       | d/dt y(t) = y'(t) = k y(t)(b - y(t))
       | 
       | So, this is a first order, linear, ordinary differential equation
       | initial value problem. There is a closed solution based on,
       | right, exponentials. It is just calculus to solve the equation. I
       | did that, picked a reasonable k, drew a graph, and, ..., in short
       | this work kept the BoD from _collapsing_ and saved the company.
       | 
       | Calculus. Gee, just calculus. My big advantage was that I
       | remembered calculus (quite well, and way beyond this problem) and
       | was able to formulate the problem as calculus and solve the
       | differential equation.
       | 
       | Right, the solution is a _lazy S curve_ and is related to some
       | models of Covid growth.
       | 
       | There were other examples in 0-1 integer linear programming, some
       | original work in mathematical statistics, continuous time,
       | discrete state space Markov processes, etc.
       | 
       | Here is how that can go: Are working in computing in a company,
       | see a problem the company has, see some math that provides a
       | solution, and, by writing some software and using available data,
       | proceed with some success. Maybe no one else in the company sees
       | the problem because they don't know enough math to see a math
       | formulation and solution.
       | 
       | It appears that commonly where people are doing a lot of
       | important work, there are important problems that need solving,
       | are being neglected, and where some math can be the key tool in
       | formulation and solution. A person with that math may be unique
       | in the company.
       | 
       | But don't hold your breath looking for job descriptions that
       | mention such usages of math. Uh, why not? Did I mention that the
       | person with the math might be unique in that organization.
       | 
       | Also draw from the two old Disney movies _Snow White_ and
       | _Cinderella_ and see the possible roles of jealousy and sabotage.
       | In my experience, Disney was 100% correct.
        
       | rented_mule wrote:
       | I came into a software engineering career from a B.S. in
       | Mathematics. I had no idea how thinking like a mathematician
       | dominated my approach to engineering until I figured out that not
       | everyone develops software the same way - that was 25 years into
       | my career.
       | 
       | To me, the key leap of understanding in a mathematics education
       | is realizing that mathematical proof isn't about clever,
       | convincing arguments that have a high probability of being true.
       | Mathematical proofs are truth preserving operations that require
       | you to understand and document all the assumptions needed to
       | guarantee that truth is preserved throughout. It's about
       | understanding exactly what you know and, more importantly, what
       | you don't know but that you need to be true in order to guarantee
       | truth. And "guarantee" here does not mean "very very very high
       | probability." It means "exactly zero exceptions, given that the
       | explicitly documented assumptions hold." A mathematics education
       | goes on to give lots of practice identifying these assumptions in
       | various ways and in various domains.
       | 
       | This line of thinking has served me well as an engineer. I almost
       | never go as far as formal methods or using full mathematical
       | rigor. But I do try to understand the assumptions I'm making and
       | whether those assumptions are likely to hold in the application
       | domain. For example...
       | 
       | I assume reading from disk repeatedly (vs. preloading into RAM)
       | is fast enough for my use case, but I need to test that
       | assumption. Write a quick test... it's fast enough on my laptop's
       | SSD. But I'm going to deploy to spinning disks and I'm doing a
       | lot of seeking - better test there as well. Nope, too slow. If
       | build a simple index of the data, is it fast enough? Write a
       | quick test... yep, so I don't need to deal with cache eviction
       | strategies. Oh, but I'm assuming the tests I wrote are
       | representative, so I need to give myself a couple of orders of
       | magnitude of headroom to be pretty sure.
       | 
       | This is not mathematical rigor, but it's leveraging a lot of that
       | kind of thinking. My entire design/code/debug lifecycle is
       | constructed around identifying and testing assumptions like this.
       | 
       | When I realized this came from my background in math, I started
       | trying to figure out how some of the people around me were doing
       | things when they had little or no math background (i.e., not
       | enough to have a ton of practice comprehensively identifying
       | assumptions). Some had come to a very similar process, just not
       | through math (many with graduate degrees in biology or
       | experimental physics also had a pretty direct route to similar
       | enough thinking). Some were much more intuitive about things - I
       | don't think I could develop anything that way, but they were very
       | good at their job. I think this is part of why UI/UX work was
       | always so frustrating for me - the assumptions run so deep that
       | simplifying through intuition is constant, and testing (e.g.,
       | through user facing experiments) is expensive.
       | 
       | I'd love to see deeper studies into the range of cognitive
       | practices employed by various software engineers and how that
       | differs across educational backgrounds and application domains.
       | How does that differ from graphic designers, accountants, EEs,
       | mechanical engineers, etc?
        
       | Someone wrote:
       | > _it is possible to be a productive and well-compensated
       | programmer -- even a first-rate hacker -- without any knowledge
       | of science or math. But I think that most programmers who are
       | serious about what they do should know calculus (the real kind),
       | linear algebra, and statistics_
       | 
       | Not surprisingly, those happen to be branches of mathematics with
       | lots of applications. I would argue that programmers should know
       | them, but only superficially, as in having an understanding of
       | what mathematical properties mean in real life and in knowing how
       | to compute them, without having to understand why and when those
       | computation steps work.
       | 
       | For example, when computing a double integral, changing
       | integration order is only allowed under specific circumstances (h
       | ttps://en.wikipedia.org/wiki/Order_of_integration_(calculus...).
       | 
       | In a math exam, you'd have to show these properties hold before
       | switching integration order. If you do that well and then make a
       | slight mistake in your subsequent computation, you get a tiny
       | point deduction, but still easily pass your exam.
       | 
       | In physics, you'd just switch order, compute the answer, check it
       | with reality, and if it doesn't look wrong, declare you solved
       | the problem (that may be slightly exaggerated, ;-)).
       | 
       | The check with reality is important even if switching integration
       | order is OK because, if you make a slight mistake in your
       | subsequent computation and design a bridge based on the result,
       | people may die.
       | 
       | The point is: for physicists, it's not the journey that's the
       | reward, but the destination. And yes, ideally they'll know when
       | their tool won't work, but physicists rarely encounter the weird
       | constructs that mathematicians consider in their job such as
       | functions that are continuous, but nowhere differentiable
       | (https://en.wikipedia.org/wiki/Weierstrass_function), or
       | discontinuous at every rational number, but continuous elsewhere
       | (https://en.wikipedia.org/wiki/Thomae%27s_function), and there's
       | always the reality check at the end that will catch (most)
       | errors.
       | 
       | > _Rather than viewing mathematics as an advanced tool reserved
       | for extremely specialized computer applications, Fortran-school
       | programmers view the computer as an advanced tool for doing
       | mathematics._
       | 
       | Here, I'd say Fortran-school programmers view the computer as an
       | advanced tool for doing _computations_. That's not surprising;
       | Fortran-style programmers are physicists. They care about the
       | result. Mathematicians don't, at least not in the sense of
       | something that's useful in the physical world.
        
       | javaunsafe2019 wrote:
       | Maybe we could first try distinguish both. So when I think about
       | it, software development is mostly about the application of
       | mathematics and transformation of information whereas mathematics
       | are about describing the world in a formal manner.
        
       | rsrsrs86 wrote:
       | After reading the article, I am confused. I use types and
       | categories frequently, and how is that not math?
        
       | leephillips wrote:
       | I really like this article, but there's something the author is
       | not considering:
       | 
       | https://lee-phillips.org/lispmath/
        
         | mschoenert wrote:
         | As pointed out above - the most efficient to compute large
         | fibonacci numbers is to compute the matrix power
         | [[1,0],[1,1]]^n using repeated squaring. Or you could use the
         | known identities to compute Lucas numbers, which amount to the
         | same thing. The lispmath talks about computing fib(40000) in
         | 100..200 ms, the repeated squaring approach computes the same
         | number in < 5 ms (on my not very powerful machine).
        
       | JoeyBananas wrote:
       | I define a hack as a use of something in a way it was not
       | intended to be used to achieve a goal. This definition is missing
       | from this essay, and the ones it does present are poor IMO. Under
       | my definition, hacking falls entirely in domain of the Lisp
       | programmer. Fortran engineers are the ones who get fired for
       | hacking.
       | 
       | There is nothing inherently wrong with the "Fortran" approach.
       | Sometimes, it is necessary. But it's clear that the Lisp-style
       | solution is always preferable unless proven inadequate for the
       | problem at hand.
        
       | revskill wrote:
       | As i see, maths is more about proof, and rediscovery new
       | theorems, than to write "arbitrary, unproven proof". It's more
       | like 100% unit test coverage of your codebase (harder than
       | writing the code).
        
       | hayley-patton wrote:
       | Yes, the numeric language does numeric things. But these examples
       | of closed form solutions ignore that numbers on computers are not
       | the usual mathematical objects, rather having finite size and
       | precision, and so it is hard to say immediately if these
       | solutions using floating-point arithmetic provide the same
       | precision. Of course the precision can be calculated and improved
       | with analysis, still, but this falls under "it doesn't work but
       | it's fast" territory (unless the limited precision is acceptable;
       | I'd personally keep the result as a float then to expose that to
       | the client of these functions).
       | 
       | I would be remiss not to mention the following story:
       | 
       | There is a story that Ken Iverson, the inventor of APL, was
       | passing a terminal at which a Fortran programmer had just typed:
       | I = I+1
       | 
       | Ken paused for a moment, muttered "no it doesn't", and passed on.
        
         | JBiserkov wrote:
         | Cool story!
         | 
         | Only way I = I + 1 is if I is infinity.
        
           | hayley-patton wrote:
           | There is some irony in juxtaposing a statement on floating
           | point arithmetic before; I = I + 1 if I is a sufficiently
           | large float.
        
       | tromp wrote:
       | The suggested "efficient" solutions for fibonacci and factorial
       | only work on small inputs as they return the result as a long
       | int. For these small instances the use of floating point
       | functions like pow, sqrt, and exp is likely less efficient than a
       | simple iterative solution. For larger instances using bignums as
       | output, floating point computations do not even offer an
       | alternative.
       | 
       | It's true though that mathematics offers faster integer only
       | (e.g. matrix based) methods of computing fibonacci.
        
         | zozbot234 wrote:
         | The matrix based method for Fib can be understood as applying
         | the closed-form solution over Q(sqrt5). OP seems to miss this
         | point.
        
           | mschoenert wrote:
           | My thoughts at this point in the original article was:
           | 
           | Well - if you want to demonstrate how mathematics helps here,
           | then you should mention that computing the n-th fibonnaci
           | number can be computed as the n-th power of the matrix
           | [[1,0],[1,1]], and that the most efficient way to compute
           | powers (in any associative domain) is the repeated squaring
           | algorithm.
        
             | bibanez wrote:
             | There are many ways to obtain the formula mentioned in the
             | article. One of them is by diagonalizing this matrix and
             | then applying exponentiation. How can another algorithm be
             | better than constant time in the most general case?
        
               | mschoenert wrote:
               | No - there isn't really an O(1) solution. And the reason
               | is that the Fibonacci numbers grow without limit. So
               | there can't be an O(1) algorithm - even just writing down
               | the answer takes O(N) - because the answer has O(N) bits.
               | 
               | Concretely Fibonacci(1480) is the largest Fibonacci
               | number that fits into a double. So for higher Fibonacci
               | numbers you need to compute this with arbitrary size
               | integers (or floats). And then look at it in terms of bit
               | complexity (i.e. the time to compute a product grows with
               | the size of the integers).
               | 
               | Put differently. The "constant time" algorithm only works
               | for N up to 1480. And if you limit N, then it doesn't
               | really make sense to talk about the asymptotic
               | complexity.
               | 
               | I believe the optimal algorithm is to compute the
               | Fibonacci number by computing the N-th power of the
               | matrix [[1,1],[1,0]], and compute the power using the
               | repeated squaring algorithm. There are alternative
               | formulations of that using identities for Fibonacci or
               | Lucas numbers, but those identities basically correspond
               | to squaring the matrix.
               | 
               | If you really want the asymptotically fastest algorithm
               | you must use the fastest algorithm for integer
               | multiplication (Harvey and van der Hoeven's).
               | 
               | But even with the naive multiplication for arbitrary size
               | integers you can compute Fibonacci(1000000) - which is a
               | number with more than 200'000 digits - in less than a
               | second. ;-)
        
         | BeetleB wrote:
         | Indeed, I kind of stopped reading the article there.
         | 
         | The other issue is his picking on Lisp programmers with this
         | example. If you open books on programming using C, it almost
         | always will have either the iterative or the recursive solution
         | - not the closed for one. So why is he picking on Lisp
         | programmers in particular?
        
       | jdkee wrote:
       | "Again, no recursion is required as long as one knows that a
       | factorial is actually a special case of the gamma function. (The
       | implementation of log-gamma is usually a polynomial approximation
       | which requires constant time to evaluate.)"
       | 
       | A prime idea behind using recursive techniques is that for many
       | complex problems you do not have to know the "special case" as
       | you can break complex problems into simpler pieces that can be
       | solved via recursion.
        
         | adalacelove wrote:
         | I would be surprised if there is not some kind of loop in the
         | code that is used to evaluate the gamma function. You can also
         | define factorial like for example the number of different
         | permutations of any set of a given size.
        
           | texaslonghorn5 wrote:
           | outside of edge cases, c++ lgamma (log of gamma) uses Lanczos
           | iteration with 8 iterations and gamma is just exp(lgamma)
        
       | stealthcat wrote:
       | Seems like the so called Lisp hackers are Common Lisp users.
       | 
       | Before Matlab was cool, Lisp is VERY maths-heavy and engineering-
       | heavy. Symbolic equation solvers, robot controls, neural nets,
       | etc.
       | 
       | Even Julia which is very Matlab-like has roots to Lisp.
        
       | adamnemecek wrote:
       | I think that the most important idea of math, programming,
       | physics etc is the idea of fixed points which is predicated on
       | the idea of nilpotence.
       | 
       | Fixed points go by many names like invariance, spectra,
       | diagonalization, embedding, braids etc.
       | 
       | By fixed point I mean something like the "Lawvere's fixed point
       | theorem".
       | https://ncatlab.org/nlab/show/Lawvere%27s+fixed+point+theore...
       | 
       | I have a braindump on this https://github.com/adamnemecek/adjoint
       | 
       | I also have a discord https://discord.gg/mr9TAhpyBW
        
         | layer8 wrote:
         | Corrected link:
         | https://ncatlab.org/nlab/show/Lawvere%27s+fixed+point+theore...
        
           | adamnemecek wrote:
           | Fixed.
        
             | lkuty wrote:
             | Point.
        
         | [deleted]
        
       | strangattractor wrote:
       | Kind of agree but my argument would be that solving math problems
       | exercises the same mental muscles that programming uses and vice
       | versa. Doing one improves the other. Saying that it is necessary
       | or essential is a false dilemma. They are complementary. Is
       | computation mathematically based - that seems obvious. Does
       | programming get done despite programmers lack of understanding
       | the math of computation - obviously quite a bit.
        
       | cs702 wrote:
       | "Writing software" = "writing down math".
       | 
       | Consider:
       | 
       | * "Writing software" means arranging symbols (bits in a machine
       | language, UTF or ASCII characters in a high-level language) in
       | certain permitted ways, to transform an input sequence of symbols
       | (e.g., a stream of byte values representing user actions from a
       | video game controller) into an output sequence of symbols (e.g.,
       | byte values representing pixel RGB colors for display on a
       | screen).
       | 
       | * "Writing down math" (e.g., to prove something, or to solve a
       | problem) means arranging symbols ('x', '2', '+', etc.) in certain
       | permitted ways, to transform an input sequence of symbols
       | (representing mathematical notions) into an output sequence of
       | symbols (representing other mathematical notions). Turing,
       | Church, Curry, Godel, and many others realized this in the 1920's
       | and 1930's.
       | 
       | That said, most self-described "software developers" are
       | typically working to solve relatively simple problems for
       | immediate practical application, whereas most self-described
       | "mathematicians" are typically working to solve highly complex
       | problems, often highly abstract in nature, without regard for
       | practical application.
        
         | constantcrying wrote:
         | Mathematics is not about computation. Certain means of
         | arranging computation are entirely irrelevant to mathematics,
         | computation is a mathematical tool, not an end.
        
           | cs702 wrote:
           | I never said that mathematics "is about computation."
           | 
           | What I did say is that writing down mathematics is equivalent
           | to writing software.
           | 
           | Both require the use of a _formal system_.
        
             | constantcrying wrote:
             | >I never said that mathematics "is about computation."
             | 
             | But programming is about computation. If mathematics isn't
             | about computation as well, then they are not alike.
             | 
             | >What I did say is that writing down mathematics is
             | equivalent to writing software.
             | 
             | It is not. That is plainly false. E.g. mathematics
             | considers objects which are not computable and makes non-
             | computable calculations with those objects. I am aware that
             | you can encode certain formal mathematics into certain
             | software, but that is like saying cooking is like
             | programming because you can encode recipes as a program.
             | 
             | >Both require the use of a formal system.
             | 
             | So what?
        
               | epgui wrote:
               | >> What I did say is that writing down mathematics is
               | equivalent to writing software.
               | 
               | > It is not. That is plainly false.
               | 
               | Whether the two look the same or not, maths and computer
               | programs are in fact fundamentally isomorphic. [1]
               | 
               | [1] https://en.wikipedia.org/wiki/Curry%E2%80%93Howard_co
               | rrespon...
        
               | constantcrying wrote:
               | >isomorphic
               | 
               | Certainly not every computation is a proof. What
               | statement does:
               | 
               | void f(){ printf("?"); }
               | 
               | prove?
        
               | epgui wrote:
               | It probably doesn't prove anything more than [?]01 x dx.
               | 
               | Also, just like there are trivial, incorrect or
               | incomplete proofs, there can be trivial, incorrect or
               | incomplete programs.
        
               | kaashif wrote:
               | The fact that you have found a function of type () -> ()
               | is a proof that true implies true. This is the Curry-
               | Howard isomorphism.
               | 
               | Not a particularly interesting proof.
        
               | constantcrying wrote:
               | But surely there are uncomputable objects which you can
               | make mathematical statements about. How do you encode
               | them into a type signature?
        
               | defrost wrote:
               | > But surely there are uncomputable objects which you can
               | make mathematical statements about.
               | 
               | Absolutely, one famous example is the halting function
               | that has type (program description, program input)
               | returns boolean.
               | 
               | A symbolic formal system can "reason about reason" and
               | manipulate descriptions of objects that are themselves
               | uncomputable, countably infinte, or even uncountably
               | infinite.
        
               | hnews_account_1 wrote:
               | There are no closed form solutions to uncomputable
               | problems. You can encode them in math. You can also
               | encode them in a program. The result is the same.
               | 
               | In fact, the absolute limit of computability is so
               | interesting that people have explored it in the abstract
               | sense. For reference, see busy beaver numbers on
               | Wikipedia or Scott aaronson's awesome essay on finding
               | the bigger number.
        
         | petemir wrote:
         | I fear that's a very narrow view of mathematics. Nevertheless,
         | most of the time you can see the output of what you created
         | while programming, check if it's the correct result, etc. I
         | don't think it's like that in math, where you deal in a much
         | more abstract realm.
        
           | cs702 wrote:
           | "Mathematics" is not the same as "writing down math."
        
             | petemir wrote:
             | I stand by what I said, applicable even to proofs, but I
             | take your point.
        
               | cs702 wrote:
               | :-)
        
       | MontyCarloHall wrote:
       | This article misses the point. The Fibonacci/factorial
       | calculations are just toy examples to easily illustrate recursion
       | to a beginner. Nobody who actually needs to compute them for a
       | real application would think that these inefficient, merely
       | pedagogical examples would be the way to do it; Lisp hackers
       | would have no problem using the closed-form solutions.
        
       | brianyu8 wrote:
       | (2012)
        
         | dang wrote:
         | Added. Thanks!
        
         | zozbot234 wrote:
         | Discussed:
         | 
         | https://news.ycombinator.com/item?id=4796586 (2012, 1 comment)
         | 
         | https://news.ycombinator.com/item?id=4915328 (2012, 133
         | comments)
         | 
         | https://news.ycombinator.com/item?id=6953774 (2013, 102
         | comments)
         | 
         | https://news.ycombinator.com/item?id=20142828 (2019, 86
         | comments)
        
       | harshreality wrote:
       | Project Euler's higher-numbered problems often require a
       | combination of analytic solutions to vastly simplify some parts
       | of the search space, and brute force for the rest. Without math
       | or lucky guesses--where you've googled a partial solution you
       | don't understand, or you've naively found a function which
       | _seems_ to get the right answer for test cases, but you can 't be
       | sure it generalizes--you're left with brute force methods that
       | won't finish in a reasonable amount of time, possibly not even
       | before the Sun turns into a red giant.
       | 
       | Those kinds of problems are not relevant to most everyday
       | software engineering, but in the few cases when you need math,
       | you really need it or you have to scrap the entire feature for
       | being too slow or impractical.
       | 
       | Also, designing neural nets...
        
       | noobermin wrote:
       | We're here (computational scientists) and we're quietly working
       | doing our thing. The only reason for the disconnect we don't
       | really swim in the same circles as the lispy programmer types, we
       | tend to be relegated to academic circles which by their nature
       | are rather insular. There is also a very different approach to
       | computation in general, and so there is "laughing" perhaps, but
       | such is how it is I guess.
        
       | Karrot_Kream wrote:
       | I used to work on these problems in school all the time, but once
       | I decided to join industry I encountered a bunch of these Lisp-
       | style engineers who love computation in the abstract but not the
       | application thereof. Scala seemed to attract a lot of folks like
       | this. Maybe if I had gone into scientific computing I would have
       | found more.
       | 
       | I get to use these skills every so often though. When I was
       | designing one of our early two-level caches at $WORK, I wrote an
       | analysis of chosen TTLs and jitter values by looking at
       | microservice latency distributions. I've debugged a nasty
       | concurrency issue by modeling it in TLA+ and then fixing the bug
       | (full disclosure: once I thought through the TLA+ model, the bug
       | was fairly obvious to me, but the modelling itself was the
       | valuable exercise.) I've used MILP solvers for capacity planning
       | our boxes. I've designed queue backpressure through probabilistic
       | analysing. Each of these things has been crucial in designs I've
       | used, but I only encounter a problem like this once every some
       | years. (And these days I often write more docs than code.)
        
         | kqr wrote:
         | I quite frequently encounter code that can be made much faster
         | (at no significant loss of value generated) by sampling or
         | using other statistical techniques to reduce precision.
         | 
         | Also flows and buffers in the software that can be improved
         | with queueing theory. Logic that can be simplified with boolean
         | algebra.
        
       | mschoenert wrote:
       | The idea that the "Lisp programmers" are somehow adverse to
       | mathematics is historically untenable. Macsyma was written in
       | Lisp. And Macsyma was one of - if not THE most important
       | application for the Symbolic Lisp machines (the ancestor of all
       | later Lisp machines). Many later systems (Maple, Mathematica,
       | ...) were written by people who would consider themselves
       | belonging to the Lisp crowd. For example all of those systems had
       | automatic memory management with garbage collection, most had
       | closures/lambdas, etc.
        
       | mindcrime wrote:
       | I basically hate math discussions on HN. Why? Because it seems
       | like there's two (at least) "camps" in terms of how they
       | interpret what "math" even means. And the various camps
       | constantly talk around each other, with neither camp seeming to
       | realize that they're arguing about completely different things.
       | So they keep arguing, nobody gets anywhere, and the whole thing
       | is largely a cluster-fuck.
       | 
       | So what do I mean by "camps"? Well, the most obvious dividing
       | line is between people who see "math" as something that everybody
       | does, and that includes everything from elementary school
       | addition up to, well whatever, and has a primary goal of
       | computing something. Then you get the camp who see "math" as the
       | exclusive domain of mathematicians, look down on any maths class
       | at a level lower than abstract algebra or real analysis, and
       | consider the primary goal of math to be more math (eg, proving
       | things that we didn't already consider proven). And the latter
       | often tend to look down their noses at anybody who dares talk
       | about "learning math" but without a goal of becoming a
       | mathematician.
       | 
       |  _sigh_
       | 
       | My position is that "math" includes both of those notions, and
       | that in most conversational contexts you have to explicitly
       | define which one you are talking about up front in order to have
       | even a chance at a productive conversation.
        
         | agalunar wrote:
         | This is not the divide I see, but it's the divide I hear many
         | people say they see, and so I've always wondered if the
         | majority of people actually fall into these two camps. From
         | where I happen to stand, I see four camps or so:
         | 
         | 1 * those who see mathematics as a particular subject area,
         | body of knowledge, or set of topics, with limited applicability
         | to programming (which, given that definition of mathematics, I
         | think is true)
         | 
         | 2 * those who also see mathematics as a particular subject, but
         | with almost unlimited applicability (which I think is false,
         | except maybe on a technicality)
         | 
         | 3 * those who see mathematics as all-encompassing and including
         | every kind of careful thinking or precise action (which I don't
         | think really matches serious use of the term, nor is a useful
         | definition)
         | 
         | 4 * those who see mathematics as a particular set of skills
         | which are most commonly applied to the topics that people we
         | call "mathematicians" study but are also applicable to many
         | other problems (this is the camp I happen to be in)
         | 
         | So for me, at least, mathematics is primarily a way of thinking
         | and playing. (More specifically, a collection of methods for
         | problem-posing and problem-solving that are rooted in formal
         | logic and equivalences / transformations of representation.)
         | Mathematical training and experience with proofs helped me
         | cultivate that, but studying at university isn't the only way.
         | 
         | I once asked my first mathematics professor whether I could
         | call myself a mathematician even though I was just a first-year
         | student; they replied that anybody who does mathematics is a
         | mathematician. That idea has really stuck with me. Although
         | it's helpful to have jargon and wonderful to have mathematical
         | tradition, anyone can do mathematics and be a mathematician,
         | regardless of age and background - the capacity is the common
         | heritage of humankind, like the capacity for art or language.
         | And like art, it can be directed toward any goal or be an end
         | unto itself.
         | 
         | [I've never agreed with the opinion that mathematics exists for
         | the sake of physics or real-world problem solving, but enough
         | people I respect hold that opinion that I'm wary of dismissing
         | it.]
         | 
         | Now to the matter at hand - does mathematics (sense 4) help
         | with programming? For me, absolutely and without question. It's
         | perhaps the most important set of skills I use while
         | programming (but not the only one).
         | 
         | edit: I distinguish computer science (a branch of mathematics
         | that professional mathematicians study) from programming
         | (designing correct programs) from coding (communicating
         | programs to a computer so that they can be run), and I assume
         | that programming and (to a lesser degree) coding are mostly
         | what people are talking about here.
        
           | mindcrime wrote:
           | _From where I happen to stand, I see four camps or so:_
           | 
           | I have no doubt that there are more ways to segment people in
           | terms of how they view math, then the simple model I
           | mentioned. That just happens to be the divide that I feel
           | like I see most commonly and that often leads to fruitless
           | discussions.
           | 
           |  _they replied that anybody who does mathematics is a
           | mathematician._
           | 
           | The problem with that is the definition of "doing
           | mathematics". And that's where I see the divide I mentioned
           | above. Some people would consider "finding the derivative of
           | f(x) = x/x^2 to be "doing math" whereas other people say
           | that's "mere computation" and think of math only as things
           | like "proving why the derivative of f(x)=x/x^2 is $WHATEVER".
           | 
           | I suppose one might say the former is "using math" where the
           | latter is "doing math", but in popular usage it seems like
           | people freely intermix those notions, and people who feel
           | strongly about it one way or the other get their knickers all
           | wadded up over it and hilarity ensues.
        
       ___________________________________________________________________
       (page generated 2022-12-24 23:02 UTC)