我是如何學習計算機程式設計的

發表於2011-10-17

我在很小年紀的時候就開始學習程式設計,我學習程式設計的方法是建立大量的不同的網站。下面列出的是我建立的主要的網站,其中最早的一個是我11歲時開發的。我希望讀者能從我這些複述中獲得的資訊是:如果你想學習程式設計,做大量的練習性的專案是非常必要的。

學習一種技術最好的方法就是練習,練習,練習。所有我知道的最優秀的程式設計師都深深的享受程式設計——程式設計是一件讓他們幹起來無由的高興的事情。也因此他們大量的程式設計。經常,那是一種不健康的廢寢忘食。學習如何程式設計——以及如何編程——並不需要你具有超人的能力。你只需要去按照自己的意願動手去做,做出點什麼東西。

做什麼東西並不重要,重要的是你找到東西動手去做。我所認識的那些優秀的程式設計師,他們都有各自不同的最初學習程式設計的動機。有些人學習程式設計是為了開發動畫遊戲。有些人是為了解決他們在使用計算機時遇到的問題,或讓工作更有效率。有些人是為了開發產品來滿足人們的需求。有些人(真正的程式設計師)學習程式設計只是他們為了深入瞭解計算機工作原理的步驟之一 ;他們希望能搞清楚這種機器。有些程式設計師程式設計只是因為他們享受解決難題的挑戰。

讓所有這些“優秀程式設計師”統一起來的唯一因素就是,他們全因為生活中的某些原因而為程式設計著迷,繼而花大量的時間程式設計,做大量的,大量的用於練習的專案

那麼,我就不再羅嗦了,下面就是我如何學習程式設計的故事:

我的第一個網站

在我大概十一二歲的時候,我感到需要給自己做一個網站。我已經記不清為什麼需要一個網站了,只記得那樣就開始做 了。於是我就在網上搜尋關於網頁、Web瀏覽器、HTML如何工作的資訊。很多的資訊我發現都已經過時了,有些明顯是錯誤的或給了錯誤的嚮導(例如為IE 瀏覽器和Netscape瀏覽器分別做網站),但過程是非常的有趣的,我學到了很多新東西。

儘管在網上搜到了很多粗製濫造的的資訊,我還是想辦法做了一個簡單的網站,我叫它“Feross的網站”。開發它,我使用的是微軟的Frontpage,那是一個非常棒的所見即所得的HTML編輯器。我使用很常見的語法,例如粗體,斜體等對網站做修改,在編輯器裡即時檢視這些HTML標記能達到的效果。這是很有效的學習方式。

下面是我的第一個網站的截圖。這個網站已經不存在了。

你從上面的圖片上看不出來,這個網站上的每個元素都在動,閃爍的動畫,還能出聲。我在網站的每個頁面上都放置了不同的MIDI格式的歌曲。而且都是自動播放,你沒有辦法讓它們停下來,除非把電腦消音。哈,這就是當年流行的網站設計風格。 :0:

等再長了幾年歲數後,我們重新設計這個網站,讓它變的漂亮些。我使用了在網上發現的一些免費的網站模板,用微軟的畫圖工具修改了一些圖片。

儘管我大量的依賴於模板,但這不失為一個學習HTML和Web瀏覽器的好方法。“Feross的網站”除了用來收集我小時候的一些視訊外沒有其它用處,所以不久後我就對它失去了興趣。

我的第一個真正的

當我9年級(14歲)時,我和我的朋友都非常著迷與觀看像NewgroundseBaumsWorld這 樣的網站上的flash視訊和動畫(這是2005年之前,還沒有YouTube)。我在這種網站上花了大量的時間,所以我知道所有最好的視訊和遊戲。我 想,如果做一個網站來收集這些在網上發現的我喜歡的flash動畫、視訊、遊戲,會是一件很酷的事情。這就是我做出FreeTheFlash網站的初衷。 它是這個樣子的:

我從開發“Feross的網站”的過程中學到了很多HTML知識,這次我使用了Macromedia 公司(現在的Adobe公司)的Dreamweaver編輯器,這個東西能讓我在網站裡重複的頁面使用同一個模板。

一段時間後,我意識到,我應該讓網站動起來,聽說是應該使用一種叫做PHP的程式語言來做網站,而不是隻使用靜態的HTML。於 是,我買了花了20美元從Amazon買了一本書,叫做《PHP and MySQL for Dynamic Websites》,使用PHP和MySQL對網站進行了重新設計。我還給它進行了新的美化:

在高中時期我對這個FreeTheFlash 網站的開發持續了2年。它對於我的第一次嘗試做一個“真正”的網站來說是相當成功的——在2006年,它獲得了60萬人/次訪問,頁面瀏覽量達3百萬。 FreeTheFlash 讓我知道了做出一個產品、讓它傑出、看大量的人使用它,是一件多麼自豪的事情。它讓我想做出更大的網站。

我的第二個網站

在中學,我在上計算機課程時做了大量的筆記。於是,在11年級時,我覺得應該把這些筆記放到網上,讓那些不喜歡看課本的學生使用。我做了一個網站, 叫做StudyNotes,使用的是PHP和一個叫做Joomla的內容管理系統。我也嘗試過使用Drupal,但發現它太複雜了。

同年,我為我的學校Key俱樂部分部做了一個網站,如今也不用了。

這段時間,我花了大量的時間泡在WebmasterWorld裡,這是一個論壇,主要關於網站站長和SEO專家推測Google演算法,討論AdSense技巧,除錯網站問題等。

大量的學習和閱讀

等我進入了史丹佛大學後,我學習了大量的計算機課程,諸如CS106XCS107,我還超前學習了部分 CS106 課程。

所有的課餘時間我幾乎都在閱讀關於設計、程式設計、瀏覽器和JavaScript等方面的資料。一般每天4-5個小時。

如果你要問我都讀什麼?亂七八糟的。但大部分都是我敬仰的設計師和程式設計師寫的部落格。你可以從這篇部落格的右側看到我列出的部分部落格連結。

關鍵一擊

之後,在2010年夏天,當我在Facebook實習時,因為跟一個朋友打賭,我開發了YouTube Instant,它是一個用來實時搜尋YouTube視訊的網站。這個網站在建成之後的10天裡獲得了1百萬使用者的訪問量,YouTube的CEO甚至給我發訊息說提供一個職位給我,你可以從這裡看到這些媒體的躁動。

我知道YouTube Instant的成功歸功於當前的好時機和一點幸運。我想,我們很多人不知道自己能做出什麼。

繼續前行

我注意到很多人使用YouTube Instant來聽音樂視訊,這讓我想到了另外一種使用YouTube API的好方法。於是,我的朋友Jake Becker 和我在2011年的頭3個月裡開發了Instant.fm,它能讓你輕鬆的向朋友分享音樂播放列表。通過這個專案我們都學到了很多新的東西。

在這個專案中我掌握的技術:

以及其它一些我們學會使用的東西:

動手去做!

我把從11歲就開始做的東西都不厭其煩的曝出來,目的就是要說,如果你想學習程式設計,你需要動手去做東西!現在就去。不要找任何藉口。

做東西是最好的學習方法。

從頭到尾讀一遍程式語言書籍是一件很無聊的事,讀到一半你就讀不下去了。但,如果你想做一個專案,你在做的過程中會知道你該學習哪些知識,這是認識和掌握知識更有效的途徑。

計算機課程

大學裡的計算機課程是學習程式設計的另外一種十分有效的方法。大多數好的計算機課程都十分強調學習電腦科學領域裡的重要概念和正規化,而不是教你某個特定的語言。這能讓那些從來沒有接受過正規教育的人在自學時開闊眼界。

記得在史丹佛大學上第一堂計算機課程時(那是教授C++的課程),我在想“怎麼可能變數前不帶$符號呢?”當時我只使用過PHP! :0: 我用了好長一段時間才改掉在變數前加$符號的習慣!

在軟體公司工作

另外一個提高程式設計水平的方法就是到軟體公司實習,比如Facebook或Quora,最近的兩個夏天我就是在這些公司裡度過的。你會從那些優秀的人那裡學會如何更好的程式設計,如何閱讀和理解他人的程式碼,如何在大專案中進行團隊合作。

還是那句話——比什麼方法都管用——學習程式設計最好的方法就是做專案練習。我是不是重複這句話無數次了? :0:

如何學會程式設計:

  • 做練習性專案。
  • 看程式設計書籍。
  • 做專案練習。
  • 上計算機課程。
  • 做練習性專案。
  • 讀程式設計類部落格。
  • 做專案練習。

這就是我能給出的最好的建議。

祝程式設計愉快!

相關文章