Math, Programming, and Language Learning
An anonymous reader writes: There's often debate amongst modern programmers about how much math a professional developer should know, and to what extent programming is math. Learning to program is often viewed as being on a spectrum between learning math and learning spoken/written languages. But in a new article, Jeremy Kun argues that the spectrum should be formulated another way: Human language -> Mathematics -> Programming. "Having studied all three subjects, I'd argue that mathematics falls between language and programming on the hierarchy of rigor. ... [T]he hierarchy of abstraction is the exact reverse, with programming being the most concrete and language being the most abstract. Perhaps this is why people consider mathematics a bridge between human language and programming. Because it allows you to express more formal ideas in a more concrete language, without making you worry about such specific hardware details like whether your integers are capped at 32 bits or 64. Indeed, if you think that the core of programming is expressing abstract ideas in a concrete language, then this makes a lot of sense. This is precisely why learning mathematics is 'better' at helping you learn the kind of abstract thinking you want for programming than language. Because mathematics is closer to programming on the hierarchy. It helps even more that mathematics and programming readily share topics."
As a computer programmer who speaks six languages, I disagree, because I'm terrible at math.
The problem with all the articles like this is that they're either written by people who did take math or didn't, and in either case both believe their side is right. The article is clearly written by someone who took a lot of math so, surprise, he thinks math is good for programmers. But I took nothing past Calculus (and have never professionally used even Trigonometry), and I'm a successful programmer, so I think math is unecessary.
Until someone actually does a study on this, it's all gonna come down to "the way I did it was better" ... and that's just noise.
Yes, you can express language in terms of formal logic in order to describe rules of morphology, syntax and grammar.
No, learning language is in no way equivalent to learning math or programming. Language is a method of communication, not a coded series of steps arranged to achieve a desired result.
While the ideas of mathematics are (usually) precise, the language is fuzzy, informal and requires a lot of context. Everyone who ever has compared a fully formal proof and one done in the typical style mathematicians use can immediately see that. On the programming side, there is no room for fuzzyness. Or rather, whenever it is found, it typically is a bug and often a security vulnerability.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
Mathematics is about concepts not only the formalism in which you can serialize mathematical ideas. Both programming and natural languages can be described mathematically.
Where are these stories coming from ? What's next water is wet ?
You may have a legitimate debate over which is more precise math or particular programming languages but has anyone ever argued a human language is more specific ? I'd love to see people program without understanding the propositional calculus. No strike that I may have actually seen that and it wasn't pretty. Comedy aside, anyone who has ever tried to write a parser understands just how non concrete natural languages are. Something like 90% of your effort is devoted to disambiguation of natural languages.
Does this guy actually have evidence of anyone seriously making the point he is refuting ? I mean it's trivial take a look at poetry and mathematics and programming languages can't even start to deal with the abstract concepts involved.
I hated math and was not that good at it but I did love solving complex problems and puzzles. I've enjoyed a very lucrative 15 year career in computer programming.
Parent and article seem spot on; although, I prefer english and programming to math.
Democracy Now! - uncensored, anti-establishment news
Knowing the concepts may have helped for some work I have done, but, I have never used any advanced math for paid programming.
Five years as a J2EE developer: zero use of any advanced math for work projects.
Numerical methods (using Fortran) was just in school.
Calculus, linear algebra, and such: just in school.
Big-O notation, to pick algorithms and STL objects, sure, but probably doesn't count as 'math' for this article.
Since only a fraction of Computer Science graduates will work at a science shop (JPL, etc), I think some of the math requirements are a bit unfair. Perhaps I am just a low-range "Forrest Gump" programmer, but my personal experience was the actual math was burdensome to do to work towards a Computer Science degree.
Uh, Linux geek since 1999.
As long as we're making gross generalizations...
A big part of organic chemistry in college is "synthesis" problems where you are presented with a molecule and you're supposed to outline the steps (chemical reactions) required to turn it into a different molecule. I find that this closely mirrors programming where we're manipulating data instead of chemicals. We all have access to the same tools and there's more than one pathway that will work, but we're trying to find the most elegant / efficient solution to get from A to B.
Most of the students in my OChem class were premeds and many of them struggled with the synthesis problems. A lot of the premed curriculum involves memorizing and regurgitating huge amounts of information, with less emphasis on problem-solving. I always thought the ones that were good at the synthesis problems should switch gears and become programmers.
az0
... and that's it.
If you're programming litigation, you'll have to pick up some legal knowledge. If it's banking, then finance. If it's science, you'll have to be exposed.
But ... you don't have to be an expert at anything but programming. The experts do all that stuff. They can spec, but they can't code.
It little behooves the best of us to comment on the rest of us.
It was all the shortcuts, left out "intuitively obvious" steps, and sloppy use of variable names and symbols that drove me up the wall trying to learn advanced math from (imho crappy) math profs.
Let me tell you about the lecture with no less than three different Epsilons (a rounded one, a less rounded one, and something in between) used in the exposition of the proofs. That and my slight myopia kind of did me in in that class (or would have if I hadn't cribbed notes from my neighbour.)
Or, when, as a math prof, giving an example of applied math used for something like physics, why don't we just pick completely random variable names, instead, of, say, using m for mass consistently, v for velocity, etc.
I understand some kind of need to force people to think only of the form and not imbue terms with more semantics that aren't necessarily there in a particular mathematical formal system, but holy cow, could you be more obscure? Why yes I could. I will use 's' for mass on this page, and r' for mass on this next page, just to see if you are paying attention. !!!
Where are we going and why are we in a handbasket?
Programming is mathematics, it is the application of decision and discrete mathematics. Not all mathematics is infinitesimal calculus (there are different kinds of calculus), algebra or geometry.
TFA tries to make the case (poorly) that Math involves ambiguities and Programming does not.
The greatest of all mathematicians, Carl Friedrich Gauss, stated, "I mean the word proof not in the sense of the lawyers, who set two half proofs equal to a whole one, but in the sense of a mathematician, where half proof = 0, and it is demanded for proof that every doubt becomes impossible."
Not much room for ambiguity in that.
I thought someone proved that programming and doing mathematical proofs were equivalent?
http://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence
Before you can start formulating them — in any language, even in a spoken one — you need to think through the decision-trees and handling of exceptions and errors.
A "Hello world" program — in any programming language (except, maybe, the assembly) — is vastly simpler than a list of errands you may get from your spouse on a weekend. Heck, a single errand of shopping may be more complex:
In Soviet Washington the swamp drains you.
No you don't need math to write an iPhone App or an interactive website.
You do need math to understand why looking up some keys in a HashMap is much faster than iterating over a vector.
You do need math to understand why some encryption algorithms are better than others
It just gives you the tools to better comprehend what's going on under the hood, so you have more information to make the right choices in how to implement something.
I'll start thinking about this in a serious way.
While I freely admit that most of my programming has been in other areas. In every project I do it seems the day comes when boss says, what we need here is a visual. Where: when I click on it here..., when I drag it their..., when I spin it... What you have to understand (and many here do) is that you screen/window/view is laid out in a coordinate system. So you cannot escape it! You quickly need: geometry, trigonometry, vectors, and if your doing any 3D calculus.
Good luck!
I will not mourn that which I never had to lose. - Unknown
It goes
1, Mathematician
2, Scientist
3, Engineer (and thus programmers)
4, Art-Liberal degree
5, No degree at all or community college
I went for years keeping my math and my programming separate. Often programming involves little more math than x++. But then I really buckled down and learned a pile of math which I now pile into my programming. Interestingly enough when I try to show my algorithms to other programmers they say, "I forgot all that math 1 day after exams." But these algorithms often are cutting thousands of lines of code away and result in answers that are instant instead of a more iterative approach that could take minutes or much longer.
The math that I am referring to is all pretty basic year 1 or 2 stuff. Basic Discrete, basic calculus, etc.
some 20 years ago (yikes, did the math and it's closer to 30). I wanted to do signal processing and such, but I realized MIT grad students were doing all the fun stuff. I now write embedded software, and the only time I use math is when I either go off on a tangent, or sine off on an apology for doing so.
What maths is is a mindset where practical problem solving skills can be learned. This can happen at a "basic" maths level and at a higher level. It's not about memorising your formulae, despite what school might've taught you, it's about understanding and applying the formulae in a logical manner.
Clearly the submitter and the blurb have it wrong. It should be: human-language => programming => mathematics. Why? Well its obvious. The United Statian government allows patents on programs, and doesn't allow patents on mathematics. Clearly it can't be human-language => mathematics => programming, otherwise all of the patents on computer software would be worse than having patents on mathematics (which is illegal). Now it can be argued that (all) computer software can be reduced down to mathematics, so then it reads: human-language => mathematics == programming, but again, this flies in the face of US patent law. (Although the premise for the last assertion has been proven mathematically). Unfortunately a mathematical proof does not hold up in a court of law (at least not in the United States).
...on my Commodore 64, since we didn't have any games when it came out.
Interestingly enough, I sucked at "school math" and flunked math entirely. Imagine the expression on my math teacher when he saw me coding in assembly at the new computer-park back in the 80s, when he barely could understand basic.
Since, I've made numerous demos in the DemoScene with Amiga, and later on coding robotics AI with MCUs (as a hobby, nonetheless).
So no, you can absolutely learn to code quite decent software and hardware without deep math skills, but it helps if you want to do real advanced stuff like coding your own Render-Engine (but then again, how many are they?) My advice - learn whatever you need to achieve what you want.
What this world is coming to - is for you and me to decide.
I was an engineering major in college. I have become a software engineer in my career. My course in formal logic was the most useful training I had for a software engineering career. Math? Yes, useful - especially when I was writing risk analysis software for the options trading industry in Chicago (Black-Scholes etc), but without the formal logic I would have never been able to do what I have accomplished over the years.
IMO programming is almost nothing like natural language.
would be better than math if one is looking for a bridge from language to programming. Absent symbolic logic, math -- especially algebra -- is a good introduction to the concept of computer programming because of its logic component (application of the algebraic hierarchy is a simple logic system.)
For kids, Lewis Carroll's symbolic logic is both fun and useful.
Everything in the Universe sucks: It's the law!
A lot of commenters here seem to be (incorrectly) conflating code which DOES math with code BEING math. Yes there's a lot of products that need high math (i.e. simulations) but there's also a lot of products that are successful when they do extremely complex data movement and organization but very little mathematical transformations.
If programming was so close to math, wouldn't people who are really good at math write the best code? Maybe that's a straw man statement, but in my experience, the people who are really REALLY good at math (e.g. the radio frequency signals processing guys) happen to write the worst code I've ever seen. I've spent much of my career taking prototypes written by DSP engineers and making them go 10 to 100 times faster and use a tenth as much memory. That's not belittling their skills! They did something absolutely amazing that I cannot do, coming up with the steps and crazy weird math required to process signals. (And often, even though I make their code go way faster, I still don't really understand the math behind it when I'm done.) Their code just happens to not take proper advantage of the hardware or other resources. They do the equations so it *functions*, but they don't know how to make it *fast*.
The real skill comes from being able to picture the structure of the data in your mind as complex interconnecting shapes and mentally animate the movement and transformation of data in as few steps as possible without redundancy or useless or redundant transformations; and in many cases, being able to picture multiple workers doing their work in parallel is a plus. I'm not saying every great programmer uses their visual cortex, just that they can keep track of a lot of moving pieces in their mind.
This isn't math. This is more like a visual/spatial skill, like a mechanical engineer designing a complex machine with a lot of moving parts that have to fit together perfectly and move through each other's space in perfect timing. I think it's a different part of the brain from either math OR language.
I have to agree with Kun that complexity analysis (big-O) is absolutely mandatory, though. Saying complexity analysis is "pretty much meaningless" is the dumbest part of Mei's article. Kun also makes good points about recent innovations in DSP, machine learning, etc come from math--but only the *theory* part. You still need people good at the mechanics of programming to *implement* that theory in a productizeable way.
--PK (Tech Junkie / Junk Techie)
A "programmer" can be someone who spends two days putting together a complex Excel macro (poorly), or someone who designs an information systems architecture for a significant enterprise. These are VERY different activities.
On top of that, I'll say that approximately 85% of people doing programming aren't really competent. Compare how often software crashes vs how often cars fail in such a way that they crash themselves. So you have to specify, are you talking about MOST programming, or competent programming? Most programming isn't done competently.
Well-designed and larger software projects require a thorough understanding of a large set of rules, both knowing what the rules are, and understanding WHY the rules are as they are, and when to apply which rules in order to move forward. In that sense, it's very much like math. Also like math, one wrong decision can lead you down a path of futility, from whence reversing course is time-consuming.
Mathematics, chemistry and physics use formal languages. Terms and consequences are concise but rather difficult to deal with. Informal languages such as we speak daily are sloppy but efficient and rather easy to understand by comparison. It is that slop that makes informal languages so useful. Imagine E= MC squared if you have no clue what E, M or C mean at all. It might take decades to ascertain what the equation means..
Actually natural languages cannot be described mathematically.
A SUBSET of a natural language can be described mathematically... but being a subset means there are a lot of expressions in the natural language that cannot be described.
The problem is that natural languages have unique translators... one for every individual, with no two translators identical.
Until you hit something that does require higher math.
Find the optimal coverage schedule for employees next week given their varied availability
As simple as this sounds, unless you're willing to wait for the computer to churn thru every possibility: you are going to need some higher math know how to program that answer.
Programming isn't, strictly speaking, math. Not like calculus or algebra is math. It's something else entirely.
I have a rather annoying learning disability, and have suffered from it since I was in first grade: I have a great difficulty memorizing things. Now, even with that rather annoying problem, I managed to be near the top of the class in both grade school and high school. What happened is I learned early on how to analyze the patterns behind the subjects I was expected to memorize and when test-time came was able to reconstruct most of the required information based on those patterns. Perfect example of this is spelling. I figured out what phoenetic combinations ruled English, and used them to pass tests. Armed with those rules, I only had to remember one or two odd words per week. In history, I found myself being able to understand and explain historical trends and influences. Names and Dates, on the other hand, gave me (literally) a headache. Simple math was easy (just a small number of consistent rules, after all). Sort of. Word problems in math, on the other hand, were difficult at best.
After I graduated college, I bought myself a Commodore 64 (they were just on the market) and dove right into both Basic and Assembly language. Both were easy for me to analyze and comprehend. Logic may be a branch of mathematics, but to me it's more obvious than anything in the math textbooks. Calculus is (for me) as obtuse and illogical as it gets. "If a water tank with a height of 15 feet and a circumference of 20 feet is 2/3 full of water, with a 1/8 inch hole a foot above the bottom, how long will it take the water level to drop to the hole?" Just plug the hole, whydoncha? Jeez!
Interestingly enough, I also have problems with computer word problems. Just give me the code (any code -- C, C++, C#, pascal, basic, assembler, SQL) and a little time, and I'll tell you what's causing the bug you're seeing. Now, after all these years, I'm the one everyone comes to when faced with an intractable computer problem that no one else seems able to solve. And I still don't like math.
"My country, right or wrong; if right, to be kept right; and if wrong, to be set right." --Senator Carl Schurz (1872)
This is a debate between people without an education or picked up knowledge in mathematics vs. those who do. People who don't, like me, are perfectly happy finding well-paid senior-level positions which do not require in-depth experience of optimized algorithms in C or similar. People who have found an interest in math and who work in specific sections of the industry where the knowledge in math is a necessity may lean towards thinking about "programming" as only being related to the *same work* they perform. Just because a particular job requires a specific skillset does not mean the entire industry requires the same set of skills.
Where does the notion that being a programmer or developer is akin to becoming a structural engineer? Building a bridge properly requires a very specific set of skills; programming does not. And no, I'm not talking about the person who spends a few months copy/pasting php snippets with google's help - we're talking about people who have spent years developing their craft, *after* formal schooling has ended.
I started between ages 10-12 on geocities, finally figured out what the hell CGI programming was (I'm nostalgic for those mailto: form actions), and have since progressed to being a senior developer. I would put myself in the 80-90th percentile of backend web developers and 50-70th percentile on frontend. I have only met 3 other web developers in 10 years who actually put in the effort to understand the technology they are working with the same way I do. It's frustrating to deal with software engineering graduates with 5+ years of experience on a daily basis, who don't know the difference between a 301 and 302 http redirect, why their CDN isn't caching (set cache headers...), dealing with complaints about the difficulty of understanding ternary syntax, or explaining why they can't instantiate an abstract class.
If you want to segregate developers, don't do it on the basis of mathematical and algorithmic logic. Do it based on people who have a thirst to learn (and who actually accomplish this) vs. those who only got into the industry for the money. You can tell the difference between the guy who spends at least some of his free time picking up new skills vs. the one who shows up 9-5 then completely drops everything developer-related until 9am the next day.
Math is mandatory for engineers. In the early years people getting a degree in any way related to computers, hardware, software, programming, playing games while smoking weeds... were all engineers. Now that there is mass separation in the field the importance of math on any particular field is not as obvious. Us that design network gear and program network interfaces need math. Lots and Lots of it.
Having to work for a living is the root of all evil.
Someone with marginal understanding can get acceptable results with sloppy programming. Language and Mathematics requires more rigor. Of course programmers think they're good at those things, too.
You used math, sorry to break it to you. You didn't use whatever was being taught in school, but you used discrete math, finite state machienes, and other such things. The sum of math is not algebra, calculus, and differential equations. You were just able to figure out a lot of that yourself without a math class. If you take specific math classes in those areas you can do even better (easier to understand and more robust code)
I used to think only suer genius people could make compiler parsers, but after learning finite state machienes, I learned it is simple easy just tedious.
If you can program an algorithm as a proof you minimize maintenance and maximize funtionality. Of course elegant proofs usually make shorter algorithms, eg less code which means less maintenance.
TFA is really about the human mind. We understand patterns as different forms of language, music is the most basic and universal, it lights up all areas of the brain, then you have spoken language built on top of musical patterns, then along comes symbolism in the form of writing and icons, math is our most recent and most precise form of natural language.
The take home message is, expose your kids to maths without boring them to death.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
Well, of course maths, programming, and natural languages are different, but all of them involve a symbolic language that models something and expresses that model. Kun seems to be focusing just on the differing degrees of precision these symbolic languages employ.
People tend to think of natural language as only a medium of communication, but it is also the way the human mind models whatever it perceives or imagines, and despite the fact we do that mostly instinctively, it is by far the hardest thing about language.
Programming is not math, it is language - a programming language is a language which defines, describes, and expresses an algorithm. Useful programs are frequently express something mathematical, but that is a function of the application, not programming itself.
Maths is just a whole lot of symbolic language. Learning maths is language learning, but it is also learning to describe things with precision and clarity and algorithmically. Some natural language learning is like that (e.g. advanced Latin grammar) and some is not (e.g. introductory conversational courses).
I liked the organic chemistry thought process. And genetics too. When genetics died, I started programming.
I feel this discussion is actually talking about computer science. Computer science *is* math; specifically it's a branch of math that's all about algorithms, big O notations, logic, etc. etc. etc.
Programming is about taking mutually exclusive requirements from two different sources and finding a solution that solves both of them to an extent that keeps you from getting fired. It's about looking beyond what they ask for and figuring out what they really need. It's occasionally useful to know the performance differences between different sorting algorithms and stuff like that, but that's not what it's really about.
right...and that biases them...same for the coders as you say...
what no one considers is what the Communications people have to say...
see...Communications Theory (as taught today...i'd know...used to teach it as adjunct in grad school) starts with Claude Shannon and his SMCR model: http://en.wikipedia.org/wiki/S...
sure, there is tons of 'soft science' but there is something relevant here: SYMBOLS
it really goes like this:
symbols:logic:math/programming/writtenlanguage
math/code/written language are all on the same "hierarchy" level...then branch according to ****USAGE FUNCTION**** (I hate that TFA uses that ontology!!!!)
all math, all code...it's ALL SYMBOLS...and, from a cybernetic perspective, they can all be grouped together when trying to answer questions that TFA poses
Thank you Dave Raggett
it starts with symbols...then goes to 'logic'...then math/code/language
here's one way we can know this is true (besides using the SMCR model)...
it mirrors human development
humans use symbols before we know what they mean...before we can use **logic** to manipulate symbols in real time to get what we want (aka talking/writing)
we first mimic the symbols around us like a parrot...we just repeat what we hear
then we **associate** symbols with things...
that association allows for us to use logic...logic tells us what symbols result in what actions around us
***THEN*** we choose from all symbol systems available to us the best for the situation...
that's your answer to TFA
Thank you Dave Raggett
Computer programming can be seen as more rigorous than mathematics because if the written program is not correct, the executable will not run; whereas a mathematical proof may contain elements that are not completely described but part of mathematical lore. However we do not possess a compiler for mathematics. Conversely language may be more abstract than mathematics because language, in addition to mathematics, may express information that is not mathematics, e.g. poetry, imagerie, etc. However mathematical abstraction is also very rigorous, which is not the case of poetry or other literary constructs.
Mathematics is unique in requiring both a high level of abstraction and rigour at the same time, yet this must be performed without any artificial help like a debugger or compilers. In addition, creative mathematics require a high level of intuition and the capacity to concentrate on a specific problem for long periods of time (months, sometimes). Altogether, mathematics requires specific talents that are fairly rare and not necessarily found in programmers or writers.
Fortunately we are not all alike.
I'm going to go with this:
The vast majority of programming is fairly simple manipulation of states and symbols, which are themselves a small subset of numbers. yes and no are 1 and 0, etc.
The way those manipulations work together quickly becomes very complex.
You can do a boatload of things with just that knowledge. Entire video games. Many types of process control and dedicated controllers. Most reasonable scripting jobs, most "webby" stuff, database stuff, etc.
But then adding some knowledge of math, in the purely technical sense, gives us more symbols to manipulate, and more ways to manipulate them, and this, like any major skills enhancement, definitely makes you a better programmer. Some mid-level math concepts -- very simple in nature, actually -- amplify what you can do so much it's just amazing.
I suspect -- I can't actually tell you because my math is only mediocre to fairly good, nor have I ever knowingly come in contact such a person -- that *really* advanced math skills combined with *really* advanced programming skills (which I can lay claim to) would combine to create a true monster programmer.
But...
I think there's something about the essentially concrete nature of programming, and the incredibly abstract nature of higher math, that makes these dual-facet powerhouses the rarest of the rare. In my experience -- admittedly, just one person's career -- serious math heads tend to be pretty lousy programmers. Lots of bugs, poor structure, little to no sensitivity to shortcuts and loading. Then really great programmers seem to be only sorta capable with math (although what they can do with what they have tends to be quite surprising.) Just an IMHO based on my experience. Something I've found interesting enough to contemplate many times. Having said that, I sure would like to meet Mr. or Ms. combination-o-both. :)
I've fallen off your lawn, and I can't get up.
DISCLAIMER: I have (nearly) finished theoretical computer science and have worked 3+ years as developer then moved to different industry.
I think there are two pieces to the story.
There is a piece of math that helps you express better / more efficient algorithms. In that, you need just plain simple knowledge of the programming language syntax and then you express your math knowledge in this language.
Second piece is the logic, tress, grammars, semantics, all stuff that you learn from mathematics (meaning: logic, formal languages) that really empowers your understanding how the language works itself.
Personally, I felt like learning all of this stuff above was nice (and extremely painful), but after I had implemented my first programming language (very simple one) that really brought "enlightenment" into what I was doing.
On the other hand, majority of software work I've seen rarely goes outside of "create your own framework for GUI" and add CRUD operations which are was plain boring for me. For this, you require neither underlying math nor advanced algorithms, so no math required here, and I would dare to say, knowing it, will frustrate you.
But if you are one of few lucky developers who create interesting stuff, then this knowledge really, really helps.
(That) Such is the nature of the problems we currently have, that mathematics isn't really a separate language, and should not be considered and labelled as one - instead being merely a consistent part of every other language, that now shares a set of (standard) labels. If this wasn't the case - then every language would not have their own labels for numbers etc., which act as the foundation of mathematics, itself.
(Note: There is a difference between what we perceive (of the universe around us), the information of this, and how we represent such information to allow communication between us. Language is ONLY an application of the latter - any consideration of mathematics being defined as and by the former information and perception, automatically means it has nothing to do with language, directly, at all. Unfortunately, some still like to confuse them.)
Programming languages are applications of both mathematics and logic, whilst often using additional elements of another language, (to make them easier to read by humans), in order to allow computers to function, by transferring the information they require to do so. (Calling them languages is consistent with what language is/how languages function, and not a problem.)
'Stupidity is an often fatal disease' - R. A. Heinlein
I can relate to that :)
I think the bulk of software development is a form of engineering. Just like most electronics development is done by engineers. There are scientist who develop the devices and algorithms and engineers who make them work. As an engineer, I use math when needed to solve problems. I'll use formulas presented in application notes or look things up in my notebooks. I don't care about (nor do I have time for) deriving formulas from fundamental properties (which is the *real* math in my book).
Computers are essentially big calculators. The CPU instruction sets consists essentially of math operations, branch control, and input/output.
void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}
College isn't apparently for everyone, since all I can seem to read is "bohouhouhou mummmyyy the teachers also said I had to take class XXX even though I don't even like it and they don't give chocolates bouhouhou.."
Yeah ? well guess what on your degree (because apparently that is the only reason you are here : a piece of paper) it will say Master of Engineering. Not java code monkey. So YES the institution that is delivering that piece of paper is FORCING you (OMG call human right watch !) to open your mind and eye and broaden the scope of your knowledge and understanding. Because society is spending $200k on you and a java code monkey is not worth $200k to train.
You want to train DONT go to college. How hard is it ? there are hundreds of craft schools everywhere. just go there.
Nobody seems to have mentioned cryptology. Surely every programmer (or more general IT type) is going to be asked sooner or later, "Is it safe?", "Can the NSA read my code?", "What are the chances of that random() call giving the same answer twice?". It seems to me if you don't have reasonable math you are just going to regurgitate something you have read somewhere.
Maths.
I find that what many people think of when they think of "math" is really just calculating (solve for this variable, optimize this curve, etc.)---what I like to call end-user math or craft-math. It's more akin to cooking or repairing an engine than it is to writing software. The other kind of math, the real kind, if you will, is proof writing. It's a creative process, both goal-oriented and expository, and subject to principles of elegance and efficiency. All of these features it has in common with software development.
Many people can learn to *write* code; and modern languages--especially dynamic languages--make this easier than ever.
If you can parse languages with precision, then yes, it's quite doable.
What gets hairy is when you have to debug; post mortem being the most difficult, in my experience. Then you're squarely within theorems & proofs, and this is what separates the cans from the cannots.
Other evidence that math is good?
In the times past, why were there so many people that had to rely on ORM to do their SQL for them? For anyone who's comfortable with discrete math, SQL ought to be easy and the leaky ORM abstraction--as opposed to writing one's own abstraction library--is far more trouble than its worth.
On the databases in fact, how many horribly designed schemas have you seen in your own experiences? I have seen my share and they've been inexcusably bad and evert so clearly not designed by someone even remotely mathematically-inclined.
The best book I have ever read on DSP is "The Scientist and Engineer's Guide to
Digital Signal Processing" - pdfs are on http://dspguide.com/. All of the sample code is in BASIC - yes, BASIC! I have successfully then gone on and implemented many of the ideas presented in many languages, and even in hardware. This highly useful maths can be presented in the what is arguably the worst of programming languages, and it is still very informative,
Some important areas of programming have very little maths at all. For example math does not care if you just name all your variables "aaaaaa" through "zzzzzz" - the answer is just the same.
In short both sides of the argument are wrong. Programming and math sit beside each other, with quite a bit of overlap. When working on problems that are in this overlap, you have a bias towards seeing it as solving maths with a programming tool, or programming with maths as a tool.
The big thing holding back computing is that computer programmers tend to think only in terms of algorithmics, and not in terms of (mathematical) computation. Computation in mathematics allows all sorts of funky stuff, and the only area where it is commonly applied is in vector manipulation. Applying matrices to matrices to matrices allows us to create infinite combinations of reusable transforms, which can then be applied to all the vertices in a 3D model at a low cost. Applying a series of algorithmic procedures to manipulate the same data would be unworkably slow. Algothmic programming results in lots of unintended interactions, and hard-to-track phantom bugs in the code. Computation is harder to start with, but it scales so much better and results in much more stable projects.
Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
Subject line says it all.
Give a hand, not a hand-out.
Logic comes 1st with programming, nothing else.
Math or "Maths" is really a secondary skill which allows you to expand on your logic. You can essentially program with minimal knowledge of maths whilst simply using more if/else statements and logic to make up for it.
I had a GCSE D in maths (lower than average), but i've always been very logical. I learnt the required maths by using my logic to test and understand what i needed, not the other way round.
Programming without logic is nothing, programming without maths is something google can help you with very easily, or you will pick up yourself using logic.
Maths, physics, chemistry, biology, history,human societies are all DOMAINS.
Programming is basically learning what you can instruct computers to do, and by experience learn how to always get favourable outcomes (direct experience).
DOMAINS may assist understanding, and even guarantee results, but is not "programming".
I think his name is wolfram. I also think maybe the people who started computational trading of stocks in the 80s.
A more fruitful question to ask is how many classes in informatics subjects a mathematics student should take to warrant a degree in Computer Science (instead of general or applied mathematics).
Informatics consists mostly of GÃdel's incompleteness theorem and Turings halting problem with a bit of propositional logic and lamda calculus thrown in; the rest of computer science is really electronics. A few experiments in electronics and programming may help students to visualise the theory a bit.
Not everybody needs to understand computers. Almost nobody needs to 'use' a computer.
Some arts colleges have courses where you can study 'User eXperience Design'. No computing required - just bring some crayons and paper and study old paintings for inspiration.
that I've recently touced into while doing embedded programming (including, but not limited to):
* State space representation can be useful to understand the physical system which should be programmed. Understand the physics going on at the system. That can be torque, power, hydraulics, mechanics, energy, heat, however they are related and both what to do and what NOT to do so the system doesn't get ruined.
* Eulers method (cannot do more advanced method since I only can work with integers fast) to "run" differential equations. For example, this way sine and cosine can be generated only with adding and shifting(works like multiplication), just by solving x = -x''. (On a PC one could obviously use runge kutta.)
* Kalman filter (if not so time critical, the embedded system can get a better "understanding" of the environment surrounding it by combining several sensor measurements in this way)
* Linear least squares (for analysing data, finding underlying relation between several channels that are affected by the same physical phenomenon and perform calibration as well). Usually the linear least squares analysis is not done on the embedded system, but the result is embedded in software. In general, use linear algebra for what it is worth on data...
* Fourier transform to find transfer functions on dynamical systems or analyzing communication channels (for example when designing modems). Also typically not done with an embedded system, but the embedded system could exploit fourer transform knowledge.
* Designing modems, and performing demodulation efficiently within the typical embedded contraints(integer aritmetics, avoid to many multiplications).
* Understanding channel coding when implementing error correction on the aforementioned modem.
* Designing IIR and FIR filters, for the modem above or noisy measurements. Also some mathematical understanding is necessary to get these filters working properly with only 16 bit integer aritmetics and reduce runtime.
* Principal component analysis for lossy compression of data/better understanding of measured data.
* Have a full understanding of the PID regulator, which is used wherever something should be regulated in a proper way. The PID regulator must also be implemented with 16 bit integer aritmetics to run fast enough on the embedded system. Tuning the PID regulator to get it stable (with shifts to do the the Kp, Ti and Td since we don't have time to do multiplications) is important.
* Tailor lossy or lossless compression/decompression algorithms for known signals (based on statistics about the signal), so we only store the important attributes. This must also obviously minimize CPU runtime.
There is also a lot of other mathematical subjects which can be exploited to simplify the programming on the embedded system(or PC)/reduce cpu time and battery usage/reduce amount of work to do or amount of C code necessary to write/getting the system more robust and so on... but this is the few things that popped up now..
Probably the most eye opening math class I took that really made my coding skills take off was called Applied Math in high school. The focus was just what the title says: application of knowledge learned. It really taught me how to think outside the box when it came to solving problems with math. Solutions I've written for games left me asking myself where the hell I learned the solution to the problem: applied math.
Chewbacon
The Bible is like Wikipedia: written by a bunch of people and verifiable by questionable sources.
I can say that if I didn't have the proper 'math' mind set that when I was faced with storing a 16-digit number in 4 bytes I might not have found a solution. It is quite simple if you think a bit. :)
I am surprised that more people are not better at Math, since language is almost entirely Math. Think of the words we use that denote math terms: Quantity (more, less, many, one, few, all, none, etc.), space (large, small, besides, etc.), relationships (on, in, with, by, all, included, etc.), ..and the list goes on.
I strongly recommend a book called, "What Linguists Always Wanted to Know About Logic..* (*But were Ashamed to Ask!)" by McCawley.
http://www.amazon.com/Everythi...
Incidentally, this book has one of the BEST descriptions of Lambda Calculus I've seen so far.
I can easily see the disconnect between language and programming; it s pretty much the same as the disconnect between language and good thinking. Language contains many distortions, deletions and generalizations the people who know the language process unconsciously (sometime to their detriment) to complete their understanding of the communication. Computers cannot, at this time, do a good job of imputing the missing components to fully complete the instruction.
Good programmers are simply better at complete and precise thinking.
"The mind works quicker than you think!"
Depending on what you want a program to do, math is pretty much required, by you or the computer itself.
One great use for math directly in a program, though, is a scheduling program for the enterprise (ERP). Interestingly this field of math is actually called "programming" and involves finding the optimal intersections of involved hyperplanes vis a vis some wonderfully elegant algorithms.
This is just one example. Another may be a HFT quant program running Black and Scholes in real time.
Programming is just knowing how to instruct a computer to do something. Math gives you, IMHO, the most interesting fodder to have a computer perform.
Maths can be very concrete (simple arithmetic) or very abstract (number theory, which is also called arithmetic).
Programming can be very concrete (assembly) or very abstract (pure functional)
Human language can be very concrete (dog training) or very abstract (philosophy)
Maths can be very lax (estimation) or very rigorous (formal proof)
Programming can be very lax (visual programming) or very rigorous (certified code)
Human language van be very lax (slang) or very rigorous (poetry)