工程哲学
工程哲学适用于软件开发、产品管理、架构设计、用户体验设计等多个工作领域。
软件工程
虽然我们在工作中会不断面 对新技术、新名词、新实践方法,但就世界运行的底层逻辑来说--一切都是哲学问题。
系统设计 101 使用视觉效果和简单的术语来解释复杂的系统,帮助我们快速进入架构设计的世界。
Unix 设计哲学
17条Unix的设计哲学, 引用自 《Unix 编程艺术》
Python 之禅
56条软件法则
云原生 12 要素
系统架构演进
Scaling webapps for newbs & non-techies
面向对象设计原则
Principles of Object-Oriented Design
敏捷开发

敏捷实现过程会划分如下几个颗粒度:
- Task(任务)
- Millstone(里程碑)
- Release(发布版本)
多个任务=新版本,若新版本周期比较长,用户可能会焦急等待,这时候就会发布 Millstone 的中间结果。
多元化团队
一个优秀的软件团队,需要各种不同类型的人才:
- 具备商业思维和产品化思维的高层
- 具备产品化思维的产品经理
- 人际关系良好的团队粘合剂人才
- 卓越的项目解构能力的项目经理
- 单点突破的技术好手
- 指哪打哪的技术执行者
- 有耐心的重复任务执行者
看板
看板是一种简单高效的工具,它适用于多人协作的任务视图
Issue
将问题分解成可以由个人主导完成的 Issue 是至关重要的工作哲学。
文档
软件工程文档是一个总称,涵盖了涉及软件产品开发和使用的所有书面文档和材料。所有软件开发产品,无论是由小型团队还是大型公司创建,都需要一些相关文档。整个软件开发生命周期(SDLC)会创建不同类型的文档。存在文档来解释产品功能,统一与项目相关的信息,并允许讨论利益相关者和开发人员之间出现的所有重要问题。

文档类型众多,但抽象起来,其实就是两种类别:
- Product documentation(产品文档):包含描述产品生命周期的需求 、设计、架构、原型等开发者所需的相关的文档,另外一方面包括用户所需的操作手册、管理员手册、API手册等
- Process documentation(过程文档):管理产品开发过程的项目计划,测试计划,报告,标准,会议记录等
产品文档中的需求文档(PRD)又是最为关键的部分,它包含用不同的角色的所需解决的问题、人机交互设计、是否符合商业目标等内容,它需要用精准的文字来描述目的、功能和行为。
编写需求文档的时候,很多人会不经意陷入技术陷阱:“谈需求的时候,牵扯实现;讲宏观的时候考虑微观”。
Websoft9 工程化过程中,主要有如下几种必须的文档:
- 需求说明书(PRD):成品需求的描述
- 备注(Notes):产品开发过程中的注意事项与创意想法记载
- 用户手册(User Guide):最终用户的操作指南
- 管理员手册(Administrator Guide):软件安装、维护的系统管理手册
- 开发者手册(Developer Guide):软件架构说明、软件核心功能(函数)参数说明、软件插件的开发指南、软件代码合并与开源协作等面向开发者指南
多路复用
线程与进程
开源思维
传统的开发(相对于开源来说),受制于封闭的代码和自雇团队的人力模式,导致有局限性。
长期在这种环境下工作,可能会养成如下的思维定式:
- 任何事情喜欢自己动手折腾到底,即调研和实施全过程都独立完成
- 觉得沟通成本高,还不如自己搞定来得方便
- 编写的文档主要是给“懂的人”看,文风晦涩难懂而当事人未察觉
- 80%的时间用在基于已有的知识和技能创作解决方案,20%的时间寻找工具,重复低效地造轮子
与传统开发局限性思维相比,开源思维的好处更多:
- 集成化思维:先设计架构,再找工具(组件),最后通过集成形成解决方案,减少重复造轮子
- 全球化视野:产品面向全球开源,推动文档、readme、issue英文化,自然形成全球化思维
- 广泛的人力:全球开源参与人才广泛,理论上都为我所用
- 利他主义观:开源文化倡导“我为人人,人人为我”
协作
代码分支
项目在 Github 存在 main 和 dev 两个分支,其中 main 是主分支,dev 是开发测试分支。
- 本地同步-dev分支
- dev 分支合并到 main 分支需要人为确认