最近收到一封朋友(不是軟件工程師,可是在一家有名的硅谷科技公司工做)的郵件,問我可否給她提供任何好的「基礎編程教程」供她學習。javascript
做爲一個自學成才(絕大多數都這樣)的工程師,一樣的問題我已經碰到好幾回了。 「learning to code」 的概念在校外得到了普遍的認同,甚至連奧巴馬也推薦它。相似 Codecademy 和 Khan Academy 的工具還有在線教程像 Stanford’s CS106A 會幫助你踏實得走好每一步。html
令開發者們喜聞樂見的是人們已經將視角轉向了科技和軟件以及思考「我應不該該在大學裏學習計算機科學」。咱們已經將 「learn to code」 比做頌歌通常,當朋友和親人或是同事向咱們諮詢關於新的軟件應用,或者向學生建議開發相關的重要技能時,咱們會重複這一點。java
可是簡單的推薦 「learn to code」 讓我感受有點偏離它的初衷, 由於它沒有說明編程和編寫軟件實際都和「建造實際的東西「有關。python
詞語 「learn to code」 微妙得暗示 「coding」 或者 「programming」 自己就是一個有價值的結果,但實際上並不都是,咱們也不該該把這種印象帶給那些剛剛開始從事軟件開發的人。學習如何用 python 實現求3和4之和或者學習用 javascript 寫一個 if 語句的想法讓人感受荒謬。編程
我意思也不是說學習基礎不重要,不是必須的。建立一個有用的軟件某種程度上是一個複雜的過程,而作菜卻不是。 「Learn to cook」 你只需遵循烹飪書中某個基礎的教程,還有一些簡單的訣竅就能在作菜方面提高一大步。函數
其實許多行業遇到的問題偏偏相反。 開發一種新葯須要花費數年來研究、訓練和實踐。這也是爲何咱們不曾見過哪一個總統鼓勵每一個人花費1小時來 「learning chemistry」 。軟件開發擁有一種魔法,能讓人很容易上手,即使如此,其依然存在大量有趣和複雜的問題等待着解決方案的出現。工具
對此咱們沒必要忌諱。做爲 「learn to code」 的替代,咱們應該鼓勵新人去 「learn to build」 。代碼僅僅是一個構建事物的工具。因爲軟件是我的能構建的最強大的事物之一,這說明愈來愈多的人應該學會構建它。 Learning to code 是學會構建軟件的第一步,可是學習不能止步於此。學習
學習構建的問題在於它不能在課堂上被真正的傳授。你能夠傳授技能,但構建不是技能。它是一種心態。將周圍的軟件當作可操控的,並找到操控它的方法。這種心態只能來自於親身實踐的經驗。ui
因此我建議個人朋友多多親身實踐,具體以下所述:設計
從基礎開始。 選擇一個基礎編程教程。熟悉變量和數據類型以及控制結構和函數。加深對編程語法的理解會幫助你發現更深層的問題,這會在你遇到坑的時候起到相當重要的做用(坑可能會不少哦)。
找一個項目。 與此同時,在工做或者在學校尋找一些已經設計好的軟件系統或者是你常用軟件,可是你認爲它在某些簡單的地方處理的不夠好。它能夠小到像一個讓人感受不爽的錯誤提示消息,你總是看到它以致於你想去掉它。嘗試去解決一個已知系統中的一些小問題。
解決一些小問題。 不要花費超過兩週的時間在基礎編程概念上,除非你真的樂意(即使樂意,最好放到一個月以後)。一旦你熟悉了基礎編程,能夠去作一些接近商業的編程: 試着去解決你遇到過的小問題。學習曲線在這裏很容易就擱淺,並且很容易讓人感受沮喪,和你認識的懂軟件的朋友聊一聊將會有很大幫助。
不要輟步。 一旦你解決了一個問題,或者以前在電腦上沒法運行的軟件在你的嘗試下運行起來了,你會感受到一種勝利的召喚。 和困擾決鬥,拍拍本身的大腿,而後繼續戰鬥。Bite off a bigger chunk. 若是對如今的項目感受厭倦了,那麼找一個新項目。和人們分享你在作在學的事情,得到下一步作什麼的想法。
發明一些東西。 最終你會擁有足夠的經驗從零開始構建項目。這是一個使人驚奇的高度,你絕對會從中受益若是你有足夠的時間和對它的渴望。不過即使沒有達到這個條件,你依然會提高辨識問題的技能,找到解決的方法而後搞定它。但願你能幫助下個隻身一人而且想要 learn to build 的傢伙。
我也提醒她可能會面對的問題:
軟件的做者不但願讓你得到它的源代碼副本。千方百計得找到破解的辦法。一般在學校或者工做中改進一個內部工具活系統會比改善一個外部事件致使的政治問題要容易的多。開源項目看起來是一個好地方,由於代碼很容易獲取,可是請當心它們嚴格的保護而且入門比想象的要難的多。
起先你不知道如何進行一項小的改變。由於一般任何有用的系統都很複雜。不要擔憂,這太正常了。 從整個項目文件中搜索關鍵接口的名稱開始。一旦你找到了,修改它來證實你有能力操做電腦,使它按你的意圖行事。
你可能會變得沮喪。固然,大多數的事物是十分複雜的。向懂這個系統工做原理的人請教來弄明白你糾結的地方。確保你獲得了一個解釋,而不只僅是一個解決方案。只要你嘗試作出一些積極的改變,大多數的人會很樂意幫你來解決問題。而且若是你能代表本身作了許多的努力來儘量的理解問題,那麼應該很容易就會有人來幫你。固然也有例外,不過那些人都是傻逼,過着勉強餬口的日子,不要理他們。
假設個人朋友遵循了上面的步驟而且 learns to build ,接下來是我下一步要告訴她的:
你作了一次又一次。你學會了迭代。你明白不存在已完成的事物,一切的事物都是能夠被改進的。你學會了在資源有限的狀況下決定哪件事物更值得被改進。和周圍的夥伴分享構建的知識,這樣大家能夠一塊兒參與構建。
myBlog:http://wtser.com
from: http://benton.io/tech/2014/03/28/learn-to-build.html