《Web 全栈工程师的自我修养》读书笔记

Web 全栈工程师的自我修养

什么是全栈工程师

关于全栈工程师的定义,Quora 上得票最高的回答是:

全栈工程师是指,一个能处理数据库、服务器、系统工程和客户端的所有工作的工程师。根据项目的不同,客户需要的可能是移动栈、Web 栈、或者原生应用程序栈。

流水线开发流程“各司其职”的弊端

  • 工程师职责不清导致效率低下
  • 工程师缺乏主人感导致产品质量差
  • 工程师缺乏全局的视野影响个人成长
  • 更多角色导致项目效率低下

全栈工程师首先要“一专多长”。一专多长的意思是,工程师首先有一个专精的方向,在这个方向上足够精通后(高级工程师级别),以此为突破点去学习更多的知识,增加自己的长处。如果还没有获得某个方向上足够深入的理解,就不要囫囵吞枣地去学习其他领域的知识。

勿在浮沙筑高台,“全栈”是一个长期积累的过程,是专精型工程师 在不断解决问题的过程中积累知识和经验所形成的能力,而不是一蹴而就的过程。

解决问题,而不是醉心技术。如果新计划不是你擅长的,怎么办?您应该马上开始学习新的技术,这就是我说的关注问题,而不是醉心技术。

延伸阅读

  • 《黑客与画家》
  • 《专业主义》

如何成为全栈工程师

“先精后广,一专多长”

建议初学者学习全栈技能的时候,先在一个特定的方向上有比较深入的钻研,然后再将学习目标逐渐推广开来。

作为一个求职者,无论是毕业生还是社会招聘,仅仅满足招聘要求是不够的。您需要在招聘要求的方向上 200% 的能力来得到这个职位。

围绕商业目标

老板雇用一个员工,不是因为他能写程序,而是因为他能帮助自己赚钱。 一切都要围绕商业目标来进行,包括您做的项目、您的汇报方式,以及您在学习新技能时进行的取舍。

记住,当您只有一把锤子,您看什么都是钉子。 而如果您痴迷于工具,反而看不到问题的所在。因此,要先看看 有哪些问题需要解决,然后再补充您的工具箱。 永远从商业目标的角度来决定学习哪个东西,而不是纯粹为了锻炼 技术能力而去学习。

关注用户体验

老板雇用您不是因为您能写代码(或者做工具),而是因为您能帮他赚钱。所以您要用一切办法,去优化流程解决痛点, 做工具是一个可选的方法,但不应该是您的第一个想法,更不是唯一的方法。假使真的是做一个工具,最终汇报邮件的时候,不要以 “我做了一个工具。。。”开头,而应该以“我发现了一个问题。。。”开始。

延伸阅读

  • 《重来:更为简单有效的商业思维》
  • 《精益创业》

从学生到工程师

延伸阅读

  • 《编程之美:微软技术面试心得》

野生程序员的故事

野生程序员容易陷入样样不精通的窘境。

大公司还是创业公司

大公司能给您的:

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

作者个人建议是,从毕业生自己前途发展的角度来看, 先加入一家上市大公司是个不错的选择。

延伸阅读

  • 《打造 Facebook》

工程师事业指南

那个什么都懂的家伙

软件工程师事业指南告诉您,最核心的 3 个词就是技术、成长和声望。 技术是您的武器,成长就是好好打磨武器,而声望是 您一生的积累。

积累作品集

延伸阅读

  • 《您就是极客:软件开发人员生存指南》
  • 《代码整洁之道》

全栈工程师眼中的 HTTP

尽量减少同一域下的 HTTP 请求数 浏览器常常限定了对同一域名发起的并发连接数的上限。 IE 6/7 和 Firefox 2 的设计规则是,同时只能对一个 域名发起两个并发连接。新版本的各种浏览器普遍把这一上限 设定为 4 至 8 个。

把静态资源放在非主域名下,这种做法除了可以增加浏览器并发, 还有一个好处是,减少 HTTP 请求中携带的不必要的 cookie 数据。

除此之外,前端工程师经常做的优化是合并同一域名下 的资源,比如把多个 css 合并为一个 css, 或者将图片组合成 css 拼图。

还有一些优化建议是省掉不必要的 HTTP 请求,比如内嵌小型 css, 内嵌小型 javascript, 设置缓存,以及减少重定向。

高性能网站的关键:缓存

服务器缓存

浏览器缓存

延伸阅读

  • 《网站性能监测与优化》

大前端

知识体系

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

  • 对代码质量,代码规范的理解。

  • 对 JavaSript 单元测试的熟悉。
  • 对性能优化的应用和理解。
  • 对 SEO 的应用和理解。
  • 代码部署。
  • 移动 Web。

  • 代码架构

  • 安全
  • 对自动化测试的理解

向移动端转型

有哪些方向

  • iOS 原生 App
  • Android 原生 App
  • Windows Phone 原生 App
  • Web App
  • 混合模式 App(Hybrid App)

延伸阅读

  • 《Getting Real》
  • 《从 0 到 1:开启商业与未来的秘密》
  • 《Building iPhone Apps with HTML, CSS, and JavaScript》

持续集成

版本控制最佳实践

  • 鼓励频繁地提交
  • 确定分支流程
  • 定义主干原则,并且坚守它
  • 不要把逻辑的修改和代码格式化操作混在一起
  • 不相干的代码分开提交
  • 保持工作代码库的“干净”

包管理

  • npm
  • bower

延伸阅读

  • 《Pro Git book》
  • 《Git 版本控制管理》

理解编程语言

通用用途语言 VS 特定领域语言

特定领域语言(Domain Specific Language, DSL)。 DSL 的目的是解决特定领域的问题。

如果您是一个以解决问题为目标的全栈工程师,我建议您在考虑 发明一个 DSL 之前先考虑以下方案:

  • 尽量使用您熟悉的通用语言来解决问题,比如 Python, Java 或 C++.
  • 优化您的方案,提炼出一种真正精简、优雅的扩展库。
  • 开源您的扩展库,根据其他人的贡献来继续优化解决方案。

延伸阅读

  • 《代码大全》
  • 《代码的未来》
  • 《禅与摩托车维修的艺术》

全栈游乐场

就是说了需要有一个自己的 VPS, VPS 可以让你对网站的全貌有所了解。

延伸阅读

  • 《鸟哥的 Linux 私房菜:基础学习篇》
  • 《只是为了好玩:Linux 之父林纳斯自传》

软件设计方法

设计模式

设计模式的关注点在于以下几个方面:

  • 高效编写代码
  • 高可复用性
  • 抽象带来的可读性

《设计模式》一书中作者列出了 23 种软件设计模式,分为三大类:

  • 创建型模式,就是用来创建对象的模式,它对实例化的过程进行了抽象。创建型模式帮助一个系统独立于如何创建、组合和表示它的那些对象。
    • 单例模式
    • 工厂方法
    • 抽象工厂
    • 建造模型
    • 原型模式
    • 对象池模式
    • 多例模式等
  • 结构型模式,主要解决类、对象、模块之间的耦合关系。
    • 适配器模式(Adapter)
    • 桥接模式
    • 组合模式
    • 装饰模式
    • 外观模式
    • 享元模式
    • 代理模式等
  • 行为模式,用来识别对象之间的常用交流模式并加以实现。
    • 观察者模式(发布订阅模式)
    • 黑板
    • 责任链
    • 命令
    • 解释器
    • 迭代器
    • 中介者
    • 备忘录
    • 空对象
    • 模板方法
    • 访问者等

架构模式

比如:MVC

设计原则

  • DRY,是 "Don't Repeat Yourself" 的缩写,在一个系统里,对于任何数据或变量,都应该配置在有且只有一个地方,其他地方都应该引用这里的数据。
  • 惯例优于设置,开发人员仅需要规定应用中不符合约定的部分。
  • KISS 原则,是 "Keep it simple, stupid" 的缩写,意思是说软件设计当中应该注重简约的原则。
  • 最少知道原则,它是“松耦合原则”的一个具体实例,是指在面向对象编程中,每一个软件单元应该尽可能少地与其他单元发生作用。

延伸阅读

  • 《设计模式:可复用面向对象软件的基础》
  • 《JavaScript 设计模式》

高效工程师

提速 100 倍

  • 阅读英文资料
  • 时间管理四象限
    • 既紧急又重要的(立即执行)
    • 紧急不重要(他人代劳)
    • 重要不紧急(制定计划,建议工程师把 80% 的工作投入到该象限中,避免“瞎忙”)
    • 不紧急不重要(对它所不)
  • 消除重复工作
  • 给自己留出不被打扰的时间
  • 番茄工作法
  • 跨界思考
  • 纸上头脑风暴
  • 使用版本控制工具和构建系统
  • 不要加班

延伸阅读

  • 《软件随想录:程序员部落酋长 Joel 谈软件》
  • 《卓有成效的程序员》

学习设计

设计基础

设计的四大基本理论是:亲密性,对齐,重复,对比。

设计工具:

  • Axure
  • Sketch
  • Quartz Composer
  • 代码

延伸阅读

  • 《响应式 Web 设计全流程解析》
  • 《写给大家看的设计书(第 3 版)》
  • 《写给大家看的设计书:实例与创意》

全栈思维

有兴趣就够了吗?

扯一些理由(特别是私人的理由)根本就是不专业的态度。 不要给自己没能完成的事情找任何理由,而要以诚恳的态度说明当前进度,以及未来是否能如期完成目标,如果不能,就直接说出来。

在职场中,我们评估一个人并不是根据他的能力,而是他能 承担的责任。同样,我们最终评估一个人是否应该升职加薪, 不是看他的能力,也不是看他投入的时间,更不是看兴趣, 只是看他的责任。

学一点管理

  • 好的管理者能让平凡的员工做不平凡的事
  • 根据员工特质来授权

沟通: 被忽视的竞争力

延伸阅读

  • 《卓有成效的管理者》
  • 《麦肯锡教我的写作武器》
  • 《金字塔原理》
  • 《安静:内向性格的竞争力》

Comments