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