轉自譯言
1减响、交流溝通
在Eva和Fong開始學習之前,我為她們申請了博客郭怪,并請她們記錄下她們的編程之旅和學到的東西支示。萬事開頭難,你可以問問她們鄙才。我大概花了一周的時間跟她們嘮叨才讓她們寫了第一篇博客颂鸿。但是現(xiàn)在,她們不在博客上寫點兒自己投入了大量時間的項目就覺得不對勁攒庵。
如果你在項目中使用了API(譯者注:Application Programming Interface嘴纺,應用程序編程接口)败晴,發(fā)推文或者是郵件給這家公司告訴他們你關于他們的API的想法。當你在黑客馬拉松中贏得獎項時栽渴,發(fā)個不錯的推文@他們表示謝意尖坤,或寫篇相關的博文。每寫一篇博文都使它成為一直以來最好的闲擦,并懷著它會被放上黑客新聞版首頁的期望將它提交(盡管大部分時候這種期望都不能實現(xiàn))慢味。
健康交流的最大好處就是,它使你對你的項目負責墅冷, 由此也引出我的下個要點纯路。
2、完成
Fong和Eva都知道寞忿,完成一個項目困難驰唬,卻重要。我聲明:除非她們寫了一篇關于手頭項目的博文腔彰,在推特上@了API公司叫编,并且將它發(fā)布在黑客新聞網(wǎng)版上,我們是不會開始一個新項目的萍桌。盡管她們的第一個項目只是井字棋游戲,但這是她們做過的最好的井字棋游戲凌简。從來就沒有人想寫一個蹩腳的項目上炎,所以不管這個項目有多簡單或者不相關,如果你要著手做個項目雏搂,那它必須是你能拿到的最好的那個藕施。我已經(jīng)見過太多開發(fā)者為毫無前景的次要項目工作。如果你在學習編程凸郑,你必須從一開始就認識到要珍惜你的時間和精力裳食,完成你的項目證明它的價值。
完成整個項目的最后20%需要花費全部努力的80%芙沥。開發(fā)者可以在1诲祸、2天之內(nèi)實現(xiàn)一個項目的概念。而測試每種情況并且解決每一種邊際情況從而成就一個“完美”的產(chǎn)品則需要兩倍的時間而昨。在項目最后的20%花費那80%的精力救氯,將會在許多許多訪問中傳為佳話。
3歌憨、思考
如果你卡住了着憨,不要緊盯住你的代碼。出去散個步务嫡,呼吸點新鮮空氣甲抖,再考慮一下漆改。你卡住了是因為你的邏輯中有錯誤,而修正它最好的方法就是在腦海中或是在紙上一步一步地徹底想通它准谚。程序員靠思考賺錢挫剑,問題在你的思考中被解決,編程是個蛋疼的工作氛魁。偉大的項目經(jīng)理通常都有廣博的編程背景暮顺,并且在思考和問題解決方面接受過出色的訓練。
有一種說法:當你被卡住20多分鐘時秀存,并且你仍然茫然無緒捶码,請教別人吧。如果在20分鐘內(nèi)沒有任何頭緒或链,那么在接下來的一個小時惫恼,你也不會有任何進展的。相信Eva澳盐。她有一天就浪費了5個小時祈纯,因為一個愚蠢的錯誤——血的教訓啊。散個步叼耙,做個其他事腕窥。然后再回到項目上來。能將自己與問題切斷并轉移注意力筛婉,是個技術活簇爆。
4、再思考
也許你現(xiàn)在已經(jīng)明白了爽撒,思考入蛆,在一個程序員的生活中是至關重要的。不要去復制-粘貼代碼硕勿,尤其當你在學習如何去編程的時候哨毁。如果你想學習怎么編程,復制源武,粘貼——“看扼褪,有用誒!”不會使你有任何成就粱栖。相反迎捺,無論何時你看到代碼,你必須在企圖去試運行它之前想清楚它在干什么查排。當你能輕易看懂別人的代碼了凳枝,將其簡化到你剛好需要的程度,然后寫出來。如果從一開始就定期這么做岖瑰,你會在幾個月內(nèi)成長為一個非凡的開發(fā)者叛买。
5、谷歌
學會獨立解決問題蹋订。除非至少被卡住20分鐘率挣,不要問編程問題。程序員們必須是獨立的露戒。他們是偉大的思想者和偉大的交流者。為了成為他們中的一員智什,你必須邏輯地思考动漾,想出問題出現(xiàn)的原因荠锭。許多年輕開發(fā)者面對的問題是旱眯,寫出他們真正需要的代碼對他們來說很困難。我們中的許多人也是這樣证九,明知道問題是什么删豺,但就是不知道要去找什么去解決它。這是個你必須從一開始就培養(yǎng)的技能愧怜,它漂亮地聯(lián)系了第一點呀页,“成為一個交流者”。
現(xiàn)在拥坛,有了這五點牢記于心蓬蝶,以下是Eva和Fong學到的東西,以時間順序排列渴逻。
第1-3天:通過Ruby語言學習編程基礎
我選擇Ruby語言疾党,因為它用來上手是最快的音诫。在Ruby語言中惨奕,有很少語法限制(space鍵與tab鍵,類型聲明竭钝,等等)梨撞,所以Eva和Fong能夠關注編程的思考過程而不是解決語法問題。她們學習了if型語句香罐、循環(huán)體卧波、數(shù)據(jù)結構,解決了一些編程題目庇茫,比如說FizzBuzz(編程初級問題港粱,即滿足a條件時輸出Fizz,滿足b條件時輸出Buzz,同時滿足a查坪、b條件時輸出FizzBuzz),替換字符串中的字符寸宏,轉換一個數(shù)組,找出最大值偿曙。關于類別和對象的學習也是重要的担忧。
另外清笨,我沒有教她們特定的ruby語法,而是讓她們對參數(shù)都使用括號,并且以返回空結束每個函數(shù)拌阴。 這樣的話,她們下次學一種新的語言時就能更快上手拂盯。
第4天:HTML
HTML或CSS嚴格上來說不能算是編程語言实束,所以沒必要在這里花上太多時間。Eva和Fong在HTML上花了一天時間鞋仍,編了幾個標簽玩兒常摧,快速完成了表單、信息頁等內(nèi)容威创。這樣落午,對CSS的興奮感就建立起來了。在這里重點要學的是區(qū)分塊HTML與內(nèi)聯(lián)HTML肚豺、標識與分類溃斋。
第5天:CSS
在擺弄過HTML后,“如何在那里表達這個吸申,怎樣使這個丑陋的HTML頁面看起來更漂亮”的問題浮出了水面梗劫。CSS就是那個完美的答案〗夭辏花上一天的時間盡情設計網(wǎng)頁(所有HTML頁面都已經(jīng)在前一天建好)梳侨。這一塊的重點是,相對/絕對/固定定位日丹,HTML浮動元素走哺,以及如何用絕對、固定定位來控制正常的浮動哲虾。
第6-7天:通過jQuery來學習javascript
jQuery需要花點時間來適應丙躏,而且因為涉及到編程,學習jQuery框架需要占用點時間束凑。她們花了幾天時間將HTML頁面做成交互式頁面晒旅。
第8-15天:第一個項目- 井字棋
這時,Eva和Fong已經(jīng)了解了HTML/CSS/Javascript汪诉,但不是特別習慣废恋。這正是讓她們開始第一個項目(井字棋)的絕佳時機。雖然她們花了兩天的時間來完成這個項目,又用了幾天時間來對其進行潤色修飾鱼鼓。項目的最后20%要花費精力的80%是個金科玉律孝常。作為一個初學者,學著去完成你的項目是很重要的蚓哩。
第16-20天:Sinatra框架
在那個看起來永遠都不能結束的井字棋項目之后构灸,F(xiàn)ong和Eva迫不及待地想學點新東西。學點服務終端代碼對她們已經(jīng)在做的事來說是個激動人心的全新體驗岸梨。我選擇Sinatra喜颁,是因為它是我使用過最整潔、最簡單的網(wǎng)絡框架曹阔,而且這種簡潔性讓解釋網(wǎng)絡的工作原理變成小菜一碟半开。
第20-22天:Photoshop
Photoshop對非凡的設計非常重要。對那些從沒用過它的人來說赃份,它有點兒嚇人(至少對我來說是這樣)寂拆,但是用Photoshop做出來的網(wǎng)站比典型的bootstrap(譯者注:由Twitter推出的一款開源前端框架)站點要高端一個檔次。而你真正要知道的只是混合選項抓韩。任何一個相當成功的開發(fā)者都會需要Photoshop纠永,所以學會它并且在你所有的項目中使用它非常重要。
第20-27天:項目2-Dragpic(通過拖動圖片實現(xiàn)從網(wǎng)頁上方便地保存圖片的軟件)
項目2涉及到Javascript的大量使用谒拴。這個項目涉及到使用ajax(譯者注:一種用于創(chuàng)建更好更快以及交互性更強的 Web 應用程序的技術)的需要尝江,facebook的API,以及cookies英上。這是個將所有網(wǎng)絡編程基礎聯(lián)系起來的絕佳項目炭序。這個項目所需要的技術范圍比第一個要更廣,我覺得這也向更多更復雜的項目邁進了一步苍日。在這段時間里惭聂,她們憑借GIT(譯者注:分布式文件管理工具)通力合作。這可是一個開源項目跋嗍选辜纲!
第28-30天:RSpec
這時,F(xiàn)ong和Eva已經(jīng)能相當自如地構造網(wǎng)絡應用了豆茫。也正是這時侨歉,她們意識到屋摇,代碼是多么地脆弱揩魂,一個細微的改動,就能導致滿盤皆輸∨谖拢現(xiàn)在火脉,測試驅動開發(fā)就顯得有重要意義。我們花了幾天時間重溫了rspec,Eva和Fong則寫出測試案例作為每天早晨的編程練習倦挂。我之前提過她們每天早晨都要解決一個技術問題嗎畸颅?從第28天開始,她們就必須為這些技術問題寫出rspec方援,在她們開始編程之前也不例外没炒。
第30-35天:BackboneJS(一個開發(fā)網(wǎng)絡應用的框架,提供了強大的對模型犯戏、視圖和交互的抽象)
通過負責一個設計技術范圍廣泛的項目(比如Dragpic)送火,你能學到很多,遇到很多你希望能有更優(yōu)解的問題先匪。只有這樣种吸,你才能這正意識到那些幫助你的框架的價值。我還沒有找到任何一個優(yōu)秀的backboneJS教程呀非,所有教程都一下子提供了太多信息坚俗。以下是我教授它的方法:
第一步:學習模型。僅為一個數(shù)據(jù)庫數(shù)據(jù)庫條目創(chuàng)建一個模型岸裙。學會如何去修改和保存猖败。
第二步:學習視圖。為你已經(jīng)在做的模型創(chuàng)建一個視圖降允。添加事件接聽程式辙浑,體會視圖如何能夠隱蔽地與模型連接,以及這一切組裝為一體是如此地合適拟糕。
第三步:集合的意義現(xiàn)在就明確了判呕。 你不可能手動打印輸出每一個模型,尤其是當你不知道模型具體數(shù)量的時候送滞。
我們沒有學過常規(guī)課程侠草,到現(xiàn)在為止,我也不認為這有什么要緊犁嗅。
第35-40天:Android
假如你現(xiàn)在還沒怎么注意边涕,我們已經(jīng)在短時間內(nèi)涵蓋了大量的材料了。偉大的程序員適應變化褂微,因此我們最后一個計劃就是學習Android系統(tǒng)功蜓。在編程中你不能忽視移動設備,這塊實在是太重要了宠蚂。我教她們Android編程式撼,這不是特別難,Android編程與web編程非常類似求厕。在視圖上你有XML(譯者注:extensive makeup language,用于標記電子文件使其具有結構性的標記語言),同時也有足以和web控制器相媲美的Java代碼著隆。模型-視圖-控制扰楼!通過用Ruby語言和Java語言工作,F(xiàn)ong和Eva開始尋找編程語言之前的共同點美浦,成為了編程語言不可知論者弦赖。對她們來說,編程語言僅僅在語法上有所不同浦辨,但工作起來卻是一個道理(其實不是這樣蹬竖,稍后我會對其進行辨析,厘清混淆)流酬。