Thread: Coder with weak math skills

  1. #1
    Registered User
    Join Date
    Jun 2012
    Location
    Here
    Posts
    23

    Coder with weak math skills

    Hello.

    I have this question: if I must describe myself as "not actually a math guy", do I ever have a chance to become a great coder?

    My strong side have always been arts and literature. And although computer programming could be considered to be some sort of engineering discipline, I actually see it as a certain type of creative art.

    But still, as not being an excellent "math genius", I'm not really sure if I can remain long enough in software industry as a developer.

    I admit, I do have serious respect towards mathematics, and I'm trying to improve my math skills. But since I don't have this so-called "natural talent", the progress has been extremely slow. It still takes awfully long time for me to solve any problem that requires not-so-trivial calculation. And complex mathematical formulas look like some unreadable hieroglyphics.

    Therefore, as an "incurable artistic person", should I continue writing code, or would it be wise to consider a career switch?

  2. #2
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    I wouldn't know about natural talent. As long as you have a good grasp of arithmetic and a basic grasp of algebra, you should do just fine as a programmer. A strong mathematical background isn't necessary except for certain fields of development (3D programming comes to mind) or if you get deep into computer science. It's a misconception the idea that you should be great at mathematics to become a proficient programmer. The field will instead stress your learning and reasoning abilities (otherwise known as cognitive abilities).
    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  3. #3
    [](){}(); manasij7479's Avatar
    Join Date
    Feb 2011
    Location
    *nullptr
    Posts
    2,657
    You're studying the wrong kind of maths, probably.
    Look into Number theory (and Discrete maths, if you feel like).

  4. #4
    Officially An Architect brewbuck's Avatar
    Join Date
    Mar 2007
    Location
    Portland, OR
    Posts
    7,396
    Math becomes involved in programming for two reasons:

    1. You are trying to understand the requirements of an algorithm. How much memory does it need? How much CPU time? And how do these quantities vary with the amount of input data? Having an adequate understanding of these mathematics will help you write algorithms that run faster and use fewer resources. Fortunately, these sorts of things can often be adequately predicted by experience, without resorting to hand calculation. For that matter, it is often unnecessary to have an exact answer to these questions, but merely to be able to tell which option of a set of options is the best choice. Worst case, you can simply try every option and pick the one that works best. The last time I had to prove tight bounds on the complexity of an algorithm was when I was back in school. In the real world, results are mostly what matter, and what's important is how quickly you can achieve good results.

    2. You are trying to accomplish something which is inherently mathematical. For instance, graphics, signal processing, artificial intelligence. If you can't grasp the math involved, these things will be mostly inaccessible to you.

    But programming, in general, is not a mathematical activity. However, people who are good at math tend to be good at other things which are important when developing software. Visualization, the ability to assess the relative quantities of things, the ability to entertain complex ideas without becoming lost.

    If you stink at math, you might still be able to write great computer code. You'll have some limitations, but we all have limits in one form or another. For instance, I have a keen understanding of math and physics, but for whatever reasons, chemistry is elusive to me.
    Code:
    //try
    //{
    	if (a) do { f( b); } while(1);
    	else   do { f(!b); } while(1);
    //}

  5. #5
    C++まいる!Cをこわせ!
    Join Date
    Oct 2007
    Location
    Inside my computer
    Posts
    24,654
    You forgot the part with benchmarking where it is beneficial to know statistics a little bit.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  6. #6
    Registered User
    Join Date
    Jun 2005
    Posts
    6,815
    Quote Originally Posted by heinz55 View Post
    And although computer programming could be considered to be some sort of engineering discipline, I actually see it as a certain type of creative art.
    I consider this attitude to be a problem. There is certainly an element of creativity involved in software development (because it is used to implement solutions to problems for which no solution has been implemented before), so creativity of approach has balue. However, ultimately, software development is about solving problems. Treating it purely as a creative endeavour often translates to an attitude of "it's done when I think it looks good enough" which, to say the least, is subjective often translates to "I say the problem is solved because I'm done - your criteria don't matter".

    Going back a fair few centuries, design and construction of buildings (like churches) was viewed as a creative endeavour. That attitude changed after a few buildings collapsed killing the people inside, and a few others collapsed during construction, killing the designers and builders (Darwin might have described that as a form of natural selection). There was a bit of a hue and cry over such occurrences, so design and construction of buildings eventually became an engineering discipline, with the sort of rigour needed so an architect could specify how robust the building was (whether the walls could hold up ceilings, how to compensate for holes in the walls (doors, windows) before building it. A few more designers persisted for a while in treating building as a purely creative endeavour, but eventually they fell into disrepute (ordinary people have common sense, and will pick a house that won't fall down over one that looks spectacular but tends to fall down).

    The fact that engineering discipline now guides building construction does not prevent creativity - it provides a solid base on which creativity can be exercised, so those impressively beautiful buildings can withstand all sorts of shocks without falling down.

    Software development is like that. A certain amount of intellectual rigour is needed to do it well, to construct software that meets its purpose. While I acknowledge that creative people can be intellectually rigorous (I know quite a few who are) usually, when someone describes software development as a "creative art", they mean that they can be exempt from the intellectual rigour involved.

    Quote Originally Posted by heinz55 View Post
    But still, as not being an excellent "math genius", I'm not really sure if I can remain long enough in software industry as a developer.
    As others have said, you don't need to be a "math genius". You do need to be willing to be rigorous in approach, and to accept that good software has to measurably meet its goals. That does not mean eliminate creativity, but it does mean that form for forms sake rarely makes good software. When you have a flash of intuition or inspiration about what will look better, and what might be more usable, and what will be more efficient - that is creativity. But that needs to be backed up by a rigorous approach to move from "I think this works" to "I know this works" and then to "I can provide evidence to justify my claim that this works without relying on a sheepish grin and saying ``trust me''".

    Quote Originally Posted by heinz55 View Post
    I admit, I do have serious respect towards mathematics, and I'm trying to improve my math skills. But since I don't have this so-called "natural talent", the progress has been extremely slow. It still takes awfully long time for me to solve any problem that requires not-so-trivial calculation. And complex mathematical formulas look like some unreadable hieroglyphics.
    I find that somewhat ironic. Those unreadable hieroglyphics are actually a language for expressing concepts. People into arts and literature pride themselves on their ability to express advanced concepts, and (depending on the type of artistic person) their strength with language. Yet they dismiss the language and conceptual basis of mathematics.

    The only difference is that the concepts of mathematics involve numbers, and shapes, relationships between objects and forces, and things like that.

    Quote Originally Posted by heinz55 View Post
    Therefore, as an "incurable artistic person", should I continue writing code, or would it be wise to consider a career switch?
    It depends on what you mean when you describe yourself as an "incurable artistic person".

    Do you mean that you care about form and not function? If so, you should find another career. If not, your creativity will be valuable in software development.

    Do you mean that you look down on people who care about the details of getting things right? If so, you should find another career. If you can honestly accept the value offered by detail-oriented people, and work with them, you will offer a lot to a team developing software. The most effective software development teams have diverse people who take diverse approaches, yet manage to respect each other's viewpoints and contributions.

    If you have to meet a specific performance (or other) requirement, do you keep hacking until you seem to have a solution, or do you spend time working out what you need to do before unleashing your fingers on the keyboard? If you're just a hacker, find another career. If you're willing to put in the mental effort to think about what you're doing, and how to do it, before doing it .... then you will work well in software.


    Strength in mathematics often fosters the sorts of skills and mindset that make people a good developer, and is essential for some types of development. But those sorts of skills and mindset are not limited to people who are strong in mathematics.

    Ironically, the developers I worry about the most are the ones who are trying to do something for which basic knowledge of mathematics can enable a very efficient solution (by various measures) but insist on using some form of inefficient "brute force" approach, because they are not willing to consider using simple mathematical techniques to simplify their problem.
    Right 98% of the time, and don't care about the other 3%.

    If I seem grumpy or unhelpful in reply to you, or tell you you need to demonstrate more effort before you can expect help, it is likely you deserve it. Suck it up, Buttercup, and read this, this, and this before posting again.

  7. #7
    Registered User MutantJohn's Avatar
    Join Date
    Feb 2013
    Posts
    2,665
    I wouldn't say that a great programmer needs mathematics (not at any meaningful level, at least) to be great but those who are good at math would be good at programming. The fact that computer science is a science enables other scientists to be able to grow proficient in programming if they really wanted to. I know I'm not the only one, but physics people and mathematicans can be good programmers. And from what I've seen, biologists are better at Python.

    Actually, most physics people wind up doing data science which is scripting and not coding and as such is an abomination to their colleague (or maybe just me). But then there are those physicists that love computers and they go on to form the Virgo Consortium, a group dedicated to high-performance astrophysics computing, namely simulations of the earlier universe. Their techniques are pretty amazing and the benchmarks they get kind of astound me or make me wonder what their CPU frequency is (selectively omitted...).

    But yesh, math can make you good but it's not required. Learn the math you need to as you need it. Google everything. Ask around if someone's got a better routine. I mean, do you think I actually understand how the linear algebra libraries I use work? Good God no. But that doesn't stop me from using it.

  8. #8
    Make Fortran great again
    Join Date
    Sep 2009
    Posts
    1,413
    You can be godlike at math and still be a terrible coder. I was given some Fortran code from a professor when I was working on my masters. It had several loops in it that were basically like the following:

    Code:
    DO i = 1, 100
       IF (i > 50)
          ! do something
       ELSE
          ! do something else
       END IF
    END DO
    which is of course better off split up into two DO loops. There were all kinds of things. Multiple recalculations of the same values instead of calculating the value once and storing it, things like that. An understanding of what's efficient and what isn't is much better than a good understanding of math.

  9. #9
    Registered User
    Join Date
    Jun 2012
    Location
    Here
    Posts
    23
    I may have had a moment of weakness when I wrote the first post. And hopefully my "way too modest math abilities" will not jeopardize my coding career.

    But the fact is that back in the school I had really hard time with math and physics. And even today it makes me wonder of how on earth did I manage to graduate.

    Actually, because of the the coding habit, my analytical skills are much better now and I guess I'm slowly becoming able to sense some sort of abstraction in the world of numbers and shapes.

    But I know that my math skills aren't good enough. Yes, the logic of positional numeral system was quite easy for me to understand. But such thing as trigonometry (something I really wish to master one day) just makes my head dizzy.
    Last edited by heinz55; 03-11-2014 at 08:34 AM.

  10. #10
    Lurking whiteflags's Avatar
    Join Date
    Apr 2006
    Location
    United States
    Posts
    9,612
    Have you tried anything like khan academy? That helped when I wanted to learn trig.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Replies: 21
    Last Post: 07-03-2012, 09:02 AM
  2. New to programming - Lack math skills
    By EdMarx in forum C Programming
    Replies: 16
    Last Post: 05-23-2012, 11:38 PM
  3. Any idea what the weak link was?
    By Jeremy G in forum A Brief History of Cprogramming.com
    Replies: 9
    Last Post: 02-24-2005, 05:52 AM
  4. Need math skills
    By Megatron in forum C++ Programming
    Replies: 4
    Last Post: 02-21-2002, 12:04 PM