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