免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
十年學會編程

作者:Peter NorviG

翻譯:劉延棟 ,公眾號“軟件那些事兒”

這篇文章已經(jīng)有很多人翻譯過了,我之所以再搞一次,首先是我覺得這文章真的很好,值得一搞再搞,其次,幾乎所有的版本都漏掉了一些語句,我猜可能是英文版更新過,但是,中文版沒有與時俱進。

如果再有人在我的公眾號里問我如何學習編程的話,我就可以把這個發(fā)給他了。

為何每個人都急于求成?

隨便走進一家書店,都會看到類似《24小時學會Java》這樣的書,旁邊擺著的是大量諸如在幾天,幾小時之內(nèi)學會C語言,SQL,Ruby以及算法這樣的書。

如果使用Amazon上的高級搜索,使用title: teach, yourself, hours, since: 2000這個關(guān)鍵字來搜索,將會返回512本書。最靠前的10本書中,有9本是編程的書(唯一的例外是一本記賬的書)。如果把關(guān)鍵字”teach yourself”替換成”learn”,或者將”hours”替換成”days”,返回的結(jié)果大同小異。

很明顯,人們在學習編程的時候喜歡大躍進,或者認為編程比起其它事情來,是小菜一碟的事。Felleisen在他的書《How to Design Program》里說:“編寫爛程序一點也不難。傻瓜也可以在21天內(nèi)學會,即使他們是傻逼?!痹诟阈β嬀W(wǎng)站Abtruse Goose也在這個漫畫中表達了同樣的看法。

我們來看看類似《24小時自學C++》這種標題黨,到底說的什么鬼東西:

  • 自學: 24小時之內(nèi),你沒有時間寫幾個有意義的程序,也就無法從成功或失敗中學到經(jīng)驗。24小時之內(nèi),你沒有時間和一個有經(jīng)驗的程序員合作交流,也就無從理解使用C++編程的真實場景。簡單來說,時間太短,你啥也學不到。因此,有這種干貨標題的速成書,只是讓你走馬觀花的瞧一下,絕非深入的理解。18世紀的英國詩人亞歷山大·蒲柏曾說過:“一知半解”是一件危險的事情。這個哥哥還給牛頓寫了最出名的墓志銘之一:“自然和自然律隱沒在黑暗中;上帝說,讓牛頓去吧!遂一片光明。”

  • C++: (如果你有一定的編程基礎(chǔ)),在24小時之內(nèi),能學會一些C++的語法,但是,僅此而已了。如果你以前是個Basic語言的程序員,你可以寫一些語法是C++,但是風格是Basic的程序,但是,24小時之內(nèi),C++語言的精華或糟粕,你都學不到。重點是什么?(首界圖靈獎得主)Alan Perlis曾說過:“不能影響你編程思維方式的語言,是不值得學習的。”一個更加可能的場景是,在工作中,你不得不學習C++(或者JavaScript,Processing之類)的一小部分,來調(diào)用一些原有的接口,完成某個特定的任務。這種情況下,表面上說是在學習如何編程,其實只是在應付一下手上的活。

  • 24小時內(nèi):很不幸,24小時太少了,原因下面告訴你。

十年學會編程

研究表明,想在任何領(lǐng)域成為專家,大概需要10年的時間,這些領(lǐng)域包括下棋,作曲,發(fā)電報,彈鋼琴,游泳,打網(wǎng)球,研究神經(jīng)心理學和拓撲學。

關(guān)鍵在于有針對性的訓練,而不是漫無目的重復,訓練的內(nèi)容要剛好超過你現(xiàn)有的水平,練習以后要分析你的表現(xiàn),改正發(fā)現(xiàn)的錯誤,然后重復,再重復。

沒有什么捷徑可走,即使是Mozart,一個4歲就能彈琴的音樂天才,也是用了13年的時間,才真正的寫出世界級的音樂作品。在流行音樂上,Beatles好像是在1964年訪美期間一夜成名的。實際上,他們從1957年就已經(jīng)開始在利物浦和漢堡的小酒館里唱歌了,他們組建樂隊的時間就更早了,他們第一張取得巨大成功的專輯《佩帕軍士》,是在1967年發(fā)行的。

馬爾科姆·格拉德威爾讓這個理論廣為人知,雖然他說的是另一個說法,10000個小時而不是10年(這本書有中文翻譯版《異類 : 不一樣的成功啟示錄》)。

法國現(xiàn)實主義攝影大師亨利·卡蒂埃-布列松有另外一個標準,他說你的前10000張照片是你最差的。(當然,這個攝影大師沒有意識到數(shù)碼相機的出現(xiàn),很多人能在一周內(nèi)就可以拍10,000張照片)

真正的大師要用一生來完成,英國作家,文學評論家和詩人塞繆爾·約翰遜說過:“在任何領(lǐng)域取得卓越的成就都要用一生的努力,不要妄想可以投機取巧?!庇脑娙藛疼乓苍?jīng)說過:”吾生也有涯 而知也無涯?!?/p>

同樣,公元前400年的希波克拉底也表達過類似的意思,他也認為藝術(shù)沒有止境,生命卻有盡頭。他說的這句話有個更長的版本,翻譯成英語的意思是:“生命有盡頭,藝術(shù)無止境,機遇轉(zhuǎn)瞬即逝,練功走火入魔,決定優(yōu)柔寡斷。”

當然,不會有一個確定的答案告訴你需要多長時間,畢竟,假設(shè)掌握所有的技能(比如編程,下棋,跳棋和音樂)需要相同的時間也不合適,不同的人也會用不同的時間。

K.Anders Ericsson教授說過:“值得注意的是,在大多數(shù)領(lǐng)域,即使你是個天才,要達到專家級別的高水平仍然需要時間。10000個小時只是給你一個概念,一個天才,如果每周練習10到20個小時的時間,仍然需要數(shù)年時間才能達到專家級別的水平?!?/p>

所以你想成為一個程序員

這是我編程成功的秘笈:

要對編程感興趣,要從中能獲得快樂。保證編程足夠有趣,這樣才能讓你花10年的時間或者10,000個小時在上面也不覺得枯燥無味。

動手編程。最好的學習方法是邊學邊做。常言道:“人的最高功力并不能通過做一天和尚撞一天鐘這樣的重復經(jīng)驗獲得,但是,最高的功力可以通過有針對性的日復一日年復一年的訓練來獲得?!辈⑶遥白钣行Ч膶W習需要有針對性的任務,這些任務的難度還要因人而異,并且有合理的反饋渠道,并能夠根據(jù)這些反饋作出相應的改進?!边@些觀點引用自《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》這本書里。

和其他的程序員交流,閱讀別人的代碼。這比看書或者參加培訓課程要重要。

如果你愿意,在大學里花上四年時間(或者再讀個研)。這能讓你獲得一些工作機會,也能讓你在這個領(lǐng)域有更深入的了解。但是,如果你一上學就頭痛,直接去工作也能獲得相同的經(jīng)驗。無論是什么情況,讀死書肯定是不行的。計算機科學不會讓你成為編程專家,就像學習畫筆和顏料不可能讓你成為畫家一樣。這是Eric Raymond說的,他是New Hacker’s Dictionary字典的作者。我雇傭過的最好的程序員是個高中畢業(yè)的學生,他創(chuàng)造了偉大的軟件,Mozilla,他擁有自己的新聞組,賺到了足夠多的錢買了自己的酒吧。

和其他的程序員一起參與一些項目。在一些項目中成為最出色的程序員;在另一些項目中當最差勁的程序員。在當最出色的程序員的時候,要測試你領(lǐng)導項目的能力,用你的視野來啟發(fā)別人。如果你是項目中最差的那個,要學習牛人們在做什么,如果他們不喜歡做的,你要拿來做。

接手并推進別人的項目理解其他人寫的代碼。如果有別人沒有考慮到的問題,你能理解并修復它們。思考并設(shè)計你的軟件,讓這些軟件也容易被他人維護。

學習至少6種(我不太清楚英語中的half dozen是什么意思,是虛指還是就是6種)編程語言。這6種語言中,包括一種支持抽象類的(例如Java或者C++),一種支持函數(shù)的(Lisp, ML或者Haskell),一種支持語義抽象的(Lisp),一種支持聲明規(guī)范的(Prolog或者C++模板),還有一種支持并發(fā)的(Clojure或Go)。

記住,在“計算機科學”中在“計算機”這個詞語。理解執(zhí)行一條指令要花多長時間,從內(nèi)存中取一個字(要考慮緩存有沒有命中的情況)要多久,從硬盤中連續(xù)讀字節(jié)要多久,在硬盤中尋址定位要多久?

參加語言的標準化工作。這可能是有關(guān) ANSI C++ 委員會,也可能是縮進的風格是兩格縮進或四格縮進。無論如何,你能從中學到其他人對語言的喜好,也能了解到他們熱愛的程度,甚至也許能知道一點他們?yōu)槭裁此麄儠@樣認為?

知道何時能從標準化語言的工作中脫身,越快越好。

很難說能從書本中學到多少東西。我第一個小孩出生的時候,我讀了所有的“如何做”系列的書,但是,沒有什么頭緒。30個月以后,當我的第二個孩子出生,我還要重溫一下那些書么?當然不用了!我都已經(jīng)是老司機了,我完全靠我自己的經(jīng)驗,事實也證明我自己的經(jīng)驗要勝過那些專家們寫的上千頁的書。

弗雷德·布魯克斯在他的書《沒有銀彈》中給出了三條建議:

  • 盡早地系統(tǒng)地識別出頂級設(shè)計師

  • 每個人給分配一個職業(yè)規(guī)劃的導師

  • 讓成長中的設(shè)計師有機會互相切磋武藝

此處的假設(shè)是有一些人天生有成為偉大設(shè)計師的潛質(zhì),然后,就是正確的去引導他們。艾倫·佩里斯一針見血地說:”假如每個人都可以學會雕刻,那就得教米開朗基羅哪些事不要去做。對于偉大程序員,也是如此。”

Perlis認為,偉大的人有一種內(nèi)在的特質(zhì),這種特質(zhì)往往比接受訓練更重要。但是,這些特質(zhì)是從哪里來的呢?與生俱來的?還是通過后天勤奮而來的?

正如動畫片《料理鼠王》里的幻象大廚Auguste Gusteau說的那樣:“誰都能做飯,但只有那些無所畏懼的人才能成為大廚!”我認為“把你生命中的大部分時間花在有針對性的練習上”這種精神,看作一種自愿奉獻的精神!但或許“無所畏懼”才是體現(xiàn)這種精神的真諦?;蛘?,就像是《料理鼠王》里那個與 Gusteau 作對的刻薄的美食評論家 Anton Ego 說的那樣:“不是任何人都能成為偉大的藝術(shù)家,不過,偉大的藝術(shù)家可以來自任何地方?!?/p>

所以,盡管買本 Java/Ruby/Javascript/PHP 的書吧。你可能會從中學到點兒有用的東西。但作為一個程序員,在 21 天內(nèi)或 24 小時內(nèi)改變你的人生,或者提高你實際的編程水平,這是不可能的。你嘗試過連續(xù) 24 個月不間斷的努力提高自己么?好吧,好吧,你該上路了……

特別提醒: 本文還有中英文對照版

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
十年學會程序設(shè)計
3天學會C ,對,就3天
Teach Yourself Programming in Ten Years——用十年教會自己編程
7天學會一個編程語言,可能嗎?
Peter Norvig:自學編程,十年磨一劍
神級程序員10多語言編譯‘helloworld’,你又能看懂幾種?
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服