|
英文原文:How I Learned to Program Computers
作者:Feross Aboukhadijeh(花了3個(gè)小時(shí)開發(fā)出實(shí)時(shí)搜索 YouTube 視頻的網(wǎng)站,在建成之后的10天里獲得了1百萬用戶的訪問量,詳見報(bào)道硅谷新生代,編碼成癮不懼失敗)
我在很小年紀(jì)的時(shí)候就開始學(xué)習(xí)編程,我學(xué)習(xí)編程的方法是創(chuàng)建大量的不同的網(wǎng)站。下面列出的是我創(chuàng)建的主要的網(wǎng)站,其中最早的一個(gè)是我11歲時(shí)開發(fā)的。我希望讀者能從我這些復(fù)述中獲得的信息是:如果你想學(xué)習(xí)編程,做大量的練習(xí)性的項(xiàng)目是非常必要的。
學(xué)習(xí)一種技術(shù)最好的方法就是練習(xí),練習(xí),練習(xí)。所有我知道的最優(yōu)秀的程序員都深深的享受編程 —— 編程是一件讓他們無比快樂的事情,也因此他們大量的編程。經(jīng)常,那是一種不健康的廢寢忘食。學(xué)習(xí)如何編程 —— 以及如何編好程 —— 并不需要你具有超人的能力。你只需要去按照自己的意愿動手去做,做出點(diǎn)什么東西。
做什么東西并不重要,重要的是你找到東西動手去做。我所認(rèn)識的那些優(yōu)秀的程序員,他們都有各自不同的最初學(xué)習(xí)編程的動機(jī)。有些人學(xué)習(xí)編程是為了開發(fā)動畫游戲。有些人是為了解決他們在使用計(jì)算機(jī)時(shí)遇到的問題,或讓工作更有效率。有些人是為了開發(fā)產(chǎn)品來滿足人們的需求。有些人(真正的程序員)學(xué)習(xí)編程只是他們?yōu)榱松钊肓私庥?jì)算機(jī)工作原理的步驟之一,他們希望能搞清楚這種機(jī)器。有些程序員編程只是因?yàn)樗麄兿硎?strong>解決難題的挑戰(zhàn)。
讓所有這些“優(yōu)秀程序員”統(tǒng)一起來的唯一因素就是,他們?nèi)驗(yàn)樯钪械哪承┰蚨鵀榫幊?strong>著迷,繼而花大量的時(shí)間編程,做大量的、大量的用于練習(xí)的項(xiàng)目。
那么,我就不再羅嗦了,下面就是我如何學(xué)習(xí)編程的故事:
我的第一個(gè)網(wǎng)站
在我大概十一二歲的時(shí)候,我感到需要給自己做一個(gè)網(wǎng)站。我已經(jīng)記不清為什么需要一個(gè)網(wǎng)站了,只記得那樣就開始做了。于是我就在網(wǎng)上搜索關(guān)于網(wǎng)頁、Web 瀏覽器、HTML 如何工作的信息。很多的信息我發(fā)現(xiàn)都已經(jīng)過時(shí)了,有些明顯是錯誤的或給了錯誤的向?qū)?例如為 IE 瀏覽器和 NETscape 瀏覽器分別做網(wǎng)站),但過程是非常有趣的,我學(xué)到了很多新東西。
盡管在網(wǎng)上搜到了很多粗制濫造的信息,我還是想辦法做了一個(gè)簡單的網(wǎng)站,我叫它“Feross 的網(wǎng)站”。開發(fā)它,我使用的是微軟的 Frontpage,那是一個(gè)非常棒的所見即所得的 HTML 編輯器。我使用很常見的語法,例如粗體,斜體等對網(wǎng)站做修改,在編輯器里即時(shí)查看這些 HTML 標(biāo)記能達(dá)到的效果。這是很有效的學(xué)習(xí)方式。
下面是我的第一個(gè)網(wǎng)站的截屏。這個(gè)網(wǎng)站已經(jīng)不存在了。
你從上面的圖片上看不出來,這個(gè)網(wǎng)站上的每個(gè)元素都在動,閃爍的動畫,還能出聲。我在網(wǎng)站的每個(gè)頁面上都放置了不同的 MIDI 格式的歌曲。而且都是自動播放,你沒有辦法讓它們停下來,除非把電腦消音。哈,這就是當(dāng)年流行的網(wǎng)站設(shè)計(jì)風(fēng)格。
等再長了幾年歲數(shù)后,我重新設(shè)計(jì)了這個(gè)網(wǎng)站,讓它變的漂亮些。我使用了在網(wǎng)上發(fā)現(xiàn)的一些免費(fèi)的網(wǎng)站模板,用微軟的畫圖工具修改了一些圖片。
盡管我大量的依賴于模板,但這不失為一個(gè)學(xué)習(xí) HTML 和 Web 瀏覽器的好方法。“Feross 的網(wǎng)站”除了用來收集我小時(shí)候的一些視頻外沒有其它用處,所以不久后我就對它失去了興趣。
我的第一個(gè)真正的
當(dāng)我9年級(14歲)時(shí),我和我的朋友都非常著迷于觀看像 Newgrounds 和 eBaumsWorld 這樣的網(wǎng)站上的 flash 視頻和動畫(這是2005年之前,還沒有 YouTube)。我在這種網(wǎng)站上花了大量的時(shí)間,所以我知道所有最好的視頻和游戲。我想,如果做一個(gè)網(wǎng)站來收集這些在網(wǎng)上發(fā)現(xiàn)的我喜歡的 flash 動畫、視頻、游戲,會是一件很酷的事情。這就是我做出 FreeTheFlash 網(wǎng)站的初衷。它是這個(gè)樣子的:
我從開發(fā)“Feross 的網(wǎng)站”的過程中學(xué)到了很多 HTML 知識,這次我使用了 Macromedia 公司(現(xiàn)在的 Adobe 公司)的 Dreamweaver 編輯器,這個(gè)東西能讓我在網(wǎng)站的重復(fù)部分使用同一個(gè)模板。
一段時(shí)間后,我意識到,我應(yīng)該讓網(wǎng)站動起來,聽說是應(yīng)該使用一種叫做 php 的編程語言來做網(wǎng)站,而不是只使用靜態(tài)的 HTML。于是,我花了20美元從 Amazon 買了一本書,叫做《php and MySQL for Dynamic Websites》,使用 php 和 MySQL 對網(wǎng)站進(jìn)行了重新設(shè)計(jì)。我還給它進(jìn)行了新的美化:
在高中時(shí)期我對這個(gè) FreeTheFlash 網(wǎng)站的開發(fā)持續(xù)了2年。它對于我第一次嘗試做一個(gè)“真正”的網(wǎng)站來說是相當(dāng)成功的 —— 在2006年,它獲得了60萬人/次訪問,頁面瀏覽量達(dá)3百萬。FreeTheFlash 讓我知道了做出一個(gè)產(chǎn)品、讓它杰出、看大量的人使用它,是一件多么自豪的事情。它讓我想做出更大的網(wǎng)站。
我的第二個(gè)網(wǎng)站
在中學(xué),我在上計(jì)算機(jī)課程時(shí)做了大量的筆記。于是,在11年級時(shí),我覺得應(yīng)該把這些筆記放到網(wǎng)上,讓那些不喜歡看課本的學(xué)生使用。我做了一個(gè)網(wǎng)站,叫做 StudyNotes,使用的是 php 和一個(gè)叫做 Joomla 的內(nèi)容管理系統(tǒng)。我也嘗試過使用 Drupal,但發(fā)現(xiàn)它太復(fù)雜了。
同年,我為我的學(xué)校 Key 俱樂部分部做了一個(gè)網(wǎng)站,如今也不用了。
這段時(shí)間,我花了大量的時(shí)間泡在 WebmasterWorld 里,這是一個(gè)論壇,主要關(guān)于網(wǎng)站站長和 SEO 專家推測 Google 算法,討論 AdSense 技巧,調(diào)試網(wǎng)站問題等。
大量的學(xué)習(xí)和閱讀
等我進(jìn)入了斯坦福大學(xué)后,我學(xué)習(xí)了大量的計(jì)算機(jī)課程,諸如 CS106X 和 CS107,我還超前學(xué)習(xí)了部分 CS106 課程。
所有的課余時(shí)間我?guī)缀醵荚陂喿x關(guān)于設(shè)計(jì)、編程、瀏覽器和 JavaScript 等方面的資料。一般每天4-5個(gè)小時(shí)。
如果你要問我都讀什么?亂七八糟的。但大部分都是我敬仰的設(shè)計(jì)師和程序員寫的博客。你可以從這篇博客的右側(cè)看到我列出的部分博客鏈接。
關(guān)鍵一擊
之后,在2010年夏天,當(dāng)我在 Facebook 實(shí)習(xí)時(shí),因?yàn)楦粋€(gè)朋友打賭,我開發(fā)了 YouTube Instant,它是一個(gè)用來實(shí)時(shí)搜索 YouTube 視頻的網(wǎng)站。這個(gè)網(wǎng)站在建成之后的10天里獲得了1百萬用戶的訪問量,YouTube 的 CEO 甚至給我發(fā)消息說提供一個(gè)職位給我,你可以從這里看到這些媒體的躁動。
我知道 YouTube Instant 的成功歸功于當(dāng)前的好時(shí)機(jī)和一點(diǎn)幸運(yùn)。我想,我們很多人不知道自己能做出什么。
繼續(xù)前行
我注意到很多人使用 YouTube Instant 來聽音樂視頻,這讓我想到了另外一種使用 YouTube API 的好方法。于是,我的朋友 Jake Becker 和我在2011年的頭3個(gè)月里開發(fā)了 Instant.fm,它能讓你輕松的向朋友分享音樂播放列表。通過這個(gè)項(xiàng)目我們都學(xué)到了很多新的東西。
在這個(gè)工程中我掌握的技術(shù):
- jQuery
- CSS (和 Modernizr 以及 YepNope,用來解決跨瀏覽器問題的)
- Python
- Tornado (web framework/server)
- Git (版本控制) & GitHub
- Last.fm API
- YouTube API
- 團(tuán)隊(duì)合作
以及其它一些我們學(xué)會使用的東西:
- Nginx (web server)
- Supervisor (to daemonize Tornado)
- SQLAlchemy (ORM)
- Apache Ant (to build and deploy the site after a push)
動手去做!
我把從11歲就開始做的東西都不厭其煩的曝出來,目的就是要說,如果你想學(xué)習(xí)編程,你需要動手去做東西!現(xiàn)在就去。不要找任何借口。
做東西是最好的學(xué)習(xí)方法。
從頭到尾讀一遍編程語言書籍是一件很無聊的事,讀到一半你就讀不下去了。但,如果你想做一個(gè)項(xiàng)目,你在做的過程中會知道你該學(xué)習(xí)哪些知識,這是認(rèn)識和掌握知識更有效的途徑。
計(jì)算機(jī)課程
大學(xué)里的計(jì)算機(jī)課程是學(xué)習(xí)編程的另外一種十分有效的方法。大多數(shù)好的計(jì)算機(jī)課程都十分強(qiáng)調(diào)學(xué)習(xí)計(jì)算機(jī)科學(xué)領(lǐng)域里的重要概念和范式,而不是教你某個(gè)特定的語言。這能讓那些從來沒有接受過正規(guī)教育的人在自學(xué)時(shí)開闊眼界。
記得在斯坦福大學(xué)上第一堂計(jì)算機(jī)課程時(shí)(那是教授 C++ 的課程),我在想“怎么可能變量前不帶$符號呢?”當(dāng)時(shí)我只使用過 php! 我用了好長一段時(shí)間才改掉在變量前加$符號的習(xí)慣!
在軟件公司工作
另外一個(gè)提高編程水平的方法就是到軟件公司實(shí)習(xí),比如 Facebook 或 Quora,最近的兩個(gè)夏天我就是在這些公司里度過的。你會從那些優(yōu)秀的人那里學(xué)會如何更好的編程,如何閱讀和理解他人的代碼,如何在大項(xiàng)目中進(jìn)行團(tuán)隊(duì)合作。
還是那句話 —— 比什么方法都管用 —— 學(xué)習(xí)編程最好的方法就是做項(xiàng)目練習(xí)。我是不是重復(fù)這句話無數(shù)次了?
如何學(xué)會編程:
- 做練習(xí)性項(xiàng)目
- 看編程書籍
- 做項(xiàng)目練習(xí)
- 上計(jì)算機(jī)課程
- 做練習(xí)性項(xiàng)目
- 讀編程類博客
- 做項(xiàng)目練習(xí)。
這就是我能給出的最好的建議。
祝編程愉快!
it知識庫:我是如何學(xué)習(xí)計(jì)算機(jī)編程的,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。