Slashdot Mirror


You Don't Have To Be Good At Math To Learn To Code

HughPickens.com writes: Olga Khazan writes in The Atlantic that learning to program involves a lot of Googling, logic, and trial-and-error—but almost nothing beyond fourth-grade arithmetic. Victoria Fine explains how she taught herself how to code despite hating math. Her secret? Lots and lots of Googling. "Like any good Google query, a successful answer depended on asking the right question. "How do I make a website red" was not nearly as successful a question as "CSS color values HEX red" combined with "CSS background color." I spent a lot of time learning to Google like a pro. I carefully learned the vocabulary of HTML so I knew what I was talking about when I asked the Internet for answers." According to Khazan while it's true that some types of code look a little like equations, you don't really have to solve them, just know where they go and what they do. "In most cases you can see that the hard maths (the physical and geometry) is either done by a computer or has been done by someone else. While the calculations do happen and are essential to the successful running of the program, the programmer does not need to know how they are done." Khazan says that in order to figure out what your program should say, you're going to need some basic logic skills and you'll need to be skilled at copying and pasting things from online repositories and tweaking them slightly. "But humanities majors, fresh off writing reams of term papers, are probably more talented at that than math majors are."

28 of 616 comments (clear)

  1. Programming by fyngyrz · · Score: 5, Insightful

    Programming -- I don't think that word means what she think it means.

    --
    I've fallen off your lawn, and I can't get up.
    1. Re:Programming by Anonymous Coward · · Score: 3, Insightful

      "Me make website red. Me copy and paste hard stuff. Me programmer."

      Why the fuck is this on the front page?

    2. Re: Programming by ShanghaiBill · · Score: 5, Insightful

      Math is necessary for more advanced programming.

      Linear algebra (matrices) and trig are essential for doing 3D graphics. Calculus and differential equations are need for doing simulations of physical processes. Otherwise, programming is not very mathematical. Web coding just requires enough arithmetic to do the layout, and most business programming doesn't even need that.

    3. Re: Programming by geoskd · · Score: 4, Insightful

      Web design these days is less and less about programming, and more and more about aesthetic and design. It has become so much so that the programming parts of it are largely unnecessary to be relatively successful.

      That having been said, almost no one considers a web designer to be a programmer. There is minimal overlap, but the tasks for which one would need a programmer are largely beyond a web designer, and visa-versa.

      --
      I wish I had a good sig, but all the good ones are copyrighted
    4. Re: Programming by Anonymous Coward · · Score: 5, Insightful

      You're totally wrong. Only complete idiots or actual cryptographers roll their own.

    5. Re: Programming by Anonymous Coward · · Score: 5, Insightful

      math is the manipulation of symbols in a formal language.

      coding is the manipulation of symbols in a formal language.

      they are the exact same thing. If you can do one well, you can do the other well. Most people can't do either very well.

    6. Re: Programming by Darinbob · · Score: 5, Insightful

      A lot of this just pushes all the buttons for me. My pet peeves with modern society are with the morons who revel in their own ignorance. There used to be a time when learning stuff was considered important. Even the president of companies would feel the need to learn what their company was about, how their product was made, how it worked, etc. Today ignorance is celebrated. Morons can go on the internet and say "I can code without knowing math", which sort of implies that people who do learn things are wasting their time. Cretins advocate that college can be skipped as a waste of time. Even those in college whine like kindergarteners that stuff is too hard or irrelevant to their future career behind a help desk.

      Ignorance should never be treated as a virtue. And yet that is what is happening and this original post proves that this attitude is still alive.

    7. Re: Programming by Anonymous Coward · · Score: 3, Insightful

      Graph theory is really under-taught in CS programs. I feel there should be at least one course devoted to it in entirety.

    8. Re:Programming by Wycliffe · · Score: 5, Insightful

      Because of this: how she taught herself how to code

      She didn't teach herself to code. She taught herself how to cobble together a website.
      Yes, you can cobble together a website with minimal coding skills by using already created widgets but what if you want a widget that doesn't exist yet?
      If you want to cobble together a website, there are plenty of programs like wordpress that require no coding skills at all.
      True programming doesn't require math as much as it requires you to be able to understand how to take small pieces like if statements and arrays and
      create something with it. I can explain if statements and a flow chart to someone in 10 minutes but the hard part of programming is being about to see
      how you can combine several thousand of those if statements to do something like generate an image. Being able to imagine the end product and plot
      a course to get there through several thousand steps using rudimentary blocks is what makes programming hard. Building a webpage is not programming.

    9. Re: Programming by Anonymous Coward · · Score: 3, Insightful

      I failed Calc I and III probably 3 times each in my Computer Science degree. I also have 9 patents, code running on ISS and a few satellites we don't talk about, and have a lead electronic systems architect position at a major space systems company. I passed Calc II with a B on the strength of my spacial intuition alone. In 15 years at a big corporation, I've learned that the mathmeticians on staff do the heavy lifting, the rest is silly algebra that a high school senior can do (or should). Real programming/SW engineering work can be done w/o the math minor demanded by idiotic university programs.

    10. Re:Programming by Jane+Q.+Public · · Score: 2, Insightful
      Well, my comment has been so much misunderstood, I cannot help but think I could have worded it more clearly. I didn't mean what you seem to think I meant. Even so, THIS:

      As someone who works in the infosec industry, the fact this comment is rated +5 Informative fills me with panic. Yes, you should absolutely take someone else's word for it, specifically you should take NIST's word for it.

      ... is such utterly wrong, complete bullshit, I hardly know where to start.

      You're referring to the same NIST that tried to foist Clipper Chip and Skipjack on a mostly-unknowing public in the early 90s? And planned to continue with the plan even though 80,000 negative comments were received during the public comment period, and a mere handful of positive comments? The same Skipjack that was later shown to have serious flaws?

      Or, let's see... wasn't that the same NIST that has been implicated in trying to push a compromised form of elliptical-curve key generation on the businesses and public of the US?

      That NIST?

      It is to laugh.

      No, people should listen to private-sector experts, and not listen to the Government at all, or at least take what it says with a grain of salt the size of a basketball.

    11. Re:Programming by Hognoxious · · Score: 3, Insightful

      I've had that conversation too. Then the other person said he couldn't possibly program $_something_complicated_about_signal_processing (or was it $fiendish_mutimodal_supply_chain_optimisation) without all of it.

      Seems some people confuse programming itself with the problem domain or the subject matter. You certainly don't need much beyond highschool level for writing CrapCo's inventory system.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    12. Re: Programming by TheRaven64 · · Score: 3, Insightful

      The one that bugs me the most is the imbalance between how society treats knowledge of humanities and sciences. If a scientist doesn't know about history, then he fits the 'ignorant scientist' cliche and is a figure of fun. If a historian knows far less about the science that his daily life depends on, then he's considered a cultured and well-rounded individual. And, in my experience, the humanities person who is ignorant of science is far more prevalent than the scientist or engineer who is ignorant of humanities.

      --
      I am TheRaven on Soylent News
    13. Re:Programming by Sique · · Score: 3, Insightful
      Somehow people are messing up "knowing math" and "knowing enough about math for programming". She never claims that basic math wasn't a necessity, she also doesn't claim that knowing some calculus and linear algebra is superfluous.

      But there is a whole world between being able to do the math necessary to rotate a 3D vector in a 4D space and the proof of the Poincaré-conjecture.

      Also a plumber doesn't need to be able to do the math of the Chapman-Kolmogorov equation to find out when the laminar flow in a water tube turns chaotic. But he should know that changing one parameter (e.g. the length of the tube or the diameter or the flowing speed) will move the limit and can turn the actual flow back to laminar, even though he's not able to write down all the integrals.

      So yes, knowing math is fine for programming, and there are many task in programming which require some special knowledge about some obscure math problem and its solutions, but it is not necessary to study the whole field of mathematics surrounding that math problem, nor is it necessary to be able to solve the math problem on your own.

      --
      .sig: Sique *sigh*
  2. Take it from me by John+Allsup · · Score: 4, Insightful

    As an obsessive pure mathematician who is obsessed with twisted forms of coding minimalism to stave off boredom and so on, and who did his PhD in arithmetic.

    1. You learn to count from 1 to 100 so well it is effortless.
    2. You do so in a way that is fun (e.g. snakes and ladders).
    3. You learn to code.
    4. When your coding problems require mathematics, you look it up in a book.

    Crucially, if you do it this way, you will have motivation to learn the hard maths. Really, motivation does seriously make a difference here.

    --
    John_Chalisque
  3. You know there's a problem... by Anonymous Coward · · Score: 4, Insightful

    ...when you need to google the hex representation of 'red'. *much* better to understand the encoding, and it certainly isn't hard or requires tricky math. it's literally RRGGBB

  4. Learning to program by Googling + Trial & Erro by ahbond · · Score: 5, Insightful

    This is why so much poor software exists in the world. I can only imagine what nightmare code is being generated by such efforts. Yes, anyone can code, just as anyone can build a house. Whether or not the house collapses immediately, whether it has any real value, or by any other measure still depends on the skill of the builder, just as in software. Garbage in -> Garbage out, applies to the code as well as the data. -AB

  5. They have it backwards... by mark-t · · Score: 4, Insightful

    You don't need to be good at math to learn to code...... but as programming at its core *is* mathematics, learning math will almost certainly help you to write better code.

  6. It's true by Anonymous Coward · · Score: 5, Insightful

    I've been writing software for more than 20 years at this point. While yes, if you're doing anything involving creating algorithms or computer graphics/gaming you will likely need higher level math, the average programmer (making websites, making desktop business apps) does not need to learn anything more than basic mathematics.

    It irritates me when I hear elitist coders or hiring managers harp on about the need to be a PhD Mathematician on the side while also being an expert in coding. Just as you don't need Picasso painting your bathroom, you don't need a rocket scientist to code your shitty business app.

    1. Re:It's true by sverdlichenko · · Score: 1, Insightful

      Then your desktop app works fine with 50 items of whatever it processes but becomes really shitty when loaded with 1000, because there is algorithm inside with quadratic complexity and you do not even know what quadratic is. Been there, seen that.

    2. Re:It's true by sverdlichenko · · Score: 3, Insightful

      Unfortunately, high school math isn't "basic understanding", it's in fact advanced. Most people do not have any idea how to multiply matrix to vector, or that matrix may be multiplied to something, or that matrix isn't just movie title. Or how parabola and hyperbola differ. Basic understanding is fourth-grade arithmetic (mentioned in the article) and this is absolutely not enough.
      Sure one can code without learning math. And one can play in trash movies without learning acting. So much as I can apply a cast to someone's broken leg guided by google search result, but really should not unless we are in the middle of the zombie apocalypse. And I (and most people) should not sing in the opera even in the middle of the zombie apocalypse.

  7. Yeah right! Who needs a damn brain?! by fustakrakich · · Score: 2, Insightful

    We have Google!

    Lord, help us!

    --
    “He’s not deformed, he’s just drunk!”
  8. If you need math, learn it. If not... by Tenebrousedge · · Score: 5, Insightful

    And there's a shit ton of CRUD apps that people want written that don't need anything of the sort. There's a world between high-performance computing and the most superficial use of a computer. Excel macros spring to mind, as an example. We can also draw a line between simple computation and more complex mathematics -- simple calculations are absolutely the computer's job.

    To answer your "So what?": useful shit can be done even without having learned everything that you did. What useful purpose does elitism serve?

    --
    Those who advocate genocide deserve every protection afforded by law, and none afforded by common human decency.
  9. math talent, not math knowledge. SQL is algebra by raymorris · · Score: 5, Insightful

    The author doesn't seem to understand what math IS, how and why programming IS math. The author writes that you don't do a lot of algebra and such in typical web pages. Does your PHP script use SQL? That's algebra, relational algebra. It's not that you need to remember mathematical formulas; it's that have a half decent design for your software, you need mathematical THINKING. If your high school algebra homework was wrong, your sql is probably wrong too.

    The author likes to copy and paste a lot. Yeah, I've seen a lot of that kind of code, mostly while rewriting it to work properly.
    Programmers with a clue #include, they don't copy-paste.

    It's not that you need to write the tangent function from scratch, and purely from memory. It's realizing that tangent() SHOULD be a function, which you should call from libmath. The author managed to copy-paste code that computes a tangent into the middle of the onclick() handler. That's Doing It Wrong.

  10. Programming by jgotts · · Score: 4, Insightful

    Based upon my three decades of programming experience, programming at rare times may require you to brush up on what you learned in engineering school, but essentially your degree is mostly a worthless piece of paper in terms of career usefulness. I've used much less than 5% of what I learned there, and probably more like less than 1%. My most useful class was software engineering, because it touched on the non-technical aspects of being a programmer.

    There are small subsets of programmers that use geometry and calculus, but even if we only remember the basics those types of programmers don't need to worry about nit picky details because we all use libraries. You'd be absolutely foolish to open up a calculus book and write your own library function, unless you're doing something extremely novel. Novel is bad when you are trying to write maintainable code.

    What is useful to you as a programmer is to understand what big O notation is. It's advanced math beyond calculus, but it always seemed like common sense to me. If you have to do n^2 operations for every n, that's worse than having to do n operations. In 30 years I've never had to worry about little o or logarithms. Google gets specific in interview questions about all of these notations, but I'm telling you what is actually useful.

    What is not useful to you is mastery of the syntactical details of any language. Try to program as if you're writing English. Write software in such a way that you could be doing it in any language. Write software that the next person can read, instantly understand, and begin modifying.

    Programming isn't purely doing Google searches. What I spend most of my time on is seeing how the software I'm working on already solves a problem and to use as similar techniques as possible, so that the next person who works on it will encounter consistency. Every change I make I make for a reason, and I understand every change I make well enough to explain it to my mom.

    Another way of looking at it is the technical interview is almost completely useless. You can ace a technical interview and write the shittiest code I've ever seen. You can perform average on an interview and write the cleanest code I've ever seen. If anything, detailed technical knowledge should count against you. The next person to maintain your code might not know every trivial little feature of the language you're using and has no admiration for your cleverness.

    Write software like Hemingway, not Thomas Hardy, and don't sweat the math.

  11. Re:All mathematical fields are necessary nowaday by lucm · · Score: 3, Insightful

    I have no idea what is Combinatorics, and I would have to google many of the words in your comment, yet I've been programming for a living since the late 90s.

    Not everyone in IT is coding videocard firmware.

    --
    lucm, indeed.
  12. hmm by xettera · · Score: 3, Insightful

    You don't have to be good at anything to plagiarize

  13. Fix the documentation by johannesg · · Score: 3, Insightful

    We have Googling and trial&error because documentation of APIs is universally deficient.

    I just spent two days trying to figure out why my OpenGL 3.2 context would not initialize on Linux. In the end I found it was because I was not using a private colormap. It doesn't make any kind of sense to me, even now, and even knowing what to look for I wasn't able to find any kind of warning in what is laughably called a "manual" (it sure looks like a quick list of function calls without any structure and barely any explanation to me, but YMMV).

    How many times do we have to see this:

    int CreateContext (int, void*)

    "this function creates a context. The first parameter is flags. The second is used to pass additional information."

    and are left wondering:

    - what _is_ a 'context', what do I need one for, and what is its lifetime?
    - what flags can I pass? What do they do, _in detail_?
    - what "additional information" can I pass? Is it mandatory? Is it flag-dependent? What structure should it have?
    - can there be errors? How do I see them? How do I decode them into something human-readable?
    - if I delete the context, will it take any associated items with it, or do I need to free those manually?
    - what sort of thread-safety can I expect?

    The problem is not skill level, although it certainly helps to be equipped with knowledge of other APIs and the right level of paranoia. It is, for a very large part, badly designed and even badlier documented APIs. And it really doesn't matter where it comes from, amateurs or pros, open source or closed, it's all painfully bad. The best you can usually hope for is a list of function calls, but almost never any sense of how it hangs together, good explanations of parameters and return codes, and let's not even start about thread safety...

    As an example of good documentation, I'd like to point out Postgres. These guys really work hard on documentation, and it shines as a result. MSDN, assuming you can find what you were looking for to begin with, is not bad either. And on the other end of the scale we have things like OpenSSL, where I believe lack of documentation is in fact part of their business model. That alone should be reason to avoid it...