Browse Source

add intro

Fengda HUANG 9 years ago
parent
commit
f9c0d0344f

+ 25 - 0
chapters/1.0.md

@@ -1,2 +1,27 @@
 基础知识篇
 ===
+
+在我们第一次开始写程序的时候,都是以Hello World开始的。或者:
+
+```c
+printf("hello,world");
+```
+
+又或许:
+
+```javascript
+alert('hello,world');
+```
+
+过去的十几年里,试过用二十几种不同的语言,每个都是以hello,world作为开头。在一些特定的软件,如Nginx,则是**It Works**。
+
+这是一个很长的故事,这个程序最早出现于1972年,由贝尔实验室成员布莱恩·柯林汉撰写的内部技术文件"A Tutorial Introduction to the Language B"
+》之中。不久,同作者于1974年所撰写的《Programming in C: A Tutorial》,也延用这个范例;而以本文件扩编改写的《C语言程序设计》也保留了这个范例程式。
+
+而在日常我们工作的时候,我们也会使用类似于hello,world的boilerplate来完成基本的项目创建。
+
+搭建环境是一件非常重要的事,它决定了你能不能更好地工作。
+
+毕竟环境是生产率的一部分。
+
+高效的程序员和低效程序员间的十倍差距,至少有三倍是因为环境差异。

+ 10 - 0
chapters/2.0.0-back-front.md

@@ -1,2 +1,12 @@
 前端与后台
 ===
+
+维基百科是这样说的:前端Front-end和后端back-end是描述进程开始和结束的通用词汇。前端作用于采集输入信息,后端进行处理。计算机程序的界面样式,视觉呈现属于前端。
+
+这种说法给人一种很模糊的感觉,但是他说得又很对,它负责视觉展示。在MVC结构或者MVP中,负责视觉显示的部分只有View层,而今天大多数所谓的View层已经超越了View层。前端是一个很神奇的概念,但是而今的前端已经发生了很大的变化。
+
+你引入了Backbone、Angluar,你的架构变成了MVP、MVVM。尽管发生了一些架构上的变化,但是项目的开发并没有因此而发生变化。这其中涉及到了一些职责的问题,如果某一个层级中有太多的职责,那么它是不是加重了一些人的负担?
+
+后台在过去的岁月里起着很重要的作用,当然在未来也是。
+
+就最几年的解耦趋势来看,它在变得更小,变成一系列的服务。并向前台提供很多RESTful API,看上去有点像提供一些辅助性的工作。

+ 0 - 8
chapters/3.0.0-builder.md

@@ -1,8 +0,0 @@
-编码
-===
-
-对比于Web应用开发来说,构建系统应该还包括应用打包(如Java中的Jar包,或者用于部署的RPM包、源代码分析、测试覆盖率分析等等。
- 
-
-Grunt是基于Node.js的项目构建工具。它可以自动运行你所设定的任务。Grunt拥有数量庞大的插件,几乎任何你所要做的事情都可以用Grunt实现。
-

+ 8 - 0
chapters/3.0.0-coding.md

@@ -0,0 +1,8 @@
+编码
+===
+
+在我们真正开始去写代码之前,我们可能会去考虑一些事情。怎么去规划我们的任务,如果去细分这个任务。
+
+1. 如果一件事可以自动化,那么就尽量去自动化,毕竟你是一个程序员。
+2. 快捷键!快捷键!快捷键!
+3. 使用可以帮助你快速工作的工具——如启动器。

+ 9 - 0
chapters/3.0.1-builder.md

@@ -0,0 +1,9 @@
+> 构建系统(build system)是用来从源代码生成用户可以使用的目标的自动化工具。目标可以包括库、可执行文件、或者生成的脚本等等。
+
+常用的构建系统包括GNU Make、GNU autotools、CMake、Apache Ant(主要用于JAVA)。此外,所有的集成开发环境(IDE)比如Qt Creator、Microsoft Visual Studio和Eclipse都对他们支持的语言添加了自己的构建系统配置工具。通常IDE中的构建系统只是基于控制台的构建系统(比如Autotool和CMake)的前端。
+
+对比于Web应用开发来说,构建系统应该还包括应用打包(如Java中的Jar包,或者用于部署的RPM包、源代码分析、测试覆盖率分析等等。
+ 
+
+Grunt是基于Node.js的项目构建工具。它可以自动运行你所设定的任务。Grunt拥有数量庞大的插件,几乎任何你所要做的事情都可以用Grunt实现。
+

+ 0 - 0
chapters/3.0.1-git.md → chapters/3.0.2-git.md


+ 0 - 0
chapters/3.0.2-typing.md → chapters/3.0.3-typing.md


+ 0 - 0
chapters/3.0.3-kickoff.md → chapters/3.0.4-kickoff.md


+ 0 - 0
chapters/3.0.4-tasking.md → chapters/3.0.5-tasking.md


+ 16 - 0
chapters/4.0.0-golive.md

@@ -1,2 +1,18 @@
 上线
 ===
+
+作为一个开发人员,我们也需要去了解如何配置服务器。不仅仅因为它可以帮助我们更好地理解Web开发,而且有时候很多Bug都是因为服务器环境引起的——如臭名昭著地编码问题。
+
+ - 一些简单的Ops技能。
+ - 了解服务器的相关软件
+ - 搭建运行Web应用的服务器
+ - 自动化部署应用
+
+为了即时的完成工作,你是不是放弃了很多东西,比如质量?测试是很重要的一个环节,不仅可以为我们保证代码的质量,而且还可以为我们以后的重构提供基础条件。
+
+作为一个在敏捷团队里工作的开发人员,初次意识到在国内大部分的开发人员是不写测试的时候,我还是有点诧异。
+
+尽管没有写测试可以在初期走得很快,但是在后期就会遇到一堆麻烦事。传统的思维下,我们会认为一个人会在一家公司工作很久。而这件事在最近几年里变化得特别快,特别是在信息技术高速发展的今天。人们可以从不同的地方得到哪里缺人,从一个地方到另外一个地方也变得异常的快,这就意味着人员流动是常态。
+
+而代码尽管还在,但是却会随着人员流动而出现更多的问题。这时如果代码是有有效的测试,那么则可以帮助系统更好地被理解。
+

+ 6 - 0
chapters/4.3.1-configurable.md

@@ -1 +1,7 @@
+让我们写的Web应用可配置是一项很有挑战性,也很实用的技能。
+
+当我们上线了我们的新功能的时候,这时候如果有个Bug,那么我们是下线么?要知道这个版本里面包含了很多的bug修复。如果在这个设计这个新功能的时候,我们有一个可配置和Toogle,那么我们就不需要下线了。只需要切的这个toggle,就可以解决问题了。
+
+对于有多套环境的开发来说,如果我们针对不同的环境都有不同的配置,那么这个灵活的开发会帮助我们更好的开发。
+
 起先,我们在本地开发的时候为本地创建了一套环境,也创建了本地的配置。接着我们需要将我们的包部署到测试环境,也生成了测试环境的相应配置。这其中如果有其他的环境,我们也需要创建相应的环境。最后,我们还需要为产品环境创建全新的配置。

+ 13 - 0
chapters/5.0.0-data-analytics.md

@@ -1,2 +1,15 @@
 数据分析
 ===
+
+数据分析是一个很有意思的过程,也是一个非常重要的过程,他们是非常重要的一个循环:
+
+> 想法 -> 构建 -> 产品 -> 衡量 -> 数据 -> 学习 -> 想法
+
+有时候,对于我们的决定只要有一点点的数据支持就够了。也就是一点点的变化,可能就决定了我们产品的好坏。我们可能会因此而作出一些些改变,这些改变可能会让我们打败巨头。
+
+这一点和Growth的构建过程也很相像,在最开始的时候我只是想制定一个成长路线。而后,我发现这好像是一个不错的idea,我就开始去构建这个idea。于是它变成了Growth,这时候我需要依靠什么去分析用户喜欢的功能呢?我没有那么多的精力去和那么多的人沟通,也不能去和那么多的人沟通。
+
+我只能借助Google Analytics来收集用户的数据。从这些数据里去学习一些东西,而这些就会变成一个新的想法。
+      
+不得不补充一点的是,作为一个开发人员,会讨厌这点异想天开。
+

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

@@ -0,0 +1,6 @@
+用户体验设计(英语:User Experience Design),是以用户为中心的一种设计手段,以用户需求为目标而进行的设计。设计过程注重以用户为中心,用户体验的概念从开发的最早期就开始进入整个流程,并贯穿始终。其目的就是保证:
+
+- 对用户体验有正确的预估
+- 认识用户的真实期望和目的
+- 在功能核心还能够以低廉成本加以修改的时候对设计进行修正
+- 保证功能核心同人机界面之间的协调工作,减少BUG。

+ 2 - 0
chapters/6.0.0-cd.md

@@ -1,2 +1,4 @@
 持续交付
 ===
+
+> 交付管道的建立和自动化是持续交付的基础

+ 7 - 0
chapters/7.0.0-legacy-system.md

@@ -1,2 +1,9 @@
 遗留系统
 ===
+
+尽管维基百科上对遗留系统的定义是:
+
+> 一种旧的方法、旧的技术、旧的计算机系统或应用程序。
+
+但是实际上,当你看到某个网站宣称用新的框架来替换旧的框架的时候,你应该知晓他们原有的系统是遗留系统。人们已经不想在上面工作了,很多代码也不知道是干什么的,也没有人想去深究——毕竟不是自己的代码。判断是否是遗留代码的条件很简单,维护成本是否比开发成本高很多。
+

+ 5 - 1
chapters/8.0.0-retro.md

@@ -1,2 +1,6 @@
 回顾与新架构
-===
+===
+
+架构设计看上去是一个很复杂的话题,然而他是属于设计的一部分。
+
+如果你懂得什么是美、什么是丑,那么我想你也是懂得设计的。