做一枚全棧工程師
本文轉載自眾誠翻譯
譯/弈晨鏈接:做一枚全棧工程師 - 眾成翻譯
1 寫在前面
如果一個全棧工程師能夠根據原型實現一個完整的MVP(minimum viable product,至少可行的產品),我們通常會認為他十八般武藝樣樣精通,而且有足夠的理由來證明這一點。為了給全棧工程師一個最新鮮的定義,我們首先來關注一下全棧工程師以前是搞什麼的。
2 以前的全棧工程師
很久以前,大約在 2000 年(在互聯網的次元里,17年可以說是一個非常長的時間了),一個全棧工程師必須掌握下面的本領:
- 用 Adobe 公司的 Photoshop 或者 Fireworks 工具設計出一個網頁;
- 將設計稿變成 HTML, CSS 還有熱點圖(額,還記得那些嗎?);
- 寫一些基本的 PHP 4.0 腳本(非面向對象的 PHP 即將成為歷史)來處理服務端邏輯;
- 保存所有的動態數據到 MySQL 中,也可能會做一些小優化;
- 用 FTP 上傳所有代碼、資料庫什麼的到一台伺服器,然後就可以領取報酬啦。
注意我們在這裡只討論 PHP —— 一個全棧 Flash 或者 Coldfusion (一種 Web 伺服器) 開發者可能有不同的工作方式(但是也僅僅是細微的差別)。
在那個單純的時代,生活是如此的美好。個人開發者一抓一大把,而且程序猿工作完還有大把的時間陪伴自己的家人。
那現在呢?
3 現在的全棧工程師呢
現在的全棧工程師需要自帶什麼技能呢?
最近,我們也會產生這些恐慌——為什麼工程師的生活會變成這樣?
為了在這個牛逼的市場里獲得成功,我們這些開發者——通常都是完美主義者——應經常把「如果你想做正確的事」當做自己的座右銘,並經常質問自己。
這會強迫我們自己集中精力在一處,而且必須學習所有東西,所以做一個全棧工程師往往要學會以下技能:
3.1 服務管理/運維
一個開發者必須了解基礎的伺服器管理知識。包括當不限於以下知識:
- 通過終端或其他沒有用戶界面的環境來遠程連接伺服器
- 會寫基本的 shell 腳本
- 伺服器上的用戶和群組管理
- 管理像 Apache 和 Nginx 這樣的伺服器程序來提供應用
- 防火牆管理和許可權管理
- 安裝和更新軟體
除了這些基礎技能,開發者必須懂得怎樣去創建一個好的、健康的、分離的開發環境,在Docker 或者像 Vagrant 這樣的虛擬機環境中。 如果上面所有的技術你都不熟悉,那我必須給你推薦一本超棒的書,點這裡購買。
開發者必須對版本控制系統非常熟練,為了讓開發有靠譜的生產備份和可分享、可協同的代碼庫,這些代碼庫能夠根據時間來跟蹤代碼變化。
3.2 雲
和實際管理或者虛擬伺服器不同,一個開發者也許要知道雲主機平台,比如Heroku, Google Cloud, Azure, AWS等等。
有一點必須說明的是,平台和工具更多的是為了炒作而不是其實用性。儘管有很多平台和工具的實用性並不如宣傳的那麼好,但是了解這些大家都在談論的服務,從長遠來看會很有用——客戶可能會隨時要求更換服務提供商。幸運的是,我們擁有這些雲主機部署權威指南。
3.3 後端
在後端,除了要懂選擇什麼語言以外,比如 PHP 和眾多的框架和 CMSes,一個全棧開發者必須熟悉:
- Web 伺服器,比如 Nginx 和 Apache ,和運維緊密相關
- 不幸的是,NodeJS 已經可以將 JS、CSS 和其他資源文件編譯成靜態可以方便緩存的文件了。幸運的是,也有辦法避免學習 NodeJS,用PHP也是可以的
- 像Composer這樣的 PHP 包管理工具在現代化的開發環境中已經離不開了
- 好的API 設計,自從大部分新型網頁都基於 API 而且僅僅為前端服務(下面會詳細描述)
- ElasticSearch (introduction here) 這樣的搜索引擎對於網站性能的提高是非常重要的
- cronjobs 和後端的工作,使用Gearman 或者 Crunz 這類的庫
- 了解緩存, Varnish, Redis 等牛B的工具可以分片存儲數據,這樣可以將一個項目部署的多個主機上。
3.4 資料庫
資料庫是一個單獨的部分,因為除了很好地掌握我們基本上不會有結構變化的關係資料庫(MySQL 或者 PostgreSQL)的數據模式之外,一個全棧工程師應該對非關係型資料庫有所了解,如MongoDB, Redis, 或 Cassandra ,更不用說像 Neo4j 這樣的圖形資料庫了。
不幸的是,這些都是伺服器上的東西,都在全棧工程師的控制下。也有幾個類似 Mongo 的遠程解決方案,像RestDB或者 Google-owned Firebase 等。
3.5 前端
說到前端,真的很蛋疼。
想知道一個正常的前端知識圖譜是怎麼樣的,可以在JavaScript 版塊看 這篇絕世好文 。但是作為一個全棧工程師,你需要了解:
- NodeJS 和 NPM
- Yarn
- 預處理器和編譯器(如Babel),用來編譯 Typescript, ES6, LESS, SCSS, SaSS
- 構建工具,如 Grunt 和 Gulp
- 框架,如 VueJS、React、Angular
- 模塊打包工具,如 Webpack、Browserify、Rollup
3.6 設計
在設計方面,全棧開發者需要了解怎樣在一個產品變成真正可用的 HTML 、CSS 代碼之前,畫一個原型圖 。然後就可以去用 JS 寫交互、後端也可以用假數據來模擬生產環境。只有這個關鍵的原型圖完成,用戶體驗設計和介面設計就緒,真正的開發才能開始。這本身就是一項艱巨的任務,需要一套特殊的工具:
- Photoshop 和 Illustrator 或者一些開源的工具比如 Gimp / Inkscape。訪問 Design channel 來了解更多這樣的工具;
- 一個牛B的、快速的編輯器,比如 Atom 或 Sublime Text (這兒有十種好用的 sublime插件);
- 像 Subtlepatterns 的背景選擇器和顏色選擇器能夠搭配一些顏色;
- CSS 的柵格系統;
- 上面所說的前端所需要了解的所有知識和 JS 數據模擬;
- 將原型圖發表到網上供大家瀏覽並給於反饋,Ngrok 就非常好用。
3.7 日誌系統
為了高效監控應用的健康度,全棧開發者必須能夠追蹤錯誤,找到錯誤日誌然後從中提取出有用的信息。全棧開發者也需要從日誌中預測一些趨勢,比如 CPU 或者 I/O 佔用率的上漲,以防應用不知道什麼時候就掛了。這部分和運維也有一些關係,但是需要一些特別的技能:
推薦一篇非常棒的 ELK stack 的文章,這會幫助你了解做日誌系統所需要的知識。裡面包括了查找日誌的 ElasticSearch ,收集日誌的 Logstash,把日誌用非常棒的圖表展現出來的的 Kibana,甚至還有提供解決方案的 http://Logz.io。
3.8 移動端
最後,我們該說說移動端了。隨著 iOS 和安卓上的的 webview 變得越來越高效,還有 PWA(漸進式web應用) 的到來,native 應用正在變得黯淡,因為他們開發起來實在是太複雜了。
所以一個全棧工程師必須了解 PWA 或者 React Native,或者像NativeScript, Tabris, Cordova, Phonegap或者其他 webview 來讓客戶端應用調用 API 跑起來(如上一章最後說的那樣)。
4 做一個全棧工程師值得嗎?
所以最後只有一個問題,值不值?
首先,應該注意到很少的全棧工程師稱得上真正的全棧,大部分全棧工程師關注了上面技術的某些方面,而不是所有的,僅僅因為不可能有那麼多精力放在上面所有方面。
其次,對所有方面都了解一點也許不會讓你在具體方面成為大師,但是說實在的,這會讓你在更好地理解項目的流程,和項目確實都需要用到的技術。當作為乙方、開一個外包公司或者給一個迷茫的團隊指一條明路方面是無價的技術。
我可能不是一個「JavaScript 巨星」,「Elasticsearch 忍者」,「MySQL 大師」,「運維狂人」,或者「移動端老司機」,我不想被奉承。
但是我覺得,做一個全棧工程師讓我張開了翅膀,測試不同的技術,作為自由職業者給我的客戶提供與眾不同的解決方案。
我可以有各種各樣的賺錢方式,也能拿到從服務端工作到 WordPress 插件開發等不同的訂單,因為我對所有的這些都有很多了解(遲早的事)。
對於我來說,做一個全棧工程師是非常值得的,對比我以前只做 Flash 的日子,我現在更喜歡我的工作,當時工作多而且工資低(沒有 JavaScript)。
你呢,你是全棧還是也精於專呢?不管你是不是全棧,你覺得做的事情值嗎?
2017IMWebConf早年票優惠結束還有2天啦!
點擊這裡程序猿浪漫起來更扎心更有機會獲得免費票哦!
推薦閱讀:
※前端每周清單第2期:Vue 2.2發布,React在GitHub突破6萬star
※Less的安裝,編譯以及高亮
※前端開發中,多個項目使用的公共組件如何存放?
※Airbnb CSS / Sass 指南
※名人堂 | W3CPlus中國創始人大漠:前端路上的旅行