That’s me, man. I was a geometry rock star. Algebra failure. Definite case of dyscalculia (I can’t get a string of numbers from one piece of paper to another to save my life).
I find no problems with FOR loops. They don’t ever seem to have anything to do with numbers for me. Heck, I’ve drawn them out on paper before!
I actually have musical aptitude too. Have played since I was in 5th grade. Now, my best friend (the mathy, programmer guy) is technically much better at music than I am but I was at the top of my group as much as he was. He just has different skills (the mathy part of music!)
I’ve heard this also, but I’m the exception. I’m tone deaf, can’t sing, and play no instruments. I am also terrible at visual puzzles. However I’m very good at verbal things, on Jeopardy, finalist at a crossword contest, kick butt at trivial pursuit. I understand people see programs as pictures, I see them as code which my subconscious writes for me and which I just type.
I was also very good at algebra but mediocre at geometry. I have quite a warped brain.
I am very bad at both algebra and geometry but very good at programming and other types of math like statistics. I couldn’t play a musical instrument to save my life. Most of my other strengths are also on the verbal side and I am good at math word problems in general. I just look at programming as a big word problem with multiple possible solutions which it almost always is.
I think there are multiple intellectual strengths that people can leverage and still be good at programming. I do well in IT consulting because of my verbal skills - those are usually very lacking in many of my coworkers and competitors. I can not only write the program itself, I can explain how it works to anyone at any level and also write the specifications and technical manual for it. Those most commonly require separate people to do well.
The skills required to do that are almost solely logical and verbal and have very little to do with math as I was always taught it aside from the bare basics. Maybe they cross over more than I can see but I have never gotten the impression that I would be better at programming if I tried harder in math in school.
Au Contraire!
Did you say excellence at Geometry, particularly proofs?
‘Computer Science relies heavily on principles of Deductive Reasoning – applying general rules that hold over the entirety of a closed domain of discourse and narrowing the range under consideration until only the conclusion is left.’ [I’m paraphrasing a Wikipedia article here]
The proofs I did in my college Logic courses tended to get very large and convoluted, but ultimately employed Boolean logic to boil everything down to Statement = True or False. Similarly, proofs in geometry will tend to boil down to True/False – it’s just that the statement being tested will be of a different and limited nature.
Deductive Logic – Ponies are Horses
Boolean logic – X therefore Z
Geometry – Outside interior angle A is equal to outside exterior angle H
And of course the rules governing the domain are different, but the point is to learn to properly apply the right rules to the situation being tested.
Programming languages are, ultimately, sets of rules and prescribed methods for applying them. Programming is a matter of applying the rules and methods of a programming language to achieve a result – a number is calculated, a light goes on, an on-line purchase is successfully completed, etc.
I would actually argue that a mathematical ability is quite helpful but is not actually necessary beyond the basics of algebra – mostly in the concept of swapping vague variables for explicit values and converting back and forth between word problems and variable-denotated formulas. For the most part, though, most programming languages will have built-in terms for handling geometric, statistical, financial, and engineering functions – SQR(A^2+B^2) will give you a number. Offer a bunch of values for A and B (ideally, they equal the lengths of two legs of a right triangle) and you’re calculating the length of a hypotenuse – a pythy formula, one might claim, but one that has proven quite valuable to the world for many reasons. Once you’ve learned to work with a language, you’ll keep a reference book at your desk for looking up the rarely-used terms that will help you save time in making some calculations, much in the way most writers keep a dictionary around for looking up rarely-used words to save time and convey a notion with fewer sentences and just-the-right-nuance.
These basic concepts of logic and geometry are relevant and important because they train the mind to think in terms of dichotomies* – True or False – and it’s important to realize that the technology underlying computing, regardless of the language employed, is all about testing “True or False: There is current present in that computer bit.” In other words, it’s either on or its off; there’s either a signal or there isn’t; the number in the formula result is either equal to my target or it isn’t. The amount billed by the hospital is greater than the amount left in the patient’s insurance coverage pool – or it isn’t." And after the testing is done, the language instructs the computer to take different actions based on the test results – turn on the printer, turn off the router, make another calculation, reject the bill.
And then, if you’re liking geometry and deductive proofs, you might also enjoy Venn diagrams and the logic of set theory, which is highly relevant to relational databases and SQL coding – but I’ll leave that for another post.
So it won’t matter if Frylock’s friend can’t do advanced algebra (or statistics or loan amortization or thermonuclear engineering) because he’ll be using the programming language to invoke the relevant functions that will make the computer do the algebra (etcetera) calculations. That’s why computers are so helpful in our world today. Once Frylock’s friend has a good grasp of a programming language (or three) it will certainly help him (her?) find programming jobs if he’s familiar with the typical calculations of an industry (vascular surgery, banking/finance, chemical engineering, etc) because then he won’t have to learn ‘common’ formulas that competing job applicants already know. However, there are undoubtedly lots of industries that are less math-intensive where Frylock’s friend can find a programming jobs or even a programming career.
And, by the way, HTML and XML (and their kin) are meta-languages, not programming languages. They do fall under the casual term of “coding” but they’re kind of a different beast.
–G!
The world isn’t just a matter of black and white
It’s not even shades of gray
Our lives are like a universe with a full spectrum of zillions of colors
More than a modern computers can represent on a billion screens
*It’s important (and sometimes difficult) to recognize that “Things are either true or false” may be a beautifully simple and appealing perspective but it’s generally not the way reality works outside of a computer.
While I agree that math skills are not strictly related to coding ability, I would say that you can only be a mediocre coder at best without strong math. Any coder can bang out business logic or a parser or whatever. But any serious coding is almost guaranteed to require some kind of math. I use every bit of math that I learned in school, from calculus to linear algebra to statistics (and then some). I don’t necessarily need deep knowledge of any one domain; it’s more important to have a breadth of knowledge so I know which tool to use.
That said, software engineering also needs architects, who have a higher level view of the problem domain. Architecture isn’t coding, even if some coders are also architects. You can be a good architect without good math skills, or have good math skills and be a poor architect. It doesn’t really deserve to be lumped in with coding at all.
I don’t think you have a realistic idea of what the vast, overwhelming majority of programmers are doing. Because calculus and linear algebra ain’t it.
I’m sure you’re right about my distorted view, but still–what I said was “you can only be a mediocre coder at best without strong math”. And from interview experience, it is undoubtedly true that 80-90% of coders are mediocre at best. No one’s doing heavy math all of the time, and probably not even most of the time. But some problems need math and the mediocre coders can’t solve those problems.
Agreed. I’ve been employed in this for 35 years, and have never needed it, and never needed it in grad school either after I got done with taking transistor courses. Statistics, yes.
And I’ll contend that a programmer weak in understanding how to represent data is going to be much worse than a programmer weak in math.
Certainly some problems need advanced math, and I’m sure advanced math skills are highly correlated with programming ability. But I don’t think it’s true that you can only be a mediocre programmer without strong math skills. It is possible to be an excellent programmer within a given specialty without knowing any fancy math. And I don’t mean just barfing out business logic.
With all due respect, going 35 years without needing any real math tells me you’ve had a poor diversity in things you’ve worked on. I’m sure you’re fantastic in the things you have experience with, but I doubt I’d hire you for anything because I couldn’t be confident that you could solve novel problems.
Sure. Data structures go without saying, as do algorithms. I just think you need math, too (as do many of my colleagues).
I suppose my position is that “an excellent programmer within a given specialty” is almost an oxymoron. If your expertise is that limited, you aren’t an excellent programmer. I’ll grant that opinions may differ.
You better be careful about who you throw vague insults to on this board because it weakens your point in some circumstances if you pick the wrong person - you did here.
Voyager is one of the smartest and most talented Dopers in general we have. He also has a PhD in Computer Science and went to MIT IIRC and has been highly influential in the field for decades. You basically just told a Michaelangelo that he doesn’t know much about sculpture because the high school text book you teach from doesn’t explain it the same way.
For the record, I agree with him much more than you and I am also a talented at it but not at the same level.
Fair enough. I was unaware of Voyager’s history. I apologize if any insult was received.
However, I should clarify something, which is that straight CS is actually a pretty different thing than “coding”. Coding is an engineering discipline, while CS is… well, science, arguably, or perhaps its own branch of math, but at any rate a fairly different thing than engineering.
So when I say “poor diversity” I want to emphasize that I mean “diversity in the realm of things that software engineers do”, which is not at all the same range of things that real computer scientists do.
Were Donald Knuth to interview where I work, I’d likely have the same opinion. He’s a computer scientist, not a coder. It’s just a different thing.
I was a pretty good programmer, database analyst and systems analyst. My BA is in English. I got through high school advanced math, physics and chemistry, and got an A in statistics in college. However, I have difficulty doing simple arithmetic in my head.
The type of programming I did required virtually no math at all, certainly not higher mathematics. I wrote financial applications, but you don’t need to understand algebra to write a graphic user interface, or middleware to connect the GUI to the data.
What you need is logic. That I’ve got. I found most programming to be practically self-evident. Good writing also requires organization and logic. Programming also requires good spelling and punctuation! And don’t forget that in the practical real world business application, you also need to be able to understand what the business user wants and needs, and to write it down so that your programming team knows what to do.
I’ve been writing financial applications for ages. You have to know and understand algebra, statistics, be able to read fairly densely written mathematical formulas for some difficult indicators. Doing Black-Scholes models involves differential equations. And don’t start me on calculation of option greeks.
Well, you have to understand them enough to translate them into code, or into code specifications. In the companies I worked for, we had business analysts to provide the appropriate formulas and to check the results.
One place I worked we had started down that particular path for calculating something, I forget what, when the business analyst happened to mention that we could get the information from a financial electronic feed we already subscribed to. So we changed the application to retrieve it instead of calculating it, and saved the company a lot of time and effort (read "money).
I’m sure that the applications you write are not the same kinds that I was working on, anyway. For the work I was doing, we did not need advanced math. Period.
I excelled at maths in primary school (or “math” in “elementary school”) but struggled majorly in high school. There was a direct correlation at play; the level to which I understood the practical applications of what I was learning directly correlated with my ability to learn and understand it.
I can certainly hold my own when it comes to basic arithmetic, but anything beyond that, I have no idea.
So no, definitely no need to have beyond-basic-maths skills to be a programmer.
I was a business programmer. In school I was always good at math, but I also had music ability. My brother was a music teacher, but I taught myself to read music and play simple pieces on the piano. I was also in church choir and high school glee club. Someplace along the line I learned to sight read pretty good for an amateur. I also have a good pitch sense (not quite perfect).
When I was starting out, I met an old IBMer. He said that when IBM was starting up, the only coders were engineers and there weren’t enough of them.
So they looked for musicians and people who knew classical languages like Latin and Greek.