A Introduction for Growth Paper in Minutes - 真实世界的全栈工程师的十八项必备技能
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
images
README.md
live-detail.md
live.md

README.md

30分钟了解《全栈应用开发:精益实践》

在《Growth:全栈Web开发思想》出版以前,请参考开源电子书《Growth:全栈增长工程师实战》与《Growth: 全栈增长工程师指南》。

引言:精益与全栈

在埃里克·莱斯的《精益创业》中提到了下面的精益环路:

Lean创业

而精益的思想是在生产过程中减少的浪费,在软件开发的过程中最容易造成浪费的就是:

  1. 业务人员对于市场的理解不一致,导致做不出用户所需要的产品。这部分可以通过精益环路来提高。
  2. 开发人员对于需求的了解不清晰,导致结果与业务人员所需要的不一致。这部分则可以通过改善流程来解决。
  3. 开发人员与第三方开发商的沟通问题。呵呵。
  4. 团队内部的沟通与集成问题

当我们讨论全栈的时候,我们就是想解决沟通带来的时间浪费问题。沟通不畅最好的例子就是巴别塔

巴别塔

而前后端分离带来的第一个痛点就是:集成。如果你和我们一样采用敏捷开发流程的话,你就可以很容易看到这个问题了:

看板

当你已经完成前端功能的时候,后端还没完成。你可能就需要开发额外的业务卡,最后等后端完成时再回来集成。尽管我们会在实践上使用基于契约的开发模式:

契约API

但是一旦我们发现最初的契约不符合我们要求的时候,我们就需要重新修改前后端。这时对接这个 API 的人,就需要放下手头的工作来更新这个 API。

尽管你们已经采用了迭代式开发,但是前后端分离在一夜又将软件开发放到了解放前的瀑布流:

瀑布流

在我最初的项目里,我们采用全功能团队的模式,主要是因为团队小——小的团队一遇到一两个人请假,就可能会出现风险。尽管后来我们的团队从6个人变成了12个人,我们仍然采用这种模式。我们采用结对编程是一个方面,另外一个方面是:团队里就需要有一个人来专门解决各种大小事务。如持续集成有问题、自动构建出错、测试有问题等等,没有人愿意专门去做这样的事。

本文总结了正在撰写的《Growth:Web开发思想》里提出的一系列实践,为18个步骤:

  • Tasking,即将目标切换成一个个小的任务,而这些任务尽可能的遵循 SMART 原则,如这里的 18 个步骤。
  • Setup,搭建开发所需要的基本环境,并尽最大能力地去练习 IDE 及操作系统等等日常工具的使用。
  • UI Prototype,可以使用简单的使用 UI 工具来创建 Web 页面的原型。
  • Technology Decision,能根据我们的能力以及项目的需要,选择合适的工具。
  • hello, world -> Boilerplate,能自己搭建或者寻求一些比较好的 应用模板。
  • Build Pipeline,可以设计出整个应用的构建流程,如依赖包管理、运行服务、执行语法检测、运行测试等等。
  • Coding,至少能使用两门以上的语言,一门是 JavaScript,一门是编译语言。光只有动态语言,无法让你理解计算机语言的。
  • Testing,可以编写单元测试、服务测试、UI自动化测试。
  • Deploy,可以完整将应用部署到服务器上。
  • Auto Deploy,要会在本地敲个命令,自动部署新版本的应用到服务器上。
  • Analytics,不仅仅要知道很多用户喜欢这个功能,还要知道为什么。
  • Optimization,即要知道程序中哪里用得多,又要能对代码进行优化。
  • Continuous Intergration,除了学会使用持续集成工具,你还要学习什么是持续集成。
  • Continuous Delivery,就是缺少一个在持续集成与自动化部署之间的按钮。
  • Continuous Deployment,将持续交付的按钮变成自动化就完了?你要改变的不是代码本身 ,还有组织架构。
  • SEO / ASO, 将用户导向你的应用是一门艺术。
  • Retro,由输出结果来改入输入流程,这才能提高组织和自身的水平。
  • Refactor,你以为只有代码和架构可以重构么?

任务切分

即将目标切换成一个个小的任务,而这些任务尽可能的遵循 SMART 原则,如这里的 18 个步骤。

Tasking

  • 具体的
  • 可度量的
  • 可实现的
  • 相关的
  • 时间可控的

环境搭建

搭建开发所需要的基本环境,并尽最大能力地去练习 IDE 及操作系统等等日常工具的使用。

开发工具

至少达到下面的基本要求:

  • 有一个上手的 IDE 或者 编辑器
  • 熟练使用包管理
  • 使用快速启动工具
  • 有一个好的命令行工具
  • 熟练使用Git 或者 SVN

UI原型

可以使用简单的使用 UI 工具来创建 Web 页面的原型。

UI原型

你应该会下面的这些内容:

  • 使用 UI 工具来设计原型
  • HTML + CSS

技术选型

能根据我们的能力以及项目的需要,选择合适的工具。

技术选型

至少要有:

  • 后台MVC框架
  • 数据库
  • UI 框架

hello, world

能自己搭建或者寻求一些比较好的应用模板

hello, world

因此,你应该到 Web 前后端有一个明确的概念。

构建流

可以设计出整个应用的构建流程,如依赖包管理、运行服务、执行语法检测、运行测试等等

构建流

你需要设计出这样的一个系统:

  • 能帮助你提高开发效率
  • 能帮助你提高代码质量
  • 帮你运行各种测试

编码

至少能使用两门以上的语言,一门是 JavaScript,一门是编译语言。光只有动态语言,无法让你理解计算机语言的

编码

编码需要这么一些步骤:

  • Kick Off
  • Tasking
  • 获取最新的代码
  • 实现功能
  • 编写测试
  • 重构
  • 本地提交代码
  • 获取最新代码
  • 运行测试
  • 提交代码到远程服务器
  • 等到 CI 构建完成

测试

可以编写单元测试、服务测试、UI自动化测试

测试金字塔

因此,你必须知道测试的基本类似:

  • 状态测试
  • 行为测试

部署

可以完整将应用部署到服务器上

部署

你至少需要:

  • HTTP 服务器
  • CGI 或者类似的服务器
  • 进程管理工具
  • 语言版本管理工具

自动部署

在本地敲个命令,自动部署新版本的应用到服务器上。

自动化部署

熟悉使用自动化配置管理工具,如 Ansible、Salt Stack 等等来改进部署流程

分析

不仅仅要知道很多用户喜欢这个功能,还要知道为什么。

精益环路

除了使用诸如 Google Analytics / Piwik 这样的工具,对于日志来说你还需要有:

ELK

优化

即要知道程序中哪里用得多,又要能对代码进行优化。

可以结合 New Relic 这样的 APM 工具进行性能分析。

性能分析

持续集成

除了学会使用持续集成工具,你还要学习什么是持续集成。

持续集成

至少你应该熟练使用免费的开源集成工具:Jenkins

持续交付

就是缺少一个在持续集成与自动化部署之间的按钮。

持续交付

持续集成完成后,你还需要:

  • 自动部署代码到测试环境
  • 运行集成测试
  • 发布最新的包

持续部署

将持续交付的按钮变成自动化就完了?你要改变的不是代码本身 ,还有组织架构。

持续部署

最简单的实现就是 GitHub Pages 了。

设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。

康威定律

SEO / ASO

将用户导向你的应用是一门艺术。

搜索引擎优化

知道 PageRank 么?

回顾

由输出结果来改入输入流程,这才能提高组织和自身的水平。

Retro

Make it Right, Make it Better

PID

重构

你以为只有代码和架构可以重构么?

Refactor

Rework