# You Don’t Need Math Skills To Be A Good Developer But You Do Need Them To Be A Great One

A little while ago I started thinking about math. You see, I've been writing software for quite a few years now and to be totally honest, I haven't yet found a need for math in my work. There has been plenty of new stuff I've had to learn/master, languages, frameworks, tools, processes, communication skills and library upon library of stuff to do just about anything you can think of; math hasn't been useful for any of it. Of course this is not surprising, the vast majority of the work I've been doing has been CRUD in one form or another, that's the vast majority of the work most developers do in these interweb times of ours. You do consulting – you mostly build websites, you work for a large corporates – mostly build websites, you freelance – you mostly build websites. I am well aware that I am generalising quite a bit, but do bear with me, I am going somewhere.

Eventually you get a little tired of it, as I did. Don't get me wrong it can be fun and challenging work, providing opportunities to solve problems and interact with interesting people – I am happy to do it during work hours. But the thought of building yet more websites in my personal time has somewhat lost its luster – you begin to look for something more interesting/cool/fun, as – once again – I did. Some people gravitate to front-end technologies and graphical things – visual feedback is seductive – I was not one of them (I love a nice front-end as much as the next guy, but it doesn't really excite me), which is why, when I was confronted with some search-related problems I decided to dig a little further. And this brings me back to the start of this story because as soon as I grabbed the first metaphorical shovel-full of search, I ran smack-bang into some math and realized exactly just how far my skills have deteriorated. Unlike riding a bike – you certainly do forget (although I haven't ridden a bike in years so maybe you forget that too :)).

Learning a little bit about search exposed me to all sorts of interesting software-y and computer science-y related things/problems (machine learning, natural language processing, algorithm analysis etc.) and now everywhere I turn I see math and so feel my lack of skills all the more keenly. I've come to the realization that you need a decent level of math skill if you want to do cool and interesting things with computers. Here are some more in addition to the ones I already mentioned – cryptography, games AI, compression, genetic algorithms, 3d graphics etc. You need math to understand the theory behind these fields which you can then apply if you want to write those libraries and tools that I was talking about – rather than just use them (be a producer rather than just a consumer – to borrow an OS metaphor :)). And even if you don't want to write any libraries, it makes for a much more satisfying time building software, when you really understand what makes things tick, rather than just plugging them in and hoping they do whatever the hell they're supposed to.

The majority of developers will tell you that they've never needed math for their work (like I did a couple of paragraphs above :)), but after musing on it for a while, I had a though. What we might have here is a reverse Maslow's hammer problem. You know the one – when you have a hammer, everything looks like a nail. It is a metaphor for using a favourite tool even when it may not be best for the job at hand. Math is our hammer in reverse. We know the hammer exists but don't quite know how to use it, so even when we meet a problem where our hammer would be the perfect tool, we never give it serious consideration. The screwdriver was good enough for my granddaddy, it was good enough for my daddy and it is good enough for me, who needs a hammer anyway? The trick with math is – people are afraid of it – even most programmers, you'd think we wouldn't be, but we are. So, we turn our words into a self-fulfilling prophecy. It's not that I don't need math for my work it's just that I don't really know it and even if I do, I don't know how to apply it. So I get by without it and when you make-do without something for long enough, after a while you don't even notice it's missing and so need it even less – self-fulfilling prophecy.

Here is some food for thought about something close to all our hearts – learning new skills. As a developer in the corporate world, you strive to be a generalizing specialist (read this book if you don't know what I am talking about). You try to be decent at most things and really good at some. But what do you specialize in? Normally people choose a framework or two and a programming language and go with that, which is fine and worthwhile. But consider the fact that frameworks and to a lesser extent languages have a limited shelf life. If you're building a career on being a Hibernate, Rails or Struts expert (the struts guys should really be getting worried now :)), you will have to rinse and repeat all over again in a few years when new frameworks come along to supersede the current flavour of the month. So is it really the best investment of your time – maybe, but then again maybe not. Math, on the other hand is not going away any time soon. Everything we do in our field is built upon solid mathematical principles at its root (algorithms and data structures being a case in point), so time spent keeping up your math skills is arguably never wasted. And it, once again, comes down to really understanding something rather than just using it by rote – math can help you understand everything you do more deeply, when it comes to computers. Infact, as Steve Yegge said, what we do as programmers is so much like math we don't even realise it.

## What/Who Makes A Difference

You don't believe me, then consider this. Most of the people who are almost universally respected  in our field as great programmers are also great mathematicians. I am talking people like Donald Knuth, Edsger W. Dijkstra, Noam Chomsky, Peter Norvig. But then again these guys weren’t really developers, they were computer scientists, so it doesn't really count right? I guess, but then again, maybe we shouldn't really talk until our output in pure lines of code even begins to approach 10% of what these people have produced. Of course, you can be successful and famous without being a boffin, everyone has heard of Gavin King or DHH. That's kinda true (although it's an arguable point whether or not many people have heard of Gavin or DHH outside their respective niches), but "heard of" and universally respected are different things, about as different as creating a framework and significantly advancing the sum-total of human knowledge in your field (don't get me wrong, I respect Gavin And David, they've done a hell of a lot more than I have, but that doesn't make what I said any less of a fact). How is all of this relevant? I dunno, it probably isn't, but I thought I'd throw it in there anyway since we're being introspective and all.

The world is getting filled up with data, there is more and more of it every day and whereas before we had the luxury of working with relatively small sets of it, these days the software we write must operate efficiently with enormous data sets. This is increasingly true even in the corporate world. What this means is that you will be less and less likely to be able to just "kick things off" to see how they run, because with the amount of data you'll be dealing with it will just grind to a halt unless you're smart about it. My prediction is that algorithm analysis will become increasingly important for the lay-programmer, not that it wasn't before, but it will become more so. And what do you need to be a decent algorist – you guessed it, some math skills.

So, what about me? Well, I've decided to build up/revive my math skills a little bit at a time, there are still plenty of books to read and code to write, but I will try to devote a little bit of my time to math at least once in a while, because like exercise, a little bit once in a while, is better than nothing (to quote Steve Yegge yet again). Of course I have a bit of an ace up my sleeve when it comes to math, which is good for me, but luckily with this blog, we might all benefit (I know you're curious, I'll tell you about it soon :)).

## Where Do You See Yourself In 5 Years

So, is all this math gonna be good for anything? It's hard to say in advance, I am pretty happy with where I am at right now and so might you be, but it's all about potential. End of the day, if you're a developer in the corporate world you don't really need any math. If you're happy to go your entire career doing enterprise CRUD apps during work hours and paragliding or wakeboarding (or whatever trendy 'sport' the geeky in-crowd is into these days) during your off time then by all means, invest some more time into Spring or Hibernate or Visual Studio or whatever. It will not really limit your potential in that particular niche; you can become extremely valuable – even sought after. But if you strive for diversity in your career and want to have the ability to try your hand at almost any activity that involves code, from information retrieval to Linux kernel hacking. In short if you want to be a perfect mix of developer, programmer and computer scientist, you have to make sure you math skills are up to scratch (and hell, you can still go wakeboarding if you really want :)). Long story short, if you grok math, there are no doors that are closed to you in the software development field, if you don't – it's going to be all CRUD (pun intended)!

Images by Beni Ishaque Luthor, Scott Laird and arturodonate

• http://www.moserware.com/ Jeff Moser

Good thoughts!

I think a lot of programmers were turned off to math by boring classes that focused way too much time on how to calculate rather than applying it. This typically happened early in their life and was unfortunately followed by reinforcement in later classes that *that* is all math is.

The biggest leap I took in math was when I started unlearning this math brokenness due to a great math teacher in middle school. Had this not happened, I doubt I would have been excited about the math.

On my blog, I’ve been trying to show very cool applications of slightly advanced math such as explaining how the Xbox Live TrueSkill algorithm uses some basic statistics to rank and match people. It’s a beautiful application of “statistical machine learning.” In addition, I tried to show how the Advanced Encryption Standard (AES) uses some really neat finite field algebra.

The hardest part is overcoming people’s fear. This fear has been reinforced so much that you really have to go out of your way to break through the fearful blank stare people get when anything math related is mentioned. I’m just trying to take baby steps now; it’s really hard.

Math is simple language that has been refined for centuries. It’s sad that so much fear is associated with it. Leslie Lamport’s interview on Channel9 goes into this more.

• http://www.skorks.com Alan Skorkin

Hi Jeff,

I agree math is taught incorrectly, but you almost have to go through the pain and still retain enough will to figure out how to better learn it for yourself. Either that or get really lucky to find someone who has who can help you. Especially considering that as far as programming is concerned there are very specific areas of math that can be really helpful and others that are less so.

Good on you for trying to get Math out there in a more interesting fashion for the masses. This blog will always remain primarily about software development, but since I now believe math to be a fundamental part of it, I will likely do quiet a few math posts along the way. Now all I need to do is to figure out the best way to get formulae on here :).

• Benjamin Fedder Jensen

I’m studying computer science, but I’m no math shark. However, linear algebra, set theory and logic (both propositional and predicate) is great tools, if not necessary tools, for both understanding algorithms and applying them successfully. (Especially looking at fitting an algorithm to your specific purpose, which requires actual understanding in order to alter/tune it, is very satisfying)

Most problems that require math are big however. Because in small applications, with small problems, it doesn’t matter if something runs in logarithmic, linear or square etc. But just imagine what people at Facebook for example experiences, when they went from 1000 to 10000, or 10000 to 100000. Most likely most of their code just died and deadlocked, or it would if it wasn’t designed for large problems. And that’s what math gives you the ability to create.

A webdeveloper without math skills, wouldn’t be able to make a large site. Success might simply kill his system, and more hardware is never a solution :)

• http://www.skorks.com Alan Skorkin

Hi Benjamin,

I believe that the era of small applications for small problems is coming to a close, software has set the expectation for constantly getting bigger and better and giving you the ability to do more.

And you make a very good point about facebook or similar sites< i would hazard that many sites would have had to completely rewrite their core when they grew to a certain size, just so that they could scale. The ones that didn’t probably struggle with it constantly.

• Sorpigal

This is spot on. I’ve known for years that a lack of math is what keeps me at a mediocre programming level and my primary barrier to fixing the problem is that I remember hating math textbooks. It’s way, way too much abstract theory and not enough “how to apply this” type stuff.

Having been doing this programming thing for a while one thing I have learned is that knowing the theory is hugely beneficial, but that you cannot learn it *first*. Or, rather, learning it first is highly inefficient. If you had to begin by learning about bits, algorithms, and data structures I think few people would stick with it and learn to program. If instead you start with basic syntax and immediate results (“here’s how you do this”) and only then go back and explain why and how it works, you get more people who will learn. Some will stop at the how, but most, I think wont.

In mathematics the focus is more on learning the theory first, or at the same time as the practice, and that turns people off. It certainly has turned me off such that any time I think about it the fear of this learning process drives me away.

What we need is “Math for programmers” – a course that teaches math by having you apply it immediately in writing programs. I’d sign up in a heartbeat.

• Joey

Sorry for reigniting such an old thread, but your comment makes an excellent point Sorpigal. I’m close to finishing my B.S. in computer science and I tend to see that most computer science/engineering students keep with programming because it is generally taught at a much higher level in the beginning (C, C++). Whilst lower level, native assembly programming is taught later after the student is already comfortable with programming concepts. It leads to me question whether or not an upper division mathematics curriculum can be practically partitioned into a similar structure that allows for a student turnaround as effective as learning programming.

Great discussions here. I will be reading this blog more often in the future.

• Happy

I see what you mean, however mathematics needs to be thoroughly explained and proved within the confines of one class. The applications are infinite so the known applications make up different courses. For example… Algebra the most common and simple form of high school math. “Why do we need to know it?” You need it to form a foundation for calculus and Linear Algebra. That’s when the applications in the real world start to become obvious. But even then you need physics chem and engineering to see why you had all those trig drills and integration problems.

• rich

• http://www.skorks.com Alan Skorkin

I actually have zeroed in on a several :). You only need a few to get up to quite a decent level of math skill, it is a surprisingly un-daunting task. I’ve been meaning to do a quick post about it in a little while, but you won’t go too far wrong if you pick up a copy of Concrete Mathematics: A Foundation for Computer Science by Knuth et. al.

• Colin

The Concrete book has three very famous authors (or at least one of them is very famous) but you will find the contents rather hard to chew on. I’ve seen a lot of better math books out there, just take a look at how complicated and convoluted the chapter on sums is, then maybe you will agree with me. The authors try very hard to show to the reader how smart they are, they even introduce new fancy but useless notations that are only making the subject even more confusing, and I do not think they care too much if the subject is clear or not, or if anybody understands the book or not. Unless you are very strong already in math I really recommend that you buy another book – but if you are already strong, why would you need it then? Alas, if you are keen enough to try it, there are lots of scanned copies of it floating around (all editions), download one and take a look at it first – this book is not only hard to digest, it is also expensive (around US$80.00 plus tax)! • Mikael Hi, I’m finding myself in that type of situation right now. Maybe I feel like I’m lacking in some computer/networking/development areas too, but thanks for the additionnal motivation to get better ! • http://www.skorks.com Alan Skorkin No worries, any time. If it any consolation I find it just as difficult to motivate myself, so does everyone I believe. The difference between those who succeed and fail is the fact that the successful ones push through the lack of motivation and do it anyway. • http://www.allthingsintelligent.org Srikanth Vidapanakal Hi Alan, Excellent Article and sums up my state of my mind too. After spending 12 years in IT industry, I am recently been working on several problems involving scalability, availability aspects in technology areas such as Big Data Analytics I am wondering and wishing I had advanced Math skills. Nevertheless, I started learning Math yet again, currently studying Trigonometry and Calculus. Subsequently I plan to study Linear Algebra, probability and statistics. My overall objective is to work on Machine Learning. I started enjoying Math so much that I am wondering why I did not pursue post-graduation in Mathematics :) • http://brianyamabe.com Brian Yamabe I agree that we should consider improving our skills in areas that transcend frameworks and languages. It seems that if you are a developer (I’m using the terms as outlined in your other post) and want to lean toward being a programmer, then math makes sense. But what about improving your business skills (something “The Passionate Programmer” touches on) or design skills or user interaction skills, etc. These obviously move you away from a purely technical concentration and won’t improve the programmer skills that Google and Microsoft are looking for, but maybe you can be great not like Norvig or Knuth, but like Woz or Gates. I think adding math to your skill set won’t hurt, but I’m clinging to the hope that it is not a necessity to standout. You see, I stink at math and have no passion for it :-) • http://www.skorks.com Alan Skorkin Hi Brian, There is absolutely nothing stopping you from improving your business skills along with improving your math skills. It is not one or the other, you can successfully do both. The thing to remember is that, I highly technical person can still have great people skills, I would even argue that it is more critical for highly technical people to have great interpersonal skills otherwise you end up talking to yourself (people don’t understand what you’re saying unless you watch yourself). I’ve got some very strong opinions on this, infact I should probably do a separate post :). But as you say, there will always be a place for a less technically oriented individual. It is just that you may find yourself forced to move further away into less technical stuff and into more businessy roles and you may not want that. I do believe that with things like multicore and distributed computing etc. becoming more and more prevalent, developers will need to be more technical than they have been in the past. • http://kevinelliott.net/ Kevin Elliott Alan, You make some great points. I’ve often shared some of the same feelings about corporate work, which is why I’ve found myself *not* working for large corporations for most of my career. But, as you also mentioned, I tend to find the same repetitive and mundane work in many other sizes and shapes of companies. To keep things interesting, I’ve often tried to find new skills to add to my abilities that will complement my existing talents and make me more *useful* (not necessarily more *desirable*). Learning math seems to be one of those areas of ability that would make someone more useful. Very quickly I can see that it would make a programmer more familiar with constructing algorithms that are optimized, and make it easier to construct more complicated applications that take on user roles (AI: fuzzy logic, neural nets, etc). These are often areas that most programmers find challenging, if not out-of-their-league. You have certainly inspired me to take on learning math too. Over the last year I’ve been lucky enough to have a few math nuts near me on occasion, so I was already interested in interesting paradoxes and math parables. Now it’s time to take the leap and get started. Where do you think a good place to start is? Regards, Kevin • http://www.skorks.com Alan Skorkin Hi Kevin, As I mentioned in one of the comments above, I am planning to do a quick post at some point. However, from personal experience, the best place to start is to pick up a copy of your high school math book and go through it again. Any math study you do that will revolve around programming will assume that kind of knowledge (i.e. you know how to differentiate a function and simplify equations, matrices etc.). It will take you surprisingly little time to refresh your high school math skills and the reward will be the fact that you will be able to grok everything you learn subsequently much faster. • http://breckyunits.com breck good post. i came to the same realization last year. try khanacademy for a good resource to pick up math subjects you may have missed(i’m about 1/3 of the way through linear algebra). • http://www.skorks.com Alan Skorkin Good for you, although I am taking a somewhat different approach myself, but then again I have an advantage that most people don’t have, as I mentioned in the post :). • http://cogwheel.info Matthew Orlando I heartily second Khan Academy. • R Glen Cooper This is an article I wish I had written. As a mathematician turned programmer, I’m delighted that so many fundamental ideas in computing stem from mathematical concepts. • http://www.skorks.com Alan Skorkin It’s quite freaky when you think about, until you go back to your university texts and realize it was all right there for you to see, it’s just that you skipped over most of the formulae instead of trying to understand them and spent the rest of your time drinking and partying :). • Jason Baker For the record, Noam Chomsky isn’t a programmer or a mathematician. He’s a linguist. :-) • http://www.skorks.com Alan Skorkin Hi Jason, Hehe, fair point :). Still, for a linguist he’s done a hell of a lot for computer science, no? • Seif Sallam your posts is becoming more interesting now :) , anyway it this issue was annoying me so much. • http://www.skorks.com Alan Skorkin Hi Seif, I am glad you liked it :). • cldwalker As a mathematician turned programmer, I like the direction you’re headed. But if you’re doing it for greatness, you’re doing it wrong. Just ask Grigori Perelman or Richard Feynman (if he were alive). • http://www.skorks.com Alan Skorkin It’s not about greatness at all, there are easier models to emulate if you’re looking for greatness. In my case it is about building a balanced set of skills in such a way that you’re able to work on whatever interests you in your field (because they’ll hire you), rather than being forced down a particular path by the shape of your skills and experience. It is essentially about giving yourself infinite options regarding the kind of stuff you want to work on. Makes for a more interesting, fun and fulfilling career. • http://matpalm.com mat it’s gonna all be about stats soon enough! trust me! :) • http://www.skorks.com Alan Skorkin Hehe, I am kinda preparing for that already I’ve been looking around for good stats resources :). I’ve scaled back looking at information retrieval stuff a little and trying to scale up looking at math stuff along with the 10 thousand other things I am looking into at the same time :). • Jan Peregrinus Excellent posting. I reached the same conclusion years ago. Math skills added to my programming skills opened me some doors that otherwise would not only have remained shut – I would not even have seen them ! It began for me one rainy working day when I had to devise a hash function… but that is a story too long for these comment-leaving realms. Anyways – thumbs up ! • http://technosophos.com Matt Butcher More than math skills, I think it is a matter of acquiring technical analytic skills. Chomsky, for example, worked closely with linguistics. Formal logics are also good for acquiring analytic skills that will most definitely come in useful for programming. AI probably owes as much to this branch of analytic reasoning than to standard math. Several people have already mentioned statistics and probability logics — those, too, will inform the programmer. Thought provoking post. Thanks. • Rahul This was like reading my mind. I’m going through a similar transitional phase. Though I’ve always been a pragmatic programmer at heart, I never really did anything to put it to use. I’m seriously thinking of joining a math course which will cover all those computational topics. Over the time I have zeroed in on these resources (I’ll be looking fwd to your post on this) - For beginners – Schaum’s Outline of Discrete Mathematics Intermediate – The Algorithm Design Manual (Steven S. Skiena) Advanced – Introduction to Alogrithms (Thomas H. Cormen) • http://www.skorks.com Alan Skorkin Hey Rahul, All those texts are excellent and I think that The Algorithm Design Manual and Introduction to Alogrithms particularly should be read by all. However especially for Intro To Algorithms you will already need a decent level of math skills otherwise you might find it tough going, so there are a few resources you can go through before that to make you life a little easier. • http://blogs.lessthandot.com/summary.php SQLDenis The sad truth is that some ‘programmers’ don’t even know how to do basic math, take a look at Do we need to know basic math as programmers? and you will see what I mean So, yes you don’t need advanced math for most programming task but you need to know basic high school math • http://www.skorks.com Alan Skorkin I do think you will need a little bit more than basic high school math, such as elementary number theory, sets etc. But a sold grounding in high school math will underpin all of these. • http://jproven.com Gobezu Sewu Alan, you do indeed make great points there and I really feel what you are telling. I myself spent huge chunk of my university period on math: combinatoric, logic, numerical analysis, mathematical statistics, fundamentals of analysis and algebra …. But but but, the fact is I left university and ended up within the defense sector and then the finance sector doing some heavy back end business intelligence lifting, and even then I never came in touch with any application hard enough to make me browse my math book shelf, and even more realistically since I always had side activities building my own business I never really had time to do so either, and now that I have moved on and have chosen my game of life being website related activities there is less of math. Now this might sound as if I am oblivious to what you are telling, definitely not, but I really don’t see myself having such amount of time, or for that matter who would, to really uncover the various frameworks I actually use, as my chosen game is building applications and not frameworks or any foundations I happen to use, other than when its really called for. So mate, I really don’t see how you go from the idea mentioned above to real world application as a website developer, where I chose to make my living, and I am not really asking you to make those dots connect for me, but reading your blog from top to bottom that was kinda of what I was anticipating your blog entry would boil down to, i.e. some real life examples on how you got to appreciate your math skills that would make me say yap yap Nevertheless thank you for a great post and it took me back to a sentiment I was carrying specially in my initial part of my carrier, i.e. why did I waste my 4 precious years (that’s how long M.Sc. takes in Sweden, if you are efficient enough to do it according to the program ;)…) when I saw all those high school graduates going from nothing to stardom during the Internet boom of ca. 2000. But I am ever grateful that I took my time back then b/c today with all my focus on earning this and that and doing other things in life and with a less sharp brain, b/c we need to confess you get to be less of that by the years, I wouldn’t have survived my first course. No doubt that math have given me skills to be logicial and adaptable enough but I wonder if I will ever have time to catch up on any of the various math blogs as much as I read such blogs as yours and 100s of other pure application related ditto. • http://www.skorks.com Alan Skorkin Hi Gobezu, I think if you scan the comments to this post, you will find what you’re looking for, with people having significant trouble in certain domains without maths skills. If you ever aspire to work in any of these domains, you will have no choice but to brush up. The clincher is the fact that these domains are some of the more interesting ones in software. • Pingback: Closer To The Ideal » Blog Archive » You do not need to know math to be a programmer, but it opens some doors • http://www.thomthom.net/ Thomas Thomassen I’m not a trained programmer – just learned various scripting and programming languages as a hobby. My job now is as a modelmaker at an architectural office making visualisations. Our main 3D app is SketchUp – which you can write plugins for in Ruby. Being former freelance web-designer this caught my interest and I am now constantly making small tools for my modelling workflow. But it occurred to me how little I have used math since I was in school. I hear myself saying “I’ll never have use of this!” – with the image of my old math teachers laughing a wicked mean laugh. Been starting to read up more on vectors, algorithms and general 3D programming theory as I find my plugins becoming ever more complicated. And the datasets are at times rather large with large complex models. Speed is always an issue – in quite a different way than with websites. • http://www.skorks.com Alan Skorkin Hi Thomas, A perfect example, of your job taking you in unexpectedly interesting directions and running into the need for math, this is exactly what I meant :). • Jawdy Alan, I’d firstly like to congratulate and thank you on an excellent article/post :-) As others have said, I too was taught the theory rather than application… and in a lot of cases, the theory failed to delve deep enough to unlock just how some higher level algorithm or equation was derived (my brain tends to say “yeah, but how did you get -that-?”, whereas a huge number of lecturers/teachers/profs would just say “that’s it, deal with it” or “oh, it’s PhD maths to understand where it came from). I’ve recently been delving into 3D programming along with CV (Computer Vision) stuff, which has forced me to push beyond everything I’ve ever learnt – I’m nowhere near where I need to be (yet) but seeing the applications of theories/equations/algorithms taught aeons ago, this stuff is actually sinking in! Thanks again, and for recommending the Concrete book, ordering myself a copy :-D • http://www.skorks.com Alan Skorkin This actually tends to be an issue for many developers, where pure theory gets them nowhere but as soon as they see some practical application, they experience those “Aha!” moments. As was mentioned in some of the comments above, we need to address the way we teach math at a fundamental level. You’re welcome, I’ll probably write up a post within the next 2-3 weeks which will details the resources/books that I have found for myself that would take you from reviving your skills, on to having a decent level of maths, enough to not be scared off by more :). The Concrete book is certainly on that list. • Wesley Parish Some very good points. You might’ve added Linus Torvalds as one of the programmers’ programmers who knows maths. To do any serious work in graphics programming – which by extension means games programming – you HAVE TO KNOW matrices. You can’t get away from it. To do any serious work in database programming, you HAVE TO KNOW set theory like the back of your hand. Etc … Personally, as someone addicted to solving problems, I find that I motivate myself well enough when I stop panicking about OMIGOD MATHS!!! EEEEK! and try to solve the problems … and then the adrenaline kicks in and … OMIGOD I actually enjoyed that!!! Can I do it again!?! Think of it as an adventure – which it is, and a problem solving genre, which it is, and you may find yourself without any maths anxiety at all. And a big cheesy grin on your face as you think of how much fun you’re having. • http://www.skorks.com Alan Skorkin Hi Wesley, That is definitely some good advice, I often find that if I solve the practical problem through code and then go back to the math, it not only increases my understanding significantly but also makes the whole thing easier and more interesting. It’s like a kind-of feedback cycle :). • Peter Bindels You’re a bit off. Great programmers don’t have a productivity you can measure in lines of code. It’s like asking how good a car is based on how many dollars you pay for it. Adding 2000 LOC to any code base won’t make it any better any more than paying$2000 more for your car will make it any better. You want the car that does what you need for the least amount of dollars – or the codebase that does what you want that is small. You don’t take the cheapest car for the same reason you don’t take the smallest amount of LOC – maintenance becomes a bitch and you’ll have to replace it too soon to be worthwhile.

Great programmers have a negative productivity if measured in LOC on most code bases. They’re the ones that take a hundred bug reports and fix it by removing the 100 lines of code that contain a bug, without removing any features.

• http://www.skorks.com Alan Skorkin

Hi Peter,

I agree with what you’re saying, the point I was trying to make with my comment is that people like Don Knuth have been at this for so long, the sheer amount of stuff they have written or been a part of is staggering. Adding 2000 lines of code to a codebase can make it much better if they are useful lines of code, wouldn’t you agree?

• Derek

I’m a programmer at a pretty large corperation, I will admit I write alot of CRUD apps, although once in a while I will spin one off that lasts for a few years. Although I don’t use alot of the higher math studies in my programming, I do however use math logic, I wouldn’t understand half of the problems I do without knowing how to break down a formula into something usable. I don’t use math, I use math skills. Most of the programmers I run into say the same thing.

• http://www.skorks.com Alan Skorkin

Hi Derek,

That is very true, but my suspicion is that we would all be very surprised how much more math we use if we actually KNEW more math.

• cbmeeks

“End of the day, if you’re a developer in the corporate world you don’t really need any math.”

I work in “Corporate America”. I’m the lead developer for an in-house logistics / financial application. I use math every day.

We have thousands of employees all being tracked by performance, their work is tracked to reflect cost, etc. Believe me…you can’t compute the cost of a worker loading a truck for an activity that is broken down into about 20 metrics without some serious computations.

We’re not all creating fluffy web apps. :-)

cbmeeks

• http://www.skorks.com Alan Skorkin

Haha, I stand corrected, and happy to be in this instance :).

• Gordon C

GIS is supposed to be the Next Big Thing. Try doing something meaningful with a map without using math.

• http://www.skorks.com Alan Skorkin

Good point, another area I haven’t even considered.

• Viktor Skarlatov

I used to be somewhat good at math in 7-8th grade. Then I stopped studying. I didn’t care about math much. Then in 11-th grade I was close to graduation so I decided I want to be a programmer and started studying programming.

I went to University to study informatics, started work and I still do not need any math whatsoever in my work hours and most of the classes in the Uni.

There is however this wild fascination with computer graphics that I’ve had in the back of my head for as long as I can remember, thinking how I loved to drool over new games that were on the bleeding edge of real-time rendering. I loved it, still love it and decided it is time to learn how to do these things. I knew there would be a ton of math that I will have to go over and assimilate and I am slowly progressing. Yesterday I finally understood how to draw a per-pixel lit icy sphere. This is probably the coolest thing I have ever done and even though it is not much it gives me the thrill and shows me, literally, what awesome power mathematics holds.

The most interesting stuff one can do with the computer are possible only if one understands the mathematics behind them.

• http://www.skorks.com Alan Skorkin

Hi Viktor,

Precisely my point, what you have found will be true for any software development area that is even mildly interesting, or at least what most developers would consider interesting :).

• Professor N. Ram

My friend, you are talking about thinking and not doing something out of habit. The tragedy about maths teaching is, most of the teachers don’t understand the subject rather repeat what is said in a text book. For example, no one teaches that addtion(+) is the basis of arithmetic and algebra. Multiplication etc. are just shorthand for terms involving large additions. For example, 5+5+5+5 has four 5s and 3 +s but using multiplication you can say 5 * (5 repeats itself four times) and so on. Factorial is successive self decreasing multiplication, such as 4! is 4x3x2x1. Exponentiation is self multiplication and so on. Continuous quantities have addition called “integration” – peace meal addition due to errors, so that the result, unlike the algorithm for algebra and arithmetic, has to be stated with the error boundary etc. Anyway, pattern recognition and pattern matching are the basis of mathematical models which try to abstract with limitations of any observed physical objects. Without maths skills, you export jobs to where people can think. Programmers are great people, but lack of maths tool bag will always undermine their ability to develop complex systems.

• http://www.skorks.com Alan Skorkin

Another good point, about how badly and incorrectly math is taught, not just in school, but everywhere in general.

• Joel Jauregui

A computer science professor once said, “an ounce of math is worth a pound of programming skill.” When I first heard it I didn’t think much of it, and even still since I am still not at a high technical level of programming I haven’t needed math much. Though it is something I often think about realize especially when trying to optimize my own algorithms and such, though I’m sort of lucky as I do enjoy math and am at least half-ways good at it :)

• boris

The analogy with the hammer is great. :)

• http://www.skorks.com Alan Skorkin

• http://swantron.com swiz

I did my undergrad in mathematics, and now develop banking software. Sadly, I assumed that math would be an integral part of this field…turns out that arithmetic is about it around here.

Hindsight being 20/20, I should have gone into optics. Lasers are awesome.

• http://www.skorks.com Alan Skorkin

It’s not too late yet :)

• David Gilbert

You can brush up your math skills for free, MITs Open Course Materials – Video Lectures and transcribed Notes. More than just MATH posted there too.
http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm#Mathematics

• http://www.skorks.com Alan Skorkin

Hi David,

Yeah, I second that, the MIT open courseware is top notch, their algorithms lectures are also awesome, if I ever find the time to actually watch them :).

• Shaun Hervey

Thanks for the article. I have a masters in literature and taught myself programming, so my math skills are pretty weak. I’ve been trying to bone up on math, but haven’t gotten far. Hopefully, you’re article will inspire me.

• http://www.dreamlogic.net Chris

The Passionate Programmer is a good book. I recommend it as well. But you can get far cheaper copies under its original title: My Job Went to India: 52 Ways to Save your Job.

http://www.amazon.com/Job-Went-India-Pragmatic-Programmers/dp/0976694018/ref=sr_1_1?ie=UTF8&s=books&qid=1269539520&sr=1-1

Prices are as low as \$3. I guess the original title is no longer politically correct :D

Awesome article btw! I have a math minor, and have found I’ve forgotten most of my math formulas. I need to study up!

• http://www.skorks.com Alan Skorkin

Hi Chris,

Good advice, this is actually the book I originally read, but I know have both, the original and the new version. Either one is great.

• Pingback: Who needs math skills?

• William

Hi,

I strongly disagree on what you have written, but probably don’t on what you think.

The great programmer among other things understands more deeply what’s happening in the code. That is for certain.

It means that if the problem that needs to be solved is math related, he will certainly study math.. if not, than he doesn’t need to…

I don’t see math as an important skill for programming, like understanding design patterns is for example.

the best you can say is “If you don ‘t study math you can’t understand and do nice things like Artificial Intelligence programming” which is right, so I say if you don’t study you can’ t understand do

Math is a knowledge that you can convince me to learn to achieve some kind of goal, but it’s not valid / important for all programmers so should not be discussed this way IMHO.

thx

• http://www.skorks.com Alan Skorkin

Hi William,

I do understand what you’re saying and I have been of this opinion before, but I find that I am moving away from thinking like this. Just-In-Time learning is only going to get you so far. You may have a decent chance to brush up on your Spring or Rails knowledge just in time to do a project (although even this takes months and years to learn deeply and well). But you have no chance of doing this with anything reasonably complex. Good luck brushing up on your information retrieval skills just in time for a project, by the time you become reasonably competent the software will have shipped ages ago :).

• http://www.daneshmandi.com Ali Daneshmandi

Alan,

Thanks for the post. I am in the same boat, too. You know when I was in school I had almost no idea about the usage of the math in my feature career. So I did not pay attention to it well. Times passed until the time I was working on a GPS application and I wanted to calculate the shortest path between two places on the map. Before that I always, argued that developers do not need to know math to be able to develop applications. When I reached to that problem I got that it is not always true. That problem had an exact solution in one of my math books in high school which talked about Graphs in it. Thanks God even I did not remembered the solution but an example of that problem was sticked in my mind. So I found that book and read it again to help me write the code that I wanted. Later on when I was working on UI of a particulare app, problem revealed again because I did not remmebered Geometry and Trigonometry at all.

BTW, If someone in my age 26 who does not remmeber math and wanted to start learning math from scratch. Is there a book or sereies of books which can help?

Thanks.

• http://notoryus.blogspot.com notoryus

Math Refresher for scientist and engineers by John R. Franchi
http://www.amazon.com/Math-Refresher-Scientists-Engineers-Fanchi/dp/0471757152

I’ve been using the book to refresh my college Math which I learned 5 years ago.

• http://www.skorks.com Alan Skorkin

Hehe, that is one of the 2 books I am recommending in my upcoming blog post as a good one to start refreshing your math skills, before moving on to other stuff :).

• http://www.skorks.com Alan Skorkin

Hi Ali,

I already mentioned the Concrete book in one of the comments above, but as I also said, I will do a post soon about just this topic i.e. a series of books you should look at to become reasonably competent at math as a programmer (in a reasonable amount of time), so stay tuned for that.

• http://notoryus.blogspot.com notoryus

Nice article!

When I am in college, never really took math seriously. I actually flanked some of my calculus and trigonometry classes. I though that learning new technologies would be enough to make me a top of the line software engineer. Never reached the top status but my skillset got me paid slightly higher than the average software guys, with no math whatsoever. But then I got bored with the usuall stuff, web services, CRUD based app, integration until I landed an image processing job where Math is essential. I have to relearn basic stuff from basic algebra to applied mathematics because I saw how numbers and mathematical models where used on image processing. This hit me big time and saw math in action on a real world application.

• http://www.skorks.com Alan Skorkin

Perfect example, thanks for sharing it, luckily you were able to get that image processing job despite the rustiness of your math skills.

• http://notoryus.blogspot.com notoryus

Luckily for me I am still able to keep up with the mathematical requirements on my present projects. Not a mathematician though, but willingness to learn is the key on absorbing a lot of this information.

Some people can read a musical score and in their minds hear the music…. Others can see, in their mind’s eye, great beauty and structure in certain mathematical functions….Lesser folk, like me, need to hear music played and see numbers rendered to appreciate their structures.
Peter Schroeder

• http://www.virtualit.com David Taylor

Great article and your right opens doors. Even thought a majority of programmers are having their periods over this article eventually they can use some off the many resources available. I am currently a CS student because I wanted to broaden my horizons and when I feel the teacher has not been clear I go here. Thanks

• Pingback: Math skills » Raphael Michel

• Joseph Okharedia

Hi Alan,
I completely and whole-heartedly agree with you. I’ve been CRUDing for 5 years now and I’M BORED. I want to build hardcore systems instead of using pre-built systems and making thing pretty. I need to knock down my fear of maths and this post has encouraged me in that direction.
Thank you for such a great post.

• http://droope.wordpress.com droope

Great post, I have clicked like 10 of the links in it.

You have inspired me to study math.

• mosurh

Great post! Would like to see a compiled list of books in another post. I am a Maths major but have forgotten most of the stuff in time. While I have the urge to read up again time is a big deterrent.
Much as one acknowledges the shallowness of frameworks thats what brings home the bread.For me to go back to Math I need time which means I have to ignore the in-demand technologies for some time and still hope to stay current in the market.
It is not that people dont want to pursue Math, it is just that the job market and finances dont support it.
However I am inspired by your post to give those books a shot.

• Pingback: gprime.ca - My blog of random crap!

• nickels

Work coding can be boring. My strategy has been to keep some cool home projects going on the things that got me excited about programming to begin with. Math plays a large part in that. My latest project is a physics engine/FPS rendered. The graphics and the constraint solvers are intense math.
A lot of programmers I know dabble or talk about dabbling in AI.
Definitely go for it! And on your own time you can do only the fun stuff!!

• Marco
• Atif

I am a developer and I want to refresh my skills in mathematics from the SCRATCH? So consider me nill in math.
can you guys suggest any good book?
Problem is that the way mathematics is taught is very boring and dry. so please suggest books which makes learning experience interesting..

Thank you very much

• http://snyderdoug.blogspot.com Doug Snyder

I have my college degree in Mathematics – Computer Science and worked in the computer field for 20-plus years as a programmer, project manager, and IT director. In the last three years, I have shifted my career and am currently teaching high school mathematics. So, I read your post with great interest as I have experienced life from both the in-depth computer side and from the academic math side. Where do the two come together?

I have always made it a point to tell people that I majored in Mathematics – Computer Science, as Mathematics was always my first love academically, but Computer Science is where most of the employment opportunities exist. I have always believed that strong mathematics skills translate into being a good computer scientist. The mathematics skills to which I refer are not the memorizing of formulas and solving of specific textbook exercises, but the mathematics skills which take real world problems – aka, “word problems” – and use mathematics in order to solve them. The roots of this in my education go back to my high school Algebra 2 teacher who taught a unit on solving various types of word problems. After completing the unit, we had to complete 2 random word problems each day for the rest of the school year. (This was supplemental to our normal classroom assignment.) By the end of that year, we all knew how to do word problems!

In the computer field, though I spent a fair bit of time mastering the intricacies of various programming languages, I was never mesmerized with learning how to code, learning a new language, etc. I was always more interested in understanding the business problems which needed to be solved and then writing a computer program to meet those business needs. To me, this is an extension of the problem solving skills that I learned in high school mathematics. I believe that in today’s computer science field, there are too many “geeks” who have a better relationship with their machines than with their colleagues! Just slide a piece of pizza under the door of their dimly lighted room every few hours, and they will be happy and productive! Yes, this is a broad generalization, but I believe there is a large need in the computer field for computer scientists to be just as avid about serving the needs of their users as they are avid about the depths of the technology.

When I teach problem solving in mathematics, the first step I teach is for students to read the problem and determine “What are you trying to find?” The last step I teach is to re-read the problem and determine “Did I answer the question?” The steps in between involve the mathematics skills to solve the problem at hand, but the first and last steps are the “customer service” component of the math class and relates perfectly to today’s business world.

Today’s business world could use more computer scientists who embrace and understand the relevance of mathematics to being successful computer professionals!

• David Klappholz

Noam Chomsky was never a computer scientist or a programmer. He was/is a linguist — and a political theorist/commentator. Years ago, when I, as an MIT undegrad interested in computational linguistics, tried to talk to him about the subject he told me that he had no interest in applying computation to linguistics. He also made the point, in his earliest works, that the statistical approach to describing/understanding language is useless; at least in its application to natural language translation, his non-statistical approach has gotten absolutely nowhere, when used by those interested in applying computing to language, whereas the statistical approach is the only one that has gotten anywhere.

• Sam

I want to point out a few hidden assumptions that some of you never reflected on when you learnt all this theory the first time, and also plant a seed that perhaps those hidden assumptions hinder us from actually solving interesting problems without even trying. I’m all for learning more theory: knowing more theory is like going to the gym — you do it despite the fact that nobody ever pushes you into the ground with a 150 lbs metal bar.

There are domain specific things you need to know regardless of what domain you are working in. If you’re doing graphics programming you will need to know some linear algebra, if you’re implementing a FEM-simulator you will need other things. I’m sure you have a good idea on what you need to know for your domain, and assume that you know your domain already for the rest of the comment.

Algorithm analysis as typically taught at university level is all about finding the asymptotic complexity counting the number of comparisons under a strange model. The big-O notation hides some of the really important information, since O(n) can be either 0.1*n or 10000*n + 34894334943934834. A great example of this is the linear time algorithm by Chazelle that triangulates a simple polygon – completely impractical for actual use. Going the other way we can purchase off-the-shelf SAT-solvers (NP-complete problem!) that will solve instances with thousands of variables very quickly.

My favorite example is the famous halting problem from your computational theory classes. We all learned how to prove that this was undecidable for the general case. What our computational theory classes did not tell you was that we can indeed automatically prove termination for many interesting programs and Terminator is an excellent example of this.

All of this is pretty far off for most people. They would not themselves have come up with a usable algorithm for deciding whether a program was terminating, because it is a really hard problem and requires years of both building the necessary skills and thinking about the problem. So let’s shift the question: what theory can someone without a Ph. D in theoretical computer science realistically learn in their spare time that will make them stronger in some sense?

Functional programming is a great thing to know. Solving problems by recursion changes the way you think, and also allows you to avoid these pesky off-by-one errors so common in many languages. There’s also the obvious connection to mathematical induction that was briefly covered in some introductory calculus course you’ve long since forgotten.

Get acquainted with a language with a “stronger” type system. If your perception of static typing is Java there are plenty of great revelations awaiting. You will be amazed at what kind of invariants you can ensure statically by using the type system in the right way. Scala or Haskell might be a good start. For the more daring that want to go full dependent types there is always Coq or Agda.

Do some programming in a pure language. This will really twist your mind in strange ways, all for the better. The separation of computation and side effects is very painful in the beginning (just like programming without global variables is) but once you get the hang of it this translates directly to your normal programming language and the benefits are huge because the separation will make your programs easier to reason about, easier to debug, and easier to fix. The only reasonable way to explore this venue is Haskell.

All things mentioned so far are very practical and fairly down to earth. What useful theory is harder than basic functional programming but easier than full blown termination analysis? Get a copy of “Types and Programming Languages” by Pierce and learn some operational semantics and type theory. Beyond working your theoretical muscles this will also build the necessary vocabulary and concepts to make a wide range of research papers from the programming language researchers readable to you.

• http://www.skorks.com Alan Skorkin

Hey Sam,

Great comment, I certainly got a lot out of it I hope other people do as well.

• Pingback: 数学是成就卓越开发人员的必备技能 | 程数 | Programath

• Pingback: 数学是成就卓越开发人员的必备技能 | New Start Again

• Pingback: 数学是成就卓越开发人员的必备技能 | QFTor

• Pingback: 数学是成就卓越开发人员的必备技能

• deejay

Hi Alan,
You talked about how professionals in this field need maths and how it can hinder the progress for someone planning to take his/her career forward. Do u think newbies who are interested in this field and are weak in math ‘particularly’ should go for a career in software development ? I’m planning to go for computer science, the only thing that i’m scared of is math. i don’t know if i’d be able to do it coz i’m pretty weak (Math = NIL) in math. But i’ve always had a special interest in computers, i really want to pursue this as a career option. But don’t know what to do about the math part. Where to start and what to do and what kind of math skills should one work on ?
Cheers!!!!

• http://www.skorks.com Alan Skorkin

Don’t let your lack of skill stop you, go for it. You can always acquire the skills you need. With CS you will likely need to focus on discrete math. I said it in one of the above comments, you can’t go far wrong with Concrete Mathematics, have a look, if you need something more basic, there are a few other books you can look it, hit me up on the e-mail if you need to know what they are.

• Pingback: Solidot | 数学是成就卓越开发人员的必备技能 | 左右。

• Johnny brown

So what is this secret math advantage you keep alluding to?

• Pingback: 数学是成就卓越开发人员的必备技能 - 博客 - 伯乐在线

I am lost between choosing health field and CS. I grow up not having good plan of what I want in life. I studied economics. I have fair maths skills. Now I am in America. I do not know about web desiging, or any courses significantly make me look professional. What do you advice me. Tell me book titls i should read. For winter I have to start my future career, taking the prerequisites.

• http://www.imraven.com Raven

I’m an I.T. student and indeed, I feel the need of mathematics in vast area of programming.
I’ve been also taught to calculate without much realizing how to apply it in real life.

But when I indulged into the field of programming, I was amazed how math turns up to be fun and exciting if it’s seen in action. I certainly became passionate about it and re learned everything I could.

It’s the myth that “Math is hard” that makes students think of it that way without realizing how cool it is to learn it for real world usage.

• Hamisi faraji

Hi
I hate mathematics and yet I want to become a programmer
Help me out guys….+255714313750

• http://stockbase-pos.softonic.com Software de facturacion Gratis

[...]here are some hyperlinks to internet sites that we link to since we consider they may be really worth visiting[...]

• ecig

[...]Here is a superb Weblog You might Come across Interesting that we Encourage You[...]

• Pingback: The Nerdy Stuff Matters « GCBLOG

• http://gcbenison.wordpress.com gcbenison

For an aspiring or practicing programmer, I think even a modest investment of time in becoming a better mathematician (a few hours a week) can pay off nicely. It may even save you time in the end – it saves you from re-solving known problems. There is a long, continuous spectrum between “good” and “great”; you need not choose one or the other.

• cameron

awesome

• Pingback: 数学是成就卓越开发人员的必备技能 | The Blog of SF_Chipan

• Andrew Cole

I’m glad to see there are other people out there who get it. When I was younger, my bookcase was filled with material on specific programming languages, API’s, and methodologies. I was so impressed with our first computer that could use a GUI. I was particularly fascinated by the mouse. Eventually, my uncle took an elective programming course and came home to show us. I was flabbergasted. The idea that I could make the computer do something it couldn’t do before was mind-blowing. I thought, for about ten years anyway, that I was doing just that, until one day I realized that I was just cleverly gluing together functionality that other people had written and I that I actually had no idea how to make the computer do new things.

I’ve come a long way since then, and I know a hell of a lot more math now than I used to. I really enjoy machine learning and I feel like I can actually solve new and innovative problems with a computer. Too many programmers are fooled into thinking they are brilliant just because they can use an API. They don’t realize that they are blind men. Once you’ve had your eyes opened, you don’t ever want go back.

• juwan

What kind of jobs are there for programmers with great math skills? I double majored in math and CS but my job uses almost no math. I really wish it did, but the stuff I’m using really doesn’t require math. What role should I look for to make use of my math skills?

• Joseph Persie

The sad truth here is that there are software engineers that don’t know math and never use it yet are still very analytical and are able to solve a vast amount of business problems in the real world. Then you have another software engineer that actually spent his whole undergraduate on math and is disappointed how he has never used any of it. This disappointment eventually turns into a rationalization of how such schooling have made them monsters of analysis. Getting back to the sad truth is that 2 years of a math sequence is not the only way to acquire the analytical skills to become successful in the business world of software engineering. This sad fact does not have any effect on the mundane nature of HR screening and how HR can easily attribute the required analytical skills to someone that has been doused in a math sequence curriculum major. The producer/consumer paradigm holds that theory is for scientists and practicality is for engineers. This holds true when comparing the output performance of a computer scientists and software engineers in the spectrum of real world business problems as opposed to developing cutting edge technology in an R&D lab of some major corporation.

• JuicyFruitFlavoredNippleRing

Nice, very intriguing and informative. Thank you.

• Pingback: Do You Need Math for a Career in IT?