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的傳記,我已經(jīng)為彌補我糟糕的數(shù)學(xué)技能花了15個月了.讀了大量的數(shù)學(xué)書籍,不過呢,似乎我還有更多沒有讀.當(dāng)然我會接著做的.
Letme tell you about it.
現(xiàn)在我就來告訴你這些.
Conventional WisdomDoesn't Add Up
這并不包括傳統(tǒng)的智慧
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.
你了解嗎?他們完全正確.你不需要了解很多數(shù)學(xué)你就能做個很棒,很專業(yè)的程序員.
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.
如果你突然覺得自己好爛,周圍的人都遠(yuǎn)遠(yuǎn)的超過你,你會怎么想呢?好,你可能會發(fā)現(xiàn)自己善于項目管理,或者人事管理,或者界面設(shè)計,或技術(shù)寫作,或者系統(tǒng)管理,還有許多其他程序員不必去精通的.你會開始堆積那些想法(因為工作永遠(yuǎn)干不完),當(dāng)你發(fā)現(xiàn)一些你能掌握的東西時,你很可能會轉(zhuǎn)移去全職的做這個工作.
Infact, I don't think you need to know anything, as long as you can stayalive somehow.
實際上,我認(rèn)為有些東西你不需要了解,當(dāng)目前你還能夠賴以生存.
So they'reright: you don't need to know math, and you can get by for your entirelife just fine without it.
所以他們是對的:你不需要了解數(shù)學(xué),并且沒有她你也能過的很好.
Buta few things I've learned recently might surprise you:
但是最近我學(xué)到一些東西可能會讓你也感到驚喜:
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.
在你知道如何編程之后,數(shù)學(xué)更容易學(xué)會.實際上,如果你先學(xué)數(shù)學(xué),然后半路出家做程序員的話,你會發(fā)現(xiàn)編程簡直就是小菜一碟.
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.
學(xué)校里教數(shù)學(xué)的方式都錯了.僅僅是教學(xué)的方法錯了,不是教數(shù)學(xué)本身錯.如果你以正確的方式學(xué)習(xí)數(shù)學(xué)的話,你會學(xué)的更快,記住這會更長,但對你作為一個程序員來說也更有價值.
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.
哪怕了解一點點相關(guān)的數(shù)學(xué)知識就能讓你寫出可愛有趣的程序,否則會有些小難度.換句話講,數(shù)學(xué)是可以慢慢學(xué)的,只要你有時間.
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.
沒人能了解所有的數(shù)學(xué),就是最棒的數(shù)學(xué)家也不是.數(shù)學(xué)領(lǐng)域正不斷的擴展,當(dāng)人們發(fā)明 新的形式去解決自己的問題時.一些給出的數(shù)學(xué)問題,也正如編程,不止一種方法可以去 解決他.你可以挑個你最喜歡的.
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.)
數(shù)學(xué)是......嗯,請別告訴別人我說過這個哈;當(dāng)然我也不指望誰能邀請我參加這樣的派對,當(dāng)我還活著的時候.但是,數(shù)學(xué)其實就是......我還是小聲的說吧,聽好了:(她其 實就是一種樂趣啦!)
TheMath You Learned (And Forgot)
你學(xué)到的數(shù)學(xué)(和你忘了的)
Here's themath I learned in school, as far as I can remember:
這兒是我能記得在學(xué)校學(xué)到的數(shù)學(xué):
Grade School: Numbers, Counting, Arithmetic, Pre-Algebra("story problems")
初中:數(shù),數(shù)數(shù),算術(shù)知識,初級代數(shù)("問題故事")
HighSchool: Algebra, Geometry, Advanced Algebra, Trigonometry, Pre-Calculus(conics and limits)
高中:代數(shù),幾何,高等代數(shù),三角學(xué),? (圓錐和極限)
College:Differential and Integral Calculus, Differential Equations, LinearAlgebra, Probability and Statistics, Discrete Math
大學(xué):微積分,微分公式,線性代數(shù),概率和統(tǒng)計,離散數(shù)學(xué)
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.)
上面那個關(guān)于
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.
代數(shù)?是的.沒問題.你需要代數(shù).和一些理解解析幾何的知識.那些很有用,并且在以后幾個月里,你能學(xué)到一切你想要的,十拿九穩(wěn)的.剩下的呢?我認(rèn)為一個基本的介紹可能 會有用,但是在這上面花整個學(xué)期或一年就顯得很荒謬了.
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.
我現(xiàn)在意識到那個書單列表原是設(shè)計來準(zhǔn)備給那些以后要當(dāng)科學(xué)家和
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.
甚至于你打算當(dāng)一名科學(xué)家或者一名工程師,我會發(fā)現(xiàn)這更加容易去學(xué)習(xí)和欣賞幾何學(xué)和三角在你理解了什么是數(shù)學(xué)之后--數(shù)學(xué)它如何而來,如何而去,為何而生.不必去專研記住幾何上的證明和三角恒等式.但是那確實是高中學(xué)校要求你必須去做的.
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.
所以這樣的書單列表不再有什么用了.學(xué)校教了我們不是最合適的數(shù)學(xué),并且方式也不對.不奇怪程序員認(rèn)為他們不再需要數(shù)學(xué):我們學(xué)的大部分?jǐn)?shù)學(xué)知識對我們的工作沒什么大的幫助.
The Math They Didn't Teach You
他們沒有教到你的那部分?jǐn)?shù)學(xué)
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.
在真實的生活中,計算機科學(xué)家有規(guī)則的使用數(shù)學(xué),對于上面單子里列的有點小小超過.舉個例子,你在中學(xué)里學(xué)的大部分?jǐn)?shù)學(xué)是連續(xù)性的:也就是說,數(shù)學(xué)是真實的數(shù)字.而對于計算機科學(xué)家來說,他們所感興趣的部分是占95%也許更多的離散性的:比如,關(guān)于整數(shù)的數(shù)學(xué).
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中再談一些在計算機科學(xué),軟件工程,編程,hacking,和其他常常迷惑的管理的之間的關(guān)鍵差異.我已經(jīng)從RichardGabriel的軟件的模式這本書中洞察到一個無關(guān)細(xì)節(jié)的基本框架.如果你明顯的等不下去的話,去讀吧.是本不錯的書.
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.
到現(xiàn)在為止,不要讓"計算機科學(xué)家"這個詞困擾到你.它聽上去很可怕,其實數(shù)學(xué)不是計算機科學(xué)家所獨有的領(lǐng)域,你也能作為一個黑客自學(xué)它,并且能做的和他們一樣棒.你作為一個程序的背景將會幫助你保持只關(guān)注那些有實踐性的部分.
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.
數(shù)學(xué),我們用來建立計算模型的,大體上是離散的整數(shù).這是普遍化的做法.如果正好今天你在看這篇博客,從現(xiàn)在起你正了解到更多的數(shù)學(xué),并且你會認(rèn)識到那樣的普遍化是不對的.更多的,你將有信心認(rèn)為可以忽略所有這些,并以你想要的方式自學(xué).
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.
對程序員來說,最有效的離散數(shù)學(xué)的分支是概率理論.這是你在學(xué)校學(xué)完基本算術(shù)后的緊接著的課.你會問,什么是概率理論呢?你就數(shù)啊,看有多少次出現(xiàn)滿堂彩?或者有多次是同花順.不管你思考什么問題如果是以"多少種途徑..."或"有多大幾率的...",那就是離散問題.當(dāng)他發(fā)生時,都轉(zhuǎn)化成"簡單"的計數(shù).拋個硬幣看看...? 毫無疑問在他們教你基本的計算用法后他們會教你概率理論.
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.
我還保存著大學(xué)里的離散數(shù)學(xué)課本.可能他只占了三分之一的課程,但是它卻涵蓋了我們幾乎每天計算機編程工作大部分所使用到的數(shù)學(xué).
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.
也真是夠奇怪的,我的教授從沒告訴我數(shù)學(xué)是用來干嗎的.或者我也從來沒有聽說過.種種原因吧.所以我也從沒有給以足夠的注意:只是考試及格然后把他們都忘光,因為我不認(rèn)為她還和編程有啥關(guān)系.事情變化是我在大學(xué)學(xué)完一些計算機科學(xué)的課程之后,也許是25%的課程.可憐的人!我必須弄明白什么對于自己來說是最重要的,然后再是向深度發(fā)展.
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.
我想,如果每門數(shù)學(xué)課都花上整整一周的時間,而只是介紹讓你如何入門的話,那將非常不錯,這是最有意思的一種假設(shè),那么你知道了你正學(xué)習(xí)的對象是哪種怪物了.怪物,大概對每一門課都合適.
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:
除了概率和離散數(shù)學(xué)外,還有不少其他的數(shù)學(xué)分支,可能對程序員相當(dāng)?shù)挠杏?學(xué)校通常不會教你的,除非你的輔修科目是數(shù)學(xué).這些數(shù)目列表包括:
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.
統(tǒng)計學(xué),其中一些包括在我的離散數(shù)學(xué)課里,她的某些訓(xùn)練只限于她自身.自然也是相當(dāng)重要的,但想學(xué)的話不需要什么特別的入門.
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.
代數(shù)和線性代數(shù)(比如,矩陣).他們會在教完代數(shù)后立即教線性代數(shù).這也簡單,這但相當(dāng)多的領(lǐng)域非常有用,包括機器學(xué)習(xí).
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.
數(shù)理邏輯.我有相當(dāng)完整的關(guān)于這么學(xué)科的書沒有讀,是StephenKleene寫的,Kleene closure的發(fā)明者,我所知道的還有就是Kleenex.這個就不要讀了.我發(fā)誓我已經(jīng)嘗試了不下20次,卻從沒有讀完第二章.如果那位牛掰有什么更好的入門建議的話可以給我推薦,給個回復(fù).雖然,這明顯是非常重要的一部分.
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.
信息理論和柯爾莫戈洛夫復(fù)雜性理論.真
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.
當(dāng)然,也有其他的一些因素,某些領(lǐng)域是重復(fù)的.也拿來說說吧:你所發(fā)現(xiàn)有用的那部分?jǐn)?shù)學(xué),不同于那些你在學(xué)校里認(rèn)為有用的數(shù)學(xué).
What about calculus? Everyoneteaches it, so it must be important, right?
那微積分呢?每個人都學(xué)它,所以它也一定是重要的,不對嗎?
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.
好吧,微積分實際上是相當(dāng)容易的.在我學(xué)習(xí)它之前,它聽上去好像是世界上最難的一件事,好像和量子力學(xué)差不多.量子力學(xué)對我來說真的不是那么容易理解,但是微積分卻不是.在我意識到程序員能夠快速的學(xué)習(xí)數(shù)學(xué)時,我拿起一些微積分課本用一個月通讀了整本書,一個晚上讀一小時.
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.
微積分都是關(guān)于連續(xù)統(tǒng)的 --變化的比率, 曲線的面積, 立體的體積.是些有用的東西,但是實際細(xì)節(jié)卻包含大量的記憶量并且枯燥,作為一個程序員來說根本不需要這些.更好的方法是從整體上了解那些概念和技術(shù),在必要的時候再去查詢那些細(xì)節(jié).
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.
幾何,三角,微分,積分,圓錐曲線,微分方程,和他們的多維和多元 --這些都有重要的應(yīng)用.不過這時候不需要你去了解它們.這大概不是個好注意讓你年復(fù)一年的去做證明和它們的練習(xí)題,不是嗎?如果你打算花大量的時間去學(xué)習(xí)數(shù)學(xué),那也是和你生活相關(guān)的部分.
The Right Way To Learn Math
學(xué)習(xí)數(shù)學(xué)的正確方法
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.
正確學(xué)習(xí)數(shù)學(xué)的方法是廣度優(yōu)先,而非深度優(yōu)先.你需要生存在空間里,學(xué)習(xí)事物的名字,區(qū)分出什么是什么.
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.
以透視的方法來對待的話,考慮用用長整除.(汗一個,感覺譯的不準(zhǔn)確)現(xiàn)在就舉起你的手如果你能在紙上做長整除.手嗎?誰呢?我可不這么認(rèn)為.
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,
回頭看看在學(xué)校里學(xué)過的長除法,要是不讓你覺得煩惱和憤怒才怪.當(dāng)然,這是顯然的,但你不一定要自己親自去做,因為很容易用計算器來做,即使你不幸在一座沒有電力的荒無人煙的小島上.你起碼還有個計算器,在的手表上,補牙的什么東東,或其他什么上面.
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,你可以運用任意大的數(shù)來做長除法.相象你被囚禁在第三世界的地牢里,那兒的獨裁者是 不會放你出來的,除非你計算出219308862/103503391.你會怎么做呢?好吧,很容易.你開始從分子減去分母,直到不能再減 只剩余數(shù)為止.ifpressed,你可以想個辦法估計好作為十進制的余數(shù)反復(fù)來減(這種情況下,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.
你也許能明白因為你知道除法就是反復(fù)的減.對除法概念的直覺是根深蒂固的.
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.
學(xué)習(xí)數(shù)學(xué)的正確方法是忽略實際的算法和證明,對于大部分情況來說, ...:他們的名字,他們的作用,他們計算的大致步驟,(有時是)誰發(fā)明了他們,發(fā)明了多久了,他們的缺陷是什么,和他們相關(guān)的有什么.把數(shù)學(xué)當(dāng)文科來學(xué).
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.
為什么訥?因為第一步應(yīng)用在數(shù)學(xué)上的是問題的確定.如果你有一個問題去解決,并且如果你沒有頭緒如何開始,這將花費你很長的時間來弄明白.但如果你知道這是個變異的問題,或者是一個凸優(yōu)化問題,或者一個布爾的邏輯問題, 然后你起碼能知道從哪著手開始尋找
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?
現(xiàn)在有許許多多的數(shù)學(xué)技術(shù)和整個的學(xué)科分支.如果你不知道組合邏輯是什么,甚至連聽都沒聽說過, 那么你是不可能意識到在組合邏輯中可以找到的解決答案的問題的,難道你會么?
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.
但那實在是個大新聞哪,因為閱讀這些領(lǐng)域,學(xué)習(xí)實際算法,建模和計算結(jié)果的方法,記住這些名字都是容易的.在學(xué)校里他們教你鏈?zhǔn)椒▌t,你也能回憶起他們并能運用在考試題上,但有多少學(xué)生能真正的了解他們到底意味著什么呢?所以當(dāng)他們遇到變種的鏈?zhǔn)絾栴}時他們就不懂得如何運用公式了.讓人感到諷刺的是,了解這是什么比記住如何運用公式更為容易.鏈?zhǔn)椒▌t僅僅是如何對鏈?zhǔn)胶瘮?shù)求導(dǎo)的意思,函數(shù) x() 引用函數(shù) g() ,你要求導(dǎo) x(g()) .好,程序員知道所有和函數(shù)相關(guān)的;我們每天都使用他們,所以現(xiàn)在這比過去在學(xué)校更加容易能夠相象出問題.
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.
這就是為什么我認(rèn)為他們以錯誤的方式在教數(shù)學(xué).對大多數(shù)高中畢業(yè)生來說,他們專門教授的內(nèi)容不是可以靠經(jīng)驗來證明數(shù)學(xué)是如何有用的,他們教的那些恰恰是非經(jīng)驗式的內(nèi)容.在你學(xué)習(xí)如何求導(dǎo)和做積分之前,你將要學(xué)習(xí)如何計數(shù),怎樣編程.
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.
我認(rèn)為學(xué)習(xí)數(shù)學(xué)最好的方法是每天花15到30分鐘逛維基百科.那上面有數(shù)千數(shù)學(xué)分支的相關(guān)文章.可以從一些你感興趣的文章著手(比如,炫理論,或者,傅立葉變換,或者張量理論,就是能沖擊你相象力的東西)閱讀.如果有什么你不理解的,就去了解那些鏈接.如此這般直到你累到不行.
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.
幾個月后,這么做會縱向擴展你的數(shù)學(xué)知識面.比如,你會發(fā)現(xiàn)一些模式--比如,數(shù)學(xué)的每個分支看上去都包括了一個有著復(fù)雜的多元版本的變量,所以線性代數(shù)將會琢建爬滿你的 書單列表,直到你強迫自己學(xué)會他實際上是怎樣工作的,你要下載個電子書或買本書,直到你能從中找到樂趣.
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.
藉著維基百科,你也能快速的找到一條了解數(shù)學(xué)基本原理的途徑,條條大道通羅馬.在某些領(lǐng)域,數(shù)學(xué)幾乎總是形式化我們的"常識",所以我們能減少或證明那些領(lǐng)域里的新事物.對數(shù)學(xué)本身的研究就是無止境而且令人著迷的:構(gòu)造形式模型本質(zhì)的能力,證明,自明的系統(tǒng), 規(guī)則表示,信息,和計算.
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.
符號是個很重大的但很快被放棄的東西.數(shù)學(xué)符號是關(guān)閉你通往另一個世界的符咒.即使你熟悉累加,積分,多項式,指數(shù),等等,如果你看到一堆符號堆徹的異常復(fù)雜時,你就把他實現(xiàn)的功能簡單的當(dāng)成一個原子操作好了,不要深究太多.
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.
然而,從觀察數(shù)學(xué)來說,嘗試著明白人們正在試圖解決的問題(那些已被證明了的問題某天也許會對你有實際用途), 你會開始在符號中看到相同的類型,你也不再排斥他們.比如,累加符號(大寫符號-西格馬)或者productsign(大寫符號-pi)起初看上去讓人心里沒底,即時你了解了他們的基本原理.但如果你是個程序員,你會認(rèn)識到他僅僅是個循環(huán):一個累加值,一個累乘.積分是一段連續(xù)曲線的相加,所以那不會讓你郁悶太久.
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!"
一旦你習(xí)慣了數(shù)學(xué)的許多分支,和許多不同的符號的格式,你就走在了解許多數(shù)學(xué)知識的路上了.因為你不再害怕,你將會發(fā)現(xiàn)問題,其實他們會自動跳到你面前."嗨,"你會思索,"我 了解這個.這是乘法符號!"
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語言庫.但幾乎所有有用的數(shù)學(xué)都是重型自動機,所以你能夠讓一切都變的自動化.
When Are ExercisesUseful?
練習(xí)有啥用處呢?
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.
在做了幾年的業(yè)余數(shù)學(xué)愛好者之后,你打算做更多的數(shù)學(xué),甚至你從沒碰過鉛筆和紙.比如, 你會一直看到多項式,所以最后你會耳濡目染的做起多項式的運算.同樣的,對數(shù),根,超越數(shù),和其他到處出現(xiàn)的基本數(shù)學(xué)原理.
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.
我還是得到了一種感覺我要親手做許多的練習(xí)題.我正在尋找一種能夠跟著證明步驟的方法,比如使用一種"貌似可信的測試",如果他們的結(jié)果看上去或多或少是對的,然后我就會拍拍屁股過去了.但如果我看著的那個說明我從來沒聽說過,亦或看上去是錯的或不可能的情況,我就會挖更多的東西了.
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.
這很像讀程序源代碼,不是么?當(dāng)你讀某人的代碼你不需要手動模擬整個程序狀態(tài);如果你知道計算過程大致會發(fā)生什么情形,你能理智簡單檢測出結(jié)果.舉個例子,如果結(jié)果是個列表,他們返回一個標(biāo)量,可能你會挖的更深一點.但正常情況下你能掃描源代碼幾乎是以你閱讀英文文本的速度(有時僅僅是速度上),并且你自信你理解了全部狀態(tài),同時你也許會發(fā)現(xiàn)任何真正令你震驚的錯誤。
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.
我認(rèn)為那就是數(shù)學(xué)愛好者(數(shù)學(xué)家和真正的數(shù)學(xué)迷)怎樣讀數(shù)學(xué)論文的,或者任何包含了許多數(shù)學(xué)的舊論文.他們做了同樣的分類檢查,正如在你讀代碼的時候所做的,但是不只是這些,除非他們不想把作者的觀點扳倒.
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.
照那樣說法,我還是偶爾做數(shù)學(xué)練習(xí).如果那些(比如代數(shù)和線性代數(shù))又不停的跑過來,然后我就開始做些練習(xí)去確定我是真正的理解她了.
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.
但我要強調(diào)這點:不要讓練習(xí)使你分心.如果一個練習(xí)(甚或是一篇特別的文章或章節(jié))開始讓你煩惱,那就暫時丟一邊繼續(xù)前進.該跑路就堅決跑路.讓你的直覺引導(dǎo)你.你會學(xué)的更多,更快,你的信心也會隨之增長.
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.
也許不是--不能立刻奏效.但確實能幫助提升你的邏輯推理能力;好比是在體育館做練習(xí),你整體的能力會提升如果你每天都做一點的話.
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.
對我來說,我已經(jīng)注意到一些我已經(jīng)感興趣的領(lǐng)域(包括人工智能,機器學(xué)習(xí),自然語言處理,和模式識別)大量的使用到數(shù)學(xué).如我已經(jīng)挖的有點深度的領(lǐng)域,我已經(jīng)發(fā)現(xiàn)他們使用的數(shù)學(xué)不再比我在中學(xué)的學(xué)到的數(shù)學(xué)還要更難;大部分來說僅僅是不同領(lǐng)域.不是更難了,并且學(xué)習(xí)使我能寫(或者是在我自己的代碼里使用)神經(jīng)網(wǎng)絡(luò),基因算法,貝頁斯分類器,集群算法,圖像識別,和其他時髦的東西能產(chǎn)生很酷的應(yīng)用.我常向我的朋友顯寶.
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.
我已經(jīng)漸漸意識到這點,當(dāng)別人給我看一篇包含了數(shù)學(xué)符號的文章我不再像突然冒了一身冷汗:組合,微分,真值表,定列式,無限系列,等等.那些數(shù)學(xué)符號現(xiàn)在變得容易相處了,但(像編程語言的語法)一開始的話多少還是有點讓人感到有些怪異.現(xiàn)在我能更好的理解了,當(dāng)我一點不知道正在說什么時,也不再感到自己是個不懂?dāng)?shù)學(xué)的人了.因為我知道自己是能夠弄明白的.
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.
我會繼續(xù)加油做的更好滴.我還有不少活頭,有好多書和文章要讀.有時我會花整個周末來讀數(shù)學(xué)書,有時會數(shù)周都不再思索她.也和其他興趣一樣,如果你單純的信任她你就會有興趣,也能更容易的消磨時光,你可以經(jīng)常一點點的嘗試應(yīng)用你覺得有趣的并且從中獲益.
Math every day.What a great idea that turned out to be!
好好學(xué)習(xí),天天數(shù)學(xué)!
原作者: Steve Yegge