# 一、梳理思想
# 思维三部曲
是什么(What)
为什么(Why)
怎么做(How)
# 一个思想两个能力
要始终具备编程思想,和独立思考的能力、独立解决问题的能力。
# 获取知识的四种途径
- 比喻 - 像什么
- 类比 - 是什么
- 推导 - A->B->C->?
- 归纳 - 自我总结
# 站在更高的角度
不要总是埋头种地,也要抬头看天。
互联网思维:第一原则——利他原则
站在别人的角度考虑问题。
学技术用道家思想,融会贯通,内化吸收。
做产品用佛家思想,小步快跑,快速迭代。
# 二、编程思想
- 面向过程编程思想
- 面向对象编程思想
- 面向接口编程思想
- 面向服务编程思想
# 道家思想学编程
有道无术,术尚可求,有术无道,止于术! (opens new window)
———道德经
道是思想(编程思想),术是方法(代码)。
大道至简,知行合一。
# 佛家思想做产品
看山是山,看山不是山,看山还是山。
———禅宗三境界
- 看山是山
学会借用,看山是山,看的是山的本身、是现象;
- 看山不是山
学会遗忘,看山不是山,看的是山背后的道理,是本质;
- 看山还是山
学会学习,看山还是山,看的是现象和本质的统一,是融会贯通。
# 用批判性思维学编程 (opens new window)
批判性思维是一种思维习惯,是对思考的思考。就是将别人思考过的问题在自己的大脑中再进行一次思考。
# 面向对象编程思想
万物皆对象,是面向对象编程思想的核心思想。
# 面向对象三大特性
封装、继承、多态
- 封装
封装就是将对象的属性和行为抽象出来,包装到类中。
属性:是名词,即变量;行为是动词,即方法。
- 继承
继承就是将具有相同属性和行为的对象,抽象出来并包装成一个父类。
- 多态
多态就是多种形态,相同的属性和行为,却有不同的表现形式。
# 面向对象七大设计原则
面向对象设计原则,为我们提供了方法和准则。
开口合里最单依
- 开闭原则:面向扩展开放,面向修改关闭
- 面向接口原则:接口隔离原则
- 组合聚合原则
- 里氏替换原则
- 最少知识原则:迪米特法则
- 单一职责原则:一个类只做一种事,一个方法只做一件事
- 依赖倒置原则
# 面向接口编程
接口是为了处理各个对象之间的协作关系,是系统设计的关键组成部分,主要作用是为了将定义和实现进行分离,从而实现系统解耦的目的。
# 三、开发思想
# Restful设计风格
Representational State Transfer REST
REST
,中文的含义是: "表征状态转移" 或 "表现层状态转化"。
Restful
是一种基于HTTP的应用设计风格,用来设计API接口规范。
请求Method | 描述 | 幂等性 |
---|---|---|
GET | 用于查询资源 | 幂等 |
POST | 用于新建资源 | 非幂等 |
PUT | 用于修改资源 | 幂等 |
DELETE | 用于删除资源 | 幂等 |
PATCH | 用于更新部分资源 | 非幂等 |
例:
- get /users:列出所有用户
- get /users/id:根据id获取用户
- post /user:新增用户
- put /user/id:根据用户id更新用户
- delete /user/id:根据用户id删除用户
# 幂等性
HTTP幂等,是指无论调用多少次都不会有不同结果的HTTP方法。
幂等性指的是作用于结果而非资源本身。即GET方法每次可能得到的结果不同,但并不影响资源本身;而POST方法调用多次都会产生新的资源。
# CAP定理
C—— 数据一致性
A—— 可用性
P—— 分区容错性
在分布式系统中,最多同时满足2个,要么是CP系统(金融、与钱相关),要么是AP系统(互联网系统)
- CP系统,金融(钱)
- AP系统,互联网系统
# BASE理论
BASE理论是对CAP定理的衍生,核心思想是AP系统即使无法保证强一致性,但应用程序可以采用适当的方式,来达到最终一致性。
- 基本可用:指出现故障时,保证核心功能可用,允许损失部分可用性;
- 软状态:指系统允许存在中间状态,例分布式副本、异步复制;
- 最终一致性:指经过一段时间后,最终达到一致性。
# 敏捷开发
Agile 敏捷开发
敏捷开发是一种以人为核心、迭代、循序渐进的项目管理方法。
敏捷开发是一种指导思想,在敏捷开发中,项目的构建被分隔为许多个子项目(产品-项目-模块)。
简单地说,敏捷开发不追求完美的设计,完美的代码;而是力求在很短的周期内,开发出产品的核心功能,尽快发布可用的版本,然后在后续的生产周期内,不断地迭代升级、完善产品。
# 敏捷宣言
- 个体和互动 高于 流程和工具;
- 工作的软件 高于 详尽文档;
- 客户合作 高于 客户谈判;
- 响应变化 高于 遵循计划
# 敏捷开发实现方式
敏捷开发有很多种方式,有scrum
、XP
(极限编程)等。其中scrum
是比较流行的一种,而通常我们是将两者结合使用。
# Scrum
scrum注重于过程,用于项目管理。scrum主要有三大角色、三个工件、四大会议。
三个角色:产品负责人、流程管理员、项目团队
三个工件:产品清单、冲刺清单、燃尽图
四大会议:迭代计划会议、每日例会、评审会议、回顾会议
- scrum三大角色
scrum三大角色:产品经理(product owner
)、项目经理(scrum master
)、研发团队(team
)。
- 产品经理(product owner)负责整理用户故事(user story),定义其商业价值,对其进行排序;制定发布计划,对产品负责。
- 项目经理(scrum master)负责召开各种会议,协调项目,为研发团队服务。
- 研发团队(team)则由不同技能的开发人员组成,通过紧密协同,完成每一次迭代的目标,交付产品。
- 迭代开发
与瀑布开发不同,scrum将产品的开发分解为若干个小sprint(迭代),其周期从1周到4周不等,但不会超过4周。
参与的团队成员一般是5到9人。每期迭代要完成的user story是固定的。每次迭代会产生一定的交付。
- scrum三个工件
产品清单(product backlog
)、冲刺清单(sprint backlog
)、燃尽图
- scrum四大会议
迭代计划会议、每日例会、评审会议、回顾会议。
- scrum的基本流程
产品经理负责整理用户故事user story,形成产品清单(product backlog)。
发布计划会议:制定冲刺清单
产品经理负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,形成冲刺清单(sprint backlog)。
迭代计划会议:细化任务,分配任务。
项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,最终每个任务都有明确的负责人,并完成工时的初估计。
每日例会:掌握任务进度。
每天项目经理召集站立会议,团队成员回答昨天做了什么,今天计划做什么,有什么问题。
团队成员及时更新任务状态,从而更新燃尽图。
评审会议:发布RELEASE版本
当一个周期的小目标全部完成,并经过测试后,进行评审会议,发布RELEASE版本。
演示会议:迭代结束之后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由PO整理,形成新的story。
回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,已达到持续改进的效果。
# 极限编程(XP)
极限编程注重于实践,核心思想是沟通、简单、反馈、勇气、谦逊、TDD、持续集成、DevOps。实现小步快走、快速迭代。
项目中我们使用国产开源软件禅道(zentao)进行项目规范管理。
# DevOps
DevOps
是开发和运维的合成词。其目标是加强开发人员、测试人员、运维人员之间的沟通协调。
那么要实现DevOps,就需要我们项目能够做到持续集成、持续交付、持续部署。
# 禅道zentao (opens new window)
禅道是一款专业的研发项目管理软件,可以完整的覆盖研发整个流程,支持敏捷开发流程。
它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体。
# 测试驱动编程TDD
# 领域驱动设计DDD
Domain-Driven-Design DDD
怎么拆分微服务,怎么设计出高内聚、低耦合的微服务?
开发方式采用DDD——领域驱动设计。围绕业务领域组件来创建应用服务,业务领域确定了边界。
DDD
是面对软件复杂之道。
domain 领域,不再单单只是entity的getter/setter(贫血模型),而是对于该实体模型的属性、行为都进行封装(充血模型)。
原则:
尽量减少服务之间的业务交叉;
服务之间的调用只能通过接口调用,而不要跨过服务直接操作对方的数据库;
高内聚、低耦合。各服务、各层(控制层、服务层、数据层)都要始终满足这一思想。实现该思想的方式主要有同步的接口调用和异步的事件驱动。
DDD分为战略设计和战术设计。上层的战略设计为中台的建设提供指导思想,下层的战术设计为微服务的搭建保驾护航。
# 互联网企业发展阶段
第一阶段:创业期
搭架子、做项目——微服务架构;
第二阶段:发展期
周期迭代——大数据,精准营销;
第三阶段:成长期
大数据+人工智能;
第四阶段:成熟期
人工智能+区块链;