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

by Alan Skorkin on March 24, 2010

MathA 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 :)).

Broadening Horizons

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

Knuth

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

Wakeboarding

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

{ 13 trackbacks }

Markus Tamm » Blog Archive » Links 24.03.2010
March 24, 2010 at 7:31 pm
Dew Drop – March 24, 2010 | Alvin Ashcraft's Morning Dew
March 24, 2010 at 10:49 pm
Closer To The Ideal » Blog Archive » You do not need to know math to be a programmer, but it opens some doors
March 25, 2010 at 3:28 pm
Math Skills For Programmers – Necessary Or Not? | JetLib News
March 25, 2010 at 7:20 pm
DO programmers need math skills? « Brendan Graetz
March 25, 2010 at 8:27 pm
You do need Math skills to be a great developer « Sami Dalouche
March 25, 2010 at 11:00 pm
Who needs math skills?
March 26, 2010 at 5:30 am
Math skills » Raphael Michel
March 30, 2010 at 4:04 am
geographika » The Seven Bridges of Königsberg
March 30, 2010 at 7:35 pm
La diferencia entre un informático y los mejores informáticos: las matemáticas « Mbpfernand0's Blog
April 4, 2010 at 2:58 am
[转载]成为优秀的开发者无需数学技能,但成为卓越的开发者需要 | 人工智能&机器人
April 4, 2010 at 8:10 am
gprime.ca - My blog of random crap!
May 16, 2010 at 1:11 am
Webs Developer » On Personal Skills And How Even Riding A Bike Is Not Like Riding A Bike
June 1, 2010 at 1:31 am

{ 79 comments… read them below or add one }

Jeff Moser March 24, 2010 at 2:10 am

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.

Reply

Alan Skorkin March 24, 2010 at 4:19 pm

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

Reply

Benjamin Fedder Jensen March 25, 2010 at 8:49 pm

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 :)

Reply

Alan Skorkin March 26, 2010 at 11:57 am

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.

Reply

Sorpigal March 25, 2010 at 11:27 pm

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.

Reply

rich March 24, 2010 at 2:24 am

Any good books/references you’ve uncovered to help your Math muscle development???

Reply

Alan Skorkin March 24, 2010 at 4:22 pm

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.

Reply

Colin May 12, 2010 at 1:56 am

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)!

Reply

Mikael March 24, 2010 at 3:00 am

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 !

Reply

Alan Skorkin March 24, 2010 at 4:24 pm

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.

Reply

Brian Yamabe March 24, 2010 at 3:19 am

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 :-)

Reply

Alan Skorkin March 24, 2010 at 4:31 pm

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.

Reply

Kevin Elliott March 24, 2010 at 3:24 am

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

Reply

Alan Skorkin March 24, 2010 at 4:35 pm

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.

Reply

breck March 24, 2010 at 3:42 am

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

Reply

Alan Skorkin March 24, 2010 at 4:36 pm

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

Reply

Matthew Orlando March 26, 2010 at 8:00 am

I heartily second Khan Academy.

Reply

R Glen Cooper March 24, 2010 at 4:05 am

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.

Reply

Alan Skorkin March 24, 2010 at 4:38 pm

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

Reply

Jason Baker March 24, 2010 at 5:42 am

For the record, Noam Chomsky isn’t a programmer or a mathematician. He’s a linguist. :-)

Reply

Alan Skorkin March 24, 2010 at 4:39 pm

Hi Jason,

Hehe, fair point :). Still, for a linguist he’s done a hell of a lot for computer science, no?

Reply

Seif Sallam March 24, 2010 at 5:56 am

your posts is becoming more interesting now :) , anyway it this issue was annoying me so much.

Reply

Alan Skorkin March 24, 2010 at 4:39 pm

Hi Seif,

I am glad you liked it :).

Reply

cldwalker March 24, 2010 at 3:12 pm

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

Reply

Alan Skorkin March 24, 2010 at 4:49 pm

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.

Reply

mat March 24, 2010 at 6:46 pm

it’s gonna all be about stats soon enough! trust me! :)

Reply

Alan Skorkin March 24, 2010 at 9:21 pm

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

Reply

Jan Peregrinus March 24, 2010 at 10:51 pm

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 !

Reply

Matt Butcher March 25, 2010 at 4:11 am

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.

Reply

Rahul March 25, 2010 at 6:18 am

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)

Reply

Alan Skorkin March 25, 2010 at 10:22 am

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.

Reply

SQLDenis March 25, 2010 at 6:32 am

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

Reply

Alan Skorkin March 25, 2010 at 10:23 am

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.

Reply

Gobezu Sewu March 25, 2010 at 11:44 am

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.

Reply

Alan Skorkin March 26, 2010 at 11:52 am

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.

Reply

Thomas Thomassen March 25, 2010 at 9:26 pm

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.

Reply

Alan Skorkin March 26, 2010 at 11:58 am

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

Reply

Jawdy March 25, 2010 at 9:36 pm

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

Reply

Alan Skorkin March 26, 2010 at 12:03 pm

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.

Reply

Wesley Parish March 25, 2010 at 10:26 pm

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.

Reply

Alan Skorkin March 26, 2010 at 12:05 pm

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

Reply

Peter Bindels March 25, 2010 at 10:43 pm

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.

Reply

Alan Skorkin March 26, 2010 at 12:07 pm

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?

Reply

Derek March 25, 2010 at 11:55 pm

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.

Reply

Alan Skorkin March 26, 2010 at 12:08 pm

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.

Reply

cbmeeks March 26, 2010 at 12:04 am

“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

Reply

Alan Skorkin March 26, 2010 at 12:09 pm

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

Reply

Gordon C March 26, 2010 at 12:28 am

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

Reply

Alan Skorkin March 26, 2010 at 12:10 pm

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

Reply

Viktor Skarlatov March 26, 2010 at 12:31 am

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.

Reply

Alan Skorkin March 26, 2010 at 12:11 pm

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

Reply

Professor N. Ram March 26, 2010 at 2:19 am

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 4×3x2×1. 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.

Reply

Alan Skorkin March 26, 2010 at 12:12 pm

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

Reply

Joel Jauregui March 26, 2010 at 2:59 am

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 :)

Reply

boris March 26, 2010 at 3:24 am

The analogy with the hammer is great. :)

Reply

Alan Skorkin March 26, 2010 at 12:13 pm

Glad you liked it :)

Reply

swiz March 26, 2010 at 3:47 am

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.

Reply

Alan Skorkin March 26, 2010 at 12:13 pm

It’s not too late yet :)

Reply

David Gilbert March 26, 2010 at 4:18 am

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

Reply

Alan Skorkin March 26, 2010 at 12:15 pm

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

Reply

Shaun Hervey March 26, 2010 at 4:24 am

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.

Reply

Chris March 26, 2010 at 4:54 am

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!

Reply

Alan Skorkin March 26, 2010 at 12:16 pm

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.

Reply

William March 26, 2010 at 6:42 am

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

Reply

Alan Skorkin March 26, 2010 at 12:19 pm

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

Reply

Ali Daneshmandi March 26, 2010 at 7:22 am

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.

Reply

notoryus March 26, 2010 at 11:51 am

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.

Reply

Alan Skorkin March 26, 2010 at 12:26 pm

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

Reply

Alan Skorkin March 26, 2010 at 12:21 pm

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.

Reply

notoryus March 26, 2010 at 12:18 pm

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.

Reply

Alan Skorkin March 26, 2010 at 12:27 pm

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

Reply

notoryus March 26, 2010 at 2:10 pm

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.

just want to share this:

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

Reply

David Taylor March 27, 2010 at 3:08 am

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

http://www.khanacademy.org/

Reply

Joseph Okharedia April 17, 2010 at 12:30 am

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.

Reply

droope May 5, 2010 at 6:19 am

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

You have inspired me to study math.

Reply

mosurh May 10, 2010 at 3:41 pm

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.

Reply

nickels June 3, 2010 at 3:20 am

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

Reply

Marco June 28, 2010 at 4:28 am
Atif July 16, 2010 at 5:26 pm

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

Reply

Leave a Comment

Previous post:

Next post: