想要 24 小时自学编程,那是不可能的,先自学 10000 小时再说!
?
為何每個人都如此匆忙?
走進任意一家書店,你會看到如何在24小時內自學 Java,以及在幾天或幾小時內教授 C、SQL、Ruby、算法等無窮無盡的書籍變種。亞馬遜高級搜索以下關鍵詞[title: teach, yourself, hours, since: 2000,會發現有512本這樣的書。在前十名中,有九本是編程書籍(另一本是關于記賬的)。類似的結果來自于將 "teach yourself"替換為"learn"或將"hours"替換為"days"。
結論是,要么人們都急于學習編程,要么編程在某種程度上比其他任何東西都更容易學習。Felleisen 等人在他們的“How to Design Programs”一書中對此趨勢表示贊同,“糟糕的編程很容易。即使是傻瓜,人們也可以在21天內學會它。”Abtruse Goose 漫畫對此也有他們的理解。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
我們來分析一下諸如24小時自學 C++?這樣的標題意味著什么:
自學:24小時不足以寫一些有意義的程序,更不用說從中汲取經驗或者教訓。這個時間也不足以跟有經驗的程序員一起工作并理解處于 C++ 的環境是一種怎樣的感受。簡單地說,就是因為時間不足,學不到多少東西。因此,這種書只會談及膚淺的表面,不會帶來深刻的理解。正如 Alexander Pope?所說,學點皮毛是件很危險的事情。
C++:24小時內你可能會學到一些 C++ 語法(如果你已經會其它語言的話),但是不能學到如何應用這門語言。簡而言之,如果你是一名 Basic 程序員,你可以學會用 C++ 語法以 Basic 風格編寫程序,但你不會了解?C++?為什么好(或壞)。所以這有什么意義呢?Alan Perlis?曾說:“如果一門語言不能引發你對編程的思考,就不值得去學。”一個可能的觀點是,你必須學一點 C++(或者更可能是像?JavaScript?或?Processing?的語言),因為你可能需要與現有工具進行交互以完成某項特定的任務。但是這樣一來,你學的不是如何編程,而是如何完成任務。
24小時:?很不幸,這是遠遠不夠的,下面我們將詳述。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
十年內自學編程
研究員?(Bloom (1985),?Bryan & Harter (1899),?Hayes (1989),?Simmon & Chase (1973))?已經證實,在包括國際象棋、音樂制作、電報操作、繪畫、鋼琴表演、游泳、羽毛球、神經心理學以及拓撲研究在內的各種領域中構建專業知識體系需要大約十年的時間。
關鍵是審慎的實踐:不僅僅是一次又一次地重復,而是用一項超出你現有能力的任務來挑戰自己,嘗試它,分析你在執行它時的表現,并糾正任何錯誤。然后重復一遍再重復一遍。似乎沒有真正的捷徑:即使莫扎特4歲時是一位音樂神童,他在開始制作世界級音樂之前還花了13年時間。
在另一時代中,甲殼蟲樂隊似乎在一系列#1熱門歌曲和1964年的 Ed Sullivan 現場秀中亮相。但自1957年以來他們一直在利物浦和 Hamburg 小型俱樂部演唱,雖然他們有早期粉絲,但他們的第一次重大成功,Sgt. Peppers,于1967年發布。
馬爾科姆·格拉德維爾推廣了這一思想,盡管他更關注10,000個小時而不是10年。
亨利·卡蒂埃-布列松則有其他的標準:“最糟糕的是你前10,000張照片”(他沒想到數碼相機的出現致使某些人在一周之內就能達成目標)。
“真正的專業知識需要你用一生來了解”,塞繆爾·約翰遜說到,“任何學科的卓越成就依靠畢生勞作,靠金錢買不來。”
喬叟則抱怨道:“生之有崖,學而無涯。”
希波克拉底因這條摘要?"ars longa, vita brevis"而著名,這是引文“Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”的一部分,在英語中則說?"Life is short, [the] craft long, opportunity fleeting, experiment treacherous, judgment difficult."(譯者注:生命短暫,技藝長遠,機會易逝,實驗詭譎,判斷困難的意思,希波克拉底用拉丁文寫的)
當然,答案不唯一:假設所有技能(例如:編程,下象棋,玩跳棋還有演奏音樂)都需要完全相同的時間掌握那是不合理的,并非所有人都花費相同時間。像安德斯·愛立信教授所言,“在大多數領域中,才華橫溢者也需時間成就不朽偉業。10,000這個數給我們每周僅工作10至20個小時,有些人辯稱大天才還需要達到最高水準。”
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
所以你想成為一名程序員
這是我在編程方面獲得成功的秘訣:
對編程感興趣,因為它很有趣而完成一些編程工作。確保它能對你保持足夠的興趣,以便你愿意在未來投入十年/10,000小時。
編碼。最好的學習方式是邊學邊做。更具技術性地描述下,“特定領域中個人的最高績效水平并不是作為增加經驗的功能而自動實現的,但即使是經驗豐富的個體因刻意努力改進是可以提高績效水平的。”(p. 366)和“最有效的學習需要一個定義明確的任務,對特定的個體有適當的難度級別、信息反饋,以及重復和糾正錯誤的機會。” (第20-21頁)“實踐中的認知:日常生活中的思想,數學和文化”(Cognition in Practice)一書中是對這一觀點的一個有趣的引用。
跟其他程序員交談,或閱讀其他人的程序。這比其他任何書籍或課程都管用。
如果對學校有興趣,你可以讀4年大學(或再讀幾年研究生)。這樣你就可以找那些有學歷門檻的工作,而且學校可以讓你對這個領域有更深的認識。當然,如果你不喜歡學校,那么也可以通過自學或工作來達到相同的效果。無論如何,單單看書肯定是不夠的。“單憑計算機課無法讓一個人變成一個編程專家,就像單純研究刷子和顏料無法造就一個畫家一樣。”《新黑客字典》的作者 Eric Raymond 這樣說。我曾經有個員工,雖然只有高中學歷,但非常厲害,寫了很多很棒的軟件,還有自己的新聞組,甚至還靠股票期權買下了自己的夜總會。
跟其他程序員一起做項目。在一些項目里,你可能是最牛的;在另一些項目里,你可能是最弱的。在那些你最牛的項目里,你可以訓練你的領導能力,用你的眼界來激發大家。在那些你最弱的項目里,你可以學學那些大牛是怎么做的,也可以學學那些大牛不想做的東西(因為大牛讓你替他們做)
接手其他程序員的項目。理解其他人寫的程序。看看理解和修復其他人的程序會有多難。這樣你就可以想想怎么優化自己的設計,可以讓別人接手時簡單一些,再簡單一些。
至少要學那么六七門編程語言。其中至少要有一門是強調類抽象的(比如 Java 和 C++),一門是強調函數抽象的(比如 Lisp、ML 或 Haskell),一門是支持語法抽象的(比如 Lisp),一門是支持聲明式規范的(比如 Prolog 和 C++ 模板),一門是強調并行性的(比如 Clojure 和 Go)。
記住,“計算機科學”中是有一個“計算機”的。你得知道你的計算機執行一條指令需要多久,從內存取一個詞需要多久(緩存命中要多久,不命中要多久),從磁盤讀連續的字要多久,磁盤尋道要多久。
加入到語言的標準化過程中。大到加入 ANSI C++ 委員會,小到確定你們公司里是用2個空格縮進還是4個空格縮進。通過這些過程,你可以了解其他人對語言里某些東西的喜好,這種喜好到底有多深刻,甚至為什么有這種喜好。
還要有盡快從語言標準化工作中抽身而出的決斷力。
想要在程序員生涯內有更高的成就的話,C/C++就是一個既可以強化思維能力,又可以打好編程基礎的編程語言,你想要做軟件開發,成為核心程序員的話,可以選擇學好C/C++。如果感覺自學C/C++編程有困難的話可以湫湫掃下方二維碼。這里是編程愛好者的聚集地,歡迎初學和進階中的小伙伴。希望你也能憑自己的努力,成為下一個優秀的程序員。
?
總結
以上是生活随笔為你收集整理的想要 24 小时自学编程,那是不可能的,先自学 10000 小时再说!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET 常见参考项目的 UI、B
- 下一篇: 不同网段的远程控制脚本