如何在兩個月內(nèi)快速教會女友編程
伊娃和芳來舊金山跟我學(xué)編程。在這篇博客中,我會介紹我是怎么教她們的,我構(gòu)建教她們的方式的理由,以及這種方法是怎么起作用的。按時間順序去列明她們所學(xué)到、做到的那些事兒很簡單,但是,這沒什么幫助,而且你也容易錯過重點(diǎn)。重要的是要了解詳情,以及為什么它管用,所以我將從基本原則來開始。做好準(zhǔn)備,文章比較長。
在你的整個編程歷程中,以下原則要牢牢記?。?
1)傳播:
在伊娃和方開始之前,我為她們創(chuàng)建了個博客。我告訴她們,記錄下她們的編程之旅和她們所學(xué)到的。在開始的時候是很難的,你可以問她們。我花了一個星期的嘮叨,她們才寫一次博客。但現(xiàn)在,如果不寫寫她們花了大把時間去做的那些項(xiàng)目,則像是錯的了。
如果你在你的項(xiàng)目里用的是API(應(yīng)用程序編程接口),發(fā)微博或者郵件給那公司,告訴他們你對他們的API的想法。當(dāng)你在你的編程馬拉松里獲得了一個獎勵,寫條好微博@他們以示感謝,或者發(fā)篇日志。讓這日志空前美好,然后推薦到黑客新聞欄目,就像它必將登上首頁一樣(盡管大多數(shù)是不會的)。
給你的編程之旅一個健康的傳播過程的最大好處是,它讓你對你的項(xiàng)目負(fù)責(zé)人,這也就引入了我的下一條原則。
2)完成:
芳和伊娃都知道,完成一個項(xiàng)目是很難的,但也是很重要的。我說得很清楚,除非她們寫一篇日志,在twitter上@那API公司,或是在黑客新聞版上發(fā)這項(xiàng)目完成的消息,我們都不會啟動一個新的項(xiàng)目。盡管第一個項(xiàng)目只是一個的井字棋游戲,但這是她們做得最好的井字棋游戲。你從來都不想寫一個蹩腳的程序,所以多么簡單的或不相干都不重要。如果你要寫一個項(xiàng)目,那它必須是你能寫出的最好的程序。我已經(jīng)見過太多的程序員在一些看不到黎明的非正式項(xiàng)目上費(fèi)時耗力。如果你正在學(xué)習(xí)編程,你必須從一開始就學(xué)習(xí),珍惜你的時間和精力,完成您的項(xiàng)目來證明它。
最后的20%需要80%的努力。開發(fā)人員可以一兩天就能把“點(diǎn)子”變成具體可執(zhí)行的。而要發(fā)布一個“完美”的產(chǎn)品,需要兩倍的時間來完成每一種情況下的測試,解決每一種臨界問題。把80%的精力都花你項(xiàng)目最后的20%,這將在許多許多訪問中成就傳奇。
3)思考:
如果你被卡住了,請不要直視你的代碼。出去散散步,呼吸一下新鮮空氣,并考慮一下吧。你被卡住了,是因?yàn)槟愕倪壿嫵隋e,而解決的最佳辦法就是在腦?;蛘呒埳弦徊揭徊降乩砬宄?。程序員獲得高額的酬勞是因?yàn)樗麄冊谒伎肌栴}解決是依靠你的思考,編寫代碼就是這么可惡的工作。優(yōu)秀的項(xiàng)目經(jīng)理通常有一個豐厚的程序背景,并且在思考和解決問題方面訓(xùn)練有素。
根據(jù)這種說法,如果你被卡住了20多分鐘,而且你也無法突破,那就問別人吧。如果你20分鐘都沒有得到任何線索,那么接下來的一個小時你不會有更多進(jìn)展。信托伊娃。她有一天浪費(fèi)了5個小時,就因?yàn)橐粋€愚蠢的錯誤,實(shí)打?qū)嵉慕逃?xùn)啊。散個步,去干點(diǎn)兒別的事兒。然后再回來搞它。能夠脫離出自己的問題,轉(zhuǎn)移注意力是一個技巧。
4)再思考:
現(xiàn)在你可能想通了,思考在一個程序員的生活里地位重要。請一定不要——特別是如果你正在學(xué)習(xí)如何寫代碼時——復(fù)制粘貼代碼。如果你想學(xué)習(xí)如何怎么寫代碼,復(fù)制粘貼—— “你看,它成了!”——不會讓你有任何突破的。相反,當(dāng)你看到代碼,你必須理解了它在做什么,再去嘗試調(diào)試它。當(dāng)你越來越能駕輕就熟理解別人的代碼時,把它簡化到恰好滿足你的需要,然后再寫出來。如果你從初學(xué)階段就習(xí)慣這么做,在幾個月里你就可以成為一個非凡的開發(fā)者。
5)谷歌:
學(xué)習(xí)如何自己解決問題。除非你被卡住了至少20分鐘,不要詢問編寫代碼的問題。程序員必須獨(dú)立。他們是偉大的思想者和偉大的傳播者。要成為其中一員,你必須有邏輯地思考,并找出問題發(fā)生的原因。很多年輕的開發(fā)人員所面臨的一個問題是,他們很難寫出他們真正需要的東西。我們很多人都經(jīng)歷過這個過程,你知道問題是什么,但是你不知道怎么去找到它。你必須從初學(xué)階段就學(xué)會正確地開發(fā)程序,這是個技巧,它很好地回扣了第一點(diǎn)里說的傳播。
現(xiàn)在,記住了這5個點(diǎn),來看看伊娃和方學(xué)習(xí)的時間表:
第1-3天:通過Ruby學(xué)習(xí)編程的基礎(chǔ)知識。
我選擇了Ruby,因?yàn)橛脕砩鲜肿兂伤亲詈啽愕?。Ruby的語法限制很少(空格與制表符,類型聲明等),因此伊娃和方能夠?qū)W⒂诰幊痰乃枷脒^程,而不是去攻克語法規(guī)則。她們學(xué)會了if語句,循環(huán),數(shù)據(jù)結(jié)構(gòu),并解決一些編程題目,如FizzBuzz(譯者注:當(dāng)滿足一定的條件時打印Fizz或者Buzz或者FizzBuzz,是初級編程訓(xùn)練題目),替換字符串中的字符,轉(zhuǎn)換一個數(shù)組,找出最大值。重要的是要了解類和對象。
*注意*我不教她們Ruby的特定語法。我告訴她們對參數(shù)要始終使用括號,而且每個函數(shù)結(jié)束時一定記得返回。這樣一來,當(dāng)她們學(xué)習(xí)其他語言時,上手更快。
第4天:HTML
HTML和CSS嚴(yán)格說都不算一種語言,所以沒有必要花太多的時間在這上邊。伊娃和芳花了一天時間在HTML上,并且玩了一些標(biāo)簽,還研究了表單、信息頁,等。我確信,她們只用HTML標(biāo)簽。這將建立起用CSS的興奮。在這里需要重點(diǎn)學(xué)習(xí)的是區(qū)分塊HTML與內(nèi)聯(lián)HTML,區(qū)分標(biāo)識與分類。
第5天:CSS
在玩了HTML后,“你怎么把這個放那兒,你怎樣讓這個丑陋的HTML頁面更漂亮?”的問題來了。CSS是一個完美的答案。今天就開心地讓你的網(wǎng)頁更有型吧(所有的HTML頁面都是前一天做的)。這里學(xué)習(xí)的重點(diǎn)是相對/絕對/固定定位,HTML元素流,絕對和固定定位如何控制元素,以及正常的浮動。(譯者注:沒看懂。。。)
第6-7天:用jQuery來做JavaScript
jQuery的需要一點(diǎn)點(diǎn)努力來習(xí)慣,因?yàn)橛械某绦蛏婕暗絡(luò)Query的框架,這需要一點(diǎn)兒時間?;藥滋鞎r間,讓她們的HTML頁面有交互性。
第8-15天:第一個項(xiàng)目——井字棋游戲
在這一點(diǎn)上,芳和伊娃了解了HTML/ CSS/ Javascript,但還沒有很好地適應(yīng)之。這是啟動她們第一個項(xiàng)目(井字棋游戲)的最佳時間。盡管她們在2天內(nèi)完成了這個項(xiàng)目,優(yōu)化它又花了好幾天。最后的20%需要80%的努力,這是事實(shí)。作為初學(xué)者來說,重要的是學(xué)習(xí)來完成你的項(xiàng)目。
第16-20天:Sinatra
在那個像是從來不能完結(jié)的井字棋游戲之后,學(xué)新的東西對芳和伊娃來說不能更激動人心了。學(xué)習(xí)服務(wù)終端代碼對于她們一直在做的事兒來說是全新的體驗(yàn)。我選擇sinatra因?yàn)樗俏宜眠^的最干凈、簡單的web框架語言了,而這種簡潔性讓解釋web的運(yùn)作變成小菜一碟。
第20-22天:PhotoShop
Photoshop對于絕妙的設(shè)計非常重要。對那些從來沒有用過它的人來說,它足夠唬人(至少一度對我是的),但是借助Photoshop創(chuàng)立的網(wǎng)站,比起那些傳統(tǒng)的前端框架網(wǎng)站要高一個檔次的。而且事實(shí)上你只用知道混合選項(xiàng)就夠了。任何一個相當(dāng)成功的開發(fā)者都會需要Photoshop,所以學(xué)會用它很重要,并且要用它服務(wù)你所有的項(xiàng)目。
第20-27天:第二個項(xiàng)目—— “拖圖片”
項(xiàng)目大量涉及JavaScript的運(yùn)用。該項(xiàng)目涉及使用Ajax請求,F(xiàn)acebook的API,和cookies。這是一項(xiàng)聯(lián)結(jié)其所有web編程基礎(chǔ)的大工程。這個項(xiàng)目涉及的范圍大于第一個項(xiàng)目,我覺得這是向更復(fù)雜項(xiàng)目邁進(jìn)的一大步。在此期間,他們通過GIT(譯者注:一個開放源碼的版本控制軟件)合作。這是一個開源項(xiàng)目!
第28-30天:RSpec
至此,芳和伊娃已經(jīng)適應(yīng)了構(gòu)建Web應(yīng)用程序。也是到這個關(guān)頭,她們已經(jīng)意識到代碼多么容易打破,而一個改變又如何摧毀一切?,F(xiàn)在,測試驅(qū)動開發(fā)適時引入。我們在RSpec上花了幾天時間,伊娃和芳用寫測試案例當(dāng)每天早上的編程練習(xí)。我有沒有提到她們每天早上都要解決一項(xiàng)技術(shù)問題?從第28天開始,她們不得不在她們開始寫代碼前也寫些RSpec。
第30-35天:BackboneJS
著手與一個涉及較廣泛的項(xiàng)目(比如“拖圖片”),你可以學(xué)到很多東西,并且遇到一些你希望有更好解決辦法的問題。只有這樣,你才真正欣賞那些幫助過你的的框架的意義。我還沒有找到很好的BackboneJS的教程,所有教程都一下子提供了太多的信息。我是這么教的:
首先,了解模型。創(chuàng)建一個模型,而且僅供一條數(shù)據(jù)庫條目所用。學(xué)習(xí)如何修改它,將它保存。
其次,學(xué)習(xí)視圖。為你之前一直在做的那個模型創(chuàng)建一個視圖。添加事件偵聽器,領(lǐng)會視圖如何如此貼切地綁定模型,以及這一切又是如何彼此貼合。
第三,現(xiàn)在就可以說清楚集合的意義了。你不能手動鍵入每一個的模型,特別是如果你不知道有多少模型時。
我們從來沒有學(xué)路由的課程。我還不覺得路由重要。
第35-40天:Android
如果你還沒有完全注意到?jīng)]有,我們已經(jīng)在很短的時間里涵蓋了很多的東西。好程序員需要時刻適應(yīng)變化,所以我們的最后一個項(xiàng)目是學(xué)習(xí)Android。在編程中,你不能忽視移動終端,它太重要了。我教了她們Android編程。這不是很辛苦,Android編程和web編程是非常相似的。你有了視圖的XML(可擴(kuò)展標(biāo)記語言),你就有了可以與網(wǎng)絡(luò)控制器匹敵的Java代碼。模型-視圖-控制!通過使用Ruby和JavaScript,芳和伊娃開始尋找編程語言的相似之處,讓她們與特定語言脫離關(guān)系。對她們來說,編程語言有不同的語法和相同的工作方式(并非事實(shí),但我們會稍晚些區(qū)別,以避免混淆)。
結(jié)論:
1)女孩在編程方面是驚人的。
2)不是計算機(jī)科學(xué)專業(yè)的不是一個借口。
3)編碼是有趣的,每個人都可以學(xué)習(xí)。
原文鏈接:http://www.html5cn.org/article-3397-1.html