我姐和我女友是如何學程式設計的

yeeyan發表於2012-09-22

英文原文:How my sister n my girlfriend learned to code,翻譯:Ekaterina@yeeyan

就像我在上一篇博文中提到的,Eva和Fong(譯者注:根據博主的上一篇博文,Eva是博主的姐姐,Fong是博主的女友)來到舊金山跟我學程式設計。在這篇博文中,我將記錄下我教她們的方式,我構建這種學習過程的理由,以及這種學習方式奏效的原因。雖然以時間順序列出她們在這段時間做的或學習的每一件事再容易不過,但是這毫無用處,而且讀者們也會遺漏重點。瞭解學習過程中的細節並且明白它起作用的原因至關重要。所以我會從基本原則開始講。本文較長,請做好準備。

請在程式設計過程中始終牢記這些基本原則。

 

1)交流溝通

在Eva和Fong開始學習之前,我為她們申請了部落格,並請她們記錄下她們的程式設計之旅和學到的東西。萬事開頭難,你可以問問她們。我大概花了一週的時間跟她們嘮叨才讓她們寫了第一篇部落格。但是現在,她們不在部落格上寫點兒自己投入了大量時間的專案就覺得不對勁。

如果你在專案中使用了API(譯者注:Application Programming Interface,應用程式程式設計介面),發推文或者是郵件給這家公司告訴他們你關於他們的API的想法。當你在黑客馬拉松中贏得獎項時,發個不錯的推文@他們表示謝意,或寫篇相關的博文。每寫一篇博文都使它成為一直以來最好的,並懷著它會被放上黑客新聞版首頁的期望將它提交(儘管大部分時候這種期望都不能實現)。

健康交流的最大好處就是,它使你對你的專案負責, 由此也引出我的下個要點。

 

2)完成

Fong和Eva都知道,完成一個專案困難,卻重要。我宣告:除非她們寫了一篇關於手頭專案的博文,在推特上@了API公司,並且將它釋出在黑客新聞網版上,我們是不會開始一個新專案的。儘管她們的第一個專案只是井字棋遊戲,但這是她們做過的最好的井字棋遊戲。從來就沒有人想寫一個蹩腳的專案,所以不管這個專案有多簡單或者不相關,如果你要著手做個專案,那它必須是你能拿到的最好的那個。我已經見過太多開發者為毫無前景的次要專案工作。如果你在學習程式設計,你必須從一開始就認識到要珍惜你的時間和精力,完成你的專案證明它的價值。

完成整個專案的最後20%需要花費全部努力的80%。開發者可以在1、2天之內實現一個專案的概念。而測試每種情況並且解決每一種邊際情況從而成就一個“完美”的產品則需要兩倍的時間。在專案最後的20%花費那80%的精力,將會在許多許多訪問中傳為佳話。

 

3) 思考

如果你卡住了,不要緊盯住你的程式碼。出去散個步,呼吸點新鮮空氣,再考慮一下。你卡住了是因為你的邏輯中有錯誤,而修正它最好的方法就是在腦海中或是在紙上一步一步地徹底想通它。程式設計師靠思考賺錢,問題在你的思考中被解決,程式設計是個蛋疼的工作。偉大的專案經理通常都有廣博的程式設計背景,並且在思考和問題解決方面接受過出色的訓練。

有一種說法:當你被卡住20多分鐘時,並且你仍然茫然無緒,請教別人吧。如果在20分鐘內沒有任何頭緒,那麼在接下來的一個小時,你也不會有任何進展的。相信Eva。她有一天就浪費了5個小時,因為一個愚蠢的錯誤——血的教訓啊。散個步,做個其他事。然後再回到專案上來。能將自己與問題切斷並轉移注意力,是個技術活。

我姐和我女友是如何學程式設計的

(圖文無關,額外配圖 )

 

4)再思考

也許你現在已經明白了,思考,在一個程式設計師的生活中是至關重要的。不要去複製-貼上程式碼,尤其當你在學習如何去程式設計的時候。如果你想學習怎麼程式設計,複製,貼上——“看,有用誒!”不會使你有任何成就。相反,無論何時你看到程式碼,你必須在企圖去試執行它之前想清楚它在幹什麼。當你能輕易看懂別人的程式碼了,將其簡化到你剛好需要的程度,然後寫出來。如果從一開始就定期這麼做,你會在幾個月內成長為一個非凡的開發者。

 

5)谷歌

學會獨立解決問題。除非至少被卡住20分鐘,不要問程式設計問題。程式設計師們必須是獨立的。他們是偉大的思想者和偉大的交流者。為了成為他們中的一員,你必須邏輯地思考,想出問題出現的原因。許多年輕開發者面對的問題是,寫出他們真正需要的程式碼對他們來說很困難。我們中的許多人也是這樣,明知道問題是什麼,但就是不知道要去找什麼去解決它。這是個你必須從一開始就培養的技能,它漂亮地聯絡了第一點,“成為一個交流者”(譯者注:疑為博主手誤,communication 應為communicator)。

 

現在,有了這五點牢記於心,以下是Eva和Fong學到的東西,以時間順序排列。

第1-3天:通過Ruby語言學習程式設計基礎

我選擇Ruby語言,因為它用來上手是最的。在Ruby語言中,有很少語法限制(space鍵與tab鍵,型別宣告,等等),所以Eva和Fong能夠關注程式設計的思考過程而不是解決語法問題。她們學習了if型語句、迴圈體、資料結構,解決了一些程式設計題目,比如說FizzBuzz(程式設計初級問題,即滿足a條件時輸出Fizz,滿足b條件時輸出Buzz,同時滿足a、b條件時輸出FizzBuzz),替換字串中的字元,轉換一個陣列,找出最大值。關於類別和物件的學習也是重要的。

*注*我沒有教她們特定的ruby語法,而是讓她們對引數都使用括號,並且以返回空結束每個函式。 這樣的話,她們下次學一種新的語言時就能更快上手。

第4天:HTML

HTML或CSS嚴格上來說不能算是程式語言,所以沒必要在這裡花上太多時間。Eva和Fong在HTML上花了一天時間,編了幾個標籤玩兒,快速完成了表單、資訊頁等內容。這樣,對CSS的興奮感就建立起來了。在這裡重點要學的是區分塊HTML與內聯HTML、標識與分類。

第5天:CSS

在擺弄過HTML後,“如何在那裡表達這個,怎樣使這個醜陋的HTML頁面看起來更漂亮”的問題浮出了水面。CSS就是那個完美的答案。花上一天的時間盡情設計網頁(所有HTML頁面都已經在前一天建好)。這一塊的重點是,相對/絕對/固定定位,HTML浮動元素,以及如何用絕對、固定定位來控制正常的浮動。

第6-7天:通過jQuery來學習javascript

jQuery需要花點時間來適應,而且因為涉及到程式設計,學習jQuery框架需要佔用點時間。她們花了幾天時間將HTML頁面做成互動式頁面。

第8-15天:第一個專案- 井字棋

這時,Eva和Fong已經瞭解了HTML/CSS/Javascript,但不是特別習慣。這正是讓她們開始第一個專案(井字棋)的絕佳時機。雖然她們花了兩天的時間來完成這個專案,又用了幾天時間來對其進行潤色修飾。專案的最後20%要花費精力的80%是個金科玉律。作為一個初學者,學著去完成你的專案是很重要的。

第16-20天:Sinatra框架

在那個看起來永遠都不能結束的井字棋專案之後,Fong和Eva迫不及待地想學點新東西。學點服務終端程式碼對她們已經在做的事來說是個激動人心的全新體驗。我選擇Sinatra,是因為它是我使用過最整潔、最簡單的網路框架,而且這種簡潔性讓解釋網路的工作原理變成小菜一碟。

第20-22天:Photoshop

Photoshop對非凡的設計非常重要。對那些從沒用過它的人來說,它有點兒嚇人(至少對我來說是這樣),但是用Photoshop做出來的網站比典型的bootstrap(譯者注:由Twitter推出的一款開源前端框架)站點要高階一個檔次。而你真正要知道的只是混合、協調功能就夠了。任何一個相當成功的開發者都會需要Photoshop,所以學會它並且在你所有的專案中使用它非常重要。

第20-27天:專案2-Dragpic(譯者注:通過拖動圖片實現從網頁上方便地儲存圖片的軟體)

專案2涉及到Javascript的大量使用。這個專案涉及到使用ajax(譯者注:一種用於建立更好更快以及互動性更強的 Web 應用程式的技術)的需要,facebook的API,以及cookies。這是個將所有網路程式設計基礎聯絡起來的絕佳專案。這個專案所需要的技術範圍比第一個要更廣,我覺得這也向更多更復雜的專案邁進了一步。在這段時間裡,她們憑藉GIT(譯者注:分散式檔案管理工具)通力合作。這可是一個開源專案啊!

第28-30天:RSpec

這時,Fong和Eva已經能相當自如地構造網路應用了。也正是這時,她們意識到,程式碼是多麼地脆弱,一個細微的改動,就能導致滿盤皆輸。現在,測試驅動開發就顯得有重要意義。我們花了幾天時間重溫了rspec,Eva和Fong則寫出測試案例作為每天早晨的程式設計練習。我之前提過她們每天早晨都要解決一個技術問題嗎?從第28天開始,她們就必須為這些技術問題寫出rspec,在她們開始程式設計之前也不例外。

第30-35天:BackboneJS(譯者注:一個開發網路應用的框架,提供了強大的對模型、檢視和互動的抽象)

通過負責一個設計技術範圍廣泛的專案(比如Dragpic),你能學到很多,遇到很多你希望能有更優解的問題。只有這樣,你才能這正意識到那些幫助你的框架的價值。我還沒有找到任何一個優秀的backboneJS教程,所有教程都一下子提供了太多資訊。以下是我教授它的方法:

第一步:學習模型。僅為一個資料庫資料庫條目建立一個模型。學會如何去修改和儲存。

第二步:學習檢視。為你已經在做的模型建立一個檢視。新增事件接聽程式,體會檢視如何能夠隱蔽地與模型連線,以及這一切組裝為一體是如此地合適。

第三步:集合的意義現在就明確了。 你不可能手動列印輸出每一個模型,尤其是當你不知道模型具體數量的時候。

我們沒有學過常規課程,到現在為止,我也不認為這有什麼要緊。

第35-40天:Android

假如你現在還沒怎麼注意,我們已經在短時間內涵蓋了大量的材料了。偉大的程式設計師適應變化,因此我們最後一個計劃就是學習Android系統。在程式設計中你不能忽視移動裝置,這塊實在是太重要了。我教她們Android程式設計,這不是特別難,Android程式設計與web程式設計非常類似。在檢視上你有XML(譯者注:extensive makeup language,用於標記電子檔案使其具有結構性的標記語言),同時也有足以和web控制器相媲美的Java程式碼。模型-檢視-控制!通過用Ruby語言和Java語言工作,Fong和Eva開始尋找程式語言之前的共同點,成為了程式語言不可知論者。對她們來說,程式語言僅僅在語法上有所不同,但工作起來卻是一個道理(其實不是這樣,稍後我會對其進行辨析,釐清混淆)。

 

結論:

1)女孩們在程式設計上天賦異稟。

2)沒有獲得電腦科學的學位不是個不學程式設計的藉口。

3)在快樂中程式設計,人人都能學。

繼續探索,然後征服程式設計吧!

 

感謝閱讀,

 

欲知更多有關她們倆的資訊,可 follow @fongchinxx@eeevahhh

 

相關文章