20070505

Math For Programmers (一)

Math For Programmers

I've been working for the past 15 months on repairing my rusty math
skills, ever since I read a biography of Johnny von Neumann. I've read a
huge stack of math books, and I have an even bigger stack of unread math
books. And it's starting to come together.
自从我读了Johnny von Neumann的传记,我已经为弥补我糟糕的数学技能花了过去的
15个月了.我已经读了大量的数学书籍,不过呢,似乎我还有更多没有读.当然我会接着
做的.
Let me tell you about it.
现在我就来告诉你这些.

Conventional Wisdom Doesn't Add Up
这并不包括传统的智慧

First: programmers don't think they need to know math. I hear that so
often; I hardly know anyone who disagrees. Even programmers who were math
majors tell me they don't really use math all that much! They say it's
better to know about design patterns, object-oriented methodologies,
software tools, interface design, stuff like that.
首先:程序员不认为他们需要了解数学.我常常听到这样的话;我不知道还有会不同意这
个的.甚至于以前是主修数学的程序员也告诉我他们真的不是常常使用到数学!他们说
更重要的是要去了解设计模式,面向对象原理,软件工具,界面设计,以及一些类似的东
西.

And you know what? They're absolutely right. You can be a good, solid,
professional programmer without knowing much math.
你了解吗?他们完全真确.你不需要了解很多数学你就能做个很棒,很专业的程序员.
But hey, you don't really need to know how to program, either. Let's face
it: there are a lot of professional programmers out there who realize
they're not very good at it, and they still find ways to contribute.
但是呢,同时你也不是真的需要知道如何来编程.我们要面对的是:有很多专业的程序
员,他们认识到他们不是非常擅长数学,但他们还是寻找方法去提升.
If you're suddenly feeling out of your depth, and everyone appears to be
running circles around you, what are your options?
Well, you might discover you're good at project management, or people
management, or UI design, or technical writing, or system administration,
any number of other important things that "programmers" aren't necessarily
any good at. You'll start filling those niches (because there's always
more work to do), and as soon as you find something you're good at, you'll
probably migrate towards doing it full-time.
如果你突然觉得自己好烂,周围的人都远远的超过你,你会怎么想呢?好,你可能会发现
自己善于项目管理,或者人事3管理,或者UI设计,或技术写作,或者系统管理,还有许多
其他程序员不必去精通的.你会开始堆积那些想法(因为工作永远干不完),当你发现一
些你能掌握的东西时,你很可能会转移去全职的做这个工作.
In fact, I don't think you need to know anything, as long as you can stay
alive somehow.
实际上,我认为有些东西你不需要了解,当目前你还能够赖以生存.
So they're right: you don't need to know math, and you can get by for your
entire life just fine without it.
所以他们是对的:你不需要了解数学,并且没有她你也能过的很好.
But a few things I've learned recently might surprise you:
但是最近我学到一些东西可能会让你也感到惊喜:
Math is a lot easier to pick up after you know how to program. In fact, if
you're a halfway decent programmer, you'll find it's almost a snap.
在你知道如何编程之后,数学是更容易去掌握.实际上,如果你是个半路出家的程序员的
话,你会发现这几乎是个snap.
They teach math all wrong in school. Way, WAY wrong. If you teach yourself
math the right way, you'll learn faster, remember it longer, and it'll be
much more valuable to you as a programmer.
学校里教数学的方式都错了.仅仅是教学的方法错了,不是教数学本身错.如果你以正确
的方式学习数学的话,你会学的更快,记住这会更长,但对你作为一个程序员来说也更有
价值.
Knowing even a little of the right kinds of math can enable you do write
some pretty interesting programs that would otherwise be too hard. In
other words, math is something you can pick up a little at a time,
whenever you have free time.
哪怕了解一点点相关的数学知识就能让你写出可爱有趣的程序,否则会有些小难度.换
句话讲,数学是可以慢慢学的,只要你有时间.
Nobody knows all of math, not even the best mathematicians. The field is
constantly expanding, as people invent new formalisms to solve their own
problems. And with any given math problem, just like in programming,
there's more than one way to do it. You can pick the one you like best.
没人能了解所有的数学,就是最棒的数学家也不是.数学领域正不断的扩展,当人们发明
新的形式去解决自己的问题时.一些给出的数学问题,也正如编程,不止一种方法可以去
解决他.你可以挑个你最喜欢的.
Math is... ummm, please don't tell anyone I said this; I'll never get
invited to another party as long as I live. But math, well... I'd better
whisper this, so listen up: (it's actually kinda fun.)
数学是......嗯,请别告诉别人我说过这个哈;当然我也不指望谁能邀请我参加这样的
派对,当我还活着的时候.但是,数学其实就是......我还是小声的说吧,听好了:(她其
实就是一种乐趣啦!)

The Math You Learned (And Forgot)
你学到的数学(和你忘了的)

Here's the math I learned in school, as far as I can remember:
这儿是我能记得在学校学到的数学:

Grade School: Numbers, Counting, Arithmetic, Pre-Algebra ("story problems")
初中:数,数数,算术知识,初级代数("问题故事")
High School: Algebra, Geometry, Advanced Algebra,
Trigonometry, Pre-Calculus (conics and limits)
高中:代数,几何,高等代数
College: Differential and Integral Calculus, Differential Equations,
Linear Algebra, Probability and Statistics, Discrete Math
大学:微积分,微分公式,线性代数,概率和统计,离散数学

How'd they come up with that particular list for high school, anyway? It's
more or less the same courses in most U.S. high schools. I think it's very
similar in other countries, too, except that their students have finished
the list by the time they're nine years old. (Americans really kick butt
at monster-truck competitions, though, so it's not a total loss.)
上面那个关于高中数学单子上所列的,他们怎样来达到的呢?美国高中几乎都是这样的
课程设置.我想其他国家也会很相似的,除了那些在9岁之前就掌握了这些课程的神
童.(美国人....虽然,也不是全部损失.)
Algebra? Sure. No question. You need that. And a basic understanding of
Cartesian geometry, too. Those are useful, and you can learn everything
you need to know in a few months, give or take. But the rest of them? I
think an introduction to the basics might be useful, but spending a whole
semester or year on them seems ridiculous.
代数?是的.没问题.你需要代数.和一些理解解析几何的知识.那些很有用,并且在以后
几个月里,你能学到一切你想要的,十拿九稳的.剩下的呢?我认为一个基本的介绍可能
会有用,但是在这上面花整个学期或一年就显得很荒谬了.

(未完)