2017 全棧開發人員修煉指南

發表於2017-09-25

Stack Overflow 2016 Developer Survey 調研,全棧網路開發是目前最受歡迎的開發職業。難怪現在有幾十個線上的或者個人版程式來幫助人們成長為全棧開發員,甚至可以協助新加入的開發人員找到更高薪的程式設計工作。
本篇文章中,我不會談論哪種網站或者程式設計訓練營有最好的網路開發程式。而是給從未學習過程式設計的你,提供一個明確的指引,包括如何成為全棧網路開發人員最必不可少的技能以及如何找到工作。我將從以下三點講起:

  1. 2017年被大量用來教學給學生的程式
  2. 來自過去幾年我在公司中面試的開發職位以及面試潛在的全棧網路開發職位的候選人員所積累下來的經驗。
  3. 來自 Coderbyte  中已經開始接受程式設計訓練和之後得到程式設計工作的人的故事和反饋。

終極指南

全棧 Web 開發人員是能夠工作在應用程式的前端和後端的開發人員。前端通常是指應用程式中使用者將看到或互動的部分,後端是應用程式中處理邏輯、資料庫互動、使用者認證、伺服器配置的部分。全棧開發並不意味著你已經掌握了前端和後端工作所需的一切,而是意味著你可以在雙端工作並理解構建應用程式時發生的情況。

如果你想在 2017 年成為一個全棧 Web 開發人員,並找到你的第一份工作,下面是一個參考指南,列出了你需要學習的東西。

1. HTML/CSS

2017 全棧開發人員修煉指南

幾乎所有程式,無論是線上的還是離線的,都在說明要成為 Web 開發者需要從 HTML 和 CSS 開始,因為它們是 Web 的基石。簡單地說,HTML 讓你給網站新增內容,而 CSS 則為這些內容新增樣式。下面的主題都是關於 HTML/CSS 的,在面試和工作中都經常遇到:

  • 語義化的 HTML
  • 解釋 CSS 盒模型
  • CSS 前處理器的優點(你不需要深入理解,但應該知道這是什麼以及它們對開發起到的輔助作用)。
  • 使用 CSS 媒體查詢針對不同的裝置編寫響應式的 CSS。
  • Bootstrap (一個輔助頁面設計和佈局的框架,大量線上程式或學校都關注 Bootstrap 教學。實際上,深入理解基本的 CSS 比理解特定的 Bootstrap 特性和方法更為重要)。

2. JavaScript

2017 全棧開發人員修煉指南

JavaScript 語言一年比一年流行,新的庫、框架和工具層出不窮。Stack Overflow 2016 年的開發者調查指出,JavaScript 在全棧、前端和後端開發中都是最流行的語言。它是瀏覽器唯一支援的原生語言,同時也能作為伺服器端語言(下面會看到 Node.js)。下面是一些作為全棧開發者所需要了解的主題:

  • 理解如何使用 DOM。瞭解 JSON 並知道如何操作它。
  • 重要的語言特性,比如函式式成分、原型繼承、閉包、事件委託、作用域、高階函式等。
  • 非同步控制流Promise 和 回撥
  • 瞭解如何正確地通過模組化組織你的程式碼,像 webpackbrowserify 或者 gulp 這樣的構建工具對此大有裨益。
  • 至少會使用一個流行框架(很多程式將重要放在教你使用像 React 和 AngularJS 這樣的庫或框架,但實際上更重要的事情是深入理解 JavaScript 語言而不是特定的框架特性。只要你精通 JavaScript,選用一個框架將不費吹灰之力)。
  • 雖然有些人可能認為你應該減少使用 jQuery,因為它正趨於死亡。但 jQuery 程式碼仍然存在於大量應用中,徹底理解它會對你很有幫助。
  • 瞭解一些關於測試框架的知識,以及明白它們的重要性(有人甚至會認為這個話題可有可無)。
  • 學習重要的 ES6 新特性(可選)。

3. 後端語言

一旦你認為已掌握好 HTML/CSS 和 JavaScript 技能,你會向一門後端程式語言進軍,以便處理類似資料庫操作、使用者認證以及應用邏輯的任務。所有線上練習平臺和程式碼訓練營通常集中於一門特定的後端語言,而實際上你選擇哪一門也並不重要,只要你理解你正在做的事情並學到了你所選語言的本質。如果你問學哪一門後端語言最好,你會得到各種各樣的無數的回覆,所以下圖我給大家列出了一些受歡迎的組合。

一個重要的提示:不管你決定學習哪一門,請堅持下去,並儘可能深入學習-所有下圖列出的語言都有相應的工作機會。

2017 全棧開發人員修煉指南

  • Node.js:這是一個很好的選擇,因為 Node.js 本身就是 JavaScript 環境,這意味著你不需要學習新的語言。這也是很多線上平臺和訓練營為什麼選擇教學 Node.js 的原因。這裡你最有可能學習的也是最受歡迎的能幫助你開發網路應用的框架就是 Express 。
  • Ruby:用 Ruby 開發比較受歡迎的開發框架有 Rails 和 Sinatra 。很多教學平臺把 Ruby 作為首選後端語言。
  • Python:Python 受歡迎的開發框架有 Django 和 Flask 。
  • Java:現在 Java 語言很少被選中作為全棧網路開發的教學語言,但是一些公司現在還是使用 Java 作為後端語言,所以現在也還是一門有相當需求量的語言(見上圖)。
  • PHP:PHP 現在也很少被這些平臺教學選中,但就像 Java 一樣,它也還是有一定的需求量,而且也是當今網路發展的基石

4. 資料庫 & Web 儲存

2017 全棧開發人員修煉指南

編寫 Web 應用的過程中,有時候需要儲存資料,以便稍後再進行訪問。那麼最好掌握下面這些有關資料庫和儲存的主題。

5. HTTP & REST

2017 全棧開發人員修煉指南

HTTP 是應用於網際網路的一項無狀態應用協議 —— 它規範了客戶端連線到伺服器的行為(比如 JavaScript 程式碼通過 AJAX 請求後端伺服器中執行的程式碼就是採用的 HTTP)。下面列出了你應該瞭解的重要主題:

6. Web 應用架構

2017 全棧開發人員修煉指南

當你認為已經掌握了 HTML/CSS、JavaScript、後端程式設計、資料庫 和 HTTP/REST ,你就到了難對付的部分了。這時,如果你想建立一個稍微複雜的 web 應用,你需要了解如何組織程式碼,如何分割檔案,往哪裡儲存大量媒體檔案,如何結構化資料庫裡的資料,何處執行特定的計算任務(客戶端還是伺服器端),以及更多其他問題。

網上你可以讀到一些最佳範例,但是最好的學習應用架構的方法是自己實踐一個包含多個分散部件的大型應用 —— 甚至更好的方法是:和團隊合作開發一個相對大型/複雜的應用。

這也是為什麼,比如有個七年以上工作經驗的人,也許他未必比工作兩年的另一個人更懂 CSS 或 JavaScript ,但或許是多年各種不同應用和網站的工作經驗,使他學習到如何最有效的架構和設計應用(包括學習其他重要事項),並且在開發過程中能看清“全域性”。以下書籍或文章可以幫助你學習如何有效架構你得網路應用:

  • 學習通用的平臺即服務,比如 Heroku 和 AWS 。Heroku 允許你做很少的配置或伺服器維護,即可輕鬆上傳程式碼,並執行應用。AWS 提供許多產品和服務幫助解決儲存、視訊處理、負載均衡以及其他更多其他的問題。
  • 應用和流行瀏覽器的效能優化
  • 關於網路應用架構應該考慮哪些要素的一些觀點
  • 微軟文件:設計網路應用
  • 模型-檢視-控制器程式設計模式(MVC)。
  • 當然,最重要的還是應該嘗試與別人合作專案,閱讀 Github 上受歡迎的程式碼,以及儘可能向資深開發員學習

7. Git

2017 全棧開發人員修煉指南

Git是一套版本控制系統,它允許開發團隊的開發人員跟蹤程式碼庫的所有更改。瞭解與 Git 相關的一些事項非常重要,它能讓你瞭解如何正確獲取錯過的最新程式碼,更新部分程式碼,修復並修改其他人的程式碼,而不會發生任何意外。 你一定要學習 Git 背後的概念,並多做嘗試。

  • 這裡是一個參考列表,它列出了你將會使用到的 git 命令。
  • 這裡是一本手冊 對 Git 和 GitHub 的初學者很有用。

8. 基本演算法和資料結構

2017 全棧開發人員修煉指南

這個話題在開發世界中有點兩極分化,因為有些開發人員認為在 Web 開發中不應該如此重視電腦科學的主題諸如樹的遍歷、排序、演算法分析、矩陣操縱等。然而,像谷歌這樣的公司在面試中這些型別的問題是出了名的。 有人說谷歌的前端工程師面試:

也就是說,正如 Ryan McGrath 所提到的,我們的前端(FE)工程師要有一個堅實的電腦科學(CS)背景,就像我們所有的工程師一樣。

雖然有些公司確實要求申請人擁有電腦科學學位或同等學歷,也有很多公司願意僱傭沒有這個技術資格的人,如果他們能夠證明他們懂得如何開發應用程式和展示出對整個域的理解。但是,作為一個合格的開發人員,而不是編寫低效的程式碼或使用錯誤的工具,部分要求是理解一些基本演算法和資料結構,能夠分析權衡。所以你一定要學會一些東西:

  • 研究雜湊表並試著在更的層次上理解它們。這個資料結構構成了 JavaScript 中的物件(Python 中的字典,Ruby 中的雜湊)的基礎。
  • 理解樹和圖作為資料結構有何益處
  • 理解演算法複雜度分析的基礎知識,所以你不會做事,像建立實際上沒必要建立的3層巢狀的迴圈!
  • 懂得何時使用物件或是陣列,並懂得取捨。
  • 瞭解為何在處理大量資料時快取是如此重要。也要了解記憶體儲存和磁碟儲存各自的利與弊 。
  • 瞭解佇列和棧的區別 。

學習所有這些是會很辛苦,但最終還是值得的,並且全棧開發充滿樂趣!請在下面留下你的意見,並且訪問Coderbyte進行演算法練習。

相關文章