软件工程之美学习

Day 1

原则

  • 我们要从最基础的编码质量做起,视高质量代码为尊严和个人声誉。代码就像是高楼大厦的一砖一瓦,没有高质量的代码,可信的产品就是空中楼阁。要优化各种编程规范,遵从架构与设计原则,熟练使用各种编程库和 API,编写出简洁、规范、可读性强、健壮安全的代码。
  • 我们要深刻理解架构的核心要素,基于可信导向来进行架构与设计。
  • 在确保可信的前提下,要在性能、功能、扩展性等方面做好权衡;慎重地定义我们的模块与接口,真正做到高内聚与低耦合;我们要遵循权限和攻击面最小化等安全设计原则,科学设计模块之间的隔离与接口,提升安全性;低阶架构与设计要遵循高阶的架构与设计原则,在充分理解原有架构与设计的情况下,持续优化;我们要熟悉各种设计模式,重用公共成熟组件和服务,避免重复劳动。
  • 然而随着时间的推移、环境的变化以及新技术、新功能特性的引入,架构也会腐化。面对腐化了的架构,要毫不犹豫地去重构它

方法

软件工程 = 工具 + 方法 + 过程
“做中学”和“教中学”

Day2

敏捷开发与各种模型

  • 我们今天一起学习了什么是敏捷开发,也就是敏捷开发是一套价值观和原则。也对比了瀑布模型和敏捷开发,其中的差异还是很大的。
  • 瀑布模型面向的是过程,而敏捷开发面向的是人。敏捷开发要解决的,恰恰是瀑布模型中存在的一些问题。
  • 最后,在要不要用敏捷开发这个问题上,不用过于纠结,看好敏捷开发,那就放心去用,觉得时机还不成熟、还不够了解,就先试点或者只是先借鉴其好的实践。
  • 软件开发,最核心的是人,而不是用什么方法,以前没有敏捷开发只有瀑布模型的时候,也一样诞生了大量伟大的软件,像 Windows、Office。现在有敏捷开发,更多的是让我们多了一些选择。

区块链

广义和狭义的区块链

  • 广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。
  • 狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本(分布式数据库)。

区块链结构与特征

  1. 一个分布式的链接账本,每个账本就是一个“区块”;

  2. 基于分布式的共识算法来决定记账者;

  3. 账本内交易由密码学签名和哈希算法保证不可篡改;

  4. 账本按产生的时间顺序链接,当前账本含有上一个账本的哈希值,账本间的链接保证不可篡改;

  5. 所有交易在账本中可追溯。

  • 区块链是一种共享的分布式数据库技术。主要有以下4个特征:
  1. 去中心化(Decentralization):区块链由众多节点组成一个端到端的网络,不存 在中心化的设备和管理机构,任一节点停止工作都会不影响系统整体的运作。

  2. 去信任(Trustless):系统中所有节点之间通过数字签名技术进行验证,无需信任也可以进行交易,只要按照系统既定的规则进行,节点之间不能也无法欺骗其它节点;

  3. 集体维护(CollectivelyMaintain):系统是由其中所有具有维护功能的节点共同维护的,系统中所有人共同参与维护工作;

  4. 可靠数据库(ReliableDatabase):系统中每一个节点都拥有最新的完整数据库拷贝,单个甚至多个节点对数据库的修改无法影响其他节点的数据库,除非能控制整个网络中超过51%的节点同时修改,这几乎不可能发生。

posted on 2021-01-13 00:14  20175316  阅读(117)  评论(0编辑  收藏  举报