1. 程式人生 > >如何成為全棧工程師,這些技能是你必須具備的!

如何成為全棧工程師,這些技能是你必須具備的!

明確的指南

全棧web開發者是能夠同時承擔前端開發和後臺開發工作的人。前端一般是指應用中使用者可見或者是進行互動的部分,後臺是指應用裡處理邏輯,資料庫互動,使用者鑑別,伺服器配置等等。做為一個全棧開發者並不意味著你已經掌握了從事前端開發和後臺開發所需的所有技能,只是表明你能夠在這兩部分工作並且知道開發一個應用該做哪些事。

如果你在2017年成為一個全棧Web開發者並且謀求到你的第一份職業,下面列出的就是你應該學到的參考指南。

1. HTML/CSS

這裡寫圖片描述

  • 語義HTML
  • 能夠解釋CSS盒模型
  • CSS前處理器的用處(你不必明白如何深度使用它,你只需要瞭解它們的用途以及如何幫助開發)
  • 面向不同裝置的CSS媒體查詢以及寫響應CSS
  • Boot 
    trap(是一個框架,用於設計和頁面上內容的佈局,很多線上培訓或者學校把重心放在教授Bootstrap上,實際上深入理解CSS的基礎知識位元定的Bootstrap特徵及方法更重要)

2.JavaScript

這裡寫圖片描述

Stack Overflow 2016 Developer 調查
  • 理解如何使用DOM,瞭解JSON是什麼以及如何使用它。

  • 重要的語言特點,例如功能組成,原型繼承,閉包,事件委託,範圍,高階函式。

  • 非同步控制流,承諾(promises),和回撥。

  • 學習如何正確構造你的程式碼以及將其模組化,可以藉助webpack,browseify,或者類似gulp的構造工具來理解。

  • 知道如何使用至少一種常用框架(很多培訓重點培訓一種庫或者如React或者AngularJS這樣的框架,但是在現實中,深刻理解JavaScript語言更重要,而不必將精力過多的放在特定框架的特點上。一旦你充分熟悉了JavaScript,掌握一種框架也不會有問題。)

  • 儘管有人會說jQuery程式碼用的少而且會逐漸淘汰,但是在大多數應用中仍然在使用它,牢固地掌握它還是有幫助的。

  • 一些測試框架的知識以及為什麼這些知識重要(一些人甚至聲稱這個主題不是必須的)

  • 學習一些重要的新的ES6特點(可選的)

3.後臺語言

一旦你感覺已經掌握了HTML/CSS和JavaScript,你會想繼續學習後臺語言,用於處理資料庫操作,使用者鑑別和應用邏輯。所有的線上培訓和程式碼訓練營通常會專注於某個特定的後臺語言,實際上你學哪一種(後臺語言)並不重要,只要你明白其如何工作並且你瞭解所選擇語言的細小差別。如果你問別人哪一種後臺語言最值得學習,你會收到大量不同的答覆,所以在下面我已列出一些常用的組合。一個重要的提示:無論你準備學哪一種,只需堅持學下去,並且儘可能深入-下列所列的語言都有大量的工作機會。

這裡寫圖片描述
  • Node.js:這是一個很棒的選擇,因為Node.js本身就是JavaScript環境,這意味著你不必學習新的語言。這也是為什麼很多線上或者現場培訓選擇教授Node.js的原因。最流行的也是你最可能學到輔助你進行web開發的框架是Express

  • Ruby:Ruby中的常用框架有Rails 和 Sinatra。許多培訓 
    都是以Ruby作為第一個教學的後臺語言。

  • Python: 在Python中常用的開發框架是 Django 和 Flask。

  • Java: 在全棧式web開發培訓中,以Java為學習內容的並不多,但是一些公司確實是使用Java作為他們的後臺語言,Java依然是非常受歡迎的語言(見上面的圖)

  • PHP:雖然現在很少教授PHP 了,但是正如Javas ,PHP依然很受歡迎,並且PHP是web的基石。

4.資料庫與資料儲存

這裡寫圖片描述

5.HTTP和REST

這裡寫圖片描述

HTTP是一種無狀態的網際網路應用層協議-它允許客戶端與不同的伺服器進行通訊(例如你的JavaScript程式碼能夠通過HTTP協議,向執行在伺服器上的後臺程式碼提交AJAX請求)。

6.Web應用架構

這裡寫圖片描述

當你覺得已經掌握了HTML/CSS,JavaScript後臺開發,資料庫和HTTP/REST,就到了這個稍難的部分。在這裡如果你想建立稍微複雜的web應用,你需要知道如何組織你的程式碼,如何劃分你的檔案,哪裡存放你的大媒體檔案,如何組織資料庫中的資料,哪裡去執行確定的計算任務(客戶端 對 伺服器端),等等。

網上可以找到很多最佳實踐,但是真正學習到應用架構的最好方法是你本人蔘與一個大型應用,這個應用包含多個有效的部分-甚至更好,在一個團隊裡工作並且一起開發過有一定規模和複雜度的應用。 
這就是為什麼有些人有7年多的經驗,對於CSS或者JavaScript的理解還不如那些只有兩年經驗的人,但是,在這些年裡假定他們參與了所有型別不同應用和網站的開發,並且已經學習瞭如何架構和設計讓應用最有效率(還學習了其他重要的事),在開發中也可以看到重點。下面你可以讀到一些內容,有助於你學習如何有效率的架構你的web應用。

  • 學習普通的平臺即服務,如Heroku和 AWS。Heroku能使你輕鬆上傳你的程式碼,以非常少的配置或者伺服器維護就可以讓應用啟動執行,AWS提供大量的產品和服務有助於儲存、視訊處理、負載均衡等等。
  • 為應用和現代瀏覽器進行效能優化。
  • 一些觀點關於一個web應用架構應該包括哪些
  • MVC
  • 最為重要的是,你努力應該與他人在專案中分工協作,多學習GitHub上流行專案的程式碼庫,並且儘可能多向高水平開發者請教。

7.Git

Git是一個版本控制系統,能夠協助開發者團隊合作,跟蹤開發過程中的所有更改,並將這些更改記錄在程式碼庫中。瞭解與Git相關的重點很重要,這樣有助於你如何獲得丟失的最新程式碼,程式碼的更新部分,進行修改,修改別人的程式碼而不會破壞別人的工作。你確實應該學習Git背後的概念並且自己能玩轉它。

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

這裡寫圖片描述

這個主題在開發世界裡有點極端,因為在web開發中,有些開發者認為不應該將注意力放在諸如樹遍歷、排序、演算法分析、矩陣操作等電腦科學主題上。然而,很多如谷歌那樣的公司,喜歡在面試中這些型別的問題。一些人談論的的谷歌前臺工程面試。

也就是說,如Ryan McGrath提到那樣:我們的前端(FE)工程師,應該像我們所有工程師那樣,具有堅實的電腦科學背景。

儘管有一些公司在現實中要求求職者具有電腦科學學位或者同等學力,如果求職者不具備這些技術資格,卻能證明他們知道如何開發應用,並且展示其對於整個領域的理解,仍會大量的公司會僱用他們。但是,成為一個合格開發者的一部分,不寫低效率的程式碼或者不使用錯誤的工具,都是對於基本演算法和資料結構的理解,能夠分析均衡。所以這有一些你應該學習的內容:

  • 學習各種雜湊表並嘗試深層次理解它們。這個資料結構構成JavaScript物件的基礎(在Python中是字典,Ruby中是雜湊數)
  • 理解樹和圖作為資料結構帶來的益處。
  • 理解Big-O分析的基礎,以便於你不會編寫實際上並不需要的三層巢狀迴圈。
  • 知道何時使用物件還是陣列,並且理解均衡。
  • 學習在處理大規模資料快取的重要性。也要學習記憶體資料庫與磁碟儲存的各自優缺點。
  • 學習佇列和堆疊之間的差異。

學習這些所有的內容是項辛苦的工作,但是最終會收穫頗豐並且全棧開發本身也很有趣!請在下面留下你的評論,並且檢出coderbyte,來進行演算法練習。