對於一些沒有編程經驗的人來講,一開始就學習web開發會讓人以爲很是困難。由於你的能力處於初始階段(你根本不知道你缺乏哪方面的知識),因此在你可以創建一個任意複雜的網站以前,你可能會認爲你須要大概幾個月的時間來夯實計算機方面的基礎知識。html
其實並不是如此!web開發和CS是不一樣的,你徹底能夠在沒有太多計算機基礎的狀況下開發學習web開發。我這樣說,徹底是根據我本身的經驗。前端
六個月前,當我開始學習web開發時,我仍是一個法律學校的在讀學生,並且幾乎不懂任何關於編程的東西—僅僅在開始學習的前幾個小時瞭解過一些基本知識。四個月後,我收到了來自Pivotal Labs的offer,接着我離開了法律學校,搬到了舊金山。我很是的幸運地遇到了一位極爲優秀導師(從黑客學校得到的收穫絕對不能忽視),因此我不認爲個人故事很是具備表明性。可是我認爲這很清楚的代表那些沒有計算機背景的人一樣能夠成爲web開發者,並且它所花費的時間可能比你想像的要少。jquery
這篇博文是爲了嘗試幫助那些剛開始學習web開發的人們。這裏展現了一個大概流程,這個路線圖會「告訴你在最初的幾月裏須要作什麼」,它也是我最開始編碼所遵循的路線。git
寫這樣一篇博文的想法已經在我腦海裏有一段時間了,只是我認爲本身知之甚少,因此始終沒有提筆。在寫這篇文章時我仍是以爲本身知道的不限,因此若是你在下面的文章中發現任何錯誤與不正確的地方,請必定幫我指正。程序員
四個部分github
這裏大體列出了長短不一的四個部分知識要點,在你學習的前幾個月裏你須要掌握這些要點。web
1) web框架的基礎知識(如Ruby on Rails),又名「包含網站模塊及它們之間鏈接結構」。shell
2) 前端開發,又名「如何使內容出如今正確的位置上,並且在瀏覽器中表現得好看」。編程
3) 版本控制,又名「如何使用免費易用的軟件,使程序員可以有組織地保存他們的程序版本。這樣他們就不用擔憂修改代碼所帶來的版本混亂,同時也可以很好地與其它程序員協同開發」。後端
4) 部署,又名「如何真正地將你的網站放到互聯網上」。
我把這幾個部分標記爲1到4,但這並不意味着它們之間存在任何特定的順序。你能夠同時學習這些東西。
第一部分:選擇一種web框架,並開始學習它
在這個部分所須要花費的時間很像這種模式,即「選擇一種web框架」=>「大概10分鐘以內」。「學習這種框架」=>「不少不少個(快樂的)小時」。
如今有不少的web框架可供選擇。而我要討論的是Ruby on Rails,它是我所知道的最好的框架,由於處處都有關於它的優秀的資源。
那麼,什麼是web框架?個人理解是這樣的:有框架以前,人們在決定作一個新的網站時,每每每次都須要添加一些相同的東西到新的網站。因爲這些都是一些重複無聊的工做,因此程序員開發出了框架(例如Rails),這些框架可以把不少重複性的工做移到web開發以外。人們喜歡說,Rails表明「約定優於配置」。它的意思是,假如你想按照約定的方式開發,那麼Rails會使web開發變得簡單。
相關的資源:
我刻意只選擇了無數Rails/Ruby資源的一小部分來講,由於可選擇的資源實在太多了。
I、閱讀 Michael Hartl’s精彩且免費的確Rails教程。一個提示:Hartl的教程雖然很是的清晰全面,但你也不可能輕鬆的徹底理解裏面的全部內容。細細地去品味它,一旦你發現一些不能理解的東西時,你必定要弄清楚。若是你發現本身只是盲目地去複製/粘貼它的代碼,只是爲了完成而完成教程,那麼請你停下來。當遇到不懂的知識點時,當即去下面的資源中查找:
● Google。有些人在博客或論壇上寫的內容可能正是你想知道的東西。當你遇到任何問題時首先去查找Google。
● Stack Overflow。在那裏程序員回答問題的速度絕對讓人吃驚(個人問題每每都在一個小時內獲得答案)。
● Railscasts。Ryan Bates擁有超過300與Rails相關的線上直播主題。很是驚人的資源。
● Rails Guides。這些真正的專業指南是由Rails的核心團隊成員所寫。這些裏面的東西須要時間去消化理解(由於裏面的大多數內容都是給有經驗的程序員準備的),可是仍是有一些介紹性的東西能夠拿來學習。
II、在進行I學習的同時,Hartl將告訴你Rails的工做原理。可是若是你不懂Ruby,那麼太多的Rails會讓你以爲像在變魔術。這裏列出了你在學習Ruby時應該用到的一些資源,你應該按照資源列出的順序來學習它們:
● 前往Codecademy學習編程的基本元素(循環,數據結構)。目前Codecademy教程是用Javascript講的,不過不要緊—反正不管如何你也是要學Javascript的,何況如今的重點主要是熟悉編碼的基本要素。(強烈建議:若是你想讓學習更有挑戰,登陸projecteuler.net,而後用本身所學的東西來解決上面的一些問題)。
● 閱讀瀏覽這個優秀的Ruby教程。當你閱讀它時,打開你的終端(如Mac上的iterm),打開irb(the interactive ruby shell),並當即開始實踐你正在學習的語法。(搜索「terminal」和「irb」,若是你壓根不知道它們是什麼。)
● 在作上述工做的同時,下載並閱讀Ruby Koas。它是一系列豐富有趣的練習,這些練習涵蓋了大多數Ruby的基礎知識。
● 最後,閱讀Eloquent Ruby。Eloquent Ruby適合那些對編程已經達到某種程度的人,因此在你讀完Koans和Ruby教程以前不要去讀它。Eloquent Ruby將不只告訴你Ruby的工做原理,還會告訴你應該如何使用Ruby(例如,Ruby程序員決定的方式就是最好的實踐方式)。
第二部分:學習前端的東西
對於「前端」和「後端」不完整/不許確的定義可能會是這樣的:web開發中的「後端」是指你存儲和組織網站數據的地方。例如Yelp這樣的網站要存儲不少東西:它的用戶和用戶的我的資料、大量的餐廳信息、哪一個用戶對一個特別的餐廳作了什麼評價,等等。
Yelp把這些信息存儲在服務器上,這些服務器就是分佈在不一樣地方的大型計算機。當你搜索「Pizza in San Francisco」,你的計算機會發送一個請求到Yelp的服務器,Yelp服務器收到後回發HTML形式的請求信息(Yelp每次都以這種方式來指示服務器的行爲方式)到你的瀏覽器,瀏覽器會被渲染(例如:將HTML分離成文本和圖片,而後讓這些圖片和文本在瀏覽器窗口中以正確的方式顯示出來)。這後面的一部分—有關數據應該如何出如今用戶窗口的指令(而不是什麼數據應該被回送)—就是「前端」。
相關的資源:
● 在w3schools上學習HTML和CSS。編注:謝謝下面的一些評論者指出了w3schools的不足。你們能夠轉到w3Fools獲取一些更好的資源列表。HTML是一種標記語言,用來管理頁面的結構。例如,須要有一個頁頭,後面要跟一個段落。CSS則決定這個頁面顯示出來的樣式。例如,頁頭的字體大小爲18,跟着的段落中文字內容爲藍色。
● 學習Javascript。Javascript決定了頁面上的元素如何表現。例如,頁頭開始時會被隱藏,但當用戶點擊某個按鈕時又會漸漸地顯示在頁面上。這裏有一個很是優秀的Javascript框架稱之爲jQuery,它基本上適合每一個人使用,並且學習起來有趣直觀。這裏有一個小型的教程,你能夠從這裏開始學習:http://docs.jquery.com/Tutorials。
第三部分:學習版本控制(如:Git)
大體地說,版本控制系統使程序員可以在任什麼時候間點及時的保存(正式說法是「commit」)他們的代碼。當一個項目結束時,一個程序員可能已經積累了數百或數千份這樣的代碼備份。
我以前並無意識到版本控制的重要性。當我在寫一篇文章時,我並無把我對文章作的每一次修改保存到Word文檔中。當我寫代碼時,狀況會有所不一樣嗎?
事實證實,答案至少是兩方面的。首先,程序員寫代碼時每每會致使意想不到的問題。當問題發生時,咱們能夠很輕鬆地回滾到上一個正常工做的代碼版本。而後,程序員常常工做於同一個項目中。在這種狀況下,他們須要可以很輕鬆地合併他們的代碼。相似Git這樣的版本控制系統(目前最流行的)能夠很容易地作到以上兩點。
相關的資源:
Hartl會向你介紹Git,但他不會解釋得太多。要了解更多,去這裏:
● Git介紹:由Github的人員創建(這是一個了不得的網站,它讓程序員很容易地共享代碼並協同工做—你應該最早訪問Github去學習)。
● Git進階:感謝評論者Polygonchorus提供的這個網站,看起來真的很棒。
● Git指南:新穎且簡單。在這裏能夠學習基本的命令。
● Git的社區圖書:一個很好的參考資料,你可能不須要從頭至尾的通篇閱讀它。
第四部分:學習如何部署(如Heroku)
當你開發網站時,絕大多數時間你都會在你的開發環境中去驗證檢查—換句話說,就是在你本身的電腦上,而不是在互聯網上。
擁有這樣一個開發環境的理由很簡單:將你的代碼上載到一個遠程服務器須要必定的時間(例如,上載到互聯網中一個實際的服務器上)。因爲你的網站正處於開發階段,你須要不斷地檢查你的網站,而每次當你上載新的代碼時,你都須要20-30秒去等待服務器的響應,而後才能看到新代碼運行的效果,這確實很煩人。
當你以爲準備好了,你能夠很容易地使用Heroku來部署你的代碼(Hartl說明了怎樣去部署)。這裏是在Rails3環境下設置Heroku的相關信息:http://devcenter.heroku.com/articles/rails3。若是你想創建一個自定義的域名,Heroku也提供了一個延伸的教程:http://devcenter.heroku.com/articles/custom-domains。
關於此路線圖的一些重要想法
以上的這個資源足夠你學習幾個月的,但它們不會帶你走得更遠。我只是但願,在學習過那麼多知識以後,你可以從本身創建的項目中學習提升。下面是一些離別的想法:
選擇一個能激發你興趣的想法,並在你以爲準備好以前就付諸於實踐。我甚至建議你在完成Hartl教程以前就開始你本身的項目。工做於本身的項目,是讓你迷上web開發最容易的方法。
我在這裏提到了一些優秀的學習資源,當你要創建一個本身的網站時,這些資源只涵蓋了很小一部分知識。時刻保持查閱未知知識點的習慣,不用擔憂—即便是最好的程序員也須要這樣作。
你會常常地遇到bug和其它一些問題。這可能會讓人沮喪,但你要儘可能保持冷靜,並系統地去思考。記住實踐是解決問題的最佳方法,同時記錄下那些常常出現的bug。當問題出現時,思考問題出現的可能路徑(相似這樣的推理過程:OK,個人用戶沒法正確登陸。這可能由什麼緣由形成?嗯…這多是A、B或C形成的。若是是A,我可能會想到…)。寫出來或者大聲說出來,若是這樣有幫助的話。千萬不要只是坐在那裏,盯着代碼,並但願可以頓悟。
與其它程序員一塊兒工做,並向他們學習。與其餘人一塊兒編碼並討論代碼,我以爲這是最快最有趣的學習方式(我很是推薦結對編程)。固然,你可以作的對本身最好的事情多是去黑客學校。
祝你好運!
—————————————-
有些評論指出,因爲web開發只是編程的一個子集,本文標題用「學習web開發」取代「學習編程」可能更好。他們的觀點很是對,因此我但願本文的標題不會誤導人們認爲web開發就是編程的所有(其實還有不少,不少咱們不懂的東西)。這麼理解吧,web開發仍然是編程的一個子集,因此那些學習web開發的人同時也在學習如何編程。