search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

我姐和我女友是如何學編程的

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

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

1)交流溝通

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

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

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

2)完成

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

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

3) 思考

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

分享之前我還是要推薦下我自己的前端學習群:180-442-230,不管你是小白還是大牛,小編我都挺歡迎,不定期分享乾貨,包括我自己整理的一份2017最新的前端資料和零基礎入門教程,送給大家,歡迎初學和進階中的小夥伴

有一種說法:當你被卡住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)在快樂中編程,人人都能學。

繼續探索,然後征服編程吧!



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦