[tutor] Do I need to have a strong math skills to program

Magnus Lycka magnus@thinkware.se
Sun Nov 3 16:41:01 2002


At 10:19 2002-11-03 -0800, Sean 'Shaleh' Perry wrote:
>On Sunday 03 November 2002 10:08, Dan Dud wrote:
> > I don't have a lot of math skills. Do I have to have a
> > lot of math skills to be good at programming???
>
>nah you do not need them.  Lots of code never does more math than you need to
>balance a check book.

We all have our strengths and weaknesses, and what we lack in
one area we might make up for with some other ability. Some
people are very smart, others are very hard working. Some work
very carefully, making sure that they do everything right,
others have an intuitive understanding for the broad picture...
Some are very good at listening, and quickly understand what
the problem they need to solve is, others don't write a lot
of code, but are very good at using code that others have
made, and combine them into very useful solutions. There are
many ways to skin a cat...

I'd like to write some things about mathematics though.

I have studied some mathematics... I've got a M.Sc.E.E and initially
worked with electronic design, mainly with digital design.

Almost all of my university studies involved mathematics, and I
did hairy stuff like the nasty differential equations in solving
Maxwell's equations and all sorts of other electromagnetic fields
problems. I studied mind-warping things like Galois Fields. (The
guy who invented them was killed in a duel at the age of 21, in
1832. It took generations before other mathematicians understood
what he had meant. It took even longer before people found a use
for them.)

The sad (?) fact was that even I didn't use much more mathematics
than needed to balance a check book in my electronic design work!
And the guys in the microwave department who were much more affected
by the tricky maths worked much more with simple guidelines and
intuition than with mathematics... They had also studied advanced
maths for half a decade, and almost managed with +, -, * and /.

So, is mathematics studies just a waste of time? No, I don't think
so. Quite contrary. Not because you need to know just the things
that the maths courses teach you, but because spending time
solving mathematical problems / puzzles makes you a much better
problem solver. It helps you understand complex systems. You learn
to divide problems into pieces, solve one piece at a time and put
it all together to arrive at a final solution. It often takes
many years to figure out that this is actually what you learned
when you thought that you were studying some obscure and pointless
field of mathematics, but that's the conclusion I've arrived to,
and I think many others see it the same way.

Academic studies also helps you learn how to learn. In fact, some
studies have shown that the primary skill people with educations
like M.Sc. have aquired is the skill of learning. This is an
excellent skill for programmers. For most of us, a very big part
of our job is to understand a new field of life. To create good
software, it's not enough to be able to program. We have to
understand quite a bit of how the people who are going to use
our software work. Often we need to understand aspects of their
job that they didn't even knew existed. To write a good word-
processor, you need to understand a lot about how a writer works.
If you write a good statistics program you need to understand
statistics. If you want to write a great accounting package you
need to understand quite a bit about both the rules of accounting
and how an accountant can work in a productive way. And so on...

My experience is that in general the people I've worked with who
did a good job as professional programmers had an engineering or
mathematics background. Of course there are exceptions in both
directions, but in general, I find that studying things like
mathematics, physics and engineering will give you a very solid
platform to understand the concepts of programming and to help
you understand new problem spheres, and solve all the problems
that will pop up.

Anyone can get stuck now and then, but my experience of people
who worked professionally as programmers but had a "softer"
education, like "system science" or something like that, were
both less aware of the theoretical and practical work made by
others before them (and thus reinventing the wheel) at the same
time less inventive (when there was an oportunity to really be
creative) and usually poor trouble shooters as well. They were
able to follow instructions, and could be very ambitious and
casreful...but they rarely excelled. I'm generalizing of course.

Then there are autodidacts that are awesome coders. But most
of the time it turns out that they have studied quite a bit,
even if they didn't go to school or bothered to "waste time"
on a degree...

So, while it's true that we rarely use advanced mathematics in
software development (or in other fields of engineering) we do
have a lot of use for the abilities to solve problems and to
study and learn.

Other relevant aspects for someone interested in programming can
be found at http://www.tuxedo.org/~esr/faqs/hacker-howto.html
I don't think reading Science Fiction is required to be a good
programmer, that's more to understand the jargon of your peers,
but Eric knows what he's talking about.



-- 
Magnus Lycka, Thinkware AB
Alvans vag 99, SE-907 50 UMEA, SWEDEN
phone: int+46 70 582 80 65, fax: int+46 70 612 80 65
http://www.thinkware.se/  mailto:magnus@thinkware.se