top | item 7069603

Math is not necessary for software development

32 points| qwert302 | 12 years ago |mutuallyhuman.com | reply

76 comments

order
[+] jackmaney|12 years ago|reply
"Rarely in math are you coming up with a new way to solve a problem"

Bullshit. Bullshit, bullshit, bullshit. Entire fields of mathematics (eg Algebraic Number Theory) have arisen due to new approaches to solving problems. Literally millions of peer-reviewed mathematical publications have been written, many of which pave the way for new attack vectors on existing problems.

There is far more to mathematics, dear Horatio, than is dreamt of in the OP's philosophy.

[+] j2kun|12 years ago|reply
Which makes it clear the author knows very little about math.
[+] visarga|12 years ago|reply
Give some examples, it is interesting.
[+] tokenrove|12 years ago|reply
The best programmers I've met have consistently had very strong math backgrounds or a deep respect for the clarity of thinking associated with higher math. People need to stop confusing math with arithmetic.
[+] onion2k|12 years ago|reply
Software development is interesting in that it borrows for a vast range of other disciplines depending on what you're building. Very commonly, that's maths. You're not going to get very far manipulating matrices for 3D geometry without a bit of maths understanding. But, similarly, you're not going to get very far into developing a knitting pattern generator without understanding knitting - but that doesn't mean you can't be a developer unless you can knit. That'd be crazy.

If you develop applications that aren't reliant on maths then sure, you don't need to understand maths. On a day to day basis I write web apps that take strings from users, store them in a database, and display them in a different way later. No maths at all. Conversely, I've once wrote an image manipulation library based around convolution filters that used lots of maths.

As with most things, there's no single black and white rule. It's all shades of grey.

[+] xradionut|12 years ago|reply
Wrong!

You still run into problems that require some math discipline and understanding. If you're writing CRUD apps, you need to know what a Cartesian product is or why big O matters. Or how to calculate disk space requirements and transaction times.

[+] daphneokeefe|12 years ago|reply
Been doing this a long time and I've never had to "manipulate matrices for 3D geometry" and I don't plan on doing that.
[+] ry_donahue|12 years ago|reply
You're working in a database... Hence you're working with set theory. Set theory is a discrete math.
[+] nickflees|12 years ago|reply
> Rarely in math are you coming up with a new way to solve a problem, but in software development you do that all the time!

False. This guy is making a case against a subject in which he clearly lacks experience.

[+] pnathan|12 years ago|reply
It's amazing what someone who propounds ignorance is ignorant of.

I must remember not to work with/for/over this person.

[+] jk801|12 years ago|reply
An algebraic solution might have a unique answer, but Math is more than pure Algebra. For instance, Machine Learning problems rarely have a single solution and I would argue that Machine Learning is tightly related to Math.
[+] Ixiaus|12 years ago|reply
Reading comprehension and written / verbal communication are essential skills in many professions, not just programming. Any area of applied skill that is producing a result for humans requires strong communication - it's a relationship between humans (some programmers forget this).

I agree with you on that point, but I disagree with you on the point that it is more or less important than mathematics. You may not be applying a lot of higher math to your day to day job because most of it has been taken care of already in the libraries you use but that absolutely does not mean you wouldn't benefit from a deeper understanding of mathematics and how it informs computing.

I once thought like you, until I came across Haskell. Once I got through learning the language (which also requires you learn a few concepts from mathematics) I understood what is so powerful about it: idiomatic (and even non-idiomatic, to a degree) Haskell and the programmers that use Haskell - they go hand-in-hand - harness the ideas behind mathematical abstraction to produce programs that are so elegant. I've taken many of the concepts I learned in Haskell to mundane languages (Python notably) and have made my software in Python cogent, elegant, and easier to understand (note this even comes back to your argument around comprehension and communication). I'm still not a perfect programmer but I feel like the communication of my thought into a program is better because of my appreciation and deeper understanding of math.

Not to mention the foundational role mathematics plays in algorithms and data structures, if you understand the mathematics behind quantifying the time complexity of an algorithm, you're far more likely to pick the right algorithm for the job.

Also, logic could not be greater than Mathematics; Mathematics is more general and describes logic.

[+] tokenadult|12 years ago|reply
I see that the blogger whose post is kindly submitted here led off by noting the importance of clear written communication, and I fully agree. The thrust of the post here, that much of what is taught in the standard school curriculum in mathematics is neither strictly necessary nor especially helpful for becoming a developer, is also a good point. That agrees with Andrew Lih's response to the annual Edge.org question this year,[1] in which Lih suggests retiring calculus as a barrier to entry (a "hazing ritual") to careers in programming and coding.

Overall, the blog author is correct that development of good written communication skills is central issue for most software development today: "A very smart person doesn't need to write any comments, the code is obvious to them!" On the other hand, as another several comments here have pointed out, learning more mathematics often allows insight into programming problems that completely escapes people who haven't learned the same mathematics. So it's not a bad idea to practice written communication on the job in part by commenting code so that colleagues see what mathematical approaches were built into the code.

[1] http://www.edge.org/response-detail/25521

[+] kemiller2002|12 years ago|reply
What I think fails to grasp is that this is correct but only to a point. Sure someone can learn to code without doing math, but as things scale, this becomes really important.

How do you calculate distance between two points? Math. How do you timezone calculations? Math. How do you know what data structure is going to be small and fast enough to not overload a server and still get the job done? Math. How do you determine if two populations are statically different? Math. These are becoming everyday things. We've moved beyond the mid 90s where having a web page and writing some JavaScript was well enough for most companies.

[+] nmc|12 years ago|reply
The author seems to confuse "what [he] would call math" with calculus or counting.

As pointed out, logic is a big part of software. But calculation skills (eg understanding that x is actually a number, not a letter) are also mandatory for a full comprehension of the abstraction going on in programming languages. Not to mention arithmetic — modular operations, index of an array...

Finally, if you wish to get a grasp of functional programming, lambda-calculus or curryfication, you will need a basic intuition of set theory.

Also, concerning logic and math: mathematics are built with logic (4 rules of demonstration). You can consider logic as pre-dating math, but not the other way around.

[+] xradionut|12 years ago|reply
The article writer is woefully ignorant. How can you be a career developer and not understand big O notation? Logic isn't just true or false, it's going deeper and learning k-maps and state machines in the bare basics of a programmers education. And it's math turtles all the way down...
[+] cja23|12 years ago|reply
Push-ups are not necessary for football. As a football player, catching and running with the ball are more valuable than push-up proficiency.

We don't teach every child math because we want them to become mathematicians or anything in the STEM fields, just like we don't teach them PE (physical exercise) because we want them to become professional athletes. We have mandatory PE classes because having a fit and healthy body will serve you (and society at large) extremely well no matter what you end up doing in life. In the same vein, we have mandatory math classes because having an agile and skilled mind will also serve you (and society at large) extremely well no matter what you end up doing in life.

The article claims written communication and reading comprehension are so much more important than math to a developer. This is like saying catching balls and breaking tackles are so much more important than push-ups, pull-ups, or all the weight-lifting you do in the gym. Learning math is a great way to enhance and improve your communication skills! Try explaining some advanced math concept to a kid sometime.

[+] yoshokatana|12 years ago|reply
As others have said, logic and basic algebra are integral to programming, but I understand the sentiment that "hard math" isn't necessary. And I sort of agree. As a front-end developer, I don't really need to be an expert in algorithm design to do my job competently, and I don't need to know statistical analysis or any other branch of higher math. That being said, learning some higher math on my own has made me a much better programmer, and allows me to write code that is far more efficient than I could otherwise.

As for the article, I don't think literacy and math knowledge are mutually exclusive. It's not a zero sum game. A great programmer should be able to break down problems logically, improvise and expand on algorithms, and explain what he (or she) is doing to non-technical people. All of those are important.

[+] mathattack|12 years ago|reply
Nothing is needed in terms of academic training - a good mind can work around lots of things.

If you're a poor communicator, you can still develop software, it's just harder. Same with knowing low level languages, and what goes on in Operating Systems. And math too. We all bring toolsets. The more tools, the better.

Also - logic is very much a part of math. Good geometry classes involve a lot of proving. In the end, the lesson from Geometry is proving things as much as it is the sum of angles of triangles between parallel lines.

[+] increment_i|12 years ago|reply
This might be true for the low-hanging fruit of CRUD apps, but ask the engineers working on self-driving cars, or the fringes of aerospace technology how important math is.
[+] bhouston|12 years ago|reply
I work in computer graphics software development. Math is an absolute necessity in this field. But only up to a degree, you do not have to be able to do multivariable calculus, but you need to generally understand matrices and vectors.
[+] epochwolf|12 years ago|reply
Matrices and vectors are useful in graphics. But I've never seem them used outside of graphics work.
[+] RogerL|12 years ago|reply
"The majority of code for something like Facebook or Twitter probably involves very little math."

So it is clear from word choice that the author is just guessing. But Facebook does image recognition, it does ad placement, it does graph networks, it has EdgeRank - Facebook is only possible via math. Sure, perhaps there is more code written to push bits around on the front end and such, but it lives and dies by math. But even screen layout requires math - dealing with resizing screens, different ad and post sizes and so on - there's a lot of admittedly basic algebra there.

With that said, I agree with much of the content of the post. I run into far too many engineers with no real skill at writing or communication, and that is also a large hindrance in the field. Naturally, every job will require a different balance of skills, and no absolute statement is possible.

However, I would say now more than ever math is required to really excel. Write the front end to some CRUD app? Sure, you can do that (where "you" is somebody with no experience). Write a side scroller? Maybe, just maybe you can pull that off. But that awesome new job writing a game that involves game physics. No, you can't do that. Hey, we need some image processing on this app. No, you can't do that. Let's track some objects. No, you can't do that. How about schedule some jobs in the factory? No, you can't do that. Hey, we have this product idea where we will use an arduino to... no, you wouldn't understand PID controls, you can't do that. Sigh. Want to write your 1023rd CRUD app? Slap some javascript together? Sure, you can do that.

This is why when the topic of university (should I go) comes up I am always a proponent. I was taught to write, I was taught to balance books and run a business, I learned calculus, linear algebra, AI, numerical methods, EE, mechanical engineering, thermodynamics, physics, statistics, chemistry. I've used all of that in my career (this week at work I am implementing some Kalman filters, for example), and my only regret is that I didn't take more math courses. The valley is on fire now with jobs requiring math - machine learning, hardware interfaces, augmented reality, and so on.

If I had a friend with no real math and an interest in programming I would not dissuade them, but math is very important in an important subset of programming.

Finally, I have to say I've watched a lot of people struggle to put a program together which has nested if statements or multiple and/or conditions. Generally speaking, the people that struggle to do it don't have any math skills. So even if you are programming something that doesn't require math knowledge, it certainly requires math aptitude.

[+] j2kun|12 years ago|reply
I agree that writing skills are important, but I also think that strong mathematicians are skilled writers as well. One general drive in mathematics is to lay out complicated ideas in ways that make the resulting theorems and questions seem completely natural and even trivial. It's no small task, and in my experience it has drastically improved my technical writing skills (where before math I only had historical/literary/debate writing skills).
[+] jackmaney|12 years ago|reply
Not to mention all of the machine learning behind the recommendation systems that try to figure out the best ad to show to a given person at any given time...
[+] acconrad|12 years ago|reply
If you were to take more math classes now, what subjects would you study? Who is to say you can't do this on your own now?
[+] namelezz|12 years ago|reply
Sigh! Another child left behind. From this child's point of view, because "people who are good at math are good at breaking problems down into parts, recognizing patterns, and applying known formulae to those parts to arrive at the one right answer", they rarely come up "with a new way to solve a problem." So that's how a good Software Engineer uses Logic to reason. You need to take math more seriously in school or you may go to a wrong school. There are more than one way to get to the solution you are just too lazy to discover a new way to do it. And if we rarely come up with a new way to solve unfamiliar problems then we all died out long time ago.
[+] Jtsummers|12 years ago|reply
> The majority of code for something like Facebook or Twitter probably involves very little math.

This may be a true statement as I've never seen the Facebook or Twitter codebases. However, as others said, logic is a part of math and logic is essential in code design.

Along with that, I'd wager most developers could make a facebook-like or twitter-like system. But their first pass is going to be crude, bloated, non-scalable. Understanding how data flows across the system gets reflected in both the software and hardware. That analysis relies on an understanding of graph and network theory and statistics. Perhaps not deep knowledge, but it's still math.

[+] ry_donahue|12 years ago|reply
This is essentially a duplicate of the plethora of HN articles arguing for or against considering computer science a math. And it always comes down to whether or not the author is working on anything remotely significant. The entire fields of machine learning, large data processing and natural language processing is heavily rooted in the calculus, set, and fuzzy set theory... which in some shape or form is the evolving requirements of most large systems (text or graphics). None of the math is abstracted away and a fundamental understanding of the mathematics is the difference between the programmer making 60k and the programmer making 150k. So why would anyone want to state it's 'un"necessary"'. Personally... in the case of fuzzy sets and classification the philosophies of logic, reasoning, and mathematics require a balance of the two to deduce the proper functions.

I do agree that communication and prose is important to a polyglot professional's resume. However not seeing a connection between linguistics and mathematics is naive. Symbolic transformation and interpretation is the same no matter what the flavor.

Can we please get over the fact that no one writes binary anymore and look at the entire field of "software development" - graphics, ai, information theory, distributed systems, anything involving a graph

Essentially... learn it all. That is unless you want to excel at communication and fast track yourself to project management.

[+] maroonblazer|12 years ago|reply
As someone who got into programming late in life - and, with the exception of geometry, began sucking at math starting with algebra - I never graduated beyond Algebra 2 and trig (and barely passed those classes).

The biggest stumbling block I run into with programming relates to the adage "There are only three numbers in computer science: 0, 1 and n". I can easily deal w/ the '0' and '1' cases, but struggle making my programs work with the 'n' case. I've attributed this to my poor math background, so have begun to pick up where I left off with an aim to learn Pre-calc and then Calculus.

However I'm wondering if this isn't a mistake and rather I should focus more on logic and, perhaps set theory (I'm not even sure I know what that is and whether it requires higher level math)...?

If the above is true - I'm curious to hear from those with more advanced math backgrounds - then it may lend at least some credence to the author's point.

[+] jackmaney|12 years ago|reply
Although calculus isn't a bad thing to learn, you might want to consider picking up some discrete mathematics and combinatorics, instead.
[+] Jtsummers|12 years ago|reply
I would look into discrete math topics. I'm not able to make recommendations on resources or textbooks, however. In the world of mathematics there are some parallel paths. They feed back into each other, but you can often study one field in depth and stay in the shallows with the rest.

Some useful math topics:

Set theory is related to relational algebra, which forms the foundation for relational databases. You don't need to know the math to use databases. There are methods, rules that you can apply when constructing databases that are, essentially, a distilled version of what others have discovered through the study of the math itself. But having a better understanding of the math side can help you to go beyond just a few memorized rules or querying stackoverflow.

Language hierarchies. This is a mathematical CS theory topic. Think about matching strings, you use a regular expression. Some structures, however, are not matchable with a regex. They're too complicated, that leads to context free grammars. Knowing the different classes and when to use each can be very useful. [1]

Big-O notation. This is an important concept in algorithm analysis. This gives a way to talk about the efficiency of a program and relate the efficiencies of different parts. It uses a moderate amount of calculus, but not much. Really, like with using a DB without knowing relational algebra, you can use the calc required for this sort of analysis without knowing calculus.

[1] This comes with a story. At an old job they needed to write their software design document (SDD) as part of a certification package. Now, ideally this is down concurrent to development (or prior if you're a waterfall/bullshit method organization). They, however, hadn't started on it. In the SDD there were typically flowcharts, pseudocode or some other high level representation of the code. To accomplish this a dev wrote a C->Pseudocode converter that really just used regular expressions and a global search/replace. This lead to some amusing ommissions and extra changes, and a bullshit document. if -> IF, while -> WHILE, { and} were omitted with the intent of replacing the } with ENDIF or ENDWHILE. They ended up just replacing them with END because they didn't know if it matched to an if, a while, a function or what. While I still think the task was bullshit (done at the wrong time and zero-added value, possibly negative for future maintainers), if they wanted to do it right they should have used a proper parser. C parsers are available that would know the difference between a } matching an if, while, for or function block. That would know the difference between `if` in a variable name and `if` the keyword. They could have at least made a more presentable version of their hack.

[+] vezzy-fnord|12 years ago|reply
I don't think anybody has argued that a generic developer needs much mathematical knowledge beyond Algebra I (even basic arithmetic will do) and Boolean/gate logic.

It's when you start diving beyond the matrix of batteries-included frameworks and your development toolkit into topics that begin to touch deeper aspects of computation, that mathematics becomes important and truly shines its beauty.

You still don't need to be an expert pure mathematician (those work on problems of their own), but above-average mathematical competence, particularly in aspects like algorithmic complexity, theory of data structures, automata theory and miscellaneous discrete math, is certainly all essential for a good programmer.

But yes, if your end goal is to simply deliver a product, we've advanced far enough where you can do it safely with minimal cognitive workload. One should not be too pragmatic or too theoretical, but find balance between both and be versed in both.