打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
KPL青少年电脑编程语言--程序员怎样学数学:半路出家也能让编程是小菜一碟

I've been working for the past 15 months on repairing my rusty mathskills, ever since I read a biography of Johnny von Neumann. I've read ahuge stack of math books, and I have an even bigger stack of unreadmath books. And it's starting to come together.

自从我读了Johnny vonNeumann的传记,我已经为弥补我糟糕的数学技能花了15个月了.读了大量的数学书籍,不过呢,似乎我还有更多没有读.当然我会接着做的.

Letme tell you about it.

现在我就来告诉你这些.

Conventional WisdomDoesn't Add Up

这并不包括传统的智慧

First: programmers don't thinkthey need to know math. I hear that so often; I hardly know anyone whodisagrees. Even programmers who were math majors tell me they don'treally use math all that much! They say it's better to know about designpatterns, object-oriented methodologies, software tools, interfacedesign, stuff like that.

首先:程序员不认为他们需要了解数学.我常常听到这样的话;我不知道还有会不同意这个的.甚至于以前是主修数学的程序员也告诉我他们真的不是常常使用到数学!他们说 更重要的是要去了解设计模式,面向对象原理,软件工具,界面设计,以及一些类似的东西.

And you know what? They'reabsolutely right. You can be a good, solid, professional programmerwithout 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 outthere who realize they're not very good at it, and they still find waysto contribute.

但是呢,同时你也不是真的需要知道如何来编程.我们要面对的是:有很多专业的程序员,他们认识到他们不是非常擅长数学,但他们还是寻找方法去提升.

If you're suddenly feeling outof your depth, and everyone appears to be running circles around you,what are your options? Well, you might discover you're good at projectmanagement, or people management, or UI design, or technical writing, orsystem administration, any number of other important things that"programmers" aren't necessarily any good at. You'll start filling thoseniches (because there's always more work to do), and as soon as youfind something you're good at, you'll probably migrate towards doing itfull-time.

如果你突然觉得自己好烂,周围的人都远远的超过你,你会怎么想呢?好,你可能会发现自己善于项目管理,或者人事管理,或者界面设计,或技术写作,或者系统管理,还有许多其他程序员不必去精通的.你会开始堆积那些想法(因为工作永远干不完),当你发现一些你能掌握的东西时,你很可能会转移去全职的做这个工作.

Infact, I don't think you need to know anything, as long as you can stayalive somehow.

实际上,我认为有些东西你不需要了解,当目前你还能够赖以生存.

So they'reright: you don't need to know math, and you can get by for your entirelife just fine without it.

所以他们是对的:你不需要了解数学,并且没有她你也能过的很好.

Buta few things I've learned recently might surprise you:

但是最近我学到一些东西可能会让你也感到惊喜:

Math is a lot easier to pick up after you know howto program. In fact, if you're a halfway decent programmer, you'll findit's almost a snap.

在你知道如何编程之后,数学更容易学会.实际上,如果你先学数学,然后半路出家做程序员的话,你会发现编程简直就是小菜一碟.

They teach math all wrong in school. Way, WAYwrong. 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 aprogrammer.

学校里教数学的方式都错了.仅仅是教学的方法错了,不是教数学本身错.如果你以正确的方式学习数学的话,你会学的更快,记住这会更长,但对你作为一个程序员来说也更有价值.

Knowing even a littleof the right kinds of math can enable you do write some prettyinteresting programs that would otherwise be too hard. In other words,math is something you can pick up a little at a time, whenever you havefree time.

哪怕了解一点点相关的数学知识就能让你写出可爱有趣的程序,否则会有些小难度.换句话讲,数学是可以慢慢学的,只要你有时间.

Nobody knows all of math, not even the bestmathematicians. The field is constantly expanding, as people invent newformalisms to solve their own problems. And with any given mathproblem, just like in programming, there's more than one way to do it.You can pick the one you like best.

没人能了解所有的数学,就是最棒的数学家也不是.数学领域正不断的扩展,当人们发明 新的形式去解决自己的问题时.一些给出的数学问题,也正如编程,不止一种方法可以去 解决他.你可以挑个你最喜欢的.

Mathis... ummm, please don't tell anyone I said this; I'll never getinvited to another party as long as I live. But math, well... I'd betterwhisper this, so listen up: (it's actually kinda fun.)

数学是......嗯,请别告诉别人我说过这个哈;当然我也不指望谁能邀请我参加这样的派对,当我还活着的时候.但是,数学其实就是......我还是小声的说吧,听好了:(她其 实就是一种乐趣啦!)



TheMath You Learned (And Forgot)

你学到的数学(和你忘了的)

Here's themath I learned in school, as far as I can remember:

这儿是我能记得在学校学到的数学:

Grade School: Numbers, Counting, Arithmetic, Pre-Algebra("story problems")

初中:数,数数,算术知识,初级代数("问题故事")

HighSchool: Algebra, Geometry, Advanced Algebra, Trigonometry, Pre-Calculus(conics and limits)

高中:代数,几何,高等代数,三角学,? (圆锥和极限)

College:Differential and Integral Calculus, Differential Equations, LinearAlgebra, Probability and Statistics, Discrete Math

大学:微积分,微分公式,线性代数,概率和统计,离散数学

How'd they come up with that particular list forhigh 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, exceptthat their students have finished the list by the time they're nineyears old. (Americans really kick butt at monster-truck competitions,though, so it's not a total loss.)

上面那个关于高中数学课程单子上所列的,怎么来着?美国高中几乎都是这样的课程设置.我认为其他国家也会很相似的,除了那些在9岁之前就掌握了这些课程的学生.(美国人同时却在热衷于玩魔鬼卡车竞赛,虽然如此,整个来说也算不上什么大损失.)

Algebra? Sure. No question. You needthat. And a basic understanding of Cartesian geometry, too. Those areuseful, 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 thebasics might be useful, but spending a whole semester or year on themseems ridiculous.

代数?是的.没问题.你需要代数.和一些理解解析几何的知识.那些很有用,并且在以后几个月里,你能学到一切你想要的,十拿九稳的.剩下的呢?我认为一个基本的介绍可能 会有用,但是在这上面花整个学期或一年就显得很荒谬了.

I'mguessing the list was designed to prepare students for science andengineering professions. The math courses they teach in and high schooldon't help ready you for a career in programming, and the simple fact isthat the number of programming jobs is rapidly outpacing the demand forall other engineering roles.

我现在意识到那个书单列表原是设计来准备给那些以后要当科学家和工程师的学生的.他们在高中里所教的数学课程并不是为你的编程生涯做准备的,简单的事实是多数的编程工作相比其他的工程师角色更加要求快速.

And even if you're planning on being a scientist or anengineer, I've found it's much easier to learn and appreciate geometryand trig after you understand what exactly math is — where it came from,where it's going, what it's for. No need to dive right into memorizinggeometric proofs and trigonometric identities. But that's exactly whathigh schools have you do.

甚至于你打算当一名科学家或者一名工程师,我会发现这更加容易去学习和欣赏几何学和三角在你理解了什么是数学之后--数学它如何而来,如何而去,为何而生.不必去专研记住几何上的证明和三角恒等式.但是那确实是高中学校要求你必须去做的.

So thelist's no good anymore. Schools are teaching us the wrong math, andthey're teaching it the wrong way. It's no wonder programmers think theydon't need any math: most of the math we learned isn't helping us.

所以这样的书单列表不再有什么用了.学校教了我们不是最合适的数学,并且方式也不对.不奇怪程序员认为他们不再需要数学:我们学的大部分数学知识对我们的工作没什么大的帮助.



The Math They Didn't Teach You

他们没有教到你的那部分数学

The math computer scientists use regularly, in real life,has very little overlap with the list above. For one thing, most of themath you learn in grade school and high school is continuous: that is,math on the real numbers. For computer scientists, 95% or more of theinteresting math is discrete: i.e., math on the integers.

在真实的生活中,计算机科学家有规则的使用数学,对于上面单子里列的有点小小超过.举个例子,你在中学里学的大部分数学是连续性的:也就是说,数学是真实的数字.而对于计算机科学家来说,他们所感兴趣的部分是占95%也许更多的离散性的:比如,关于整数的数学.

I'm going to talk in a future blog about some keydifferences between computer science, software engineering, programming,hacking, and other oft-confused disciplines. I got the basic frameworkfor these (upcoming) insights in no small part from Richard Gabriel'sPatterns Of Software, so if you absolutely can't wait, go read that.It's a good book.

我打算在我以后blog中再谈一些在计算机科学,软件工程,编程,hacking,和其他常常迷惑的管理的之间的关键差异.我已经从RichardGabriel的软件的模式这本书中洞察到一个无关细节的基本框架.如果你明显的等不下去的话,去读吧.是本不错的书.

Fornow, though, don't let the term "computer scientist" worry you. Itsounds intimidating, but math isn't the exclusive purview of computerscientists; you can learn it all by yourself as a closet hacker, and bejust as good (or better) at it than they are. Your background as aprogrammer will help keep you focused on the practical side of things.

到现在为止,不要让"计算机科学家"这个词困扰到你.它听上去很可怕,其实数学不是计算机科学家所独有的领域,你也能作为一个黑客自学它,并且能做的和他们一样棒.你作为一个程序的背景将会帮助你保持只关注那些有实践性的部分.

The math we use for modelingcomputational problems is, by and large, math on discrete integers. Thisis a generalization. If you're with me on today's blog, you'll bestudying a little more math from now on than you were planning to beforetoday, and you'll discover places where the generalization isn't true.But by then, a short time from now, you'll be confident enough to ignoreall this and teach yourself math the way you want to learn it.

数学,我们用来建立计算模型的,大体上是离散的整数.这是普遍化的做法.如果正好今天你在看这篇博客,从现在起你正了解到更多的数学,并且你会认识到那样的普遍化是不对的.更多的,你将有信心认为可以忽略所有这些,并以你想要的方式自学.

For programmers, themost useful branch of discrete math is probability theory. It's thefirst thing they should teach you after arithmetic, in grade school.What's probability theory, you ask? Why, it's counting. How many waysare there to make a Full House in poker? Or a Royal Flush? Whenever youthink of a question that starts with "how many ways..." or "what are theodds...", it's a probability question. And as it happens (what are theodds?), it all just turns out to be "simple" counting. It starts withflipping a coin and goes from there. It's definitely the first thingthey should teach you in grade school after you learn Basic CalculatorUsage.

对程序员来说,最有效的离散数学的分支是概率理论.这是你在学校学完基本算术后的紧接着的课.你会问,什么是概率理论呢?你就数啊,看有多少次出现满堂彩?或者有多次是同花顺.不管你思考什么问题如果是以"多少种途径..."或"有多大几率的...",那就是离散问题.当他发生时,都转化成"简单"的计数.抛个硬币看看...? 毫无疑问在他们教你基本的计算用法后他们会教你概率理论.

I still havemy discrete math textbook from college. It's a bit heavyweight for athird-grader (maybe), but it does cover a lot of the math we use in"everyday" computer science and computer engineering.

我还保存着大学里的离散数学课本.可能他只占了三分之一的课程,但是它却涵盖了我们几乎每天计算机编程工作大部分所使用到的数学.

Oddlyenough, my professor didn't tell me what it was for. Or I didn't hear.Or something. So I didn't pay very close attention: just enough to passthe course and forget this hateful topic forever, because I didn't thinkit had anything to do with programming. That happened in quite a few ofmy comp sci courses in college, maybe as many as 25% of them. Poor me! Ihad to figure out what was important on my own, later, the hard way.

也真是够奇怪的,我的教授从没告诉我数学是用来干吗的.或者我也从来没有听说过.种种原因吧.所以我也从没有给以足够的注意:只是考试及格然后把他们都忘光,因为我不认为她还和编程有啥关系.事情变化是我在大学学完一些计算机科学的课程之后,也许是25%的课程.可怜的人!我必须弄明白什么对于自己来说是最重要的,然后再是向深度发展.

I think it would be nice if every math coursespent a full week just introducing you to the subject, in the most funway possible, so you know why the heck you're learning it. Heck, that'sprobably true for every course.

我想,如果每门数学课都花上整整一周的时间,而只是介绍让你如何入门的话,那将非常不错,这是最有意思的一种假设,那么你知道了你正学习的对象是哪种怪物了.怪物,大概对每一门课都合适.

Asidefrom probability and discrete math, there are a few other branches ofmathematics that are potentially quite useful to programmers, and theyusually don't teach them in school, unless you're a math minor. Thislist includes:

除了概率和离散数学外,还有不少其他的数学分支,可能对程序员相当的有用,学校通常不会教你的,除非你的辅修科目是数学.这些数目列表包括:
Statistics, some of which is covered in mydiscrete math book, but it's really a discipline of its own. A prettyimportant one, too, but hopefully it needs no introduction.

统计学,其中一些包括在我的离散数学课里,她的某些训练只限于她自身.自然也是相当重要的,但想学的话不需要什么特别的入门.
Algebra andLinear Algebra (i.e., matrices). They should teach Linear Algebraimmediately after algebra. It's pretty easy, and it's amazingly usefulin all sorts of domains, including machine learning.

代数和线性代数(比如,矩阵).他们会在教完代数后立即教线性代数.这也简单,这但相当多的领域非常有用,包括机器学习.
Mathematical Logic. Ihave a really cool totally unreadable book on the subject by StephenKleene, the inventor of the Kleene closure and, as far as I know,Kleenex. Don't read that one. I swear I've tried 20 times, and nevermade it past chapter 2. If anyone has a recommendation for a betterintroduction to this field, please post a comment. It's obviouslyimportant stuff, though.

数理逻辑.我有相当完整的关于这么学科的书没有读,是StephenKleene写的,Kleene closure的发明者,我所知道的还有就是Kleenex.这个就不要读了.我发誓我已经尝试了不下20次,却从没有读完第二章.如果那位牛掰有什么更好的入门建议的话可以给我推荐,给个回复.虽然,这明显是非常重要的一部分.

Information Theory and KolmogorovComplexity. Weird, eh? I bet none of your high schools taught either ofthose. They're both pretty new. Information theory is (veeery roughly)about data compression, and Kolmogorov Complexity is (also roughly)about algorithmic complexity. I.e., how small you can you make it, howlong will it take, how elegant can the program or data structure be,things like that. They're both fun, interesting and useful.

信息理论和柯尔莫戈洛夫复杂性理论.真不可思议,不是么?我敢打赌没哪个高中会教你其中任何一门课程.她们都是新兴的学科.信息理论是(相当相当相当相当难懂)关于数据压缩,柯尔莫戈洛夫复杂性理论是(同样非常难懂)关于算法复杂度的.也就是说,你要把它压缩的尽量小,你所要花费的时间也就变的越长,同样的,程序或数据结构要变得多优雅也有同样的代价.他们都很有趣,也很有用.

There are others, ofcourse, and some of the fields overlap. But it just goes to show: themath that you'll find useful is pretty different from the math yourschool thought would be useful.

当然,也有其他的一些因素,某些领域是重复的.也拿来说说吧:你所发现有用的那部分数学,不同于那些你在学校里认为有用的数学.

What about calculus? Everyoneteaches it, so it must be important, right?

那微积分呢?每个人都学它,所以它也一定是重要的,不对吗?

Well, calculus is actually pretty easy. Before Ilearned it, it sounded like one of the hardest things in the universe,right up there with quantum mechanics. Quantum mechanics is still beyondme, but calculus is nothing. After I realized programmers can learnmath quickly, I picked up my Calculus textbook and got through theentire thing in about a month, reading for an hour an evening.

好吧,微积分实际上是相当容易的.在我学习它之前,它听上去好像是世界上最难的一件事,好像和量子力学差不多.量子力学对我来说真的不是那么容易理解,但是微积分却不是.在我意识到程序员能够快速的学习数学时,我拿起一些微积分课本用一个月通读了整本书,一个晚上读一小时.

Calculusis all about continuums — rates of change, areas under curves, volumesof solids. Useful stuff, but the exact details involve a lot ofmemorization and a lot of tedium that you don't normally need as aprogrammer. It's better to know the overall concepts and techniques, andgo look up the details when you need them.

微积分都是关于连续统的 --变化的比率, 曲线的面积, 立体的体积.是些有用的东西,但是实际细节却包含大量的记忆量并且枯燥,作为一个程序员来说根本不需要这些.更好的方法是从整体上了解那些概念和技术,在必要的时候再去查询那些细节.

Geometry, trigonometry,differentiation, integration, conic sections, differential equations,and their multidimensional and multivariate versions — these all haveimportant applications. It's just that you don't need to know them rightthis second. So it probably wasn't a great idea to make you spend yearsand years doing proofs and exercises with them, was it? If you're goingto spend that much time studying math, it ought to be on topics thatwill remain relevant to you for life.

几何,三角,微分,积分,圆锥曲线,微分方程,和他们的多维和多元 --这些都有重要的应用.不过这时候不需要你去了解它们.这大概不是个好注意让你年复一年的去做证明和它们的练习题,不是吗?如果你打算花大量的时间去学习数学,那也是和你生活相关的部分.

The Right Way To Learn Math

学习数学的正确方法

Theright way to learn math is breadth-first, not depth-first. You need tosurvey the space, learn the names of things, figure out what's what.

正确学习数学的方法是广度优先,而非深度优先.你需要生存在空间里,学习事物的名字,区分出什么是什么.

To put this inperspective, think about long division. Raise your hand if you can dolong division on paper, right now. Hands? Anyone? I didn't think so.

以透视的方法来对待的话,考虑用用长整除.(汗一个,感觉译的不准确)现在就举起你的手如果你能在纸上做长整除.手吗?谁呢?我可不这么认为.

Iwent back and looked at the long-division algorithm they teach in gradeschool, and damn if it isn't annoyingly complicated. It'sdeterministic, sure, but you never have to do it by hand, because it'seasier to find a calculator, even if you're stuck on a desert islandwithout electricity. You'll still have a calculator in your watch, oryour dental filling, or something,

回头看看在学校里学过的长除法,要是不让你觉得烦恼和愤怒才怪.当然,这是显然的,但你不一定要自己亲自去做,因为很容易用计算器来做,即使你不幸在一座没有电力的荒无人烟的小岛上.你起码还有个计算器,在的手表上,补牙的什么东东,或其他什么上面.

Why do they even teach it to you? Why do wefeel vaguely guilty if we can't remember how to do it? It's not as if weneed to know it anymore. And besides, if your life were on the line,you know you could perform long division of any arbitrarily largenumbers. Imagine you're imprisoned in some slimy 3rd-world dungeon, andthe dictator there won't let you out until you've computed219308862/103503391. How would you do it? Well, easy. You'd startsubtracting the denominator from the numerator, keeping a counter, untilyou couldn't subtract it anymore, and that'd be the remainder. Ifpressed, you could figure out a way to continue using repeatedsubtraction to estimate the remainder as decimal number (in this case,0.1185678219, or so my Emacs M-x calc tells me. Close enough!)

为什么他们还教你这些呢?为什么我们感到含混心虚讷,如果我们不能记住怎样去做?这不是好像我们需要再次知道她.除此以外, if your lifewere on the line,你可以运用任意大的数来做长除法.相象你被囚禁在第三世界的地牢里,那儿的独裁者是 不会放你出来的,除非你计算出219308862/103503391.你会怎么做呢?好吧,很容易.你开始从分子减去分母,直到不能再减 只剩余数为止.ifpressed,你可以想个办法估计好作为十进制的余数反复来减(这种情况下,0.1185678219,Emacs M-x calc告诉我的.够精确了! )

You could figure it out because you know thatdivision is just repeated subtraction. The intuitive notion of divisionis deeply ingrained now.

你也许能明白因为你知道除法就是反复的减.对除法概念的直觉是根深蒂固的.

Theright way to learn math is to ignore the actual algorithms and proofs,for the most part, and to start by learning a little bit about all thetechniques: their names, what they're useful for, approximately howthey're computed, how long they've been around, (sometimes) who inventedthem, what their limitations are, and what they're related to. Think ofit as a Liberal Arts degree in mathematics.

学习数学的正确方法是忽略实际的算法和证明,对于大部分情况来说, ...:他们的名字,他们的作用,他们计算的大致步骤,(有时是)谁发明了他们,发明了多久了,他们的缺陷是什么,和他们相关的有什么.把数学当文科来学.

Why? Because thefirst step to applying mathematics is problem identification. If youhave a problem to solve, and you have no idea where to start, it couldtake you a long time to figure it out. But if you know it's adifferentiation problem, or a convex optimization problem, or a booleanlogic problem, then you at least know where to start looking for thesolution.

为什么讷?因为第一步应用在数学上的是问题的确定.如果你有一个问题去解决,并且如果你没有头绪如何开始,这将花费你很长的时间来弄明白.但如果你知道这是个变异的问题,或者是一个凸优化问题,或者一个布尔的逻辑问题, 然后你起码能知道从哪着手开始寻找解决方案.

There are lots and lots of mathematical techniquesand entire sub-disciplines out there now. If you don't know whatcombinatorics is, not even the first clue, then you're not very likelyto be able to recognize problems for which the solution is found incombinatorics, are you?

现在有许许多多的数学技术和整个的学科分支.如果你不知道组合逻辑是什么,甚至连听都没听说过, 那么你是不可能意识到在组合逻辑中可以找到的解决答案的问题的,难道你会么?

But that's actuallygreat news, because it's easier to read about the field and learn thenames of everything than it is to learn the actual algorithms andmethods for modeling and computing the results. In school they teach youthe Chain Rule, and you can memorize the formula and apply it on exams,but how many students really know what it "means"? So they're not goingto be able to know to apply the formula when they run across achain-rule problem in the wild. Ironically, it's easier to know what itis than to memorize and apply the formula. The chain rule is just how totake the derivative of "chained" functions — meaning, function x()calls function g(), and you want the derivative of x(g()). Well,programmers know all about functions; we use them every day, so it'smuch easier to imagine the problem now than it was back in school.

但那实在是个大新闻哪,因为阅读这些领域,学习实际算法,建模和计算结果的方法,记住这些名字都是容易的.在学校里他们教你链式法则,你也能回忆起他们并能运用在考试题上,但有多少学生能真正的了解他们到底意味着什么呢?所以当他们遇到变种的链式问题时他们就不懂得如何运用公式了.让人感到讽刺的是,了解这是什么比记住如何运用公式更为容易.链式法则仅仅是如何对链式函数求导的意思,函数 x() 引用函数 g() ,你要求导 x(g()) .好,程序员知道所有和函数相关的;我们每天都使用他们,所以现在这比过去在学校更加容易能够相象出问题.

Which is why I thinkthey're teaching math wrong. They're doing it wrong in several ways.They're focusing on specializations that aren't proving empirically tobe useful to most high-school graduates, and they're teaching thosespecializations backwards. You should learn how to count, and how toprogram, before you learn how to take derivatives and performintegration.

这就是为什么我认为他们以错误的方式在教数学.对大多数高中毕业生来说,他们专门教授的内容不是可以靠经验来证明数学是如何有用的,他们教的那些恰恰是非经验式的内容.在你学习如何求导和做积分之前,你将要学习如何计数,怎样编程.

I think the best way to start learning math isto spend 15 to 30 minutes a day surfing in Wikipedia. It's filled witharticles about thousands of little branches of mathematics. You startwith pretty much any article that seems interesting (e.g. String theory,say, or the Fourier transform, or Tensors, anything that strikes yourfancy.) Start reading. If there's something you don't understand, clickthe link and read about it. Do this recursively until you get bored ortired.

我认为学习数学最好的方法是每天花15到30分钟逛维基百科.那上面有数千数学分支的相关文章.可以从一些你感兴趣的文章着手(比如,炫理论,或者,傅立叶变换,或者张量理论,就是能冲击你相象力的东西)阅读.如果有什么你不理解的,就去了解那些链接.如此这般直到你累到不行.

Doing this will give youamazing perspective on mathematics, after a few months. You'll startseeing patterns — for instance, it seems that just about every branch ofmathematics that involves a single variable has a more complicatedmultivariate version, and the multivariate version is almost alwaysrepresented by matrices of linear equations. At least for applied math.So Linear Algebra will gradually bump its way up your list, until youfeel compelled to learn how it actually works, and you'll download a PDFor buy a book, and you'll figure out enough to make you happy for awhile.

几个月后,这么做会纵向扩展你的数学知识面.比如,你会发现一些模式--比如,数学的每个分支看上去都包括了一个有着复杂的多元版本的变量,所以线性代数将会琢建爬满你的 书单列表,直到你强迫自己学会他实际上是怎样工作的,你要下载个电子书或买本书,直到你能从中找到乐趣.

With the Wikipedia approach, you'll also quickly findyour way to the Foundations of Mathematics, the Rome to which all mathroads lead. Math is almost always about formalizing our "common sense"about some domain, so that we can deduce and/or prove new things aboutthat domain. Metamathematics is the fascinating study of what the limitsare on math itself: the intrinsic capabilities of our formal models,proofs, axiomatic systems, and representations of rules, information,and computation.

藉着维基百科,你也能快速的找到一条了解数学基本原理的途径,条条大道通罗马.在某些领域,数学几乎总是形式化我们的"常识",所以我们能减少或证明那些领域里的新事物.对数学本身的研究就是无止境而且令人着迷的:构造形式模型本质的能力,证明,自明的系统, 规则表示,信息,和计算.

One great thing that soon falls by the waysideis notation. Mathematical notation is the biggest turn-off to outsiders.Even if you're familiar with summations, integrals, polynomials,exponents, etc., if you see a thick nest of them your inclination isprobably to skip right over that sucker as one atomic operation.

符号是个很重大的但很快被放弃的东西.数学符号是关闭你通往另一个世界的符咒.即使你熟悉累加,积分,多项式,指数,等等,如果你看到一堆符号堆彻的异常复杂时,你就把他实现的功能简单的当成一个原子操作好了,不要深究太多.

However, by surveying math,trying to figure out what problems people have been trying to solve (andwhich of these might actually prove useful to you someday), you'llstart seeing patterns in the notation, and it'll stop being soalien-looking. For instance, a summation sign (capital-sigma) or productsign (capital-pi) will look scary at first, even if you know thebasics. But if you're a programmer, you'll soon realize it's just aloop: one that sums values, one that multiplies them. Integration isjust a summation over a continuous section of a curve, so that won'tstay scary for very long, either.

然而,从观察数学来说,尝试着明白人们正在试图解决的问题(那些已被证明了的问题某天也许会对你有实际用途), 你会开始在符号中看到相同的类型,你也不再排斥他们.比如,累加符号(大写符号-西格马)或者productsign(大写符号-pi)起初看上去让人心里没底,即时你了解了他们的基本原理.但如果你是个程序员,你会认识到他仅仅是个循环:一个累加值,一个累乘.积分是一段连续曲线的相加,所以那不会让你郁闷太久.

Once you're comfortable withthe many branches of math, and the many different forms of notation,you're well on your way to knowing a lot of useful math. Because itwon't be scary anymore, and next time you see a math problem, it'll jumpright out at you. "Hey," you'll think, "I recognize that. That's amultiplication sign!"

一旦你习惯了数学的许多分支,和许多不同的符号的格式,你就走在了解许多数学知识的路上了.因为你不再害怕,你将会发现问题,其实他们会自动跳到你面前."嗨,"你会思索,"我 了解这个.这是乘法符号!"

Andthen you should pull out the calculator. It might be a very fancycalculator such as R, Matlab, Mathematica, or a even C library forsupport vector machines. But almost all useful math is heavilyautomatable, so you might as well get some automated servants to helpyou with it.

这样你就能扔掉计算器了.有一个充满相象的计算器比如 R,Matlab,Mathematica,甚或是支持向量机的C语言库.但几乎所有有用的数学都是重型自动机,所以你能够让一切都变的自动化.

When Are ExercisesUseful?

练习有啥用处呢?

After a year of doing part-timehobbyist catch-up math, you're going to be able to do a lot more math inyour head, even if you never touch a pencil to a paper. For instance,you'll see polynomials all the time, so eventually you'll pick up on thearithmetic of polynomials by osmosis. Same with logarithms, roots,transcendentals, and other fundamental mathematical representations thatappear nearly everywhere.

在做了几年的业余数学爱好者之后,你打算做更多的数学,甚至你从没碰过铅笔和纸.比如, 你会一直看到多项式,所以最后你会耳濡目染的做起多项式的运算.同样的,对数,根,超越数,和其他到处出现的基本数学原理.

I'mstill getting a feel for how many exercises I want to work through byhand. I'm finding that I like to be able to follow explanations (proofs)using a kind of "plausibility test" — for instance, if I see someonedividing two polynomials, I kinda know what form the result should take,and if their result looks more or less right, then I'll take their wordfor it. But if I see the explanation doing something that I've neverheard of, or that seems wrong or impossible, then I'll dig in some more.

我还是得到了一种感觉我要亲手做许多的练习题.我正在寻找一种能够跟着证明步骤的方法,比如使用一种"貌似可信的测试",如果他们的结果看上去或多或少是对的,然后我就会拍拍屁股过去了.但如果我看着的那个说明我从来没听说过,亦或看上去是错的或不可能的情况,我就会挖更多的东西了.

That'sa lot like reading programming-language source code, isn't it? Youdon't need to hand-simulate the entire program state as you readsomeone's code; if you know what approximate shape the computation willtake, you can simply check that their result makes sense. E.g. if theresult should be a list, and they're returning a scalar, maybe youshould dig in a little more. But normally you can scan source codealmost at the speed you'd read English text (sometimes just as fast),and you'll feel confident that you understand the overall shape and thatyou'll probably spot any truly egregious errors.

这很像读程序源代码,不是么?当你读某人的代码你不需要手动模拟整个程序状态;如果你知道计算过程大致会发生什么情形,你能理智简单检测出结果.举个例子,如果结果是个列表,他们返回一个标量,可能你会挖的更深一点.但正常情况下你能扫描源代码几乎是以你阅读英文文本的速度(有时仅仅是速度上),并且你自信你理解了全部状态,同时你也许会发现任何真正令你震惊的错误。

I think that's how mathematically-inclinedpeople (mathematicians and hobbyists) read math papers, or any oldpapers containing a lot of math. They do the same sort of sanity checksyou'd do when reading code, but no more, unless they're intent onshooting the author down.

我认为那就是数学爱好者(数学家和真正的数学迷)怎样读数学论文的,或者任何包含了许多数学的旧论文.他们做了同样的分类检查,正如在你读代码的时候所做的,但是不只是这些,除非他们不想把作者的观点扳倒.

Withthat said, I still occasionally do math exercises. If something comesup again and again (like algebra and linear algebra), then I'll startdoing some exercises to make sure I really understand it.

照那样说法,我还是偶尔做数学练习.如果那些(比如代数和线性代数)又不停的跑过来,然后我就开始做些练习去确定我是真正的理解她了.

ButI'd stress this: don't let exercises put you off the math. If anexercise (or even a particular article or chapter) is starting to boreyou, move on. Jump around as much as you need to. Let your intuitionguide you. You'll learn much, much faster doing it that way, and yourconfidence will grow almost every day.

但我要强调这点:不要让练习使你分心.如果一个练习(甚或是一篇特别的文章或章节)开始让你烦恼,那就暂时丢一边继续前进.该跑路就坚决跑路.让你的直觉引导你.你会学的更多,更快,你的信心也会随之增长.

How Will This Help Me?

这些怎样才能帮到我?

Well, itmight not — not right away. Certainly it will improve your logicalreasoning ability; it's a bit like doing exercise at the gym, and youroverall mental fitness will get better if you're pushing yourself alittle every day.

也许不是--不能立刻奏效.但确实能帮助提升你的逻辑推理能力;好比是在体育馆做练习,你整体的能力会提升如果你每天都做一点的话.

For me, I've noticed that a few domains I'vealways been interested in (including artificial intelligence, machinelearning, natural language processing, and pattern recognition) use alot of math. And as I've dug in more deeply, I've found that the maththey use is no more difficult than the sum total of the math I learnedin high school; it's just different math, for the most part. It's notharder. And learning it is enabling me to code (or use in my own code)neural networks, genetic algorithms, bayesian classifiers, clusteringalgorithms, image matching, and other nifty things that will result incool applications I can show off to my friends.

对我来说,我已经注意到一些我已经感兴趣的领域(包括人工智能,机器学习,自然语言处理,和模式识别)大量的使用到数学.如我已经挖的有点深度的领域,我已经发现他们使用的数学不再比我在中学的学到的数学还要更难;大部分来说仅仅是不同领域.不是更难了,并且学习使我能写(或者是在我自己的代码里使用)神经网络,基因算法,贝页斯分类器,集群算法,图像识别,和其他时髦的东西能产生很酷的应用.我常向我的朋友显宝.

And I've gradually gotten to the point where I no longerbreak out in a cold sweat when someone presents me with an articlecontaining math notation: n-choose-k, differentials, matrices,determinants, infinite series, etc. The notation is actually there tomake it easier, but (like programming-language syntax) notation isalways a bit tricky and daunting on first contact. Nowadays I can followit better, and it no longer makes me feel like a plebian when I don'tknow it. Because I know I can figure it out.

我已经渐渐意识到这点,当别人给我看一篇包含了数学符号的文章我不再像突然冒了一身冷汗:组合,微分,真值表,定列式,无限系列,等等.那些数学符号现在变得容易相处了,但(像编程语言的语法)一开始的话多少还是有点让人感到有些怪异.现在我能更好的理解了,当我一点不知道正在说什么时,也不再感到自己是个不懂数学的人了.因为我知道自己是能够弄明白的.

And that's a good thing.

那很好.

And I'llkeep getting better at this. I have lots of years left, and lots ofbooks, and articles. Sometimes I'll spend a whole weekend reading a mathbook, and sometimes I'll go for weeks without thinking about it evenonce. But like any hobby, if you simply trust that it will beinteresting, and that it'll get easier with time, you can apply it asoften or as little as you like and still get value out of it.

我会继续加油做的更好滴.我还有不少活头,有好多书和文章要读.有时我会花整个周末来读数学书,有时会数周都不再思索她.也和其他兴趣一样,如果你单纯的信任她你就会有兴趣,也能更容易的消磨时光,你可以经常一点点的尝试应用你觉得有趣的并且从中获益.

Math every day.What a great idea that turned out to be!

好好学习,天天数学!

原作者: Steve Yegge  

 译者: puto   
 
 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
经典英文电影台词背下来,英语会很强悍(十)
8 Must Know Methods for Solving PSLE Math Problem Sums
Jamie Cullum清亮新单《You're Not The Only One》
我心永恒
Easy lover
QQ音乐
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服