团队项目开发与规范

Posted by YueLng Chen on 2018-01-18

计算机专业的三个维度

  1. 基础体系,基础理论、算法与架构
  2. 工程,业界常用方法,实际项目,开源项目
  3. 前沿与未来,保持对新技术的灵敏度,论文

个人理解

团队是因为有相同的目标才聚集在一起,所有在做一个项目的开始,要让所有成员认同项目的前景。团队的大小个人认为最多20个人。虽然说很有必要保证规范化,但是我认为按部就班只能扼杀人的创造力,但是一些的必要的流程规范还是要的,也就是下面说的开发流程规范,有些人认为这样不会有很好的技术文化积累。我想的是技术文档和团队文化并不和小而美的团队相冲突,文档取决于个人的工作习惯,而文化取决于每个人以及领队的思想。

项目开发流程

前不久就跟已经工作的学长聊到这,公司的开发流程和创业公司的开发流程都是类似的,都是需求、讨论、编码、测试一系列的工作。所不同的有的公司已经有一套完整的模式去套,项目的进度也就有章可循。以下是典型的开发流程
1、按照项目开发流程,先每位开发或者测试从主分支拉取分支。
2、当开发或者测试完成业务开发或者测试用例开发,自主合并到test-ci分支中。
3、查看持续集成是否构建成功,如果未构建成功,跳转到第二步,检查和修改编码,否则进入下一步。
4、构建成功后,可以在本组的测试服务器中,进行自主发布,并检查是否存在问题。(测试和开发均要进行检查)
5、项目在本期发布日时,将代码合并到tag分支中,并由运维进行发布。
6、验证线上发布是否存在问题,如果存在问题(内测),相应开发应记录相应的问题,并在下一期发布解决。如果不是内测,则需要对发布服务器上的代码进行回滚处理,并定位原因。

技术选型-朴素技术观

针对实际的项目应该以朴素技术观来选择技术。架构都是相似的,关键而在于不同的架构性能不同,整体而言要选择相对均衡的技术机构。
语言:应该以团队成员中出现最多的一种语言作为标准,或者有语言技术大拿
存储:nosql还是mysql+memcache+redis
框架与技术分工:框架的最大作用是条理化结构,便于协作
相关的还有流程管理、代码版本管理、项目发布、代码review等等。

按照下面这个图进行项目开发吧

如果要我选择一种开发工作作为基础的话,我会选git,版本控制对于团队开发来说太重要了。团队合作的紧密程度和协调性完全可以通过图谱看出来,下面是非常好的开发流程
git_model

软件设计思想

设计首先得搞懂要解决的问题,澄清需求的过程,就是不断驱逐无知,掌握现状,上下文和约束条件的过程。然后查找是否有类似的解决方案,寻找多个解决方案。设计中的tradeoff。
Rich hickey(clojure作者)在某个演讲中说:

everyone says design is about tradeoffs, but you need to enumerate at least two or more possible solutions, and the attributes and deficits of each, in order to make tradeoff.

构建灵活且有韧性的系统

分解与组合、总线(控制、数据)、路由(解决数据的流向问题)、队列(对于那些并非需要立即处理的数据,可以使用队列。队列也有把生产者和消费者分离的功效。)、消息系统(请求/响应,Pub/Sub),协议,周边(高可用、代谢、安全、透支保护)
Move fast and break things.

消息通信内容 是尽量精简还是可以冗余

精简,只携带请求方需要的信息
冗余,除了请求方需要的信息,另外还有可能需要的信息
我比较倾向于后者

参考资料

1.谈谈创业公司的技术选型--朴素的技术观作者:五四陈科学院
2.软件设计杂谈作者:陈天