初次听到全栈工程师这个称谓的时候,我就被这个「霸气」的名字所吸引,全栈在我心里一直是技术厉害的大触的专属标签。虽然经常听到这个词,但是对这个词本身的理解却不甚清晰,甚至一度把全栈工程师简单地以为是全“端”工程师,以为同时会前端和后端就是全栈了,后来才知道,这种认识是多么粗浅。
无意间看到了《Web全栈工程师的自我修养》这本书,简单看了看目录就决定要买下来了,怀着对全栈的向往,我还是十分期待看这本书的。
全书小述
首先贴出全书的脉络图,我根据书本身的章节分成了16部分,尽可能概括地展现书中对我印象较为深刻的内容,并讲一些我觉得比较重要的地方详细地描述,而一些枝节便删了去。

感觉起来这本书更像是作者的随笔集,内容广而不深,读起来也就比较轻松。整本书的内容通俗易懂,其中还专门设置了一章“从学生到工程师”,可以看出全书更多的还是面向在校生和初学者。
正如书名上所用的词“自我修养”,这本书详细地描述了作为Web全栈工程师所应具备的“修养”,不仅仅包括编码上的能力,也包括了职场处事,思维方式,和生活方式上的“修养”,对拓展视野和思维方式有所裨益。
知识小记
看完全书,我感觉内容多而杂,好在内容平易近人,还是有不少有所收获的点,这里对一些点做下总结。
何为全栈
「全栈」表示未完成一个项目,所需要的一系列技术的集合
「全栈工程师」是一专多长,能够熟练运用多种技术栈独立完成一个产品的人。而那些拥有众多技术栈,而每种技术栈只是浅尝辄止,略知一二的人则被作者称为「野生程序员」
如何成为全栈工程师
先精后广,一专多长
学习全栈技能的时候应当在特定的方向上有比较深入的钻研,然后再将学习目标逐渐推广开来。
围绕商业目标
老板雇佣一个程序员,不是因为他能写程序,而是因为他能帮助自己赚钱。应该解决问题,而不是醉心技术,如果痴迷于技术本身,反而看不到问题的所在。
关注用户体验
每一个糟糕的体验背后都蕴含着商机,应当从用户体验的角度考虑问题,要做自己会用的产品
Web全栈工程师所应具备的技术
HTTP
前端视角
目的:让网站又好又快地展现在用户的面前
关注点:
- 尽量减少同一域下的HTTP请求数
- 尽量减少每一个资源的体积
后端视角
目的:让服务器尽快响应请求以及减少请求对服务器的开销
关注点:
- 提高服务器的请求处理能力
- 预防DDoS攻击
前后端交集——BigPipe
缓存
- 服务器缓存
- 基本的数据库查询缓存
- 扩展数据库缓存:memcached
- 文件缓存
- 静态化
- 浏览器缓存
- Expires
- Last-Modified
- Cache-Control
- 服务器缓存
持续集成
版本控制
方式有Git和SVN
最佳实践:
- 鼓励频繁地提交
- 确定分支流程
- 定义于主干原则并坚守它
- 不要把逻辑的修改和代码格式化放在一起
- 不相干的代码分开提交
- 保持工作代码库的“干净”
包管理
工具有npm,bower,Composer,gem,CocoaPods等
构建工具
在良好架构基础上使用构建工具来整合代码
工具有Make,Grunt和Gulp等
良好的架构:
- 有合适的分离粒度
- 最小知识原则
- DRY
- 最小化预先设计
- 通过良好的分级,让文件易于找到
- 有一致且可执行的命名规则
软件设计方法
设计模式
关注点:
- 高效编写代码
- 高可复用性
- 抽象带来的可读性
分类:
- 创建型模式
- 结构型模式
- 行为型模式
架构模式
MVC模式
设计原则
- DRY
- 惯例优于设置
- KISS原则
- 最少知道原则
大前端知识体系
初级:
- 了解浏览器兼容性
- 理解HTML/CSS/JavaScript语法和原理
- 熟悉编辑器和插件
- 了解调试工具
- 熟悉版本管理软件
- 熟练使用前端库/框架
- 了解相关标准和规范
中级:
- 对代码质量,代码规范有了解
- 熟悉JavaScript单元测试
- 应用和理解性能优化
- 应用和理解SEO
- 代码部署能力
- 移动Web相关知识
高级:
- 代码架构
- 安全
- 对自动化测试的理解
全栈工程师生活方式和思维方式
积累作品集
用处:向其他人展现自己的能力
方式:Github和静态页面
高效
阅读英文资料
时间管理四象限

消除重复工作
给自己留出不被打扰的时间
番茄工作法
跨界思考
纸上头脑风暴
使用版本控制工具盒构建系统
全栈思维
- 想着把自己的产品和自己的名字联系起来
- 学一点管理
- 好的管理者能让平凡的员工做不平凡的事
- 根据员工特质来授权
- 培养沟通能力