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

为何我会选择读这本书?两个缘由,一是自己对于全栈的技术很感兴趣。倒并非认为全栈工程师懂的东西多就牛逼哄哄,而是在当前这种先后端分离的大势之下,先后端开发人员都愈来愈聚焦于本身的领域,而缺少对整站或者整个系统的了解,以全栈的视野更容易了解技术的全貌。二是由于书评分还不错,做者是腾讯社交用户体验设计部高级UI工程师余果。javascript

这本书是由做者从连载专栏中整理出来的。按照做者的定义是“轻松的技术杂文集”。读完两遍以后的总体感受是:提高视野,拓展思惟。前端

什么是全栈工程师java

一专多长。工程师首先有一个精专的方向,在这个方向上足够精通以后(高级工程师级别),以此为突破点去学习更多的知识,增长本身的长处。node

在技术上,我一直提倡的是十字型的成长方式,即从水平和垂直两个方向提高本身的能力。好比我擅长的是javascript,我会去学习jquery、angular等这些有用的js库,这属于垂直方向。同时我继续对node.js、mongodb这类后端技术进行学习,这属于水平方向。jquery

虽然我以为这是一个好的学习方法,可是并不能做为衡量一个全栈工程师的标准。全栈工程师应该是在先后端都有必定专业知识,能独立开发的程序员,有没有专精的方向并不重要。即便像下面的被称做“野生程序员”的开发者,能力模型每项都得60分就应该算合格。nginx

对于那些达不到一专多长,虽然知识面比较广,可是各方面都只知其一;不知其二的开发者,做者给了一个特殊的称号:野生程序员。程序员

这个能力模型居然把JQuery单独列出来了,AngularJS、Zepto.js、Vue.js…都表示很失望~mongodb

老板雇佣一个员工,不是由于他能写程序,而是由于他能帮助本身赚钱。赚钱的方法有两种:减小成本,或者增长收入。程序员若是能加快内部系统的运行效率,让产品制做流程更加顺畅,就是减小成本。若是能让用户更容易一地购买产品,或者提升服务质量吸引更多用户,就能增长收入。数据库

嗯,这一点我以为很重要,使用技术知其然还要知其因此然~后端

为何要用JQuery?它的选择器很强大,操做dom方便。

为何要用Angular?它的双向数据绑定再也不须要选择器,对于CRUD操做颇有优点。

为何要用Vue.js?它实现双向数据绑定的同时又是一个轻量级的框架。

技术只是手段,最合适的技术便是最好的技术。不迷信于某个技术,本末倒置,而是为了解决某类问题而去选择最低成本的技术,这才是一个成熟的开发者应有的思惟。

全栈工程师涉及的一些重要技术

HTTP

前端须要关注

  • 发出的请求列表

  • 每一个请求的开始时间

  • 每一个请求从刚开始到结束花费的时间

  • 每一个请求的类型

  • 每一个请求的状态吗

  • 每一个请求产生的流量消耗

  • 每一个请求gzip压缩前的体积,以及在本地gzip解压后的体积

这里推荐一本书《图解HTTP》,通俗易懂。

优化策略

  • 尽可能减小同一域下的HTTP请求数。域名散列等

  • 尽可能减小每个资源的体积。压缩合并等

HTTP2.0下这种优化就变得没意义了,不过预估HTTP1.1还将用10年。

后端须要关注

  • 提升服务器的请求处理能力。利用nginx等服务器作负载均衡等

  • 预防DDoS攻击。生成静态页,利用cdn等

BigPipe是Facebook公司科学家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

学习管理

  • 在项目最开始作出合理的时间评估

  • 根据人员的强项来安排任务

  • 唤起团队对项目成功的渴望

  • 保障沟通。理想沟通频率每周至少两次。

相关文章
相关标签/搜索