
Programming is not math? - j2kun
http://j2kun.svbtle.com/programming-is-not-math-huh
======
john_b
I write software that runs on various jet engines. There is a lot of software
that goes onto a modern commercial engine, but the general theme of the
software I focus on is the modeling of the underlying engine dynamics using
sensor data. It's very math- and physics-based. A thorough knowledge of linear
algebra, signal processing, regressions, and clustering/neural network
algorithms is essential, among other things.

It's not the kind of environment where typical startup aphorisms apply ("fail
fast, fail often", "don't be afraid to pivot", etc). So every month or so when
another "programmers don't need to know math" article comes out, usually
written by a web programmer, I have an impulse to represent the other side of
the divide, but I usually find so many misconceptions and poor assumptions in
the original article that I conclude it's too much work. So I am glad that the
author has done the job for me here.

What I have observed, again anecdotally, is that web programmers are generally
more vocal about programming than systems programmers and scientific
programmers. It makes sense in the historical context of the internet, but I
don't think that this bias is properly accounted for when people on
Twitter/HN/etc discuss "programming" and what it requires.

I don't think it should be controversial that programming is founded upon the
study formal languages, mathematics in particular. So even if you don't need
math to do your programming work on a day to day basis, it's because a lot of
very smart people have solved some very difficult math and language problems
over the decades so that _you have the luxury of ignoring_ the mathematics
your code relies on. This is all ok. But the implicit hostility towards
mathematics that a lot of these articles demonstrate really makes me concerned
about the influence it will have on the next generation of programmers.
Moore's Law has allowed a certain level of indifference to mathematics in the
past few decades since you could always throw a newer processor and more
memory at a problem, rather than solving it via a better algorithm. But that
situation won't last forever.

~~~
grn
Personally I have the impression that many web programmers, especially those
who has never worked with anything other than the web, are ignorant of the
existence of other branches of programming.

In many aspects programming for the web is _simpler_. For example the quality
requirements for a microwave oven firmware are much higher. You can't easily
deploy a hotfix to production after shipping 100k units. I have a feeling that
most of complexity in web programming is _incidental_. It's a result of how
poorly the web is designed as a platform. Of course it's very successful
commercially but from a technical standpoint it isn't good.

john_b, could you give an advice how to get into aerospace industry? It always
seemed very challenging and I'd love to have a chance to work there.

~~~
grownseed
I can't believe that in 2014, web development is still getting this mindless,
indiscriminate bashing. The kind of web development you might have seen, or
done, may have been simpler, but please don't generalize it to everything.
Every field has its low ends and its high ends.

I'm generally speaking a web developer, I work in bioinformatics and I can
assure you that what I do is not "simpler" than most other programming, please
get over yourself.

Your microwave example actually undermines the point you're trying to make. If
microwaves are indeed so far more technically advanced, why then is it so hard
to upgrade them? I know it's a stupid question, but so is the point that
brought it up.

I've spent 15 years having to justify the worth and quality of my work to non-
web developers, a lot of whom I wouldn't even trust with the most basic
programming tasks. That included some of my teachers at University (!), who
not only undermined me all the way through my dissertation, but actually
proceeded to steal my work and use it as a teaching base for years after. This
was after they admitted that they could not, in fact, fully understand my
work, mostly because they disregarded it for the longest time.

I'm pretty damn proud of being a web developer, and even though I do or have
done other kinds of programming, I'll stick to web development, if only to
prove to people like you that we, too, are programmers.

Rant over.

~~~
_3u10
What does you bioinfomatics code have to do with web programming?

To me it sounds like you have a bioinfo library that you've integrated with a
website.

If your bioinfo code is actually mixed in with your web code then this is
_exactly_ what real programmers talk about when we trash web programmers.

~~~
pizza
> To me it sounds like you have a bioinfo library that you've integrated with
> a website.

??? This is the hostility the above poster commented about; why did you assume
that they were using unsafe / uninventive practices? From what? How did you
read their development of a complex piece of software as "you made glue code",
without external information, or, perhaps, internal bias?

> If your bioinfo code is actually mixed in with your web code then this is
> exactly what real programmers talk about when we trash web programmers.

Why would you frame a hypothetical situation, _unrelated to their comment_ ,
as evidence of your beliefs? How does this make sense?

~~~
Rapzid
It's pretty clear people use "web programmer" as a synonym for "poor
programmer" or "lesser programmer".

Oh, you work on hard problems and complex software? I wouldn't call that web
programming!

I promise there are enough hard problems and complexities in the "web" for any
programmer in existence to choke on. HTTP/CSS is just a small part of the
"web"; it doesn't speak to the complexities of the system behind the curtain.

------
zorpner
All of this discussion, quite possibly because so much of the initial
conversation happened on twitter, embeds a lot of assumptions into the words
used that seems to result in a lot of people talking past each other.

There's "programming" that's a single person essentially performing research-
level mathematics; there's "programming" that's a thousand people writing to a
spec without considering anything about the structure or complexity of their
code. Programming is obviously not just math, nor is it no math.

If you become defensive when someone says "programming isn't math" _or_ when
someone asserts that it is, you're failing to think critically about the both
words they're using and about the assumptions you're making.

Disclaimer: I have a degree in mathematics, and I'm a programmer. I can't
think of the last time I used anything from my college years directly in
programming itself, but I attribute a lot about the way I code and think about
problems in general to having a mathematical background.

~~~
coder23
What area of programming are you in?

There is a lot of math I don't understand because I don't have the background,
and I wish I could. Differential equations and fft come to mind.

~~~
srean
The discrete version of fast Fourier transform essentially does a matrix
vector multiply faster than usual. If you are not familiar with matrix vector
multiply, then think lots of multiplications and additions. Now, what fast
Fourier transform does is take advantage of the fact xy + xz = x(y+z) that we
know form mid school algebra. Note the right hand side has fewer operations to
perform. The other thing that FFT uses is symmetry. It recognizes that two
things that it needs to compute are really the same in value, so it computes
it only once.

You can understand FFT without much deep math, it is just clever use of these
two properties. Study it, you will really enjoy that cleverness. It is one of
those algorithms that still makes me break out into a grin.

That said FFT can get more mathematically involved when you want to compute
them on vectors whose lengths are not powers of two. Then it gets into
primality, Chinese remainder theorem etc. However, for basic understanding and
coding it you need none of these.

EDIT: I would say dont get lost in the details, those butterfly diagrams etc.
Just focus on what is the key idea that it is exploiting. There are
essentially just two ideas: ditributivity: xy + xz = x(y+z) and
symmetry/associativity.

May be a good idea is to sit down and derive a different way to group the
multiply and adds, using those properties, to make it go fast. Dont worry if
that does not beat the best algorithms out there. You will just get a better
feel for the underlying mechanism.

~~~
coder23
I did implement those, but the deeper understanding eludes me. Honestly I
never gave them much though, when it comes to choose whether to take a week
and learn it properly I always rather code or do something tangible. Except
for linear algebra, which is something I might use in the future.

------
vorg
> _You’re right, programming isn’t math. But when someone says this, chances
> are it’s a programmer misunderstanding mathematics_

Or a mathematician misunderstanding what's generally known as "programming" in
the real world. The vast majority of programmers write webpages in something
like PHP or Rails. 10 years ago it was Excel macros and VB. These are often
customer interaction tasks where programming is incidental, but the workers
doing these jobs quickly called themselves _Software Developers_ or
_Javascript Engineers_.

> _Sure, you don’t need to know how to build a car to drive it_

Just as car building/repair and car driving have evolved into 2 separate
tasks, so have math-based programming and non-math programming. The separation
occurred _because_ there were many people who wanted to program things but
didn't want to learn math. The non-math programmers vastly outnumber the math-
based ones.

~~~
SomeCallMeTim
>The non-math programmers vastly outnumber the math-based ones.

At some level I'd love to have a different word for what I do [1] that
distinguishes it from web or other kinds of programming. When I talk to
someone who has only encountered web developers and I say I'm a programmer,
and they say "Yeah so is my uncle! He does HTML!", it feels like they really,
really don't understand. Like I've said "I design Tesla electric cars" and
they've responded "My uncle assists mechanics in a shop that repairs VWs!" [2]

But at some level it's just my ego talking, so it might be best to just take
the ego hit as a lesson in humility. ;)

[1] I do native C/C++ code on multiple platforms including optimization for
real-time performance, as well as high speed server optimization, system
security analysis, and cross-platform video game development. Not math-heavy,
precisely, but still far more skilled than basic web development. I also
create the occasional high-performance web page, so I can compare directly.

[2] With no aspersions on assistant mechanics, but it's a VERY different job.

------
jdreaver
I got a programming job where I rely heavily on my mechanical engineering
background. For much of the day, I am programming in Python and C doing user
interface work, web programming, and optimizing numerical algorithms. However,
I also get to study and use solid mechanics, the finite element method, fluid
mechanics, etc.

In the engineering world, a lot of entry level jobs require just a pocket
calculator and a book full of standards and codes. I would hate to have wasted
all that time in school learning advanced math not to be able to use it! There
are a lot of ways to apply math in your programming simply through how math
makes you think. Studying math revitalizes the programming part of my brain,
and allows me to attack problems from new angles.

This (highly opinionated) quote [1] from Zed Shaw inspired me to pursue a
career that leverages applied math and physics, as well as programming:

> Programming as a profession is only moderately interesting. It can be a good
> job, but you could make about the same money and be happier running a fast
> food joint. You're much better off using code as your secret weapon in
> another profession.

> People who can code in the world of technology companies are a dime a dozen
> and get no respect. People who can code in biology, medicine, government,
> sociology, physics, history, and mathematics are respected and can do
> amazing things to advance those disciplines.

[1]
[http://learnpythonthehardway.org/book/advice.html](http://learnpythonthehardway.org/book/advice.html)

~~~
alien3d
Im also mechanical background.the reason i involve programing because wanted
to build something like ( statical process control(spc))..now building own
accounting instead.math is a must in accounting system like rule 78,calculate
irr ,calculate depreciation..

------
MaysonL
For me, debugging or perhaps more appropriately _anti-bugging_ a program is so
much like proving a theorem that the difference is one of terminology and
notation rather than essence.

~~~
srean
This is such an excellent point, I hope this comment bubbles up higher.

------
jobu
_" One big reason that mathematics is much more like language than
programming, is that doing mathematics involves resolving ambiguities. In
programming you have a compiler/interpreter that just dictates how an
ambiguity resolves. But in mathematics, as in real language, you have to
resolve them yourself based on context._"

Along this line, I recently noticed how similar legal contracts to
programming. One partner contract I had to read over looked very much like a
huge if/elseif statement, and the definitions section looked a lot like
setting up variables.

After reading this article it seems the similarities between legaleze and math
proofs are pretty strong as well. I wonder if anyone has ever tried to process
legal documents or laws with mathematical formulas to try finding loopholes.

~~~
jleader
I remember reading "The British Nationality Act as a logic program"
([http://www.researchgate.net/publication/234805335_The_Britis...](http://www.researchgate.net/publication/234805335_The_British_Nationality_Act_as_a_logic_program))
in CACM a long time ago; the "cited in" list seems to be a good place to look
for subsequent efforts.

------
gkop
This whole debate is a mess of definitions and taxonomy. If you define math as
algebra/geometry/calculus/etc., obviously programming isn't all that tightly
associated with math. But programming is mathematical logic, which is a subset
of math, so programming _is_ math... right? Well, except logic itself is a
subset of philosophy. So programming is philosophy now as much as it is math?
And what about this argument that programming is language, it's got some good
points, how does that fit into all this?

Incidentally, some visible members of the "programming isn't math" camp are
discouraging others from emphasizing the connection between math and
programming so as not to intimidate young women away from taking an interest
in programming. Folks, this position only validates the stereotype that women
are not good at or interested in math.

~~~
walshemj
And of course relation databases are an application of set theory.

------
zmmmmm
I'd feel much more comfortable with the idea that programming is math if my
anecdotal experience of programs written by mathematicians didn't show that
they have absolutely no clue how to write a good program - I'm talking about
aspects of design like modularity, cohesion, separation of concerns,
testability, sensible use of abstraction, etc. There's clearly something more
to programming than math or there wouldn't be such a high correlation between
good mathematicians being such garbage programmers. I suspect the whole debate
is a sign that mathematicians simply dismiss these other aspects as
unimportant and only count the mathematical parts and then come to the
"surprise" conclusion that "wow, programming is all math!".

~~~
GarvielLoken
This is a real test which is in favour that programming is not math like
biology isn't physics. You don't build programs with one character variables.

------
jiggy2011
Here is an interview with John Carmack where he shares his opinion on the
importance of math in game engine programming which is one of the math heavier
areas of programming. It's the first question asked so you don't need to skip
ahead.

[http://www.youtube.com/watch?v=hapCuhAs1nA](http://www.youtube.com/watch?v=hapCuhAs1nA)

~~~
MichaelGG
Interesting! He says he got by mostly with high school math. That analytical
solutions are used more in physics simulations. But that in general if you
time slice enough, simple approaches work well enough.

When I was 10, I had the opposite reaction. I started writing a game, but
having a busy loop just constantly figuring out inputs and updating state
seemed so ugly, I gave up, figuring I obviously lacked some knowledge. After
all, I couldn't write a space invaders game without "brute forcing" it. Later
when I found out that's actually how pros do it, I was really disappointed.

~~~
jiggy2011
Wouldn't the loop sleep between frames?

~~~
MichaelGG
GW-BASIC in 89 or so. I don't think you could sleep. And I didn't have much of
a concept of frame either. I just thought frames were arbitrary decisions in
time to look at the exact state of the world and show it. Like, that you had a
bunch of equations that told you where objects would be at any given time, and
when they'd do something interesting (like collide). So naturally my little
loop felt stupid and I figured once I went to high school or university they'd
tell me what I was missing (hah!).

Had I known that everyone else was just making up approximations, and that a
lot of things don't even have analytical solutions would have been nice to
know.

~~~
tluyben2
Those days your CPU would be doing mostly 1 thing, like run your game, so the
concept of sleep wasn't needed and actually, usually you didn't have time to
sleep even if you could, you would need every cycle to do calculations. To
make life a bit easier and by using C/asm, you could offload something like
game music by setting an interrupt vector so it would keep playing nicely
without you doing all kinds of timing madness. I was using a lot more math
back then than now; there are libraries for everything and they hide the math
for you. You could find physic approximations (very rough! it only had to look
plausible, not realistic) in books and BBSs BUT you could never just use them
as you didn't have enough cycles for that, you needed to rewrite them to fit
your purpose otherwise your software would be unusably slow.

------
Tinned_Tuna
I agree, programming is not mathematics, however, the author seems to have
mixed up the act of calculation and mathematics.

Bering a good human calculator is unlikely to result in stellar programs.
Having a good grasp of how to arrange and communicate your ideas, as is
required in mathematics, will help your programming hugely.

Yes, there's a large gap between what is acceptable in mathematics and what's
acceptable in programming, and the types of problems you're likely to
encounter, but fundamentally, you'll be communicating ideas to other people
and to your compiler.

Source: Computer Science and Mathematics degree, now working as a researcher.

------
AnimalMuppet
Programming is math, in that (at least at some level), a program is formally
equivalent to a math problem.

Programming is not math, in that most of the time, when I'm programming, I'm
not thinking about it at all like a math problem, even if I do some formal
reasoning about some aspects of the program. (Maybe here's where it shows that
I'm not a Haskell programmer.)

So: Yes? No? Depends on what level you're looking at it on.

This becomes one of those discussions that's really pointless because it turns
on the definitions of the terms involved, and just winds up wasting peoples'
time.

~~~
saint-loup
>>> I'm not thinking about it at all like a math problem

The thing is, not even a mathematicien thinks always about math that way. In
mathematics, one needd to distinguish between a phase of exploration, where
you work along a fuzzy, intuitive process, and a phase of justification, where
one try to prove one's conjectures. The second part is math-as-a-formal-
system, the cliché of mathematics. So it's not a problem of definition, it's a
matter of accepting mathematics as a complex process, practiced in various
ways and different for each mathematician.

------
terminado
Fuck no, programming in not math. I learned that the hard way, when I tried to
take college level calculus as a refresher, after years of neglecting my basic
algebra, and assumed that my interim programming experience would be
sufficient to tide me over.

The _notation_ is similar, but mathematics is much more rigid in terms of
correct results, and is sprinkled with a completely different body of
vocabulary, history, facts and trivia, which may selectively overlap and
intersect with computer science, but often times not with perfect analogies or
exact synonyms.

Not to mention that programming is often accomplished using products
distributed by large for-profit companies that have been tailored to maximize
convenience for the end-user, which in many cases might be a paying customer,
or a large, vocal client community that is deeply intolerant of defects and
anti-patterns. Math may be assisted by tools, but the tools are often times
fraught with limitations that demand careful and sometimes creative
application to a given problem.

~~~
Dewie
> Fuck no, programming in not math. I learned that the hard way, when I tried
> to take college level calculus as a refresher, after years of neglecting my
> basic algebra, and assumed that my interim programming experience would be
> sufficient to tide me over.

Calculus is a discipline that many think is not very applicable to the art and
practice of programming itself.

"Programming is math" does not mean to imply "programming is _any_ and _all_
kinds of math".

~~~
terminado
So, I definitely felt as if I were familiarized with some of the very basic,
generalized concepts I would need to pass the mid-terms and final exams, but
when push came to shove, the only real parallel that was a direct one-to-one
translation was the piecewise-defined function. The rest of the class was
still quite the steep climb.

------
mtalantikite
"Propositions as Types" by Wadler is a great introductory history of the
interconnectedness between logic systems and programming languages:

[http://homepages.inf.ed.ac.uk/wadler/papers/propositions-
as-...](http://homepages.inf.ed.ac.uk/wadler/papers/propositions-as-
types/propositions-as-types.pdf)

------
bitwize
"Programming is one of the most difficult branches of applied mathematics; the
poorer mathematicians had better remain pure mathematicians." \--Edsger W.
Dijkstra

Old arguments are new again because twenty something kids think that they know
everything and that the wisdom of programmers from decades past is old, so it
doesn't count in today's world of Hadoop cluster Node.js AWS instance
startups. This is as true of meta-theorizing about programming as it is about
hammering out the details of various software implementations.

------
dictum
> You see, Mei’s fundamental misconception is that the kind of applications
> that we haven’t yet automated and modularized constitutes what programming
> is all about.

Please forgive me if I'm making the most heretical question possible, but once
we reach the level of software sophistication the author hints at ("how to
automate the translation of drawn sketches to good HTML and CSS") wouldn't
software also be able to create and analyze mathematical theory ("conjecture,
proof, and building theories")?

~~~
saraid216
> wouldn't software also be able to create and analyze mathematical theory
> ("conjecture, proof, and building theories")?

Already happening.

~~~
wordplay
I'm interested in where this is going. Do you have a citation?

------
dasil003
The only way out of this semantic quagmire is to realize that programming is
math incarnate. Mathematics in the broadest sense is nothing but logic applied
to axioms. You can come up with arbitrary axioms and apply logic to them and
that's math! Sure the connotation of math are specific concepts that usually
have some real world application, but that's not the only kind of math. Lots
of times someone came up with a crazy math idea long before they realized the
real world application (eg. complex numbers).

Until computers came along, math was entirely a theoretical pursuit. The
universe may be described by math, but it's impossible to know whether it is
_actually_ defined by math or if we just fit the math to the universe. But
programming is different, because for the first time we can take a
mathematical idea from inside our heads and express it in a physical computer
which executes it according to the logic we've defined.

When you look at it this way you realize that it's exceedingly silly to try to
separate programming that requires math knowledge from programming that
doesn't. I mean no, programming usually does not require the infinitesimal
slice of mathematics known as 9th grade algebra, but it does require logical
thinking which is the basis of all mathematics.

~~~
nmrm
> Mathematics in the broadest sense is nothing but logic applied to axioms.

mmmm. Lots of people would disagree with this :-)

> Until computers came along, math was entirely a theoretical pursuit

Not at all; mathematics _always_ had applications. Not all mathematics, but
it's certainly not that case that math was "all theory" and without serious
application before computing.

> because for the first time we can take a mathematical idea from inside our
> heads and express it in a physical computer which executes it according to
> the logic we've defined.

We've had calculation assistants in various forms for centuries. Also,
ballistics and construction based on mathematics are more-or-less "taking a
mathematical idea and expressing it in the physical world".

~~~
dllthomas
Well, "computer" originally _referred to_ a person performing the task of
computation. In that sense, "Until computers came along, math was entirely a
theoretical pursuit" may be accurate - it is hard to make math practical
without computing anything. It's certainly _not_ the case that it was purely
theoretical until we had _mechanical_ or _electronic_ computers.

~~~
nmrm
I disagree. The term "computer" was typically reserved for people who
_exclusively_ did often pre-defined computations, and didn't contribute much
other than the computation to the mathematics at hand. That is, someone else
had come up with the novel method of computation, and someone else had
formulated the problem. The human computer was applying the computation to
problem that someone else handed them.

There was plenty of mathematics before mathematics got to the point where we
needed dedicated humans who spend their whole day computing things in a
prescribed manner.

But regardless, for some reason I think the original post was referring to
electrical/mechanical computers :)

~~~
dllthomas
I think it's the same question as whether someone cleaning their own toilet is
"a cleaner" for the duration, on which I could go either way.

 _" There was plenty of mathematics before mathematics got to the point where
we needed dedicated humans who spend their whole day computing things in a
prescribed manner."_

More to the point, there was plenty of _useful application_ of mathematics
before then. Which I certainly agree with. My point was that most (and
possibly all?) early application _of_ mathematics required computa _tion_.

My comment, though, was mostly agreeing with you - just picking apart a
technicality to get at some tangential interesting questions.

~~~
nmrm
So, I tried to think of counter-examples to "most (and possibly all?) early
application of mathematics required computation" just for the sake of
discussion.

I think I have only one, which is the establishment of axioms, both
philosophically (as a method) and specifically (e.g. in Elements).

A revisionist history might say that choosing axioms doesn't require any
computation, just a keen sense of style and close observation of the world.

But actually, I'm sure that the choice of axioms was a long and drawn-out
process informed mostly by computation and checks that the computed
values/proven theorems matched with physical intuition. After all, that's
kind-of how it's done today, even by people who have lots of experience with
formal systems.

Now I really want to read pre-Euclidean mathematical philosophy to see if I'm
correct :-)

~~~
dllthomas
Yeah, I thought it was interesting space for speculation. 'S why I tried
nodding toward it. Don't really know enough of the history to get terribly
concrete, but that roughly corresponds to my understanding. Both the actual
history _and_ what might be theoretically possible are fascinating.

------
laureny
Everyone will have a different take on this based on the kind of software they
write. The bottom line is that math is pervasive at all levels of software
engineering but it impacts developers in different ways.

If you write video games or any other graphic related application, or if you
work on jet engines or modelization or industrial engineering, you are
obviously immersed in math on a daily basis. If you write servlets on a Java
backend, you are probably not required to be as much versed in math, physics
or chemistry.

Still, no matter how close to mathematics the software you write runs on, the
bottom line is that you are using a programming language to do so, and all
languages are rooted to various extents into math. Some are very closely
connected, and sometimes based on, specific mathematical fields (e.g. Haskell
and Category theory) while others are more loosely based on such principles.

I find that just like you don't need to know how an engine works in order to
drive a car, you don't need to know a lot of math to be a decent developer,
but it certainly doesn't hurt to read up on some of the theoretical
foundations that underlie all of computer science.

------
reader5000
The popular understanding of "math" very much is "performing the correct
sequence of calculations/manipulations to solve a given problem". This is
because US math is taught this way, from addition of fractions to symbolic
differentiation of functions in high school.

Most people never grok that math is really about building abstractions of
various levels of sophistication and saying (proving) useful/interesting
things about those abstractions.

Programming fits more with the latter notion. Even web programming: we have
abstractions like user interface, color theme, database table, scripts, etc.
The web programmer has to construct these abstractions and then do useful
things with them.

I would agree that programming and math are cognitively very similar, and both
very similar to using language. However, I also understand why programmers may
like programming yet "hate math". It's because their understanding of math is
derived from US standard math education, which is essentially about the
memorization of symbolic procedures, with very little constructive abstraction
happening.

------
briantakita
Disclaimer: I prefer to eschew labels and categorizations as they lead to
heated & mostly unproductive conversations. These conversations often serve to
close minds by creating stereotypes and ossifying one's often incomplete
perspective on the subject matter.

That being said, this article's main examples are programming applied to
domains that rely on mathematics. Domains that don't rely on mathematics tend
to have less mathematics.

Programming is (mostly) about creating automatable systems or automating
processes. Depending on the process, mathematics may or may not be involved.
It's easy to imagine a programmers going their entire career without
encountering mathematics. I personally like to automate mathematics, however
it's not "necessary" to be a programmer. Mathematics will make you more "well
rounded" just like a liberal arts education would.

------
ww520
Learning math is not just learning the knowledge of math. It's the learning of
the abilities to reason, to think, to analyze, to simplify, to deduct, and to
solve. Math knowledge helps programming but the math abilities are what propel
you to the next level.

------
gatlin
Mathematics is the study of quantity and structure. Reasoning about how to
mutate some state, defined as a set of values, according to some domain-
specific logic, constrained by the execution environment and invariants, is
most assuredly mathematics.

~~~
gone35
Indeed. Whether the likes of Sarah Mei agree or not, the Curry-Howard
correspondence holds regardless: producing a computer program that meets some
specification _is_ theorem proving at a fundamental level...

------
sirseal
Software engineering requires mathematics. Software development does not.
Engineers and developers both bang out code. But the similarities end there.

A developer uses a library to make a product. An engineer uses mathematical
knowledge, skill, and reasoning to find an efficient representation that
elegantly solves a problem. A software engineer extends this idea: using
(mostly) discrete mathematics, type & category theory, and computer science at
his or her disposal.

I have respect for developers -- they are an important part of the entire
software ecosystem. I feel it necessary, however, to distinguish those who use
mathematics to program and those who do not.

~~~
progman
> Software engineering requires mathematics. Software development does not.
> Engineers and developers both bang out code. But the similarities end there.

I agree. For instance, in Haskell you cannot just sit down and hack something
together like in Python or PHP. You need to think about the whole structure of
the program. That's software engineering.

Interestingly (for me) I realized that it is possible to write software in
Haskell in a mathematical way which I previously considered to be possible
only in an imperative way. It required a shift of my thinking about software,
and I am still learning that.

Software engineering is intriguing because it raises software quality to a new
level.

~~~
seanmcdirmid
Actually, in Haskell, you can write some python code to "program to think"
first, and then when you know EXACTLY what you are going to do, you can write
elegant Haskell code with its "think to program" requirement.

Software engineering is a title no more concrete than software developer. In
either case, it's useless to talk in platitudes.

------
kasperset
Mathematical background helps in programming. It is not absolutely necessary
but personally I do not know any Programmer who was good at Mathematics and
failed really badly in programming.

~~~
avmich
It was well said "programming is one of the most complex branches of applied
mathematics". I didn't check the exact quote :) .

------
orwhat
As a web developer with degrees in both math and programming, I sometimes find
direct applications of math, such as backing off from updating something on
the page exponentially when the user goes AFK, or more commonly, when working
with visualizations (see d3.js). For the most part, my peers without much of a
math background could solve the same problems in other ways. For more
graphics-oriented stuff it gets a little harder but often a library plus a
tutorial blog post gets the job done.

------
seanflyon
This discussion is lacking an agreed upon definition of Mathematics.

~~~
AnimalMuppet
It's also lacking an agreed upon definition of programming. It's even lacking
an agreed upon definition if "is". (No, I'm not trying to go Bill Clinton on
you. In this discussion, what do you mean by "is"? Do you mean "identical to,
equals"? Or do you mean "part of, a subset of"? If you mean identical, do you
mean identical in all respects, or just in some respects? If so, in which
ones?)

~~~
marvy
good point

------
simondedalus
i _want_ to say that math just is logic (which, blown up into set theory, is
the major way we understand language outside of full on anthropology and
incidental history/statistics)... but my early allegiance to frege would be
showing. alas, we are doomed to never find the logical foundation of
mathematics--godel hits us on one side, wittgenstein on the other! at least
frege was a better writer than either of those two.

anyway, i love the author's point (2). i would never argue that we don't need
to bother wondering about the import of death or how we feel about things, but
(2) not being widely known comes largely from A) people not studying
philosophy, since B) they don't realize that philosophy isn't (always) about
finding (capital M, almost-supernatural) Meaning, but rather is just being
rigorous in your thought and language (as well as curious). math and
programming aren't magic; they admit of rigorous thought just like anything
else. you needn't be a savant, and you needn't go and vilify any particular
normal human capacity or object of investigation to be allowed to not be a
savant. sadly, i write like wittgenstein, not frege.

hope this rambling response struck you as topical enough.

------
GmeSalazar
"Large amounts of effort are spent on tedious tasks in industry for no reason
other than that we haven’t figured out how to automate them yet. And novel
automations of tedious tasks involve interesting mathematics by rule, not
exception."

Not closely related to the article's subject, but nevertheless a good point,
it's one of the reasons I consider academia to be a good place to be. At least
for those at the 'top' of the pyramid...

------
martinvol
From my personal experience they are related, but I can tell for sure they are
very different.

U think this confusion exist because many famous computer sciences studied
math or were also mathematicians.

From my personal experience, I passes all my CS courses in college without
much effort but I struggled with calculus, statistics and algebra classes. So
I think even the mindset you need to understand them are very different.

------
ChikkaChiChi
There is nothing programming can not be.

No you don't need to be a mathematician to learn the basic syntax, but you
could be a mathematician and still learn the basic syntax. You could also be a
mathematician and use programs to build wonderful and new exciting things.

Programming has no limitations other than our imaginations.

I don't get why we humans have to be so definitive before things stop scaring
us.

------
lazyant
Before there were Computer Science university schools, programming was taught
at Math, Physics and Engineering schools (like the mentioned FORTRAN), it
wasn't taught (still isn't) in language schools. There's some relationship
between math and programming, and in any case math can be seen as a language
as well.

------
calebm
The truth lies in the happy median: math is absolutely necessary for some
programming applications, and helpful in the others - being able to distill a
problem into easy-to-reason-about abstractions is helpful in any domain of
programming, but a certain level of abstract thinking can be attained without
formal mathematics.

------
MilnerRoute
I'm okay with the 4 down votes in 4 hours -- just hoping someone could clarify
why. My comment asked:

"Does this have anything to do with the female vs male perspective on
programming? Maybe programming can be actually approached with different
mindsets -- and it's not a case of either/or...."

~~~
Irish
I didn't down vote you but my initial reaction to your comment was can we
please have a conversation related to development without dragging sex into
it? I would guess that many had the same reaction.

Discrimination is an issue in Tech, its not the only issue or an issue which
relates to every other issues it is an issue, singular.

------
barce
tl;dr The Churchill-Turing Thesis is true from the OP's subjective experience,
too.
[http://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis](http://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis)

~~~
gone35
Brilliant. The following proposition shall henceforth be known as the
_Churchill-Turing thesis_ :

"Every insufficiently random symmetric-key scheme can be successfully
cryptanalyzed given a sufficiently long ciphertext."

Of course an entirely different matter is whether said scheme can be
_feasibly_ cryptanalyzed, but I digress.

~~~
barce
Oh man, I am so laughing and hating myself right now. Brilliant definition!

------
halayli
It depends what you are programming. It's like saying, writing is not poetry.

~~~
agumonkey
Yeah but no one likes to read spaghetti saga. We like our microprose to fit in
a few feet.

------
wofo
"And most cooking is reheating frozen food, not farm-to-table fine cuisine, so
should a culinary student study McDonald’s?"

Awesome

------
alex_duf
Programming is like writing a recipe. That includes a little bit of math if
you want, but not necessarily.

------
scaramanga
nailed it

------
xname
Obviously, many comments confused with the following two:

Programming involves math != Programming is math

For example, john_b's comment confuses the use of math in programming with
programming per se.

~~~
pgcosta
That is the problem: programming should be math. If we view programming as
metaphysical, we can never hope to build good software. That will change in
the future.

I don't believe that 50 years from now we will be still writing code to fly a
plane or run a web app, and questioning ourselves: will it run? will it crash?
Does the code does what it is supposed to do? Do these two functions do the
same thing? Certainly as time goes on, programming will be ever more a well
defined formal system, so much that big parts of development will just be
auto-coded(by machine).

That is why functional languages are so good. They are very close to
mathematics, and allow us to build formal systems on top of them, that remove
any ambiguity that might exist. And this is(or should be) one of the reasons
why functional programming is so 'hip' now: it allows us to reason about
program design using the Algebra of programming.

Of course right now we are stuck with the methods we have to build software.
And that means you can have a programming job without knowing much about math,
or even using it day to day.

But that will change in the future. (My humble thoughts on it, based on the
views I got from a university class called 'program calculation')

if you are curious about algebra of programming, although there are many more
resources online:
[http://wiki.di.uminho.pt/twiki/pub/Education/CP/Bibliografia...](http://wiki.di.uminho.pt/twiki/pub/Education/CP/Bibliografia/pdbc-3.pdf)

~~~
randomdata
_> That is why functional languages are so good. They are very close to
mathematics_

Wouldn't it be better to say that functional languages are close to our
commonly used mathematical languages? The abstract underpinnings of
mathematics are not expressible naturally. We've had to invent languages to be
able to communicate the ideas.

And that is pretty much what this debate boils down to: Are the languages that
allows you to express abstract ideas (programming languages in this case) math
or language?

------
comrade1
I think the author is confusing mathematics and logic, as is the referenced
blogger.

~~~
pjmorris
How would you distinguish mathematics from logic? Some very smart people [1]
have thought they were deeply related.

[1]
[http://en.wikipedia.org/wiki/Principia_Mathematica](http://en.wikipedia.org/wiki/Principia_Mathematica)

~~~
comrade1
Mathematics is a specific application of logic. Programming in general is
closer to logic than math. But there is certainly a large set of programming
that is mathematics-dependent (see above threads of people doing engineering
programming).

Edit: application vs extension of logic.

------
MilnerRoute
Does this have anything to do with the female vs male perspective on
programming?

Maybe programming can be actually approached with different mindsets -- and
it's not a case of either/or....

~~~
zxcdw
Let me copy part of my comment to another submission:

Different people view programming very differently. For example for me
programming is mainly a way to understand things. I program things I want to
learn about. My understanding of programming helps me understand computers and
computing. Then I have a friend who couldn't care less about how exactly
things work under the hood, or in theory. All he cares about is making a
product, and programming is his tool.

I think this is one of the main distinctions. Some are motivated by curiosity
and love of tinkering with the machine and see it all as a playfield with
toys, while some others are motivated by the opportunities to build things and
make money out of it, seeing it all as a tool and material. I am not saying
this is the dichotomy or that one even exists, but it illustrates that
"programmer" doesn't really say all that much. We're a broad and varying
bunch!

~~~
vorg
> _We 're_ a broad and varying bunch

You might not want to self-identify too much with those who "couldn't care
less about how exactly things work under the hood". When you've spend the best
part of a day carefully explaining how NOT (a OR b) is the same as (NOT a) AND
(NOT b) to the "programmer" at the next desk who got his job because someone
else of the same gender and ethnicity filled in for him at the aptitude test,
you'll quickly curse how HR people turn a blind eye to closely checking such
stuff so they can meet their hiring quotas.

It's not even inconceivable that someone like this has conned their way into
running open source software projects, perhaps even project managing a "Top
50" programming language!

