Browse Source

modify titles

Fengda HUANG 9 years ago
parent
commit
678c2d5c48

+ 3 - 0
chapters/3.0.1-builder.md

@@ -1,3 +1,6 @@
+构建系统
+---
+
 > 构建系统(build system)是用来从源代码生成用户可以使用的目标的自动化工具。目标可以包括库、可执行文件、或者生成的脚本等等。
 
 常用的构建系统包括GNU Make、GNU autotools、CMake、Apache Ant(主要用于JAVA)。此外,所有的集成开发环境(IDE)比如Qt Creator、Microsoft Visual Studio和Eclipse都对他们支持的语言添加了自己的构建系统配置工具。通常IDE中的构建系统只是基于控制台的构建系统(比如Autotool和CMake)的前端。

+ 3 - 0
chapters/3.0.2-git.md

@@ -1,3 +1,6 @@
+Git与版本管理
+---
+
 从一般开发者的角度来看,git有以下功能:
 
 1. 从服务器上克隆数据库(包括代码和版本信息)到单机上。

+ 3 - 0
chapters/3.0.3-typing.md

@@ -1,3 +1,6 @@
+写代码只是在码字
+---
+
 编程这件事情实际上一点儿也不难,当我们只是在使用一个工具创造一些东西的时候,比如我们拿着电烙铁、芯片、电线等去焊一个电路板的时候,我们学的是如何运用这些工具。虽然最后我们的电路板可以实现相同的功能,但是我们可以一眼看到差距所在。
 
 换个贴切一点的比喻,比如烧菜做饭,对于一个优秀的厨师和一个像我这样的门外汉而言,就算给我们相同的食材、厨具,一段时间后也许一份是诱人的美食,一份只能喂猪了——即使我模仿着厨师的步骤一步步地来,也许看上去会差不多,但是一吃便吃出差距了。

+ 3 - 0
chapters/3.0.4-kickoff.md

@@ -1,3 +1,6 @@
+Kick Off
+---
+
 > Kick Off也就是项目启动会议。当我们有项目启动的时候,把涉及的相关人员都聚集起来,然后召开一个启动的会议。
 
 对应于任务,则是任务的启动,开发人员和业务人员一起讨论问题。

+ 3 - 0
chapters/3.0.5-tasking.md

@@ -1,3 +1,6 @@
+Tasking
+---
+
 初到TW时,Pair时候总会有人教我如何开始编码,这应该也是一项基础的能力。结合日常,重新演绎一下这个过程:
 
  - 有一个可衡量、可实现、过程可测的目标

+ 3 - 0
chapters/3.1.0-how-to-test.md

@@ -1,3 +1,6 @@
+如何编写测试
+---
+
 写测试相比于写代码来说算是一种简单的事。多数时候,我们并不需要考虑复杂的逻辑。我们只需要按照我们的代码逻辑,对代码的行为进行覆盖。
 
 这时,我们需要学会更好地去测试代码——测试金字塔。

+ 7 - 4
chapters/3.1.1-mock.md

@@ -1,19 +1,22 @@
-##Stub
+Mock与Stub
+---
+
+**Stub**
 
  - Stub是一种状态确认
  - Stub用简单的行为来替换复杂的行为
 
-##Mock
+**Mock**
 
  - Mock是一种行为确认
  - Mock模拟行为
 
-###stub vs mock###
+**stub vs mock**
 
  - Stub从某种程度上来说,会返回我们一个特定的结果,用代码替换来方法。
  - Mock确保这个方法被调用。
 
-##理解下的stub与mock
+###stub与mock理解
 
 stub从字面意义上来说是存根,存根可以理解为我们保留了一些预留的结果。这个时候我们相当于构建了这样一个特殊的测试场景,用于替换诸如网络或者IO口调度等高度不可预期的测试。如当我们需要去验证某个api被调用并返回了一个结果,举例在最小物联网系统设计中返回的json,我们可以在本地构建一个
 

+ 3 - 0
chapters/3.1.2-tdd.md

@@ -1,3 +1,6 @@
+测试驱动开发
+---
+
 测试驱动开发是一个很"古老"的程序开发方法,然而由于国内的开发流程的问题——即开发人员负责功能的测试,导致这么好的一项技术没有在国内推广。
 
 测试驱动开发的主要过程是:

+ 3 - 0
chapters/3.1.3-selenium.md

@@ -1 +1,4 @@
+Selenium
+---
+
 > Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。

+ 3 - 0
chapters/3.2.1-readable.md

@@ -1,3 +1,6 @@
+可读的代码
+---
+
 过去,我有过在不同的场合吐槽别人的代码写得烂。而我写的仅仅是比别人好一点而已——而不是好很多。
 
 然而这是一件很难的事,人们对于同一件事物未来的考虑都是不一样的。同样的代码在相同的情景下,不同的人会有不同的设计模式。同样的代码在不同的情景下,同样的人会有不同的设计模式。在这里,我们没有办法讨论设计模式,也不需要讨论。

+ 3 - 0
chapters/3.2.2-refactor.md

@@ -1,3 +1,6 @@
+代码重构
+---
+
 什么是重构?
 
 > 重构,一言以蔽之,就是在不改变外部行为的前提下,有条不紊地改善代码。

+ 3 - 0
chapters/3.2.3-intellij-refactor.md

@@ -1,3 +1,6 @@
+Intellij Idea重构
+---
+
 ###重构之提炼函数
 
 Intellij IDEA带了一些有意思的快捷键,或者说自己之前不在意这些快捷键的存在。重构作为单独的一个菜单,显然也突显了其功能的重要性,说说**提炼函数**,或者说提出方法。

+ 4 - 2
chapters/4.1.0-container.md

@@ -1,10 +1,12 @@
+容器
+---
+
 > 容器是应用服务器中位于组件和平台之间的接口集合。
 
 > 容器一般位于应用服务器之内,由应用服务器负责加载和维护。一个容器只能存在于一个应用服务器之内,一个应用服务器可以建立和维护多个容器。
 
 
 
-应用容器
----
+###应用容器
 
 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

+ 3 - 0
chapters/4.1.2-docker.md

@@ -1 +1,4 @@
+Docker
+---
+
 > Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。

+ 4 - 1
chapters/4.2.0-lnmp.md

@@ -1 +1,4 @@
-Linux + Nginx + MySQL + PHP
+LNMP架构
+---
+
+Linux + Nginx + MySQL + PHP

+ 3 - 0
chapters/4.2.1-http-server.md

@@ -1,3 +1,6 @@
+HTTP服务器
+---
+
 >  Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。
 
 目前最主流的三个Web服务器是Apache Nginx IIS

+ 3 - 0
chapters/4.2.2-proxy.md

@@ -1 +1,4 @@
+代理
+---
+
 > 代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET(国际互联网)和Local Area Network(局域网)。

+ 6 - 8
chapters/4.2.3-cache.md

@@ -1,3 +1,5 @@
+Web缓存
+---
 
 Web缓存是显著提高web站点的性能最有效的方法之一。主要有:
 
@@ -6,13 +8,11 @@ Web缓存是显著提高web站点的性能最有效的方法之一。主要有:
 - 前端缓存
 - 客户端缓存
 
-数据库端缓存
----
+###数据库端缓存
 
 这个可以用以“空间换时间”来说。比如建一个表来存储另外一个表某个类型的数据的总条数,在每次更新数据的时候同事更新 数据表和统计条数的表。在需要获取某个类型的数据的条数的时候,就不需要select count去查询,直接查询统计表就可以了,这样可以提高查询的速度和数据库的性能。
 
-应用层缓存
----
+###应用层缓存
 
 应用层缓存这块跟开发人员关系最大,也是平时经常接触的。
 
@@ -31,13 +31,11 @@ Web缓存是显著提高web站点的性能最有效的方法之一。主要有:
 - 按照某种规则(hash,路由等等)把数据存储到不同的缓存服务器
 - 代理模式,应用在获取数据的时候都由代理透明的处理,缓存机制有代理服务器来处理
 
-前端缓存
----
+###前端缓存
 
 我们这里说的前端缓存可以理解为一般使用的cdn技术,利用squid等做前端缓冲技术,主要还是针对静态文件类型,比如图片,css,js,html等静态文件。
 
-客户端缓存
----
+###客户端缓存
 
 浏览器端的缓存,可以让用户请求一次之后,下一次不在从服务器端请求数据,直接从本地缓存读取,可以减轻服务器负担也可以加快用户的访问速度。
 

+ 3 - 0
chapters/4.3.1-configurable.md

@@ -1,3 +1,6 @@
+可配置
+---
+
 让我们写的Web应用可配置是一项很有挑战性,也很实用的技能。
 
 当我们上线了我们的新功能的时候,这时候如果有个Bug,那么我们是下线么?要知道这个版本里面包含了很多的bug修复。如果在这个设计这个新功能的时候,我们有一个可配置和Toogle,那么我们就不需要下线了。只需要切的这个toggle,就可以解决问题了。

+ 4 - 1
chapters/4.3.2-toggle.md

@@ -1,6 +1,9 @@
+Toggle
+---
+
 很少用Java作为技术栈的我,很少有Java的笔记,记录一下这个简单的feature toggle。
 
-##Spring PropertyPlaceHolder
+###Spring PropertyPlaceHolder
 
 在[Stackflow](http://stackoverflow.com/questions/21725709/property-place-holder-bean-in-application-context-xml-spring) 上有一个关于这个问题的回答。
 

+ 5 - 2
chapters/5.1.1-ga.md

@@ -1,6 +1,9 @@
+Google Analytics
+---
+
 Google Analytics是一个非常赞的分析工具,而且它不仅仅可以用于Web应用,也可以用于移动应用。
 
-##受众群体
+###受众群体
 
 如下图是Growth应用,最近两星期的数据结果:
 
@@ -37,7 +40,7 @@ Opera|34|64.71%
 
 类似于这样的数据在我们决定我们对某个浏览器的支持情况时会非常有帮助的。也会加快我们的开发,我们可以工作于主要的浏览器上。
 
-##流量获取
+###流量获取
 
 除此,不得不说的一点就是流量获取,如下图所示是我博客的热门渠道:
 

+ 12 - 10
chapters/5.1.2-seo.md

@@ -1,3 +1,5 @@
+SEO
+---
 
 > 这是一个老的,有些过时纸,但非常平易近人,甚至在我们中间的非白皮书的读者图标微笑什么每个程序员都应该知道的关于搜索引擎优化和他们绝对概念的解释更详细,我只提一笔带过。
 
@@ -52,9 +54,9 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
 
 内容才是SEO最重要的组成部分,这也就是腾讯复制不了的东西。
 
-##SEO基础知识
+###SEO基础知识
 
-###确保网站是可以被索引的
+####确保网站是可以被索引的
 
 一些常见的页面不能被访问的原因
 
@@ -71,7 +73,7 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
  - 网站通过WebSocket的方法渲染内容
  - 使用诸如Mustache之类的JS模板引擎
 
-###什么样的网页可以被索引
+####什么样的网页可以被索引
 
  - 确保页面可以在没有JavaScript下能被渲染。对于现在JavaScript语言的使用越来越多的情况下,在使用JS模板引擎的时候也应该注意这样的问题。
  - 在用户禁用了JavaScript的情况下,保证所有的链接和页面是可以访问的。
@@ -81,7 +83,7 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
  - 确保页面能被索引。有一指向它的URL
  - URL应该遵循最佳实践。如blog/how-to-driver有更好的可读性
 
-###在正确的地方使用正确的关键词
+####在正确的地方使用正确的关键词
 
  - 把关键词放URL中
  - 关键词应该是页面的标签
@@ -92,7 +94,7 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
  - Descripiton标签
 
 
-##内容
+###内容
 
 对于技术博客而言,内容才是最需要考虑的因素。
 
@@ -101,7 +103,7 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
 
 不可忽略的一些因素是内容才是最优质的部分,没有内容一切SEO都是无意义的。
 
-###复制内容问题
+####复制内容问题
 
 一个以用户角度考虑的问题: **用户需要看到多元化的搜索结果**
 
@@ -119,7 +121,7 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
 
 ——待续。
 
-###保持更新
+####保持更新
 
 谷歌对于一个一直在更新的博客来说会有一个好的排名,当然只是相对的。
 
@@ -127,7 +129,7 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
 
 更多内容可以参考:[Google Fresh Factor](http://www.seomoz.org/blog/google-fresh-factor)
 
-###网站速度
+####网站速度
 
 > 谷歌曾表示在他们的算法页面加载速度问题,所以一定要确保你已经调整您的网站,都服从最佳做法,以使事情迅速
 
@@ -141,7 +143,7 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
 
 [Nginx ngx_pagespeed nginx前端优化模块编译](http://www.phodal.com/blog/nginx-with-ngx-pagespeed-module-improve-website-cache/)
 
-###保持耐心
+####保持耐心
 
 > 这是有道理的,如果你在需要的谷歌机器人抓取更新的页面,然后处理每一个页面,并更新与新内容对应的索引的时间因素。
 
@@ -149,7 +151,7 @@ SEO与编程的最大不同之处在于: **编程的核心是技术,SEO的核
 
 SEO是一个长期的过程,很少有网站可以在短期内有一个很好的位置,除非是一个热门的网站,然而在它被发现之前也会一个过程。
 
-###链接
+####链接
 
 在某种意义上,这个是提高PR值,及网站流量的另外一个核心,除了内容以外的核心。
 

+ 3 - 0
chapters/5.1.3-hadoop.md

@@ -1,3 +1,6 @@
+Hadoop分析数据
+---
+
 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
 
 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

+ 0 - 5
chapters/5.1.4-spark.md

@@ -1,5 +0,0 @@
-Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
-
-Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
-
-Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。

+ 47 - 0
chapters/5.2.0-basic-ux.md

@@ -1,6 +1,53 @@
+UX
+---
+
 用户体验设计(英语:User Experience Design),是以用户为中心的一种设计手段,以用户需求为目标而进行的设计。设计过程注重以用户为中心,用户体验的概念从开发的最早期就开始进入整个流程,并贯穿始终。其目的就是保证:
 
 - 对用户体验有正确的预估
 - 认识用户的真实期望和目的
 - 在功能核心还能够以低廉成本加以修改的时候对设计进行修正
 - 保证功能核心同人机界面之间的协调工作,减少BUG。
+
+UX
+---
+
+关于UX的定义我觉得在知乎上的回答似乎太简单了,于是在网上寻寻觅觅终于找到了一个比较接近于答案的回答。原文是在:[Defining UX](http://deviseconsulting.com/defining-ux/),这又是一篇不是翻译的翻译。
+
+###什么是UX
+
+用户体验设计(英语:User Experience Design),是以用户为中心的一种设计手段,以用户需求为目标而进行的设计。设计过程注重以用户为中心,用户体验的概念从开发的最早期就开始进入整个流程,并贯穿始终。其目的就是保证:
+
+ - 对用户体验有正确的预估
+ - 认识用户的真实期望和目的
+ - 在功能核心还能够以低廉成本加以修改的时候对设计进行修正
+ - 保证功能核心同人机界面之间的协调工作,减少BUG。
+
+###UX需要什么
+
+上传一张来自知乎上回答的答案,所需要的东西也差不多是这样子的。
+
+![UX](chapters/images/ux/ux_design.jpg)
+
+ - Information Architecture
+ - Architecture
+ - Industrial Design
+ - Human Factors
+ - Sound Design
+ - Human-Computer Interaction
+ - Visual Design
+ - Content(Text,Video,Sound)
+
+即
+
+ - 信息构架
+ - 构架
+ - 工业设计
+ - 人为因素  (人因学)
+ - 声音设计 (网页设计中比较少)
+ - 人机交互
+ - 可视化设计
+ - 内容 (文字,视频,声音)
+
+交互设计便是``用户体验设计的重点``。我们再来看看另外的这张图片
+
+![Fields Of User Experience Design](chapters/images/ux-field.jpg)

+ 5 - 2
chapters/5.2.1-first-ux.md

@@ -1,3 +1,6 @@
+UX入门
+---
+
 先让我们来看看用户体验的目的是?
 
 ![UX Design](chapters/images/ux/ux_design.jpg)
@@ -6,7 +9,7 @@
 
 一个好的软件应该是简单的,并且是令人愉快的。
 
-##什么是简单?
+###什么是简单?
 
 在不同的UX书籍里,似乎就会说到【简约至上】。简单就是“单纯清楚、不复杂”。而这里的简单并不仅仅只是不复杂那么简单。对于一个软件来说,简单实际上是你一下子就能找到你想要的东西,如:
 
@@ -26,7 +29,7 @@
 
 如果我们可以完成这部分功能的话,那么这就算得上是一个有用的软件。
 
-##进阶
+###进阶
 
 而实际上有用则是位于用户体验的最底层,如下图所示:
 

+ 0 - 42
chapters/5.2.2-ux.md

@@ -1,42 +0,0 @@
-关于UX的定义我觉得在知乎上的回答似乎太简单了,于是在网上寻寻觅觅终于找到了一个比较接近于答案的回答。原文是在:[Defining UX](http://deviseconsulting.com/defining-ux/),这又是一篇不是翻译的翻译。
-
-什么是UX
------
-
-用户体验设计(英语:User Experience Design),是以用户为中心的一种设计手段,以用户需求为目标而进行的设计。设计过程注重以用户为中心,用户体验的概念从开发的最早期就开始进入整个流程,并贯穿始终。其目的就是保证:
-
- - 对用户体验有正确的预估
- - 认识用户的真实期望和目的
- - 在功能核心还能够以低廉成本加以修改的时候对设计进行修正
- - 保证功能核心同人机界面之间的协调工作,减少BUG。
-
-UX需要什么
---- 
-
-上传一张来自知乎上回答的答案,所需要的东西也差不多是这样子的。
-
-![UX](chapters/images/ux/ux_design.jpg)
-
- - Information Architecture
- - Architecture
- - Industrial Design
- - Human Factors
- - Sound Design
- - Human-Computer Interaction
- - Visual Design
- - Content(Text,Video,Sound)
-
-即
-
- - 信息构架
- - 构架
- - 工业设计
- - 人为因素  (人因学)
- - 声音设计 (网页设计中比较少)
- - 人机交互
- - 可视化设计
- - 内容 (文字,视频,声音)
-
-交互设计便是``用户体验设计的重点``。我们再来看看另外的这张图片
-
-![Fields Of User Experience Design](chapters/images/ux-field.jpg)

+ 3 - 0
chapters/5.2.3-learn-design.md

@@ -1,3 +1,6 @@
+认知设计
+---
+
 第一次意识到这本书很有用的时候,是我在策划一个视频。第二次,则是我在计划写一本书的时候。
 
 ![Learn Design](chapters/images/learn-design.png)

+ 4 - 1
chapters/6.1.1-ci.md

@@ -1 +1,4 @@
-持续集成更关注代码质量。持续集成是为了确保随着需求变化而变化的代码,在实现功能的同时,质量不受影响。因此,在每一次构建后会运行单元测试,保证代码级的质量。单元测试会针对每一个特定的输入去判断和观察输出的结果,而单元测试的粒度则用来平衡持续集成的质量和速度。
+持续集成
+---
+
+更关注代码质量。持续集成是为了确保随着需求变化而变化的代码,在实现功能的同时,质量不受影响。因此,在每一次构建后会运行单元测试,保证代码级的质量。单元测试会针对每一个特定的输入去判断和观察输出的结果,而单元测试的粒度则用来平衡持续集成的质量和速度。

+ 3 - 0
chapters/6.1.2-auto.md

@@ -1,3 +1,6 @@
+自动化构建
+---
+
 自动化构建是一个很大、很广的领域,并且涉及到相当多的知识面。
 
 几十年前,Unix世界就已经有了Make,而Java世界有Ant,Maven,现在则有Grunt和Gulp。

+ 3 - 0
chapters/6.2.1-cd.md

@@ -1,3 +1,6 @@
+持续交付
+---
+
 1. 自动化
 2. DevOps
 3. 云基础设施

+ 2 - 0
chapters/7.1.1-legacy-code.md

@@ -1,3 +1,5 @@
+遗留代码
+---
 
 我们生活息息相关的很多软件里满是错误、脆弱,并且难以扩展,这就是我们说的“遗留代码”。
 

+ 3 - 0
chapters/7.1.2-change-code.md

@@ -1,3 +1,6 @@
+如何修改代码
+---
+
 > 即使是最训练有素的开发团队,也不能保证始终编写出清晰高效的代码。
 
 然而,如果我们不去尝试做一些改变,这些代码就会遗留下去——成为遗留代码,再次重构掉。即使说,重构系统是不可避免的一个过程,但是在这个过程中要是能抽象中领域特定的代码、语言也是件不错的事。

+ 0 - 1
chapters/7.2.1-refactor2.md

@@ -1,4 +1,3 @@
-
 网站重构
 ----
 

+ 3 - 0
chapters/8.1.1-summary.md

@@ -1,3 +1,6 @@
+自省
+---
+
 总结在某种意义上相当于自己对自己的反馈:
 
 ![Output is Input](chapters/images/output-input.png)

+ 3 - 0
chapters/8.1.2-retro.md

@@ -1,3 +1,6 @@
+Retro
+---
+
 > Retro 的目的是对团队的激励。
 
 > Retro的模式的特点就是让我们更关注于Less Well。定期,经常,回顾,反思。当我们无法变得更好的时候可以帮助我们反观团队自身,不要变得更差。让破窗效应难以发生。

+ 3 - 0
chapters/8.2.1-emergent-design.md

@@ -1,3 +1,6 @@
+浮现式设计
+---
+
 设计模式不是一开始就有的,好的软件也不是一开始就设计成现在这样的,好的设计亦是如此。
 
 导致我们重构现有系统的原因有很多,但是多数是因为原来的代码变得越来越不可读,并且重构的风险太大了。在实现业务逻辑的时候,我们快速地用代码实现,没有测试,没有好的设计。

+ 3 - 0
chapters/8.2.2-arch-pattern.md

@@ -1,2 +1,5 @@
+架构模式
+---
+
 > 模式就是最好的架构。
 

+ 3 - 0
chapters/8.2.3-architecture.md

@@ -1,3 +1,6 @@
+每个人都是架构师
+---
+
 每一个程序员都是架构师。
 
 平时在我们工作的时候,架构师这个Title都被那些非常有经历的开发人员占据着。然而,如果你喜欢刷刷Github,喜欢做一些有意思的东西,那么你也是一个架构师。