Poll: What level of math is programming roughly analogous to?
My son is writing moble apps using Objective-C and is around 11. My question is if arithmetic is 1 and advanced calculus is 10 at about what cognitive level is bog standard, journeymen, CRUD programming in Objective-C?
(Please remember that voting does not up vote the poll.)
164 comments
[ 1.9 ms ] story [ 211 ms ] threadEdit: This was prior to OP clarification. :)
Programming can be a mix of many things: reasoning about associations and state, designing processes or interfaces, or—most saliently—modeling a domain that may or may not mathematical in nature.
To compare a programming language/runtime with a US math curriculum makes about as much sense to me as asking for the Richter magnitude of a sledgehammer.
>what cognitive level is bog standard, journeymen, CRUD programming in Objective-C?
He should probably have clarified it in the title
> bog standard, journeymen, CRUD programming
What do you think are the cognitive demands of that task, however defined?
Just like math, you can go as deep into a programming language or concept as your mind will carry you so there's no equivalence relation.
The "cognitive load" or whatever is really just a function of how much you've practiced and internalized that area of math. Calculus builds on algebra, sure, but once you've internalized algebra you don't have to "think real hard about algebra" _while_ you "think real hard about calculus."
Running a 10k for the first time is not the same as running your first 5k twice.
But I guess my point is that programming at an "Algebra" level means you have very little knowledge the language, while programming at a "Calculus" level means that you have much more knowledge.
That said, I spend 90% of my time writing geometric analysis libraries, so I am biased.
Some programming problems require specific areas of mathematics, some others, some none at all. All programming, as well as all real mathematics, require the ability to reason logically about a problem.
Based upon this understanding, I can't chose any of the poll options, but if I had to, I'd go with geometric proofs as well.
Also, memory, which is all we are manipulating at the end of the day, is linear; points on a line.
RAM is equivalent of "tape" in a Turing machine. If its anything resembling linear for any amount of time, the machine would not be Turing complete ... and therefore a not very interesting programming language/model.
Consistent, in software at least, is the concept of memory being linear; references using a start and end point, and points between.
However, concepts such as recursion, and other metaprogramming don't really make sense at that level.
You can make rote crud apps with an algebra level understanding of programming.
When it comes to deep level programming concepts, debugging complex apps - working on hard performance issues, I have no problem.
In that vein, I'm not saying you need to literally know algebra, just that it's a parallel kind of progress.
The point being that if you know algebra well, you can do useful things with math. In a similar vein, if you know functions well, you can do useful things with programming.
The correct answer is abstract (modern) algebra.
As for me, I have taken math to the level of Differential Equations and Linear Algebra.
The answer depends on how great you want to become. Take as much math as possible to find the best solutions. I come from a background of the hard sciences, I never took programming in college and I was able to pick it up quite easily because of my strong foundation in mathematics, analytics and logic.
I would put it into these terms, however, for simplification.
Coding simple programs is probably analogous to algebra/functional logic.
Having a 3-D model of workflow process with escalation loaded into your mind when you're working on an architecture is more akin to calculus. Add User Experience and network requirements into the mix and the skill is more akin to writing an Overture and the Opera. At this point you have a different animal than described above.
Under such a worldview, my personal view of the mental requirements of a simple CRUD type of task is that the ability to apply definite rules called for in the "algebraist" approach is closest (and extremely necessary). I've read many comments that beginning programmers can have a hard time understanding that the computer will do exactly what you tell it to do, and nothing else; applying algebraic rules is a very similar concept.
Geometry is an unpopular choice in your poll, but I think it has some of the same flavor of recognizing that "by labeling this complicated term 'x' and this other complicated term 'y', we can transform the current state of the problem into exactly the preconditions for theorem T" that I'm thinking of.
Anyway, overall I vote for algebra 1.
programming has an "advantage" over math in that you can just program something and see what happens and therefore gain an intuition and craft your way around things. mathematics is much more deprived in this respect, for a variety of reasons.
overall i would describe programming as a precise form of writing, whereas math is a very pure science
Note that if you're doing game development, a higher level of math will be required, than if you're writing a crud application that talks to an api; in the latter, understanding linguistics and a good common sense are more important.
You don't need any of high school math unless your specific application requires it (i.e. graphics involves polygons, anything quantitative involves arithmetic and unit conversion, you may want to report percentages and averages at some point.)
Things I remember from K12 math classes that were useful for programming in general:
- What variables are
- What functions are
- You can compose functions (this was obvious because I had been programming for 5+ years before function composition was introduced)
- Very basic set theory (Python list comprehensions resemble set-builder notation)
- Introductory propositional logic (though I learned this in the context of programming 7 years before I was "ready" for it in math class)
Learning to prove things about triangles (geometry) exercises some of the same skills as programming, but I wouldn't say it teaches them. Certainly none of the theorems or facts have ever been useful, just the process of reasoning.
Some people program insightfully, or so I am told by people who program, and other people program nothing but kludges. Among mathematics learners, there are great variations in the levels of "profound understanding of fundamental mathematics" (PUFM) among people who are studying the "same" level of mathematics. It interested me that you mentioned neither number theory nor combinatorics among your list of secondary mathematics courses, because in some other countries, those courses would come well before calculus. In general, any reader of Hacker News could learn a lot about what is missing in the United States (or, more generally, in the English-speaking world) in elementary mathematics instruction by reading Knowing and Teaching Elementary Mathematics: Teachers' Understanding of Fundamental Mathematics in China and the United States by Liping Ma.[1] There is a lot to basic mathematics that is far from easy, if deep understanding is what you are looking for. In the countries that excel over the United States in mathematics instruction, proof is part of every mathematics course, not just part of geometry, for example.
[1] http://www.amazon.com/Knowing-Teaching-Elementary-Mathematic...
There's room to wonder about how much of a causative role this has, and how much it reflects consumer demand. When my sister started taking algebra, my parents asked me to help her, and I was careful to provide proofs of all the algebraic properties of exponents (e.g. x^m * x^n = x^{m+n}; x^0 = 1; like that). That's not usual in the US, and didn't feature in her textbooks or supplements, but I did it basically just because it was important to me.
Can you expand on that? What do students do in other mathematical areas if they don't do proofs? I did all of my studies in France and I don't how much of a difference there is (though all my friends who have studied both in the US and in France found the maths classes a lot easier in the US).
The book I already mentioned, Knowing and Teaching Elementary Mathematics, will give much of the sad story. A really sad description of how mathematics textbooks are written in the United States[1] and a contrasting description of what kinds of problems are found in Russian textbooks[2] fill in more details.
It was on my second stay overseas (1998-2001), that I became especially aware of differences in primary mathematics education. I discovered that the textbooks used in Singapore, Taiwan (and some neighboring countries) are far better designed than mathematics textbooks in the United States. (During that same stay in Taiwan, I had access to the samples United States textbooks in the storeroom of a school for expatriates, but they were never of any use to my family. I pored over those and was appalled at how poorly designed those textbooks were.) I discovered that the mathematics gap between the United States and the top countries of the world was, if anything, deeper and wider than the second-language gap.
Now I put instructional methodologies to the test by teaching supplemental mathematics courses to elementary-age pupils willing to take on a prealgebra-level course at that age. My pupils' families come from multiple countries in Asia, Europe, Africa, and the Caribbean Islands. (Oh, families from all over the United States also enroll in my classes. See my user profile for more specifics.) Simply by benefit of a better-designed set of instructional materials (formerly English translations of Russian textbooks, with reference to the Singapore textbooks, and now the Prealgebra textbook from the Art of Problem Solving),[3] the pupils in my classes can make big jumps in mathematics level (as verified by various standardized tests they take in their schools of regular enrollment, and by their participation in the AMC mathematics tests) and gains in confidence and delight in solving unfamiliar problems. More schools in the United States could do this, if only they would.
[1] http://open.salon.com/blog/annie_keeghan/2012/02/17/afraid_o...
[2] http://www.de.ufpe.br/~toom/travel/sweden05/WP-SWEDEN-NEW.pd...
[3] http://www.artofproblemsolving.com/Store/viewitem.php?item=p...
The structure of formal proofs is taught in geometry. That's pretty much the only course where students are expected to prove theorems about the subject via proofs. In most of the other courses students are taught the formulas and techniques, axioms and theorems, but then apply them, rather than attempt to develop or prove them themselves. They're also, typically, not shown a proof of the theorems they learn, they're just told to accept them.
Wow! I can't even imagine how that works. When I went to school (and that's in Europe, not Asia), the notions of theorem and proof were taught in the fifth year of school (out of 12 pre-college years -- 8 in elementary, 4 in high school). That was, indeed, as part of geometry. Starting from high school, however, pretty much no formula is given without prior demonstration. Subjects where they can't do that (like mechanics -- that's taught in Physics prior to pre-calculus and calculus) are a royal fuckup. You aren't usually expected to be able to reproduce the proofs for those formulae, but a) you're strongly encouraged to study them, because they help you with the exercises and b) it's usually implied that, if you can't remember the formula, but you can prove it, it's OK. For example, if you can't finish a problem in a test because you don't know the formula, but you obviously try to find it, the professor will sometimes give you full credit, depending on circumstances and following a short talk.
I didn't even like math back then, save for geometry, but I reckon this was the most important thing I learned there. Unless you're dumber than a toaster, you're typically able to apply what you learned to everyday phenomenae after ten years of school; the bonus you get is also being able to reason rigorously and correctly, which is an important takeaway no matter what path you choose to follow.
At whatever level of Math (or any subject) you develop this skill, you are ready to be a programmer.
Disclosure: I'm a full-time tutor for third and fourth grade mathematics in the inner city through the Denver Math Fellows program ( http://www.teachindenver.com/teachindenver/denver-fellows-pr... ).
(1) It has relatively few pre-requisites in comparison to advanced calculus (which I'm assuming means something like a first course in real analysis).
(2) It isn't rote. There's more creative thought involved in solving problems. Even high school calculus is often extremely rote. I think programming is rarely rote, even if it's just a CRUD app. You have to strategize about how to approach the overall architecture of the program and make predictions about how early design decisions will affect future extensibility and more.
My first course in real analysis didn't have much in the way of prerequisites at all. I loved it because everything was covered ground up (including concepts like "limit").
There's a reason most universities require students to have completed the entire calculus sequence and often even a special "introduction to proofs" class before exposing them to a book like Rudin's.
Therefore I don't think it should be compared with math. Unless you are writing a program for a very specific scientific problem that requires the elaboration of a mathematical model.
Usually the computer does all the math, all you need to do is type the operations you need it to calculate.
I'm not saying they're completely unrelated, I just think linguistic skills are more relevant in most cases
There are certain levels of math or logic needed for various programming tasks, but it is not 'analogous' to any level.
For example, function composition is very useful in programming and thus Algebra (or was it Algebra 2???) comes in handy for understanding that at a basic level.
However, if you're doing graphics programming, then you often need experience with geometry (composition of basic shapes to form more complicated shapes, linear algebra (matrix operations), and modern algebra (quaternions).
I learned programming before I learned how to manipulate variables in math, and my prior knowledge helped me figure out how to deal with most of algebra.
So far, my vote is for Calculus.
While a knowledge of functions is vital to understanding Calculus (the fundamental theorem of calculus depends on them), it's only a small component of the bigger picture. Calculus is mainly about how functions change with respect to some other variable (time is common) and the inverse of that operation.
Similar to your son, I have been programming since an yearly age. We had Macromedia Flash back then, and over the course of my academic life, as i progressed in the Mathematics courses, my programming capabilities increased with leaps and bounds. For example, the movement in my games was usually similar to Pacman or bomberman. No arcs, or curved paths existed. As i learned about 2D motion, i started making Platformers. As i learned trigonometry, I started making games involving curved paths on a 2d plane. Even a realistic Car game. i remember coming home from high school the day they taught us about "Radians" and began usign the sin, cos, tan funtions of ActionScript (because the documentation said it used Radians and that never made sense to me before). It was that very year i programmed game AI that would chase the player in a realistic way.
So yeah, math helps
Given that, programming is everything and anything. Which is why a good programmer would always focus on the problem not the knowledge required to solve the problem. Because if you embark on tough project, find solutions is essentially like making a discovery.
In my opinion you shouldn't ever first learn books(apart from the very basic ones) and then go in search of problems. The right approach is to look for problems, and while solving them and you can learn the knowledge required to solve those problems as you go along.
Programming is analogous to nearly everything in math. Programming is only a tool, which you can use to solve various problems around yourself modeled in some mathematical form(In short everything).
Which is why programming is the most awesome profession ever. Because by nature it lets you probe and grok the nature, working and science behind everything. That is why programmers are so good at problem identification, solution design and problem solving in general.