|
英文原文:How my sister n my girlfriend learned to code
就像我在上一篇博文中提到的,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,同時也有足以和 Web 控制器相媲美的 Java 代碼。模型-視圖-控制器!通過用 Ruby 語言和 Java 語言工作,Fong 和 Eva 開始尋找編程語言之前的共同點,成為了編程語言不可知論者。對她們來說,編程語言僅僅在語法上有所不同,但工作起來卻是一個道理(其實不是這樣,稍后我會對其進行辨析,厘清混淆)。
結論:
1)女孩們在編程上天賦異稟。
2)沒有獲得計算機科學的學位不是個不學編程的借口。
3)在快樂中編程,人人都能學。
繼續探索,然后征服編程吧!
it知識庫:看我姐和我妹子如何學編程,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。