沉淀思想

chicken-soup

# 一、梳理思想

# 思维三部曲

  • 是什么(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 敏捷开发

敏捷开发是一种以人为核心迭代循序渐进的项目管理方法。

敏捷开发是一种指导思想,在敏捷开发中,项目的构建被分隔为许多个子项目(产品-项目-模块)。

简单地说,敏捷开发不追求完美的设计,完美的代码;而是力求在很短的周期内,开发出产品的核心功能,尽快发布可用的版本,然后在后续的生产周期内,不断地迭代升级、完善产品。

# 敏捷宣言

  1. 个体和互动 高于 流程和工具;
  2. 工作的软件 高于 详尽文档;
  3. 客户合作 高于 客户谈判;
  4. 响应变化 高于 遵循计划

# 敏捷开发实现方式

敏捷开发有很多种方式,有scrumXP极限编程)等。其中scrum是比较流行的一种,而通常我们是将两者结合使用。

# Scrum

scrum注重于过程,用于项目管理。scrum主要有三大角色三个工件四大会议

三个角色:产品负责人、流程管理员、项目团队

三个工件:产品清单、冲刺清单、燃尽图

四大会议:迭代计划会议、每日例会、评审会议、回顾会议

  • scrum三大角色

scrum三大角色:产品经理product owner)、项目经理scrum master)、研发团队(team)。

  1. 产品经理(product owner)负责整理用户故事(user story),定义其商业价值,对其进行排序;制定发布计划,对产品负责。
  2. 项目经理(scrum master)负责召开各种会议协调项目,为研发团队服务。
  3. 研发团队(team)则由不同技能的开发人员组成,通过紧密协同,完成每一次迭代的目标,交付产品。
  • 迭代开发

与瀑布开发不同,scrum将产品的开发分解为若干个小sprint(迭代),其周期从1周到4周不等,但不会超过4周。

参与的团队成员一般是5到9人。每期迭代要完成的user story是固定的。每次迭代会产生一定的交付。

  • scrum三个工件

产品清单product backlog)、冲刺清单sprint backlog)、燃尽图

  • scrum四大会议

迭代计划会议每日例会评审会议回顾会议

  • scrum的基本流程
  1. 产品经理负责整理用户故事user story,形成产品清单(product backlog)。

  2. 发布计划会议制定冲刺清单

    产品经理负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,形成冲刺清单(sprint backlog)。

  3. 迭代计划会议细化任务,分配任务

    项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,最终每个任务都有明确的负责人,并完成工时的初估计。

  4. 每日例会掌握任务进度

    每天项目经理召集站立会议,团队成员回答昨天做了什么,今天计划做什么,有什么问题。

  5. 团队成员及时更新任务状态,从而更新燃尽图

  6. 评审会议发布RELEASE版本

    当一个周期的小目标全部完成,并经过测试后,进行评审会议,发布RELEASE版本。

  7. 演示会议:迭代结束之后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由PO整理,形成新的story。

  8. 回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,已达到持续改进的效果。

# 极限编程(XP)

极限编程注重于实践,核心思想是沟通、简单、反馈、勇气、谦逊、TDD、持续集成、DevOps。实现小步快走、快速迭代。

项目中我们使用国产开源软件禅道(zentao)进行项目规范管理。

# DevOps

DevOps开发运维的合成词。其目标是加强开发人员测试人员运维人员之间的沟通协调。

那么要实现DevOps,就需要我们项目能够做到持续集成持续交付、持续部署。

# 禅道zentao (opens new window)

禅道是一款专业的研发项目管理软件,可以完整的覆盖研发整个流程,支持敏捷开发流程。

它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体。

# 测试驱动编程TDD

# 领域驱动设计DDD

Domain-Driven-Design DDD

怎么拆分微服务,怎么设计出高内聚、低耦合的微服务?

开发方式采用DDD——领域驱动设计。围绕业务领域组件来创建应用服务,业务领域确定了边界。

DDD是面对软件复杂之道。

domain 领域,不再单单只是entity的getter/setter(贫血模型),而是对于该实体模型的属性、行为都进行封装(充血模型)。

原则:

尽量减少服务之间的业务交叉;

服务之间的调用只能通过接口调用,而不要跨过服务直接操作对方的数据库;

高内聚、低耦合。各服务、各层(控制层、服务层、数据层)都要始终满足这一思想。实现该思想的方式主要有同步的接口调用和异步的事件驱动。

DDD分为战略设计和战术设计。上层的战略设计为中台的建设提供指导思想,下层的战术设计为微服务的搭建保驾护航。

# 互联网企业发展阶段

第一阶段:创业期

搭架子、做项目——微服务架构;

第二阶段:发展期

周期迭代——大数据,精准营销;

第三阶段:成长期

大数据+人工智能;

第四阶段:成熟期

人工智能+区块链;