所謂全棧 - 《Web全棧工程師的自我修養》讀書筆記

jopen 9年前發布 | 36K 次閱讀 全棧

簡介

為什么我會選擇讀這本書?兩個原因,一是本身對于全棧的技術很感興趣。倒并不是認為全棧工 程師懂的東西多就牛逼哄哄,而是在當前這種前后端分離的大勢之下,前后端開發人員都越來越聚焦于自己的領域,而缺乏對整站或者整個系統的了解,以全棧的視 野更容易了解技術的全貌。二是因為書評分還不錯,作者是騰訊社交用戶體驗設計部高級UI工程師余果。

這本書是由作者從連載專欄中整理出來的。按照作者的定義是“輕松的技術雜文集”。讀完兩遍之后的整體感覺是:提升視野,拓展思維。

什么是全棧工程師

一專多長。工程師首先有一個精專的方向,在這個方向上足夠精通之后(高級工程師級別),以此為突破點去學習更多的知識,增加自己的長處。

在技術上,我一直提倡的是十字型的成長方式,即從水平和垂直兩個方向提升自己的能力。比如我擅長的是javascript,我會去學習 jquery、angular等這些有用的js庫,這屬于垂直方向。同時我繼續對node.js、mongodb這類后端技術進行學習,這屬于水平方向。
雖然我覺得這是一個好的學習方法,但是并不能作為衡量一個全棧工程師的標準。全棧工程師應該是在前后端都有一定專業知識,能獨立開發的程序員,有沒有專精的方向并不重要。即使像下面的被稱作“野生程序員”的開發者,能力模型每項都得60分就應該算合格。

對于那些達不到一專多長,雖然知識面比較廣,但是各方面都一知半解的開發者,作者給了一個特殊的稱號:野生程序員。

 所謂全棧 - 《Web全棧工程師的自我修養》讀書筆記

這個能力模型竟然把JQuery單獨列出來了,AngularJS、Zepto.js、Vue.js…都表示很失望~

老板雇傭一個員工,不是因為他能寫程序,而是因為他能幫助自己賺錢。賺錢的方法有兩種:減少成本,或者增加收入。程序員如果能加快內部系統的運行效率,讓產品制作流程更加順暢,就是減少成本。如果能讓用戶更容易一地購買產品,或者提高服務質量吸引更多用戶,就能增加收入。

嗯,這一點我覺得很重要,使用技術知其然還要知其所以然~
為什么要用JQuery?它的選擇器很強大,操作dom方便。
為什么要用Angular?它的雙向數據綁定不再需要選擇器,對于CRUD操作很有優勢。
為什么要用Vue.js?它實現雙向數據綁定的同時又是一個輕量級的框架。
技術只是手段,最合適的技術即是最好的技術。不迷信于某個技術,本末倒置,而是為了解決某類問題而去選擇最低成本的技術,這才是一個成熟的開發者應有的思維。

全棧工程師涉及的一些重要技術

HTTP

前端需要關注

  • 發出的請求列表
  • 每個請求的開始時間
  • 每個請求從剛開始到結束花費的時間
  • 每個請求的類型
  • 每個請求的狀態嗎
  • 每個請求產生的流量消耗
  • 每個請求gzip壓縮前的體積,以及在本地gzip解壓后的體積

這里推薦一本書《圖解HTTP》,通俗易懂。

優化策略

  • 盡量減少同一域下的HTTP請求數。域名散列等
  • 盡量減少每一個資源的體積。壓縮合并等

HTTP2.0下這種優化就變得沒意義了,不過預估HTTP1.1還將用10年。

后端需要關注

  • 提高服務器的請求處理能力。利用nginx等服務器做負載均衡等
  • 預防DDoS攻擊。生成靜態頁,利用cdn等

BigPipe是非死book公司科學家Changhao Jiang發明的一種非阻塞式模型,這種模型能解決兩個問題:

  • HTTP3次握手消耗的時間
  • 現有阻塞模型中,服務器計算生成頁面需要時間,等服務器完全生成好整個頁面,才開始網絡傳輸,網絡傳輸也需要時間。

緩存

服務器緩存

  • 使用數據庫緩存和緩存工具,如memcached,注意提高緩存的命中率。
  • 再加一層文件緩存。作為內存緩存的補充,查找優先級:內存緩存 ——> 文件緩存 ——> 數據庫
  • 頁面靜態化

瀏覽器緩存

  • Expires
  • Last-Modified
  • Cache-Control

持續集成

版本控制

  • SVN。適合企業內部使用
  • Git。多用于開源軟件

最佳實踐

  • 鼓勵頻繁的提交
  • 確定分支流程
  • 定義主干原則,并且堅守它
  • 不要把邏輯的修改和代碼格式化操作混在一起
  • 不相干的代碼分開提交
  • 保持工作代碼庫的“干凈”

根據Semver的規范,版本號用小數點分割為三個數字。比如v3.2.1中3是主要版本號,2是次要版本號,1是補丁。

  • 主要版本號:有API變更導致不兼容舊版本的時候使用
  • 次要版本號:新增功能,但是向前兼容的情況下使用
  • 補丁:修復向前兼容的bug時使用

全棧工程師的成長途徑

作品集的積累。程序員和設計師的作品集往往是自己的在線個人網站。對于程序員來說,成本最低的一種作品展示方式就是把自己的代碼發布到GitHub上。

初級前端知識體系

  • 對瀏覽器兼容性的了解
  • 對HTML/CSS/Javascript語法和原理的理解
  • 對編輯器和插件的熟悉程度
  • 對調試工具的了解程度
  • 對版本管理軟件的熟悉和應用經驗
  • 對前端庫/框架的使用
  • 標準/規范
    中級前端知識體系
  • 對代碼質量、代碼規范的理解
  • 對Javascript單元測試的熟悉
  • 對性能優化的應用和理解
  • 對SEO的應用和理解
  • 代碼部署
  • 移動Web
    高級前端知識體系
  • 代碼架構
  • 安全
  • 對自動化測試的理解

雖然VPS對于個人開發者來說比較昂貴,但我還是推薦全棧工程師買一臺VPS,自己玩一玩。理由如下:

  • 對于網站的全貌有所了解
  • 服務器穩定
  • 可以部署自己的環境
  • 可以學習Linux
  • 幫助理解HTTP

VPS選擇

  • 內存一般是主要瓶頸,建議選擇最少512MB
  • CPU是相對沒那么重要的性能指標
  • 硬盤的大小和讀寫速度是關鍵
  • 服務商的客戶服務

自己搭建網站是個很費時費力的事,途中會碰到很多問題,確實可以學到很多東西,適合有精力有興趣的同學。

全棧工程師擴展技能

設計模式

  • 創建型模式。用來創建對象的模式,它對實例化的過程進行了抽象。如單例模式
  • 結構型模式。主要解決類、對象、模塊之間的耦合關系。如適配器模式
  • 行為型模式。用來識別對象之間的常用腳力模式并加以實現。如觀察者模式

設計原則

  • Don’t Repeat Yourself
  • 慣例優于設置。開發人員僅需規定應用中不符約定的部分。
  • Keep it simple,stupid
  • 最少知道原則。減少耦合。

推薦一本書《大話設計模式》

提高工作效率方式

  • 閱讀英文資料。英文的技術資料更多。Google的搜索能力非常強。英語世界的語言風格比較嚴謹
  • 時間管理四象限。如果您平時沒有做重要的事情,就會發現自己常常在做緊急的事情。
  • 消除重復工作。使用工具來無縫銜接已有流程
  • 給自己留出不被打擾的時間
  • 番茄工作法
  • 跨界思考
  • 紙上頭腦風暴
  • 使用版本控制工具和構建系統

拿工作時長來拼,這還是體力勞動時代打工者的心態在作祟。

架構模式

  • MVC模式(Model-View-Controller)是最有名的一種架構模式。

前端有一種MVVM的模式,熟悉Angular的人都知道~

學習設計

設計的四大基本理論:

  • 親密。關系親密的元素要放在一起,關系疏遠的元素則要分開。位置的親密性直接表現出意義的相關性。
  • 對其。
  • 重復。視覺上使用重復的圖形和元素、線條、顏色等。
  • 對比。如果兩個元素不一樣,就讓它完全不一樣,產生視覺沖擊力。

設計工具

  • Axure
  • Sketch
  • Quartz Composer

學習管理

  • 在項目最開始做出合理的時間評估
  • 根據人員的強項來安排任務
  • 喚起團隊對項目成功的渴望
  • 保障溝通。理想溝通頻率每周至少兩次。

閱后即焚的彩蛋

最后感謝原書作者余果。為了感謝各位讀者,由我手批版(我做了點筆記的二手書)的《Web全棧工程師的自我修養》將轉贈給想看此書的讀者。領取方式可參看我的新浪微博:
http://dwz.cn/2l3rYK

如果覺得閱讀這篇文章有收獲,不妨點個贊吧^_^


博客:http://yalishizhude.github.io
作者:亞里士朱德

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!