From my experience, I'm one of the very few people who write manually in a serifed font; in particular, I write 1, l, I, and | very distinctly and use a slashed zero so as to distinguish it from the letter O. I wish more people would do this since it is still sometimes necessary to communicate on paper, and trying to interpret handwritten notes with ambiguous writing can be quite annoying.
Unquestioning faith in calculators.
The same can be said for computers too - except the problem is often worse as computers are far more complex to the point that almost no one understands them fully, and we are encouraged to accept this.
My handwriting really similar. I use the cursive "l" in equations. Also I'm using Mathematica's i simbol for the imaginary unit [1] since teachers often forget about this and start using "i" for indexing sums too. It's quite common they appear in the same exponent.
I'd also consider a dotted zero, or a reverse-slashed zero. That way it can't be confused with a null-set symbol (or phi, or a Danish vowel.)
Which brings us to that what can you expect to actually learn in a class anyway?
I'd say that for any non-trivial curriculum (which ought to include most of a university...) you need to read about the subject yourself and do your own learning. And once you do that where do you need the classroom? For asking questions, maybe? But a classroom probably isn't the most effective way to ask questions.
The stream-of-consciousness notation section also rang true. It's a huge frustration and time waster for everyone involved.
I agree with you for the purposes of teaching undergraduate beginning level courses that involve mostly the real number system (and only incidentally the complex number system). That said, our learned fellow participant impendia here on HN, a professor of mathematics, has strenuously disagreed with me by pointing out the specialized number systems that do treat infinity somewhat like a number. On my part, for the students I encounter, I stick to discussions like "All about Infinity"[1] (formerly titled "Infinity Is Not a Number - It's a Free Man") Katherine Körner, another astute mathematician. I have frequently seen discussions of infinity as a (real) number here on HN that essentially boil down to the error of treating the quotient upon dividing by zero as a real number.
Here are a few:
* Not actually thinking of a solution to the problem before starting to write a program; not soliciting requirements.
* ALL of the mistakes covered by this article. Struggling CS majors are often (not always) really, really horrible at math, and this -- more than anything else -- really holds them back from writing correct programs.
* Off-by-one and the functional equivalents
* Infinite loops in exception handling
* not enough input validation; too much input validation
* Reinventing bad versions of existing algorithms (Dijkstra's algorithm is a good example) and in general not enough research before implementation.
* The other side of that coin is taking stack overflow upvoted answers as gospel (basically our equivalent of trusting the calculator)
* Fundamental incomprehension of boolean algebra, which gives rise to all sorts of errors:
incorrect paren placement
Obscenely complicated conditions and/or absurd if conditions because they don't understand boolean algebra (e.g. I've seen conditions that eventually simplify to a || !a)
Complicated programs and grandois bug-hunting because they couldn't figure how a simple boolean expression (there was a post on HN a while back about Javascript == vs === where the developer basically wasted a day going down a rabbit hole he attributed to == vs === but was actually completely avoidable if he had taken an undergraduate discrete math course that hammered home boolean algebra.)
* This page contains a very useful implementation details section which describes some common errors implementing quicksort: http://algs4.cs.princeton.edu/23quicksort/
* As a general rule, any program written by a student containing concurrency is always wrong, unless concurrency was explicitly taught (many schools just have a short unit in a course or two, instead of integrating the topic throughout the curriculum).
This is not unlike recent discussions about the conlang Ithkuil on HN.
For better or for worse, math notation has for the most part been optimized for writing on paper or a blackboard, using context to eliminate "inessential details". Local edits are generally easy, and pieces of notation are not always so tightly coupled. (For example, we can put a "for all x" at a distance from some equation.)
Have you ever attempted to write Lisp on a blackboard, then needing to insert an expression in the middle? It's extremely difficult because you have to perform a quadratic process (erasing everything after and reindenting) to make the Lisp readable. At least this is what I've noticed in interviews. You can sometimes patch your Lisp forms with lines and arrows, but it's the quickest way to get spaghetti on your blackboard.
RPN is similarly useless for the task. RPN is exceedingly easy to write, but not so easy to read. Also, higher level mathematics becomes unwieldy in RPN.
Sussman and Wisdom in their book "Structure and Interpretation of Classical Mechanics" did take a different approach to math notation in order to make it unambiguous for that relatively small sub field. It looks like regular math notation but written in such a way to make things more easily computable. I'd say they were successful, though their work would be difficult to generalize.
Yelp! My buddies Riemann & Lebesgue had quite a different story on the matter...
Many things in mathematics are defined in a manner that is consistent and convenient. Defining 0! to be 1 is a similar case. In doing so nothing goes wrong, and the binomial theorem becomes simple and convenient to state. Without defining 0! as 1, it's a dreadful mish-mash of special cases.
Similarly with 0^0. Considering x^y where x and y are complex numbers, there is no consistent single value as x and y each approach 0. So in the reals and the complex numbers we leave 0^0 as undefined. However, in the case of natural numbers there is a case for declaring 0^0 to be 1. That's to make it convenient to talk about the set A^B as the collection of functions from B to A. When we do that we get |A^B| = |A|^|B|.
There is more than expected in mathematics that's defined for convenience.
https://en.wikipedia.org/wiki/0%5E0#Zero_to_the_power_of_zer...
From an undergraduate math point of view, it's wise to understand that 0^0 is not well defined.
http://mathforum.org/dr.math/faq/faq.0.to.0.power.html
It's less controversial when the terms are integers, but even there an argument can be made for indeterminacy. As the linked article says, "There is no one definition that always works well for 0^0"
I can use 0^0 = 1 to prove that 1 = 2, but I'm sure you can anticipate the argument's form.
Your definition only works for situations where you are dealing with integers.
HN discussion: https://news.ycombinator.com/item?id=7519827
Given a fraction similar to:
x + y
-----
x
I've seen many people cancel the "x" on top and bottom, leaving y.Oh, and incidentally, sin(x) / n == 6.
http://www.altavista.com/cgi-bin/query?q=link%3Amath.vanderb...
To be fair, the question was kind of dumb. But the textbook was also worthless and created to generate revenue for the math department. So it's unlikely his proposed solution would have helped the student in question.
Not to mention that the lecture on RTFM didn't help anyone learn math anyway.
The student who asked the question probably never really understood the math (wrote learner), but did become the prof's office hour best friend and got a good grade anyway.
Anyway, file under the teacher hostility section of this article, I guess.
They would always show the base case correctly. Then they assume it's true for all positive integers up to a fixed positive integer "n." So far so good, now we need to prove it's true for "n+1." This is where weirdness happens, I have seen a hundred assignments where an equation is reduced down to "0=0" or "1=1" and they then write "Q.E.D" even though the fact that 0=0 was not under contest.
By induction, suppose there are only n=1 horses. Obviously they are all the same color.
Suppose we had proven the statement up to n. For every n+1 horses, the first n horses must be the same color. The last n horses too, must have the same color. Clearly all of them have the same color. QED.
It's more common for CS courses rather than math courses to rush the definition of Big O out the door to students who will struggle to understand the formal definition.
There is something called photographic memory...
Here's an alternative explanation: math students do lots of computations, and sometimes make mistakes which they would be able to identify immediately if someone told them "you made a mistake on this line".
Kind of like how all programmers occasionally drop a paren or a semicolon. Does that mean no programmers "know programming"? Of course not.
In fact, if you've never made a stupid mistake programming, odds are you're not a very good programmer because otherwise, you'd have done enough programming that one of these mistakes became inevitable.
The only difference is that most programming is simpler than university-level mathematics, so with a few decades of research we figured out how to use computers to prevent us from making a lot of mistakes without impeding our productivity too much.
For example, from the article:
"In fact, the great mathematician Leonhard Euler published a computation similar to this in a book in 1770, when the theory of complex numbers was still young."
So another way of wording your post: Euler doesn't know math.
Similarly, many of the examples (e.g. calculators) could be interpreted as students knowing too much math, and excepting their tools or others to know the same "math" they know.
And learn about why newspapers are laid out in columns.
Because they can't be resized on the fly?