读评《web全栈工程师的自我修养》

这本书年初的时候在班车上面翻了一遍。刚开始的时候对其中很多观点不以为然,认为太浅。不过后来再翻一次的时候,不少东西还是很有启发意义,因此加以推介,涉及到作者观点、大纲,有兴趣的同学可以自行阅读,加以判断。非常适合对全栈感兴趣,但对某一细分技术还不甚了解的同学。

什么是全栈工程师

现在,技术其实变得越来越简单。云服务就在提供水和电。
所以你需要充分的去了解PAAS服务的平台,amazon的服务,github的服务,让技术不再成为门槛,让事情聚焦在提供专业的价值上面。这也就是世界级的IT支持了,你再也不用担心“只差一个程序员”了。

LAMP的技术栈
MEAN的技术栈

作者提出全栈工程师或者说工程师的前景:

  • 一专多长
  • 解决问题而不是醉心技术

其实全栈工程师,跟我在taobao十年里面看到的工程师可能是不相符合的。很多淘宝的大型系统,需要非常专业的工程师进行很多的优化才可以实现。

如何成为全栈工程师

我们都是普通人,“一万小时定律”是绕不过去的。所以要成为有竞争力的专业人员,必须要投入大量的时间。

对于招聘来说,要的不仅仅是满足要求,很多时候非常希望候选人能够超出预期。你必须要有一些额外的亮点,也就是竞争力才行。

对于成为全栈工程师这件事情,作者提供了一些建议:

  • 围绕商业目标:转型是每时每刻都存在的,每个人,不仅仅是公司,都应该围绕商业目标。商业目标是稳定的,比技术更为稳定。
    • 对于直接制作产品,给用户使用的团队,就需要对外关注如何提高产品质量、降低产品成本;对内应该关注如何优化流程、减少错误率、如果团队输出的结果是公司内其他部门需要的原材料,就要关注下游的需求,研究如何更好地输出结果,如何在流程上使得输出产品的过程更加顺畅。
    • 关注用户体验
      • 不爽的地方不要习惯,而是要去改变。
        • 专注目标,以目标的维度去思考,不要让别人费事的去猜。
        • 做自己会用的产品

从学生到工程师

本章主要论述了从学生进行校园招聘到入职实习后作者的一些感悟,对于未毕业的学生还是可以一看的。已经工作的同学,就略过吧~~

野生程序员的故事

这一章是这本书争议比较大的地方,甚至在csdn上面也引起了广泛的讨论。主要的争议点在于作者的“野生程序员”观点,引起了小公司技术者的反弹。

除了对野生程序员的讨论,本章中另一有益的讨论是针对大公司和创业公司。
大公司可以给你的:

  • 较小的风险
  • 技术最佳实践
  • 垂直专精的技能
  • 服务海量用户的经验
  • 软技能
  • 人脉
  • 心态

由此而见,作者本人是比较喜欢大公司的。不过根据《黑客与画家》中的观点,大公司会让你的公司没有可放大性与可衡量性。究竟如何选择,就是仁者见仁,智者见智了。

工程师事业指南

对技术人员而言,职业生涯的发展非常重要。《您就是极客》中提出了对软件工程师而言最重要的三点:技术、成长和声望。

为啥架构师那么火?就是因为他看起来对所有的问题都知道答案。如果你是团队中这样的角色,那么可以说你非常重要。所以首先对你来说就是成为那个什么都懂得家伙。

其次对你来说重要的是积累你的作品集。作品集其实是想别人(老板、潜在老板、志同道合者)的展示窗口。github显然是程序员最重要的作品集之一。而对于高逼格的设计师来说,dribble则是更好的选择。同时github提供的静态页面托管服务对于不想费力租赁机器搭建网站的人来说,也是一个很好的选择。

全栈工程师眼中的HTTP

http协议是web开发绕不开的关键点,但是前后台对其理解都有不同。
Http版本,现存最多的还是http1.1,而大部分的浏览器和服务器server都已经支持http/2了。
从前端的角度来看,有很多http的优化方式:

  • 减少请求
  • 合并同域请求
  • 减少同域内请求以规避达到同域并发上线
  • 传输内容缩减
  • 雪碧图
  • 代码、html gzip压缩
  • 静态资源单独部署
  • 各类缓存(cdn、浏览器缓存)

而从后台来看则是另外的一种场景:

  • 关注服务器最大连接数
  • 关注服务器网络模型
  • 必须防范DDos攻击

BigPipe:提供针对一次http请求,服务器返回多次的结果,从而规避过多的建立连接过程。事实上大数据时候,http server本来就会分块传输。

高性能网站的关键:缓存

本章主要是从基本概念的维度介绍了一下缓存,从服务器缓存到浏览器缓存两大门类。
服务器缓存则分为:

  • 数据库缓存(读多写少的场景)
  • memcache:闻名的web缓存,支持分布式,但不支持无痛扩展。
  • 文件缓存
  • 静态化:叫缓存可能不准确了,更多是加速。

浏览器缓存:

  • expires:设置过期时间,无须交互
  • last-modified:需要和服务器简单交互一次,304
  • cache-control:新的倒计时式的缓存

作者推荐的浏览器缓存最佳实践:

  • 对于动态生成的HTML页面使用Https头:Cache-control:no-cache
  • 对于静态HTML页面使用HTTPS头:Last-modified
  • 其他文件类型设置Expires头,并在文件内容修改时,更改Query String(现在的前端构建都是通过修改文件名的方式了。)。

大前端

作者在本章提出了大前端的概念,这也是最近在前端业界被提的比较多的一点。
比较有参考价值的是作者提出的前端知识体系:
初级工程师:

  • 对浏览器兼容性的了解
  • 对HTML/CSS/JavaScript语法和原理的理解
  • 对编辑器和插件的熟悉程度
  • 对调试工具的了解程度
  • 对版本管理软件的熟悉和应用经验
  • 对前端库/框架的使用
  • 标准/规范

中级工程师:

  • 对代码质量、代码规范的理解
  • 对Javascript单元测试的熟悉
  • 对性能优化的应用和理解
  • 对SEO的应用和理解
  • 代码部署
  • 移动web

高级工程师:

  • 代码架构
  • 安全
  • 对自动化测试的理解

一家之言,不过大家需要的可以自行对照参考。

向移动端转型

移动端转型是大势所趋,因为大家在手机上花费的浏览时间越来越长了。
移动端可以参与的主要有:

  • IOS原生App
  • Android原生App
  • Windows Phone原生App
  • Web App
  • 混合模式App(最近热的发烫的reactor)

本章在讨论移动端的同时也强调了一个观点:

让市场认可你的能力,而不是让老板认可,因为老板会变,老板的标准不一致,而市场是一致的。

持续集成

对于服务端和前端开发而言,由于没有客户端和移动app端的集成开发环境,比较难打通包括版本控制、包管理、依赖关系、持续集成在内的流程。

版本控制软件中,SVN与GIT难解难分。本质上是集中管理åŒ分布式代码管理之争。这里不展开,但是提供一些版本控制的最佳实践:

  • 鼓励频繁的提交
  • 确定分支流程:feature分支和bug修复分支是必须的
  • 定义主干原则:主干必须可以随时上线
  • 不要把逻辑修改和代码格式化混在一起
  • 不想干的代码分开提交
  • 保持工作代码库干净:适当的ignore

包管理中,node的npm做的非常出色。经历过java的maven那一套的都能理解npm做的有多好,多简单。同时作者还推介了bower作为新的包管理工具,这适用于有很多前端版本js库的情况。

最后本章讨论了构建工具:

  • 首先必须有良好架构
  • 具备合适的分离粒度,区分全局、局部组件
  • 最小知识原则:组件和对象不应暴露细节
  • DRY:特殊功能不应存在多个副本
  • 最小化预先设计:选择器这类组件,必须留下自定义空间,不限死排列
  • 一致且可执行的命名规则
  • 完成了良好架构,接下来就是grunt、gulp等javascript构建工具的登场

理解编程语言

本章更多是以一种白话的方式老生常谈了程序界经常讨论的问题:是语言重要还是对算法和系统的理解更重要。
当然最终作者没有也无法给出答案,这个只能读者自己来思考了。

全栈游乐场

全栈工程师的游乐场是VPS,随着阿里云、腾讯云、AWS的大力推广,现在获取VPS的成本也越来越低了。
获取自己的VPS并搭建自己网站最大的好处就在于它可以给你一览网站的全貌,而不再是局限在自己的技术栈中。
作者在本章也给出了使用VPS的一般入门,有兴趣的同学可以关注下。

软件设计方法

本章作者主要介绍了常见的设计模式,比较有料的是介绍了Web开发中的MVC这种架构模式。同时也列举了一些不同语言中常见的MVC框架:

  • Javascript mvc framework:AngularJS、backbone.js
  • Php:CakePHP、Yii、Codeigniter
  • Objective-C: Cocoa
  • Ruby mvc framework:Ruby on Rails
  • Nodejs:Sail.js Total.js Express

高效工程师

效率在现在快节奏的职场中越来越重要。对于工程师来说,必须做到:

  • 不断学习
  • 阅读英文资料
  • 加入技术社区
  • 善用搜索引擎
  • 时间管理
  • 时间管理四象限:要忙,但是不要瞎忙
  • 消除重复的工作:善用脚本,善用工具
  • 给自己留出专注的时间
  • 番茄工作法
  • 跨界思考
  • 智商头脑风暴

学习设计

对工程师来说,了解设计,对设计有感觉非常的重要。
作者这里推荐了一本《写给大家看的设计书》,着重强调了设计的四大基本理论:

  • 亲密性
  • 对齐
  • 重复
  • 对比

对这些理论的理解能够让我们在coding的同时,也能停下来看看自己的产品究竟做的如何。

全栈思维

一个人的价值,体现在他能够承担的责任。

市场越成熟,这句话应该就越对。
同时作者强调了沟通能力在全栈能力中的重要作用:

  • 针对目标听众
  • 诉诸对方的利益
  • 找到方法
  • 金字塔原则:任何事情都可以归纳出一个中心论点。
  • 向上表达自己的想法:
  • 立场足够简单,围绕这一立场沟通

书单汇总

《专业主义》
《重来》
《精益创业》
《写给大家看的设计书》
《打造facebook》
《您就是极客》
《代码整洁之道》
《精益创业》
《黑客与画家》
《卓有成效的管理者》
《编程的本质》
《图解HTTP》
《高性能网站建设进阶指南》
《从0到1:开启商业与未来的秘密》
《代码的未来》
《禅与摩托车维修艺术》
《只是为了好玩:Linux之父林纳斯自传》
《卓有成效的程序员》
《软件随想录》
《金字塔原理》
《卓有成效的管理者》
《安静:内向性格的竞争力》

热评文章