編譯自:A Guide to Becoming a Full-Stack Developer in 2017
譯者:開源中國 - 邊城, 還是君影文華, 亞林瓜子, 我是菜鳥我驕傲, 無若, rever4433, 君影文華, 圣潔之子
據 Stack Overflow 2016 Developer Survey 調研,全棧網絡開發是目前最受歡迎的開發職業。難怪現在有幾十個在線的或者個人版程序來幫助人們成長為全棧開發員,甚至可以協助新加入的開發人員找到更高薪的編程工作。
一些流行的在線程序可以從這些網站找到: Lynda、Udacity、Coursera、Thinkful、General Assembly, 還有更多可從這里獲取。除這些在線程序以外,另有個人版的代碼訓練基地可以教人們成為網絡開發員所必需的技能。
本篇文章中,我不會談論哪種網站或者編程訓練營有最好的網絡開發程序。而是給從未學習過編程的你,提供一個明確的指引,包括如何成為全棧網絡開發人員最必不可少的技能以及如何找到工作。我將從以下三點講起:
1、2017年被大量用來教學給學生的程序
2、來自過去幾年我在公司中面試的開發職位以及面試潛在的全棧網絡開發職位的候選人員所積累下來的經驗。
3、來自Coderbyte中已經開始接受編程訓練和之后得到編程工作的人的故事和反饋。
終極指南
全棧 Web 開發人員是能夠工作在應用程序的前端和后端的開發人員。前端通常是指應用程序中用戶將看到或交互的部分,后端是應用程序中處理邏輯、數據庫交互、用戶認證、服務器配置的部分。全棧開發并不意味著你已經掌握了前端和后端工作所需的一切,而是意味著你可以在雙端工作并理解構建應用程序時發生的情況。
如果你想在 2017 年成為一個全棧 Web 開發人員,并找到你的第一份工作,下面是一個參考指南,列出了你需要學習的東西。
1. HTML/CSS
幾乎所有程序,無論是在線的還是離線的,都在說明要成為 Web 開發者需要從 HTML 和 CSS 開始,因為它們是 Web 的基石。簡單地說,HTML 讓你給網站添加內容,而 CSS 則為這些內容添加樣式。下面的主題都是關于 HTML/CSS 的,在面試和工作中都經常遇到:
1、語義化的?HTML。
2、解釋CSS 盒模型。
3、CSS 預處理器的優點(你不需要深入理解,但應該知道這是什么以及它們對開發起到的輔助作用)。
4、使用CSS 媒體查詢針對不同的設備編寫響應式的 CSS。
5、Bootstrap(一個輔助頁面設計和布局的框架,大量在線程序或學校都關注 Bootstrap 教學。實際上,深入理解基本的 CSS 比理解特定的 Bootstrap 特性和方法更為重要)。
2. JavaScript
JavaScript 語言一年比一年流行,新的庫、框架和工具層出不窮。Stack Overflow 2016 年的開發者調查指出,JavaScript 在全棧、前端和后端開發中都是最流行的語言。它是瀏覽器唯一支持的原生語言,同時也能作為服務器端語言(下面會看到 Node.js)。下面是一些作為全棧開發者所需要了解的主題:
2、重要的語言特性,比如函數式成分、原型繼承、閉包、事件委托、作用域、高階函數等。
4、了解如何正確地通過模塊化組織你的代碼,像webpack、browserify或者gulp這樣的構建工具對此大有裨益。
5、至少會使用一個流行框架(很多程序將重要放在教你使用像React和AngularJS這樣的庫或框架,但實際上更重要的事情是深入理解 JavaScript 語言而不是特定的框架特性。只要你精通 JavaScript,選用一個框架將不費吹灰之力)。
6、雖然有些人可能認為你應該減少使用jQuery,因為它正趨于死亡。但 jQuery 代碼仍然存在于大量應用中,徹底理解它會對你很有幫助。
7、了解一些關于測試框架的知識,以及明白它們的重要性(有人甚至會認為這個話題可有可無)。
8、學習重要的ES6 新特性(可選)。
3. 后端語言
一旦你認為已掌握好 HTML/CSS 和 JavaScript 技能,你會向一門后端編程語言進軍,以便處理類似數據庫操作、用戶認證以及應用邏輯的任務。所有在線練習平臺和代碼訓練營通常集中于一門特定的后端語言,而實際上你選擇哪一門也并不重要,只要你理解你正在做的事情并學到了你所選語言的本質。如果你問學哪一門后端語言最好,你會得到各種各樣的無數的回復,所以下圖我給大家列出了一些受歡迎的組合。
一個重要的提示:不管你決定學習哪一門,請堅持下去,并盡可能深入學習-所有下圖列出的語言都有相應的工作機會。
1、Node.js:這是一個很好的選擇,因為 Node.js 本身就是 JavaScript 環境,這意味著你不需要學習新的語言。這也是很多在線平臺和訓練營為什么選擇教學 Node.js 的原因。這里你最有可能學習的也是最受歡迎的能幫助你開發網絡應用的框架就是Express。
2、Ruby:用 Ruby 開發比較受歡迎的開發框架有 Rails 和 Sinatra 。很多教學平臺把 Ruby 作為首選后端語言。
3、Python:Python 受歡迎的開發框架有 Django 和 Flask 。
4、Java:現在 Java 語言很少被選中作為全棧網絡開發的教學語言,但是一些公司現在還是使用 Java 作為后端語言,所以現在也還是一門有相當需求量的語言(見上圖)。
5、PHP:PHP 現在也很少被這些平臺教學選中,但就像 Java 一樣,它也還是有一定的需求量,而且也是當今網絡發展的基石。
4. 數據庫 & Web 存儲
編寫 Web 應用的過程中,有時候需要保存數據,以便稍后再進行訪問。那么最好掌握下面這些有關數據庫和存儲的主題。
3、知道在某些情況下,哪一種更合適。
4、知道如何使用你的后端語言連接數據庫(比如 Node.js + MongoDB)。
5、知道像Redis或memcached這類內存數據存儲的優勢。
6、Web 存儲可在瀏覽順中存儲會話、Cookie 以及緩存數據。
5. HTTP & REST
HTTP 是應用于互聯網的一項無狀態應用協議 —— 它規范了客戶端連接到服務器的行為(比如 JavaScript 代碼通過 AJAX 請求后端服務器中運行的代碼就是采用的 HTTP)。下面列出了你應該了解的重要主題:
1、什么是REST以及它為什么對 HTTP 協議和 Web 應用來說很重要。
2、設計RESTful API 的最佳實踐。POST/GET請求。
3、學會使用Chrome DevTools是極其有用的。
4、SSL 證書是什么。
5、HTTP/2 & SPDY(可選)。
6、WebSockets、Web Workers,以及Service Workers(均可選)。
6. Web 應用架構
當你認為已經掌握了 HTML/CSS、JavaScript、后端編程、數據庫 和 HTTP/REST ,你就到了難對付的部分了。這時,如果你想創建一個稍微復雜的 web 應用,你需要了解如何組織代碼,如何分割文件,往哪里保存大量媒體文件,如何結構化數據庫里的數據,何處執行特定的計算任務(客戶端還是服務器端),以及更多其他問題。
網上你可以讀到一些最佳范例,但是最好的學習應用架構的方法是自己實踐一個包含多個分散部件的大型應用 —— 甚至更好的方法是:和團隊合作開發一個相對大型/復雜的應用。
這也是為什么,比如有個七年以上工作經驗的人,也許他未必比工作兩年的另一個人更懂 CSS 或 JavaScript ,但或許是多年各種不同應用和網站的工作經驗,使他學習到如何最有效的架構和設計應用(包括學習其他重要事項),并且在開發過程中能看清“全局”。以下書籍或文章可以幫助你學習如何有效架構你得網絡應用:
1、學習通用的平臺即服務,比如Heroku和AWS。Heroku 允許你做很少的配置或服務器維護,即可輕松上傳代碼,并執行應用。AWS 提供許多產品和服務幫助解決存儲、視頻處理、負載均衡以及其他更多其他的問題。
2、應用和流行瀏覽器的性能優化。
3、關于網絡應用架構應該考慮哪些要素的一些觀點。
4、微軟文檔:設計網絡應用。
5、模型-視圖-控制器編程模式(MVC)。
6、當然,最重要的還是應該嘗試與別人合作項目,閱讀 Github 上受歡迎的代碼,以及盡可能向資深開發員學習。
7. Git
Git是一套版本控制系統,它允許開發團隊的開發人員跟蹤代碼庫的所有更改。了解與 Git 相關的一些事項非常重要,它能讓你了解如何正確獲取錯過的最新代碼,更新部分代碼,修復并修改其他人的代碼,而不會發生任何意外。 你一定要學習 Git 背后的概念,并多做嘗試。
1、這里是一個參考列表,它列出了你將會使用到的 git 命令。
2、這里是一本手冊對 Git 和 GitHub 的初學者很有用。
8. 基本算法和數據結構
這個話題在開發世界中有點兩極分化,因為有些開發人員認為在 Web 開發中不應該如此重視計算機科學的主題諸如樹的遍歷、排序、算法分析、矩陣操縱等。然而,像谷歌這樣的公司在面試中問這些類型的問題是出了名的。有人說谷歌的前端工程師面試:
也就是說,正如Ryan McGrath所提到的,我們的前端(FE)工程師要有一個堅實的計算機科學(CS)背景,就像我們所有的工程師一樣。
雖然有些公司確實要求申請人擁有計算機科學學位或同等學歷,也有很多公司愿意雇傭沒有這個技術資格的人,如果他們能夠證明他們懂得如何開發應用程序和展示出對整個域的理解。但是,作為一個合格的開發人員,而不是編寫低效的代碼或使用錯誤的工具,部分要求是理解一些基本算法和數據結構,能夠分析權衡。所以你一定要學會一些東西:
1、研究哈希表并試著在更深的層次上理解它們。這個數據結構構成了 JavaScript 中的對象(Python 中的字典,Ruby 中的哈希)的基礎。
2、理解樹和圖作為數據結構有何益處。
3、理解算法復雜度分析的基礎知識,所以你不會做傻事,像創建實際上沒必要創建的3層嵌套的循環!
4、懂得何時使用對象或是數組,并懂得取舍。
5、了解為何在處理大量數據時緩存是如此重要。也要了解內存存儲和磁盤存儲各自的利與弊。
6、了解隊列和棧的區別。
學習所有這些是會很辛苦,但最終還是值得的,并且全棧開發充滿樂趣!請在下面留下你的意見,并且訪問Coderbyte進行算法練習。