Browse Source

improve readability for chapter one

aidewoode 9 years ago
parent
commit
241d27b6fd

+ 31 - 31
README.md

@@ -1,9 +1,9 @@
 Growth: 全栈增长工程师指南
 ===
 
-**不止于Full Stack,还有Growth Hacking**。
+**不止于 Full Stack,还有 Growth Hacking**。
 
-> 《全栈增长工程师指南》是一本依据我在《[Repractise简介篇:Web开发的七天里](http://mp.weixin.qq.com/s?__biz=MjM5Mjg4NDMwMA==&mid=403171959&idx=1&sn=08f0717e2306efd7d80c8bb603e644d0#rd)》中所说的Web开发的七个步骤而展开的电子书,当然它也是一个APP,它一本关于如何成为全栈增长工程师的指南。
+> 《全栈增长工程师指南》是一本依据我在《[Repractise简介篇:Web开发的七天里](http://mp.weixin.qq.com/s?__biz=MjM5Mjg4NDMwMA==&mid=403171959&idx=1&sn=08f0717e2306efd7d80c8bb603e644d0#rd)》中所说的 Web 开发的七个步骤而展开的电子书,当然它也是一个 APP,它一本关于如何成为全栈增长工程师的指南。
 
 **我们都会学习,但是有时候我们只是不知道应该学习什么而已。**
 
@@ -21,7 +21,7 @@ Growth: 全栈增长工程师指南
 
 Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-django)
 
-没钱棒个人场: 关注我的微信公众号(扫描下面的二维码或搜索Phodal).
+没钱棒个人场: 关注我的微信公众号(扫描下面的二维码或搜索 Phodal).
 
 ![QRCode](https://raw.githubusercontent.com/phodal/growth/master/www/img/wechat.jpg)
 
@@ -48,12 +48,12 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
         *   [全栈工程师的未来:无栈](http://growth.phodal.com/#全栈工程师的未来无栈)
 *   [基础知识篇](http://growth.phodal.com/#基础知识篇)
     *   [工具只是辅助](http://growth.phodal.com/#工具只是辅助)
-        *   [WebStorm还是Sublime?](http://growth.phodal.com/#webstorm还是sublime)
+        *   [WebStorm 还是 Sublime?](http://growth.phodal.com/#webstorm还是sublime)
         *   [语言也是一种工具](http://growth.phodal.com/#语言也是一种工具)
     *   [提高效率的工具](http://growth.phodal.com/#提高效率的工具)
         *   [快速启动软件](http://growth.phodal.com/#快速启动软件)
         *   [IDE](http://growth.phodal.com/#ide)
-        *   [DEBUG工具](http://growth.phodal.com/#debug工具)
+        *   [DEBUG 工具](http://growth.phodal.com/#debug工具)
         *   [终端或命令提示符](http://growth.phodal.com/#终端或命令提示符)
         *   [包管理](http://growth.phodal.com/#包管理)
     *   [环境搭建](http://growth.phodal.com/#环境搭建)
@@ -66,17 +66,17 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
         *   [如何应用一门新的技术](http://growth.phodal.com/#如何应用一门新的技术)
     *   [Web编程基础](http://growth.phodal.com/#web编程基础)
         *   [从浏览器到服务器](http://growth.phodal.com/#从浏览器到服务器)
-        *   [从HTML到页面显示](http://growth.phodal.com/#从html到页面显示)
+        *   [从 HTML 到页面显示](http://growth.phodal.com/#从html到页面显示)
     *   [HTML](http://growth.phodal.com/#html)
         *   [hello,world](http://growth.phodal.com/#helloworld)
         *   [中文?](http://growth.phodal.com/#中文)
-        *   [其他html标记](http://growth.phodal.com/#其他html标记)
+        *   [其他 html 标记](http://growth.phodal.com/#其他html标记)
         *   [小结](http://growth.phodal.com/#小结-1)
     *   [CSS](http://growth.phodal.com/#css)
         *   [简介](http://growth.phodal.com/#简介)
         *   [样式与目标](http://growth.phodal.com/#样式与目标)
         *   [选择器](http://growth.phodal.com/#选择器)
-        *   [更有趣的CSS](http://growth.phodal.com/#更有趣的css)
+        *   [更有趣的 CSS](http://growth.phodal.com/#更有趣的css)
     *   [JavaScript](http://growth.phodal.com/#javascript)
         *   [hello,world](http://growth.phodal.com/#helloworld-1)
         *   [JavaScriptFul](http://growth.phodal.com/#javascriptful)
@@ -95,7 +95,7 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
         *   [Controller](http://growth.phodal.com/#controller)
         *   [更多](http://growth.phodal.com/#更多-1)
     *   [后台即服务](http://growth.phodal.com/#后台即服务)
-        *   [API演进史](http://growth.phodal.com/#api演进史)
+        *   [API 演进史](http://growth.phodal.com/#api演进史)
         *   [后台即服务](http://growth.phodal.com/#后台即服务-1)
     *   [数据持久化](http://growth.phodal.com/#数据持久化)
         *   [文件存储](http://growth.phodal.com/#文件存储)
@@ -112,15 +112,15 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
         *   [WebSocket](http://growth.phodal.com/#websocket)
 *   [编码](http://growth.phodal.com/#编码)
     *   [编码过程](http://growth.phodal.com/#编码过程)
-    *   [Web应用的构建系统](http://growth.phodal.com/#web应用的构建系统)
-        *   [Web应用的构建过程](http://growth.phodal.com/#web应用的构建过程)
-        *   [Web应用的构建实战](http://growth.phodal.com/#web应用的构建实战)
-    *   [Git与版本控制](http://growth.phodal.com/#git与版本控制)
+    *   [Web 应用的构建系统](http://growth.phodal.com/#web应用的构建系统)
+        *   [Web 应用的构建过程](http://growth.phodal.com/#web应用的构建过程)
+        *   [Web 应用的构建实战](http://growth.phodal.com/#web应用的构建实战)
+    *   [Git 与版本控制](http://growth.phodal.com/#git与版本控制)
         *   [版本控制](http://growth.phodal.com/#版本控制)
         *   [Git](http://growth.phodal.com/#git)
     *   [Tasking](http://growth.phodal.com/#tasking)
-        *   [如何Tasking一本书](http://growth.phodal.com/#如何tasking一本书)
-        *   [Tasking开发任务](http://growth.phodal.com/#tasking开发任务)
+        *   [如何 Tasking 一本书](http://growth.phodal.com/#如何tasking一本书)
+        *   [Tasking 开发任务](http://growth.phodal.com/#tasking开发任务)
     *   [写代码只是在码字](http://growth.phodal.com/#写代码只是在码字)
     *   [内置索引与外置引擎](http://growth.phodal.com/#内置索引与外置引擎)
         *   [门户网站](http://growth.phodal.com/#门户网站)
@@ -142,7 +142,7 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
         *   [重命名](http://growth.phodal.com/#重命名)
         *   [提取变量](http://growth.phodal.com/#提取变量)
         *   [提炼函数](http://growth.phodal.com/#提炼函数)
-    *   [Intellij Idea重构](http://growth.phodal.com/#intellij-idea重构)
+    *   [Intellij Idea 重构](http://growth.phodal.com/#intellij-idea重构)
         *   [提炼函数](http://growth.phodal.com/#提炼函数-1)
         *   [内联函数](http://growth.phodal.com/#内联函数)
         *   [查询取代临时变量](http://growth.phodal.com/#查询取代临时变量)
@@ -152,19 +152,19 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
     *   [隔离与运行环境](http://growth.phodal.com/#隔离与运行环境)
         *   [隔离硬件:虚拟机](http://growth.phodal.com/#隔离硬件虚拟机)
         *   [隔离操作系统:容器虚拟化](http://growth.phodal.com/#隔离操作系统容器虚拟化)
-        *   [隔离底层:Servlet容器](http://growth.phodal.com/#隔离底层servlet容器)
+        *   [隔离底层:Servlet 容器](http://growth.phodal.com/#隔离底层servlet容器)
         *   [隔离依赖版本:虚拟环境](http://growth.phodal.com/#隔离依赖版本虚拟环境)
         *   [隔离运行环境:语言虚拟机](http://growth.phodal.com/#隔离运行环境语言虚拟机)
         *   [隔离语言:DSL](http://growth.phodal.com/#隔离语言dsl)
-    *   [LNMP架构](http://growth.phodal.com/#lnmp架构)
+    *   [LNMP 架构](http://growth.phodal.com/#lnmp架构)
         *   [GNU/Linux](http://growth.phodal.com/#gnulinux-1)
-        *   [HTTP服务器](http://growth.phodal.com/#http服务器)
-    *   [Web缓存](http://growth.phodal.com/#web缓存)
+        *   [HTTP 服务器](http://growth.phodal.com/#http服务器)
+    *   [Web 缓存](http://growth.phodal.com/#web缓存)
         *   [数据库端缓存](http://growth.phodal.com/#数据库端缓存)
         *   [应用层缓存](http://growth.phodal.com/#应用层缓存)
         *   [前端缓存](http://growth.phodal.com/#前端缓存)
         *   [客户端缓存](http://growth.phodal.com/#客户端缓存)
-        *   [HTML5离线缓存](http://growth.phodal.com/#html5离线缓存)
+        *   [HTML5 离线缓存](http://growth.phodal.com/#html5离线缓存)
     *   [可配置](http://growth.phodal.com/#可配置)
         *   [环境配置](http://growth.phodal.com/#环境配置)
         *   [运行机制](http://growth.phodal.com/#运行机制)
@@ -192,21 +192,21 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
         *   [服务监测](http://growth.phodal.com/#服务监测)
         *   [安全监测](http://growth.phodal.com/#安全监测)
     *   [应用程序性能分析](http://growth.phodal.com/#应用程序性能分析)
-        *   [关于Apdex](http://growth.phodal.com/#关于apdex)
+        *   [关于 Apdex](http://growth.phodal.com/#关于apdex)
         *   [博客性能分析](http://growth.phodal.com/#博客性能分析)
     *   [网站性能优化](http://growth.phodal.com/#网站性能优化)
-        *   [减少HTTP请求](http://growth.phodal.com/#减少http请求)
+        *   [减少 HTTP 请求](http://growth.phodal.com/#减少http请求)
         *   [页面内部优化](http://growth.phodal.com/#页面内部优化)
         *   [启用缓存](http://growth.phodal.com/#启用缓存)
         *   [减少下载量](http://growth.phodal.com/#减少下载量)
         *   [网络连接上的优化](http://growth.phodal.com/#网络连接上的优化)
     *   [SEO](http://growth.phodal.com/#seo)
         *   [爬虫与索引](http://growth.phodal.com/#爬虫与索引)
-        *   [什么样的网站需要SEO?](http://growth.phodal.com/#什么样的网站需要seo)
-        *   [SEO基础知识](http://growth.phodal.com/#seo基础知识)
+        *   [什么样的网站需要 SEO?](http://growth.phodal.com/#什么样的网站需要seo)
+        *   [SEO 基础知识](http://growth.phodal.com/#seo基础知识)
         *   [内容](http://growth.phodal.com/#内容)
-    *   [UX入门](http://growth.phodal.com/#ux入门)
-        *   [什么是UX](http://growth.phodal.com/#什么是ux)
+    *   [UX 入门](http://growth.phodal.com/#ux入门)
+        *   [什么是 UX](http://growth.phodal.com/#什么是ux)
         *   [什么是简单?](http://growth.phodal.com/#什么是简单)
         *   [进阶](http://growth.phodal.com/#进阶)
         *   [用户体验要素](http://growth.phodal.com/#用户体验要素)
@@ -245,7 +245,7 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
     *   [自我总结](http://growth.phodal.com/#自我总结)
         *   [吾日三省吾身](http://growth.phodal.com/#吾日三省吾身)
     *   [Retro](http://growth.phodal.com/#retro)
-        *   [Retro的过程](http://growth.phodal.com/#retro的过程)
+        *   [Retro 的过程](http://growth.phodal.com/#retro的过程)
         *   [三个维度](http://growth.phodal.com/#三个维度)
     *   [架构模式](http://growth.phodal.com/#架构模式)
         *   [预设计式架构](http://growth.phodal.com/#预设计式架构)
@@ -258,10 +258,10 @@ Django版: [Growth In Action Django](https://github.com/phodal/growth-in-action-
         *   [如何构建一个博客系统](http://growth.phodal.com/#如何构建一个博客系统)
         *   [相关阅读资料](http://growth.phodal.com/#相关阅读资料)
     *   [架构解耦](http://growth.phodal.com/#架构解耦)
-        *   [从MVC与微服务](http://growth.phodal.com/#从mvc与微服务)
+        *   [从 MVC 与微服务](http://growth.phodal.com/#从mvc与微服务)
         *   [CQRS](http://growth.phodal.com/#cqrs)
-        *   [CQRS结合微服务](http://growth.phodal.com/#cqrs结合微服务)
-    
+        *   [CQRS 结合微服务](http://growth.phodal.com/#cqrs结合微服务)
+
 License
 ---
 

+ 15 - 15
chapters/0.0.0-prelude.md

@@ -1,7 +1,7 @@
 Growth: 全栈增长工程师指南
 ===
 
-这是一本不止于全栈工程师的学习手册,它也包含了如何成为一个Growth Hacker的知识。
+这是一本不止于全栈工程师的学习手册,它也包含了如何成为一个 Growth Hacker 的知识。
 
 全栈工程师是未来
 ---
@@ -16,13 +16,13 @@ Growth: 全栈增长工程师指南
 
 ###技术的革新史
 
-从开始的CGI到MVC模式,再到前后端分离的架构模式,都在不断地降低技术的门槛。而这些门槛的降低,已经足以让一两个人来完成大部分的工作了。
+从开始的 CGI  MVC 模式,再到前后端分离的架构模式,都在不断地降低技术的门槛。而这些门槛的降低,已经足以让一两个人来完成大部分的工作了。
 
 ####CGI
 
-二十年前的网站以静态的形式出现,这样的网站并不需要太多的人去维护、管理。接着,人们发明了CGI(通用网关接口,英语:Common Gateway Interface)来实现动态的网站。下图是一个早期网站的架构图:
+二十年前的网站以静态的形式出现,这样的网站并不需要太多的人去维护、管理。接着,人们发明了 CGI (通用网关接口,英语:Common Gateway Interface)来实现动态的网站。下图是一个早期网站的架构图:
 
-![CGI网站架构](assets/article/prelude/cgi-arch.gif)
+![CGI 网站架构](assets/article/prelude/cgi-arch.gif)
 
 当时这种网站的URL类似于:
 
@@ -32,7 +32,7 @@ https://www.phodal.com/cgi-bin/getblog
 
 (PS:这个链接是为了讲解而存在的,并没有真实存在。)
 
-用户访问上面的网页的时候就会访问,cgi-bin的路径下对应的getblog脚本。你可以用Shell返回这个网页:
+用户访问上面的网页的时候就会访问,cgi-bin 的路径下对应的 getblog 脚本。你可以用 Shell 返回这个网页:
 
 ```bash
 #!/bin/sh
@@ -44,15 +44,15 @@ Blabla,各种代码混乱地夹杂在一起。不得不说一句:这样的
 
 ![CGI脚本文件 ](assets/article/prelude/cgi-script.png)
 
-这简直就是一场恶梦。不过,在今天好似那些PHP新手也是这样写代码的。
+这简直就是一场恶梦。不过,在今天好似那些 PHP 新手也是这样写代码的。
 
-好了,这时候我们就可以讨论讨论MVC模式了。
+好了,这时候我们就可以讨论讨论 MVC 模式了。
 
 ####MVC架构
 
-我有理由相信Martin Fowler的《企业应用架构模式》在当时一定非常受欢迎。代码从上面的耦合状态变成了:
+我有理由相信 Martin Fowler 的《企业应用架构模式》在当时一定非常受欢迎。代码从上面的耦合状态变成了:
 
-![MVC架构](assets/article/prelude/caf_mvc_arch.png)
+![MVC 架构](assets/article/prelude/caf_mvc_arch.png)
 
 相似大家也已经对这样的架构很熟悉了,我们就不多解释了。如果你还不是非常了解的话,可以看看这本书后面的部分。
 
@@ -62,7 +62,7 @@ Blabla,各种代码混乱地夹杂在一起。不得不说一句:这样的
 
 ![后台服务化与前台一致化架构](assets/article/prelude/oneui-serviceful-arch.png)
 
-后台在不知不觉中已经被服务化了,即只提供API接口和服务。前端在这时已经尽量地和APP端在结合,使得他们可以保持一致。
+后台在不知不觉中已经被服务化了,即只提供API接口和服务。前端在这时已经尽量地和 APP 端在结合,使得他们可以保持一致。
 
 ###软件开发的核心难题:沟通
 
@@ -90,7 +90,7 @@ Blabla,各种代码混乱地夹杂在一起。不得不说一句:这样的
 
 ![敏捷软件开发](assets/article/prelude/scrum.png)
 
-但是据我的所知:国内的多数互联网公司是不写测试的、没有Code Review等等。当然,这也不是一篇关于如何实践敏捷的文章。敏捷与瀑布式开发在很大的区别就是:沟通问题。传统的软件开发在调研完毕后就是分析、开发等等。而敏捷开发则会强调这个过程中的沟通问题:
+但是据我的所知:国内的多数互联网公司是不写测试的、没有 Code Review 等等。当然,这也不是一篇关于如何实践敏捷的文章。敏捷与瀑布式开发在很大的区别就是:沟通问题。传统的软件开发在调研完毕后就是分析、开发等等。而敏捷开发则会强调这个过程中的沟通问题:
 
 ![敏捷软件开发的沟通模型](assets/article/prelude/scrum-communication.png)
 
@@ -146,7 +146,7 @@ Blabla,各种代码混乱地夹杂在一起。不得不说一句:这样的
 
 而这种思维依据于不同的事情可能会发生一些差异,但是总体上来说是相似的。当遇到一个需要创轮子的问题时,我们就会看到两种不同的方式。
 
-对于全栈工程师来说,他们喜欢依赖于外部的思维,用于产生颠覆式思维。如Angular.js这样的框架便是例子,前端结合后端开发语言Java的思维而产生。而专家则依赖于内部的条件,创造出不一样的适应式创新。如之前流行的Backbone框架,适应当时的情况而产生。
+对于全栈工程师来说,他们喜欢依赖于外部的思维,用于产生颠覆式思维。如 AngularJS 这样的框架便是例子,前端结合后端开发语言 Java 的思维而产生。而专家则依赖于内部的条件,创造出不一样的适应式创新。如之前流行的 Backbone 框架,适应当时的情况而产生。
 
 ###全栈工程师的未来:无栈
 
@@ -158,7 +158,7 @@ Blabla,各种代码混乱地夹杂在一起。不得不说一句:这样的
 
 人们以为全栈工程师什么都会,这是一个明显的误区——然而要改变这个误区很难。最后,导致的结果是大家觉得全栈工程师的水平也就那样。换句来说,人们根本不知道什么是全栈工程师。在平时的工作里,你的队伍都知道你在不同领域有丰富的知识。而在那些不了解你的人的印象里,就是猜测你什么都会。
 
-因此,这就会变成一个骂名,也是一个在目前看来很难改变的问题。在这方面只能尽可能地去了解一些通用的问题,并不能去了解所有的问题。在一次被面试全栈工程师的过程中,有一个面试官准备了几个不同语言(Javascript、Java、Python、Ruby)的问题来问我,我只想说Ciao——意大利语:你好!
+因此,这就会变成一个骂名,也是一个在目前看来很难改变的问题。在这方面只能尽可能地去了解一些通用的问题,并不能去了解所有的问题。在一次被面试全栈工程师的过程中,有一个面试官准备了几个不同语言(Javascript、Java、Python、Ruby)的问题来问我,我只想说 Ciao —— 意大利语:你好!
 
 除了这个问题——人们不了解什么是全栈工程师。还有一个问题,就是刚才我们说的成为专家的老大难问题。
 
@@ -171,9 +171,9 @@ Blabla,各种代码混乱地夹杂在一起。不得不说一句:这样的
 
 当我第一次看到全栈工程师这个名字的时候,我发现我已然是一个全栈工程师。因为我的学习路线比较独特:
 
-中小学:编程语言 -> 高中:操作系统、内核、游戏编程 -> 大学: 硬件、Web开发 -> 工作:后端 + 前端
+中小学:编程语言 -> 高中:操作系统、内核、游戏编程 -> 大学: 硬件、Web 开发 -> 工作:后端 + 前端
 
-而在当时我对SEO非常感兴趣,我发现这分析和Marketing似乎做得还可以。然后便往Growth Hacking发展了:
+而在当时我对 SEO 非常感兴趣,我发现这分析和 Marketing 似乎做得还可以。然后便往 Growth Hacking 发展了:
 
 ![Growth Hacking](assets/article/prelude/growth-hacking.jpg)
 

+ 3 - 3
chapters/1.0.md

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

+ 16 - 16
chapters/1.1.0-setup.md

@@ -3,47 +3,47 @@
 
 一个好的工具确实有助于编程,但是他只会给我们带来的是帮助。我们写出来的代码还是和我们的水平保持着一致的。
 
-什么是好的工具,这个说法就有很多了,但是有时候我们往往沉迷于事物的表面。有些时候Vim会比Visual Studio强大,当你只需要修改的是一个配置文件的时候,简单且足够快捷——在我们还未用VS打开的时候,我们已经用Vim做完这个活了。
+什么是好的工具,这个说法就有很多了,但是有时候我们往往沉迷于事物的表面。有些时候 Vim 会比 Visual Studio 强大,当你只需要修改的是一个配置文件的时候,简单且足够快捷——在我们还未用 VS 打开的时候,我们已经用 Vim 做完这个活了。
 
 > “好的装备确实能带来一些帮助,但事实是,你的演奏水平是由你自己的手指决定的。” -- 《REWORK》
 
-###WebStorm还是Sublime?
+###WebStorm 还是 Sublime?
 
-作为一个IDE有时候忽略的因素会过多,一开始的代码由类似于sublime text之类的编辑器开始会比较合适。于是我们又开始陷入IDE及Editor之战了,无聊的时候讨论一下这些东西是有点益处的。相互了解一下各自的优点,也是不错的,偶尔可以换个环境试试。
+作为一个 IDE 有时候忽略的因素会过多,一开始的代码由类似于 sublime text 之类的编辑器开始会比较合适。于是我们又开始陷入 IDE  Editor 之战了,无聊的时候讨论一下这些东西是有点益处的。相互了解一下各自的优点,也是不错的,偶尔可以换个环境试试。
 
-刚开始学习的时候,我们只需要普通的工具,或者我们习惯了的工具去开始我们的工作。我们要的是把主要精力放在学习的东西上,而不是工具。刚开始学习一种新的语言的时候,我们不需要去讨论哪个是最好的开发工具,如Java,有时候可能是Eclipse,有时候可能是Vim,如果我们为的只是去写一个hello,world。在Eclipse浪费太多的时间是不可取的,因为他用起来的效率可不比你在键盘上敲打来得快,当你移动你的手指去动你的鼠标的时候,我想你可以用那短短的时完成编译,运行了。
+刚开始学习的时候,我们只需要普通的工具,或者我们习惯了的工具去开始我们的工作。我们要的是把主要精力放在学习的东西上,而不是工具。刚开始学习一种新的语言的时候,我们不需要去讨论哪个是最好的开发工具,如 Java,有时候可能是 Eclipse,有时候可能是 Vim,如果我们为的只是去写一个 hello,world。在 Eclipse浪费太多的时间是不可取的,因为他用起来的效率可不比你在键盘上敲打来得快,当你移动你的手指去动你的鼠标的时候,我想你可以用那短短的时完成编译,运行了。
 
 ####工具是为了效率
 
-寻找工具的目的和寻找捷径是一样的,我们需要更快更有效率地完成我们的工作,换句话说,我们为了获取更多的时间用于其他的事情。而这个工具的用途是要看具体的事物的,如果我们去写一个小说、博客的时候,word或者web editor会比tex studio还得快,不是么。我们用TEX来排版的时候会比我们用WORD排版的时候来得更多快,所以这个工具是相对而论的。有时候用一个顺手的工具会好很多,但是不一定会是事半功倍的。我们应该将我们的目标专注于我们的内容,而不是我们的工具上。
+寻找工具的目的和寻找捷径是一样的,我们需要更快更有效率地完成我们的工作,换句话说,我们为了获取更多的时间用于其他的事情。而这个工具的用途是要看具体的事物的,如果我们去写一个小说、博客的时候,word 或者 web editor 会比 tex studio 来得快,不是么。我们用 TEX 来排版的时候会比我们用 WORD 排版的时候来得更快,所以这个工具是相对而论的。有时候用一个顺手的工具会好很多,但是不一定会是事半功倍的。我们应该将我们的目标专注于我们的内容,而不是我们的工具上。
 
-我们用Windows自带的画图就可以完成裁剪的时候,我们就没有运行起GIMP或者Photoshop去完成这个简单的任务。效率在某些时候的重要性,会比你选择的工具有用得多,学习的开始就是要去了解那些大众推崇的东西。
+我们用 Windows 自带的画图就可以完成裁剪的时候,我们就没必要运行起 GIMP 或者 Photoshop 去完成这个简单的任务。效率在某些时候的重要性,会比你选择的工具有用得多,学习的开始就是要去了解那些大众推崇的东西。
 
 ####了解、熟悉你的工具
 
-Windows的功能很强大,只是大部分人用的是只是一小小部分。而不是一小部分,即使我们天天用着,我们也没有学习到什么新的东西。和这个就如同我们的工具一样,我们天天用着他们,如果我们只用Word来写写东西,那么我们可以用Abiword来替换他。但是明显不太可能,因为强大的工具对于我们来说有些更大的吸引力。
- 
-如果你负担得起你手上的工具的话,那么就尽可能去了解他能干什么。即使他是一些无关仅要的功能,比如Emacs的煮咖啡。有一本手册是最好不过的,手册在手边可以即时查阅,不过出于环保的情况下,就不是这样子的。手册没有办法即时同你的软件一样更新,电子版的更新会比你手上用的那个手册更新得更快。
+Windows 的功能很强大,只是大部分人用的是只是小小一部分。而不是一小部分,即使我们天天用着,我们也没有学习到什么新的东西。和这个就如同我们的工具一样,我们天天用着他们,如果我们只用 Word 来写写东西,那么我们可以用 Abiword 来替换他。但是明显不太可能,因为强大的工具对于我们来说有些更大的吸引力。
 
-Linux下面的命令有一大堆,只是我们常用的只有一小部分——20%的命令能够完成80%的工作。如同CISC和RISC一样,我们所常用的指令会让我们忘却那些不常用的指令。而那些是最实用的,如同我们日常工作中使用的Linux一样,记忆过多的不实用的东西,不比把他们记在笔记上实在。我们只需要了解有那些功能,如何去用他。
+如果你负担得起你手上的工具的话,那么就尽可能去了解他能干什么。即使他是一些无关仅要的功能,比如 Emacs 的煮咖啡。有一本手册是最好不过的,手册在手边可以即时查阅,不过出于环保的情况下,就不是这样子的。手册没有办法即时同你的软件一样更新,电子版的更新会比你手上用的那个手册更新得更快。
+
+Linux 下面的命令有一大堆,只是我们常用的只有一小部分——20%的命令能够完成80%的工作。如同 CISC 和 RISC 一样,我们所常用的指令会让我们忘却那些不常用的指令。而那些是最实用的,如同我们日常工作中使用的 Linux 一样,记忆过多的不实用的东西,不比把他们记在笔记上实在。我们只需要了解有那些功能,如何去用他。
 
 ###语言也是一种工具
 
 越来越多的框架和语言出现、更新得越来越快。特别是这样一个高速发展的产业,每天都在涌现新的名词。如同我们选择语言一样,选择合适的有时候会比选得顺手的来得重要。然而,这个可以不断地被推翻。
 
-当我们熟悉用Python、Ruby、PHP等去构建一个网站的时候,Javascript用来做网站后台,这怎么可能——于是NodeJS火了。选择工具本身是一件很有趣的事,因为有着越来越多的可能性。
+当我们熟悉用 Python、Ruby、PHP 等去构建一个网站的时候,JavaScript 用来做网站后台,这怎么可能——于是 Node.js 火了。选择工具本身是一件很有趣的事,因为有着越来越多的可能性。
 
-过去PHP是主流的开发,不过现在也是,PHP为WEB而生。有一天Ruby on Rails出现了,一切就变了,变得高效,变得更Powerful。MVC一直很不错,不是么?于是越来越多的框架出现了,如Django,Laravel等等。不同的语言有着不同的框架,Javascript上也有着合适的框架,如Angular js。不同语言的使用者们用着他们合适的工具,因为学习新的东西,对于多数的人来说就是一种新的挑战。在学面向对象语言的时候,人们很容易把程序写成过程式的。
+过去 PHP 是主流的开发,不过现在也是,PHP  WEB 而生。有一天 Ruby on Rails 出现了,一切就变了,变得高效,变得更 Powerful。MVC 一直很不错,不是么?于是越来越多的框架出现了,如 Django,Laravel 等等。不同的语言有着不同的框架,JavaScript 上也有着合适的框架,如 AngularJS。不同语言的使用者们用着他们合适的工具,因为学习新的东西,对于多数的人来说就是一种新的挑战。在学面向对象语言的时候,人们很容易把程序写成过程式的。
 
-没有合适的工具,要么创造一个,要么选择一个合适的。 
+没有合适的工具,要么创造一个,要么选择一个合适的。
 
 ####小结
 
-学习Django的时候习惯了有一个后台,于是开始使用Laravel的时候,寻找Administartor。需要编译的时候习惯用IDE,不需要的时候用Editor,只是因为有效率,嵌入式的时候IDE会有效率一点。
+学习 Django 的时候习惯了有一个后台,于是开始使用 Laravel 的时候,寻找 Administartor。需要编译的时候习惯用 IDE,不需要的时候用 Editor,只是因为有效率,嵌入式的时候 IDE 会有效率一点。
 
-以前不知道WebStorm的时候,习惯用DW来格式化HTML,Aptana来格式化Javascript。
+以前不知道 WebStorm 的时候,习惯用 DW 来格式化 HTML,Aptana 来格式化 JavaScript。
 
-以前,习惯用Wordpress来写博客,因为可以有移动客户端,使用电脑时就不喜欢打开浏览器去写。
+以前,习惯用 WordPress 来写博客,因为可以有移动客户端,使用电脑时就不喜欢打开浏览器去写。
 
 等等
 

+ 16 - 16
chapters/1.1.0-tool.md

@@ -1,7 +1,7 @@
 提高效率的工具
 ---
 
-在提交效率的N种方法里:有一个很重要的方法是使用快捷键。熟练掌握快捷键可以让我们随着自己的感觉编写程序——有时候如果我们手感不好,是不是就说明今天不适合写代码!笑~~
+在提交效率的 N 种方法里:有一个很重要的方法是使用快捷键。熟练掌握快捷键可以让我们随着自己的感觉编写程序——有时候如果我们手感不好,是不是就说明今天不适合写代码!笑~~
 
 由于我们可能使用不同的操作系统来完成不同的工具。下面就先说说一些通用的、不限操作的工具:
 
@@ -12,7 +12,7 @@
 ![Windows任务栏](assets/article/chapter1/windows-launch.png)
 
 
-直到有一天,我知道有这样的工具。这里不得不提到一本书《卓有成效的程序员》,在书中提到了很多提高效率的工具。使用快捷键是其中的一个,而还有一个是使用快速启动软件。于是,我在Windows上使用了Launcy:
+直到有一天,我知道有这样的工具。这里不得不提到一本书《卓有成效的程序员》,在书中提到了很多提高效率的工具。使用快捷键是其中的一个,而还有一个是使用快速启动软件。于是,我在 Windows 上使用了 Launcy:
 
 ![Launchy](assets/article/chapter1/launchy.png)
 
@@ -20,9 +20,9 @@
 
 ###IDE
 
-尽管在上一篇中,我们说过IDE和编辑器没有什么好争论的。但是如果是从头开始搭建环境的话,IDE是最好的——编辑器还需要安装相应的插件。所以,这也就是为什么面试的时候会用编辑器的原因。
+尽管在上一篇中,我们说过 IDE 和编辑器没有什么好争论的。但是如果是从头开始搭建环境的话,IDE 是最好的——编辑器还需要安装相应的插件。所以,这也就是为什么面试的时候会用编辑器的原因。
 
-IDE的全称是集成开发环境,顾名思义即它集成了你需要用到的一些工具。而如果是编辑器的话,你需要自己去找寻合适的工具来做这件事。不过,这也意味着使用编辑器会有更多的自由度。如果你没有足够的时间去打造自己的开发环境就使用IDE吧。
+IDE 的全称是集成开发环境,顾名思义即它集成了你需要用到的一些工具。而如果是编辑器的话,你需要自己去找寻合适的工具来做这件事。不过,这也意味着使用编辑器会有更多的自由度。如果你没有足够的时间去打造自己的开发环境就使用 IDE 吧。
 
 一般来说,他们都应该有下面的一些要素:
 
@@ -33,33 +33,33 @@ IDE的全称是集成开发环境,顾名思义即它集成了你需要用到
 
 而如果是编辑器的话,就需要自己去找寻这些相应的插件。
 
-IDE一般是针对特定语言才产生的,并且优化更好。而,编辑器则需要自己去搭配。这也意味着如果你需要在多个语言上工作时,并且喜欢折腾,你可以考虑使用编辑器。
+IDE 一般是针对特定语言才产生的,并且优化更好。而,编辑器则需要自己去搭配。这也意味着如果你需要在多个语言上工作时,并且喜欢折腾,你可以考虑使用编辑器。
 
-###DEBUG工具
+###DEBUG 工具
 
-不得不提及的是在有些IDE自带了Debug工具,这点可能使得使用IDE更有优势。在简单的项目是,我们可能不需要这样的Debug工具。因为我们对我们的代码库比较熟悉,一个简单的问题一眼就知道是哪里的问题。而对于那些复杂的项目来说,可能就没有那么简单了。特别是当你来到一个新的大中型项目,一个简单的逻辑在实现上可能要经过一系列的函数才能处理完。
+不得不提及的是在有些 IDE 自带了 Debug 工具,这点可能使得使用 IDE 更有优势。在简单的项目是,我们可能不需要这样的 Debug 工具。因为我们对我们的代码库比较熟悉,一个简单的问题一眼就知道是哪里的问题。而对于那些复杂的项目来说,可能就没有那么简单了。特别是当你来到一个新的大中型项目,一个简单的逻辑在实现上可能要经过一系列的函数才能处理完。
 
-这时候我们就需要Debug工具——对于前端开发来说,我们可能使用Chrome的Dev Tools。但是对于后端来说,我们就需要使用别的工具。如下图所示的是Intellij Idea的Debug界面:
+这时候我们就需要 Debug 工具——对于前端开发来说,我们可能使用 Chrome  Dev Tools。但是对于后端来说,我们就需要使用别的工具。如下图所示的是 Intellij Idea  Debug 界面:
 
 ![Intellij Idea Debug](assets/article/chapter1/idea-debug.png)
 
-在Debug的过程中,我们可以根据代码的执行流程一步步向下执行。这也意味着,当出现Bug的时候我们可以更容易找到Bug。这就是为什么他叫Debug工具的原因了。
+在 Debug 的过程中,我们可以根据代码的执行流程一步步向下执行。这也意味着,当出现 Bug 的时候我们可以更容易找到 Bug。这就是为什么他叫 Debug 工具的原因了。
 
 ###终端或命令提示符
 
-在开始写代码的时候,使用GUI可能是难以戒掉的一个习惯。但是当你习惯了使用终端之后,或者说使用终端的工具,你会发现这是另外一片天空。对于GUI应用上同样的菜单来说,在终端上也会有同样的工具——只是你觉得记住更多的命令。而且不同的工具对于同一实现可能会不同的规范,而GUI应用则会有一致的风格。不过,总的来说使用终端是一个很有益的习惯——从速度、便捷性。忘了提到一点,当你使用Linux服务器的时候,你不得不使用终端。
+在开始写代码的时候,使用 GUI 可能是难以戒掉的一个习惯。但是当你习惯了使用终端之后,或者说使用终端的工具,你会发现这是另外一片天空。对于 GUI 应用上同样的菜单来说,在终端上也会有同样的工具——只是你觉得记住更多的命令。而且不同的工具对于同一实现可能会不同的规范,而 GUI 应用则会有一致的风格。不过,总的来说使用终端是一个很有益的习惯——从速度、便捷性。忘了提到一点,当你使用 Linux 服务器的时候,你不得不使用终端。
 
-![Linux终端截图](assets/article/chapter1/linux-server-console.jpg)
+![Linux 终端截图](assets/article/chapter1/linux-server-console.jpg)
 
-使用终端的优点在于我们可以摆脱鼠标的操作——这可以让我们更容易集中精力于完成任务。而这也是两种不同的选择,便捷还是更快。虽是如此,但是这也意味着学习Linux会越来戴上轻松。
+使用终端的优点在于我们可以摆脱鼠标的操作——这可以让我们更容易集中精力于完成任务。而这也是两种不同的选择,便捷还是更快。虽是如此,但是这也意味着学习 Linux 会越来越轻松。
 
-![Linux与Windows的学习曲线](assets/article/chapter1/linux-learn-line.png)
+![Linux  Windows 的学习曲线](assets/article/chapter1/linux-learn-line.png)
 
-虽然这是以Linux和Windows作了两个不同的对比,但是两个系统在终端工具上的差距是很大的。Linux自身的哲学鼓励使用命令行来完成任务,这也意味着在Linux上会有更多的工具可以在命令行下使用。虽然Windows上也可以——如使用CygWin来完成,但是这看上去并不是那么让人满意!
+虽然这是以 Linux  Windows 作了两个不同的对比,但是两个系统在终端工具上的差距是很大的。Linux 自身的哲学鼓励使用命令行来完成任务,这也意味着在 Linux 上会有更多的工具可以在命令行下使用。虽然 Windows 上也可以——如使用 CygWin 来完成,但是这看上去并不是那么让人满意!
 
 ###包管理
 
-虽然包管理不仅仅存在于操作系统中,还存在着语言的包管理工具。在操作系统中安装软件,最方便的东西莫过于包管理了。引自OpenSUSE官网的说明及图片:
+虽然包管理不仅仅存在于操作系统中,还存在着语言的包管理工具。在操作系统中安装软件,最方便的东西莫过于包管理了。引自OpenSUSE 官网的说明及图片:
 
 ![包管理](assets/article/chapter1/pm.png)
 
@@ -71,4 +71,4 @@ Linux 发行版无非就是一堆软件包 (package) 形式的应用程序加上
 
  - 依赖关系 (dependencies) 是软件包管理的一个重要方面。实际上每个软件包都会涉及到其他的软件包,软件包里程序的运行需要有一个可执行的环境(要求有其他的程序、库等),软件包依赖关系正是用来描述这种关系的。
 
-我们经常会使用各式各样的包管理工具,来加速我们地日常使用。而不是Google某个软件,然后下载,接着安装。
+我们经常会使用各式各样的包管理工具,来加速我们地日常使用。而不是 Google 某个软件,然后下载,接着安装。

+ 9 - 9
chapters/1.1.1-env-osx.md

@@ -1,20 +1,20 @@
 环境搭建
 ---
 
-由于我近期工具在Mac OS X上,所以先以Mac OS X为例。
+由于我近期工具在 Mac OS X 上,所以先以 Mac OS X 为例。
 
 ###OS X
 
 **Homebrew**
 
-> 包管理工具,官方称之为The missing package manager for OS X。
+> 包管理工具,官方称之为 The missing package manager for OS X。
 
 **Homebrew Cask**
-   
+
 > brew-cask 允许你使用命令行安装 OS X 应用。
 
 **iTerm2**
-   
+
 > iTerm2 是最常用的终端应用,是 Terminal 应用的替代品。
 
 **Zsh**
@@ -28,15 +28,15 @@ Zsh 是一款功能强大终端(shell)软件,既可以作为一个交互
  - 可定制性高
 
 **Oh My Zsh**
-   
+
 > Oh My Zsh 同时提供一套插件和工具,可以简化命令行操作。
 
 **Sublime Text 2**
-  
+
 > 强大的文件编辑器。   
-   
+
 **MacDown**
-   
+
 > MacDown 是 Markdown 编辑器。
 
 **CheatSheet**
@@ -54,7 +54,7 @@ Zsh 是一款功能强大终端(shell)软件,既可以作为一个交互
 上手简单,调教成本在后期自定义 Workflows,不过有大量雷锋使用者提供的现成扩展,访问这里挑选喜欢的,并可以极其简单地根据自己的需要修改。
 
 **Vimium**
-   
+
 > Vimium 是一个 Google Chrome 扩展,让你可以纯键盘操作 Chrome。
 
 相关参考:

+ 5 - 5
chapters/1.1.2-env-windows.md

@@ -2,19 +2,19 @@
 
 **Chocolatey**
 
-> Chocolatey是一个软件包管理工具,类似于Ubuntu下面的apt-get,不过是运行在Window环境下面。
+> Chocolatey 是一个软件包管理工具,类似于 Ubuntu 下面的 apt-get,不过是运行在 Windows 环境下面。
 
-**Wox** 
+**Wox**
 
-> Wox是一个高效的快速启动器工具,通过快捷键呼出,然后输入关键字来搜索程序进行快速启动,或者搜索本地硬盘的文件,打开百度、Google 进行搜索,甚至是通过一些插件的功能实现单词翻译、关闭屏幕、查询剪贴板历史、查询编程文档、查询天气等更多功能。它最大的特点是可以支持中文拼音的模糊匹配。
+> Wox 是一个高效的快速启动器工具,通过快捷键呼出,然后输入关键字来搜索程序进行快速启动,或者搜索本地硬盘的文件,打开百度、Google 进行搜索,甚至是通过一些插件的功能实现单词翻译、关闭屏幕、查询剪贴板历史、查询编程文档、查询天气等更多功能。它最大的特点是可以支持中文拼音的模糊匹配。
 
 **PowerShell**
 
-> Windows PowerShell是微软公司为Windows环境所开发的壳程序(shell)及脚本语言技术,采用的是命令行界面。这项全新的技术提供了丰富的控制与自动化的系统管理能力。
+> Windows PowerShell 是微软公司为 Windows 环境所开发的壳程序(shell)及脚本语言技术,采用的是命令行界面。这项全新的技术提供了丰富的控制与自动化的系统管理能力。
 
 **cmder**
 
-> cmder把conemu,msysgit和clink打包在一起,让你无需配置就能使用一个真正干净的Linux终端!她甚至还附带了漂亮的monokai配色主题。
+> cmder  conemu,msysgit  clink 打包在一起,让你无需配置就能使用一个真正干净的 Linux 终端!她甚至还附带了漂亮的 monokai 配色主题。
 
 **Total Commander**
 

+ 4 - 4
chapters/1.1.3-env-linux.md

@@ -12,13 +12,13 @@ Zsh 是一款功能强大终端(shell)软件,既可以作为一个交互
  - 可定制性高
 
 **Oh My Zsh**
-   
+
 > Oh My Zsh 同时提供一套插件和工具,可以简化命令行操作。
 
 **ReText**
 
-> ReText是一个使用 Markdown 语法和 reStructuredText (reST) 结构的文本编辑器,编辑的内容支持导出到 PDF、ODT 和 HTML 以及纯文本,支持即时预览、网页生成以及 HTML 语法高亮、全屏模式,可导出文件到 Google Docs 等。
+> ReText 是一个使用 Markdown 语法和 reStructuredText (reST) 结构的文本编辑器,编辑的内容支持导出到 PDF、ODT 和 HTML 以及纯文本,支持即时预览、网页生成以及 HTML 语法高亮、全屏模式,可导出文件到 Google Docs 等。
 
-**Launchy** 
+**Launchy**
 
-> Launchy 是一款免费开源的协助您摒弃Windows “运行”的Dock式替代工具,既方便又实用,自带多款皮肤,作为美化工具也未尝不可。
+> Launchy 是一款免费开源的协助您摒弃 Windows “运行”的 Dock 式替代工具,既方便又实用,自带多款皮肤,作为美化工具也未尝不可。

+ 23 - 24
chapters/1.2-learn-language.md

@@ -5,11 +5,11 @@
 
 ###一次语言学习体验
 
-在我们开始学习一门语言或者技术的时候,我们可能会从一门hello,world开始。
+在我们开始学习一门语言或者技术的时候,我们可能会从一门 hello,world 开始。
 
-好了,现在我是Scala语言的初学者,接着我用搜索引擎去搜索『Scala』来看看『Scala』是什么鬼:
+好了,现在我是 Scala 语言的初学者,接着我用搜索引擎去搜索『Scala』来看看『Scala』是什么鬼:
 
->  Scala 是一门类Java 的编程语言,它结合了面向对象编程和函数式编程。
+>  Scala 是一门类 Java 的编程语言,它结合了面向对象编程和函数式编程。
 
 接着又开始看『Scala 'hello,world'』,然后找到了这样的一个示例:
 
@@ -21,9 +21,9 @@ object HelloWorld {
 }
 ```
 
-GET到了5%的知识。
+GET 到了5%的知识。
 
-看上去这门语言相比于Java语言来说还行。然后我找到了一本名为『Scala 指南』的电子书,有这样的一本目录:
+看上去这门语言相比于 Java 语言来说还行。然后我找到了一本名为『Scala 指南』的电子书,有这样的一本目录:
 
  - 表达式和值
  - 函数是一等公民
@@ -36,19 +36,19 @@ GET到了5%的知识。
  - Traits
  - ...
 
-看上去还行, 又GET到了5%的知识点。接着,依照上面的代码和搭建指南在自己的电脑上安装了Scala的环境:
+看上去还行, 又 GET 到了5%的知识点。接着,依照上面的代码和搭建指南在自己的电脑上安装了 Scala 的环境:
 
 ```bash
 brew install scala
 ```
 
-Windows用户可以用:
+Windows 用户可以用:
 
 ```
 choco install scala
 ```
 
-然后开始写一个又一个的Demo,感觉自己GET到了很多特别的知识点。
+然后开始写一个又一个的 Demo,感觉自己 GET 到了很多特别的知识点。
 
 到了第二天忘了!
 
@@ -56,37 +56,37 @@ choco install scala
 
 接着,你又重新把昨天的知识过了一遍,还是没有多大的作用。突然间,你听到别人在讨论什么是**这个世界上最好的语言**——你开始加入讨论了。
 
-于是,你说出了Scala这门语言可以:
+于是,你说出了 Scala 这门语言可以:
 
  - 支持高阶函数。lambda,闭包...
  - 支持偏函数。 match..
  - mixin,依赖注入..
  - 等等
 
-虽然隔壁的Python小哥赢得了这次辩论,然而你发现你又回想起了Scala的很多特性。
+虽然隔壁的 Python 小哥赢得了这次辩论,然而你发现你又回想起了 Scala 的很多特性。
 
 ![最流行的语言](assets/article/chapter1/popular.jpg)
 
-你发现隔壁的Python小哥之所以赢得了这场辩论是因为他把Python语言用到了各个地方——机器学习、人工智能、硬件、Web开发、移动应用等。而你还没有用Scala写过一个真正的应用。
+你发现隔壁的 Python 小哥之所以赢得了这场辩论是因为他把 Python 语言用到了各个地方——机器学习、人工智能、硬件、Web开发、移动应用等。而你还没有用 Scala 写过一个真正的应用。
 
-让我想想我来能做什么?我有一个博客。对,我有一个博客,我可以用Scala把我的博客重写一遍:
+让我想想我来能做什么?我有一个博客。对,我有一个博客,我可以用 Scala 把我的博客重写一遍:
 
-1. 先找一Scala的Web框架,Play看上去很不错,就这个了。这是一个MVC框架,原来用的Express也是一个MVC框架。Router写这里,Controller类似这个,就是这样的。
-2. 既然已经有PyJS,也会有Scala-js,前端就用这个了。
+1. 先找一 Scala  Web 框架,Play 看上去很不错,就这个了。这是一个 MVC 框架,原来用的 Express 也是一个 MVC 框架。Router 写这里,Controller 类似这个,就是这样的。
+2. 既然已经有 PyJS,也会有 Scala-js,前端就用这个了。
 
 好了,博客重写了一遍了。
 
-感觉还挺不错的,我决定向隔壁的Java小弟推销这门语言,以解救他于火海之中。
+感觉还挺不错的,我决定向隔壁的 Java 小弟推销这门语言,以解救他于火海之中。
 
 『让我想想我有什么杀手锏?』
 
 『这里的知识好像还缺了一点,这个是什么?』
 
-好了,你已经GET到了90%了。如下图所示:
+好了,你已经 GET 到了90%了。如下图所示:
 
 ![Learn](assets/article/chapter1/learn.jpg)
 
-希望你能从这张图上GET到很多点。
+希望你能从这张图上 GET 到很多点。
 
 ###输出是最好的输入
 
@@ -102,7 +102,7 @@ choco install scala
 
 而如果是写书的时候则是一个更高水平的学习,你需要发现别人在他们的书中欠缺的一些知识点。并且你还要展示一些在别的书中没有,而这本书会展现这个点的知识,这意味着你需要挖掘得更深。
 
-所以,如果下次有人问你如学一门新语言、技术,那么答案就是写一本书。
+所以,如果下次有人问你如学一门新语言、技术,那么答案就是写一本书。
 
 ###如何应用一门新的技术
 
@@ -114,19 +114,19 @@ choco install scala
 
 第一个系统(v1): ``Spring MVC`` + ``Bootstrap`` + ``jQuery``
 
-那么在那个合适的年代里, 我们需要单页面应用,就使用了Backbone。然后,我们就可以用Mustache + HTML来替换掉JSP。
+那么在那个合适的年代里, 我们需要单页面应用,就使用了Backbone。然后,我们就可以用 Mustache + HTML 来替换掉 JSP。
 
-第二个系统(v2): ``Spring MVC`` +  ``Backbone`` + ``Mustache`` 
+第二个系统(v2): ``Spring MVC`` +  ``Backbone`` + ``Mustache``
 
 在这时我们已经实现了前后端分离了,这时候系统实现上变成了这样。
 
-第二个系统(v2.2): ``RESTful  Services`` +  ``Backbone`` + ``Mustache`` 
+第二个系统(v2.2): ``RESTful  Services`` +  ``Backbone`` + ``Mustache``
 
 或者
 
-第二个系统(v2.2): ``RESTful Services`` +  ``Angular.js 1.x`` 
+第二个系统(v2.2): ``RESTful Services`` +  ``AngularJS 1.x``
 
-Spring只是一个RESTful服务,我们还需要一些问题,比如DOM的渲染速度太慢了。
+Spring 只是一个 RESTful 服务,我们还需要一些问题,比如 DOM 的渲染速度太慢了。
 
 第三个系统(v3): ``RESTful  Services`` + ``React``
 
@@ -135,4 +135,3 @@ Spring只是一个RESTful服务,我们还需要一些问题,比如DOM的渲
 尽管在最后系统的架构已经不是当初的架构,而系统本身的业务逻辑变化并没有发生太大的变化。
 
 特别是对于如博客这一类的系统来说,他的一些技术实现已经趋于稳定,而且是你经常使用的东西。所以,下次试试用新的技术的时候,可以先从对你的博客的重写开始。
-

+ 16 - 20
chapters/1.3-web-basic.md

@@ -1,9 +1,9 @@
-Web编程基础
+Web 编程基础
 ---
 
 ###从浏览器到服务器
 
-如果你的操作系统带有cURL这个软件(在GNU/Linux、Mac OS都自带这个工具,Windows用户可以从[http://curl.haxx.se/download.html](http://curl.haxx.se/download.html)下载到),那么我们可以直接用下面的命令来看这看这个过程(-v 参数可以显示一次http通信的整个过程):
+如果你的操作系统带有 cURL 这个软件(在 GNU/Linux、Mac OS 都自带这个工具,Windows 用户可以从[http://curl.haxx.se/download.html](http://curl.haxx.se/download.html)下载到),那么我们可以直接用下面的命令来看这看这个过程(-v 参数可以显示一次 http 通信的整个过程):
 
 ```
 curl -v https://www.phodal.com
@@ -42,39 +42,39 @@ curl -v https://www.phodal.com
 * Connection #0 to host www.phodal.com left intact
 ```
 
-我们尝试用cURL去访问我的网站,会根据访问的域名找出其IP,通常这个映射关系是来源于ISP缓存DNS(英语:Domain Name System)服务器[^DNSServer]。
+我们尝试用 cURL 去访问我的网站,会根据访问的域名找出其 IP,通常这个映射关系是来源于 ISP 缓存 DNS(英语:Domain Name System)服务器[^DNSServer]。
 
-以“\*”开始的前8行是一些连接相关的信息,称为**响应首部**。我们向域名 [https://www.phodal.com/](https://www.phodal.com/)发出了请求,接着DNS服务器告诉了我们网站服务器的IP,即54.69.23.11。出于安全考虑,在这里我们的示例,我们是以HTTPS协议为例,所以在这里连接的端口是443。因为使用的是HTTPS协议,所以在这里会试图去获取服务器证书,接着获取到了域名相关的证书信息。
+以“\*”开始的前8行是一些连接相关的信息,称为**响应首部**。我们向域名 [https://www.phodal.com/](https://www.phodal.com/)发出了请求,接着DNS服务器告诉了我们网站服务器的IP,即54.69.23.11。出于安全考虑,在这里我们的示例,我们是以 HTTPS 协议为例,所以在这里连接的端口是 443。因为使用的是HTTPS协议,所以在这里会试图去获取服务器证书,接着获取到了域名相关的证书信息。
 
-随后以“>”开始的内容,便是向Web服务器发送请求。Host即是我们要访问的主机的域名,GET / 则代表着我们要访问的是根目录,如果我们要访问 [https://www.phodal.com/about/](https://www.phodal.com/about/)页面在这里,便是GET资源文件/about。紧随其后的是HTTP的版本号(HTTP/1.1)。User-Agent通过指向的是使用者行为的软件,通常会加上硬件平台、系统软件、应用软件和用户个人偏好等等的一些信息。Accept则指的是告知服务器发送何种媒体类型。
+随后以“>”开始的内容,便是向Web服务器发送请求。Host即是我们要访问的主机的域名,GET / 则代表着我们要访问的是根目录,如果我们要访问 [https://www.phodal.com/about/](https://www.phodal.com/about/)页面在这里,便是 GET 资源文件 /about。紧随其后的是 HTTP 的版本号(HTTP/1.1)。User-Agent 通过指向的是使用者行为的软件,通常会加上硬件平台、系统软件、应用软件和用户个人偏好等等的一些信息。Accept 则指的是告知服务器发送何种媒体类型。
 
 这个过程,大致如下图所示:
 
-![DNS到服务器的过程](assets/article/chapter1/server-dns-forward.jpg)
+![DNS 到服务器的过程](assets/article/chapter1/server-dns-forward.jpg)
 
-在图中,我们会发现解析DNS的时候,我们需要先本地DNS服务器查询。如果没有的话,再向根域名服务器查询——这个域名由哪个服务器来解析。直至最后拿到真正的服务器IP才能获取页面。
+在图中,我们会发现解析 DNS 的时候,我们需要先本地 DNS 服务器查询。如果没有的话,再向根域名服务器查询——这个域名由哪个服务器来解析。直至最后拿到真正的服务器IP才能获取页面。
 
-当我们拿到相应的HTML、JS、CSS后,我们就开始渲染这个页面了。
+当我们拿到相应的 HTML、JS、CSS 后,我们就开始渲染这个页面了。
 
-####HTTP协议
+####HTTP 协议
 
-说到这里,我们不得不说说HTTP协议——超文本传输协议。它也是一个基于文本的传输协议,这就是为什么你在上面看到的都是文本的传输过程。
+说到这里,我们不得不说说 HTTP 协议——超文本传输协议。它也是一个基于文本的传输协议,这就是为什么你在上面看到的都是文本的传输过程。
 
-###从HTML到页面显示
+###从 HTML 到页面显示
 
-而浏览器接收到文本的时候,就要开始着手将HTML变成屏幕。下图是Chrome渲染页面的一个时间线:
+而浏览器接收到文本的时候,就要开始着手将 HTML 变成屏幕。下图是 Chrome 渲染页面的一个时间线:
 
-![Chrome渲染的Timeline](assets/article/chapter1/chrome-timeline.jpg)
+![Chrome 渲染的 Timeline](assets/article/chapter1/chrome-timeline.jpg)
 
 及其整个渲染过程如下图所示:
 
 ![Render HTML](assets/article/chapter1/render-html.png)
 
-(PS: 需要注意的是这里用的是WebKit内核的渲染过程,即Chrome和Safari等浏览器所使用的内核。)
+(PS: 需要注意的是这里用的是 WebKit 内核的渲染过程,即 Chrome  Safari 等浏览器所使用的内核。)
 
-从上面的两图可以看出来第一步都Parser HTML,而Paser HTML实质上就是将其将解析为DOM Tree。与此同时,CSS解析器会解析CSS会产生CSS规则树。
+从上面的两图可以看出来第一步都 Parser HTML,而 Paser HTML 实质上就是将其将解析为 DOM Tree。与此同时,CSS 解析器会解析 CSS 会产生 CSS 规则树。
 
-随后会根据生成的DOM树和CSS规则树来构建Render Tree,接着生成Render Tree的布局,最后就是绘制出Render Tree。
+随后会根据生成的 DOM 树和 CSS 规则树来构建 Render Tree,接着生成 Render Tree的布局,最后就是绘制出 Render Tree。
 
 
 详细的内容还得参见相关的书籍~~。
@@ -82,7 +82,3 @@ curl -v https://www.phodal.com
 相关内容:
 
  - 《[How browsers work](http://taligarsiel.com/Projects/howbrowserswork1.htm)》
-
-
-
-

+ 26 - 26
chapters/1.4.0-html.md

@@ -1,25 +1,25 @@
 HTML
 ---
 
-让我们先从身边的语言下手,也就是现在无处不在的HTML+Javascript+CSS。
+让我们先从身边的语言下手,也就是现在无处不在的 HTML+Javascript+CSS。
 
-之所以从HTML开始,是因为我们不需要配置一个复杂的开发环境,也许你还不知道开发环境是什么东西,不过这也没关系,毕竟这些知识需要慢慢的接触才能有所了解,尤其是对于普通的业余爱好者来说,当然,对于专业选手言自然不是问题。HTML是Web的核心语言,也算是比较基础的语言。
+之所以从 HTML 开始,是因为我们不需要配置一个复杂的开发环境,也许你还不知道开发环境是什么东西,不过这也没关系,毕竟这些知识需要慢慢的接触才能有所了解,尤其是对于普通的业余爱好者来说,当然,对于专业选手言自然不是问题。HTML  Web 的核心语言,也算是比较基础的语言。
 
 ###hello,world
 
-hello,world是一个传统,所以在这里也遵循这个有趣的传统,我们所要做的事情其实很简单,虽然也有一点点hack的感觉。——让我们先来新建一个文并命名为"helloworld.html"。
+hello,world 是一个传统,所以在这里也遵循这个有趣的传统,我们所要做的事情其实很简单,虽然也有一点点 hack 的感觉。——让我们先来新建一个文并命名为"helloworld.html"。
 
-(PS:大部分人应该都是在Windows环境下工作的,所以你需要新建一个文本,然后重命名,或者你需要一个编辑器,在这里我们推荐用<strong>Sublime Text</strong>。破解不破解,注册不注册都不会对你的使用有太多的影响。)
+(PS:大部分人应该都是在 Windows 环境下工作的,所以你需要新建一个文本,然后重命名,或者你需要一个编辑器,在这里我们推荐用 **Sublime Text** 。破解不破解,注册不注册都不会对你的使用有太多的影响。)
 
 1. 新建文件
 
-2. 输入<pre><code class="html">hello,world</code></pre>
+2. 输入 <pre><code class="html">hello,world</code></pre>
 
 3. 保存为->"helloworld.html",
 
 4. 双击打开这个文件。 正常情况下都应该是用你的默认浏览器打开。只要是一个正常工作的现代浏览器,都应该可以看到上面显示的是"Hello,world"。
 
-这才是最短的hello,world程序,但是呢?在Ruby中会是这样子的
+这才是最短的 hello,world 程序,但是呢?在 Ruby 中会是这样子的
 
 ``` bash
 2.0.0-p353 :001 > p "hello,world"
@@ -28,13 +28,13 @@ hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 2.0.0-p353 :002 >
 ```
 
-等等,如果你了解过HTML的话,会觉得这一点都不符合语法规则,但是他工作了,没有什么比安装完Nginx后看到It works!更让人激动了。
+等等,如果你了解过 HTML 的话,会觉得这一点都不符合语法规则,但是他工作了,没有什么比安装完 Nginx 后看到 It works! 更让人激动了。
 
-遗憾的是,它可能无法在所有的浏览器上工作,所以我们需要去调试其中的bug。
+遗憾的是,它可能无法在所有的浏览器上工作,所以我们需要去调试其中的 bug。
 
-####调试hello,world
+####调试 hello,world
 
-我们会发现我们的代码在浏览器中变成了下面的代码,如果你和我一样用的是Chrome,那么你可以右键浏览器中的空白区域,点击审查元素,就会看到下面的代码。
+我们会发现我们的代码在浏览器中变成了下面的代码,如果你和我一样用的是 Chrome,那么你可以右键浏览器中的空白区域,点击审查元素,就会看到下面的代码。
 
 ``` html
 <html>
@@ -45,17 +45,17 @@ hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 
 这个才是真正能在大部分浏览器上工作的代码,所以复制它到编辑器里吧。
 
-####说说hello,world
+####说说 hello,world
 
-我很不喜欢其中的<\*></*>,但是我也没有找到别的方法来代替它们,所以这是一个设计得当的语言。甚至大部分人都说这算不上是一门真正的语言,不过html的原义是
+我很不喜欢其中的<\*></*>,但是我也没有找到别的方法来代替它们,所以这是一个设计得当的语言。甚至大部分人都说这算不上是一门真正的语言,不过 html 的原义是
 <blockquote>超文本标记语言</blockquote>
-所以我们可以发现其中的关键词是标记——markup,也就是说html是一个markup,head是一个markup,body也是一个markup。
+所以我们可以发现其中的关键词是标记——markup,也就是说 html 是一个 markup,head 是一个 markup,body 也是一个 markup。
 
-然而,我们真正工作的代码是在body里面,至于为什么是在这里面,这个问题就太复杂了。打个比方来说:
+然而,我们真正工作的代码是在 body 里面,至于为什么是在这里面,这个问题就太复杂了。打个比方来说:
 
 1. 我们所使用的汉语是人类用智慧创造的,我们所正在学的这门语言同样也是人类创造的。
 
-2. 我们在自己的语言里遵循着<strong>桌子是桌子,凳子是凳子</strong>的原则,很少有人会问为什么。
+2. 我们在自己的语言里遵循着 **桌子是桌子,凳子是凳子** 的原则,很少有人会问为什么。
 
 
 ###中文?
@@ -97,7 +97,7 @@ hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 <语言> <头> <身体>你好,世界
 ```
 
-被Chrome浏览器解析成什么样了?
+被 Chrome 浏览器解析成什么样了?
 
 ``` html
 <html><head></head><body><语言>
@@ -105,7 +105,7 @@ hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 		<身体>你好,世界<!--身体-->
 	<!--语言-->
 </body></html>		
-```	
+```
 
     <!--开头,-->
@@ -125,7 +125,7 @@ hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 ```
 
 或许你会觉得很神奇,但是这一点儿也不神奇,虽然我们的中文语法也遵循着标记语言的标准,但是我们的浏览器不支持中文标记。
-    
+
 结论:
 
 1. 浏览器对中文支持不友好。
@@ -136,9 +136,9 @@ hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 1. 现有的系统都是基于英语语言环境构建的,对中文支持不是很友好。
 2. 中文输入的速度在某种程度上来说没有英语快。
 
-我们离开话题已经很远了,但是这里说的都是针对于那些不满于英语的人来说的,只有当我们可以从头构建一个中文系统的时候才是可行的,而这些就要将CPU、软件、硬件都包含在内,甚至我们还需要考虑重新设计CPU的结构,在某种程度上来说会有些不现实。或许,需要一代又一代人的努力。忘记那些吧,师夷之长技以制夷。
+我们离开话题已经很远了,但是这里说的都是针对于那些不满于英语的人来说的,只有当我们可以从头构建一个中文系统的时候才是可行的,而这些就要将 CPU、软件、硬件都包含在内,甚至我们还需要考虑重新设计 CPU 的结构,在某种程度上来说会有些不现实。或许,需要一代又一代人的努力。忘记那些吧,师夷之长技以制夷。
 
-###其他HTML标记
+###其他 HTML 标记
 
 添加一个标题,
 
@@ -170,28 +170,28 @@ hello,world
 </body>
 </html>
 ```
-	
+
 更多的东西可以在一些书籍上看到,这边所要说的只是一次简单的语言入门,其他的东西都和这些类似。
 
 ###小结
 
 ####美妙之处
 
-我们简单地上手了一门不算是语言的语言,浏览器简化了这其中的大部分过程,虽然没有C和其他语言来得有专业感,但是我们试着去开始写代码了。我们可能在未来的某一篇中可能会看到类似的语言,诸如Python,我们所要做的就是
+我们简单地上手了一门不算是语言的语言,浏览器简化了这其中的大部分过程,虽然没有 C 和其他语言来得有专业感,但是我们试着去开始写代码了。我们可能在未来的某一篇中可能会看到类似的语言,诸如 Python,我们所要做的就是
 
 ```bash
 $ python file.py
 =>hello,world
 ```
-   
-然后在终端上返回结果。只是因为在我看来学会html是有意义的,简单的上手,然后再慢慢地深入,如果一开始我们就去理解指针,开始去理解类。我们甚至还知道程序是怎么编译运行的时候,在这个过程中又发生了什么。虽然现在我们也没能理解这其中发生了什么,但是至少展示了
+
+然后在终端上返回结果。只是因为在我看来学会 html 是有意义的,简单的上手,然后再慢慢地深入,如果一开始我们就去理解指针,开始去理解类。我们甚至还知道程序是怎么编译运行的时候,在这个过程中又发生了什么。虽然现在我们也没能理解这其中发生了什么,但是至少展示了
 
 1. 中文编程语言在当前意义不大,不现实,效率不高兼容性差
 2. 语言的语法是固定的。(ps:虽然我们也可以进行扩充,我们将会在后来支持上述的中文标记。)
 3. 已经开始写代码,而不是还在配置开发环境。
-4. 随身的工具才是最好的,最常用的code也才是实在的。
+4. 随身的工具才是最好的,最常用的 code 也才是实在的。
 
 
 ####更多
 
-我们还没有试着去解决“某商店里的糖一颗5块钱,小明买了3颗糖,小明一共花了多少钱”的问题。也就是说我们学会的是一个还不能解决实际问题的语言,于是我们还需要学点东西,比如Javascript, CSS。我们可以将Javascript理解为解决问题的语言,HTML则是前端显示,CSS是配置文件,这样的话,我们会在那之后学会成为一个近乎专业的程序员。我们刚刚学习了一下怎么在前端显示那些代码的行为,于是我们还需要Javascript。
+我们还没有试着去解决“某商店里的糖一颗5块钱,小明买了3颗糖,小明一共花了多少钱”的问题。也就是说我们学会的是一个还不能解决实际问题的语言,于是我们还需要学点东西,比如 JavaScript, CSS。我们可以将 JavaScript 理解为解决问题的语言,HTML则是前端显示,CSS 是配置文件,这样的话,我们会在那之后学会成为一个近乎专业的程序员。我们刚刚学习了一下怎么在前端显示那些代码的行为,于是我们还需要 JavaScript。

+ 34 - 34
chapters/1.4.1-css.md

@@ -1,9 +1,9 @@
 CSS
 ---
 
-如果说HTML是建筑的框架,CSS就是房子的装修。那么Javascript呢,我听到的最有趣的说法是小三——还是先让我们回到代码上来吧。
+如果说 HTML 是建筑的框架,CSS 就是房子的装修。那么 JavaScript 呢,我听到的最有趣的说法是小三——还是先让我们回到代码上来吧。
 
-下面就是我们之前说到的代码,css将Red三个字母变成了红色。
+下面就是我们之前说到的代码,css  Red 三个字母变成了红色。
 
 ```HTML
 <!DOCTYPE html>
@@ -24,23 +24,23 @@ var para=document.getElementById("para");
 para.style.color="blue";
 ```
 
-将字体变成了蓝色,CSS+HTML让页面有序的工作着,但是Javascript却打乱了这些秩序,有着唯恐世界不乱的精彩,也难怪被冠以小三之名了——或许终于可以理解,为什么以前人们对于Javascript没有好感了——不过这里要讲的是正室,也就是CSS,这时还没有Javascript。
-	
+将字体变成了蓝色,CSS+HTML 让页面有序的工作着,但是 JavaScript 却打乱了这些秩序,有着唯恐世界不乱的精彩,也难怪被冠以小三之名了——或许终于可以理解,为什么以前人们对于 JavaScript 没有好感了——不过这里要讲的是正室,也就是 CSS,这时还没有 JavaScript。
+
 ![Red Fonts](assets/article/chapter1/redfonts.png)
 
 ###简介
 
-这不是一篇专业讲述CSS的书籍,所以我不会去说CSS是怎么来的,有些东西我们既然可以很容易从其他地方知道,也就不需要花太多时间去重复。诸如重构等这些的目的之一也在于去除重复的代码,不过有些重复是不可少的,也是有必要的,而通常这些东西可能是由其他地方复制过来的。
+这不是一篇专业讲述 CSS 的书籍,所以我不会去说 CSS 是怎么来的,有些东西我们既然可以很容易从其他地方知道,也就不需要花太多时间去重复。诸如重构等这些的目的之一也在于去除重复的代码,不过有些重复是不可少的,也是有必要的,而通常这些东西可能是由其他地方复制过来的。
 
-到目前为止我们没有依赖于任何特殊的硬件或者是软件,对于我们来说我们最基本的需求就是一台电脑,或者可以是你的平板电脑,当然也可以是你的智能手机,因为他们都有个浏览器,而这些都是能用的,对于我们的CSS来说也不会有例外的。
+到目前为止我们没有依赖于任何特殊的硬件或者是软件,对于我们来说我们最基本的需求就是一台电脑,或者可以是你的平板电脑,当然也可以是你的智能手机,因为他们都有个浏览器,而这些都是能用的,对于我们的 CSS 来说也不会有例外的。
 
-CSS(Cascading Style Sheets),到今天我也没有记得他的全称,CSS还有一个中文名字是层叠式样式表,事实上翻译成什么可能并不是我们关心的内容,我们需要关心的是他能做些什么。作为三剑客之一,它的主要目的在于可以让我们方便灵活地去控制Web页面的外观表现。我们可以用它做出像淘宝一样复杂的界面,也可以像我们的书本一样简单,不过如果要和我们书本一样简单的话,可能不需要用到CSS。HTML一开始就是依照报纸的格式而设计的,我们还可以继续用上面说到的编辑器,又或者是其他的。如果你喜欢DreamWeaver那也不错,不过一开始使用IDE可无助于我们写出良好的代码。
+CSS(Cascading Style Sheets),到今天我也没有记得他的全称,CSS 还有一个中文名字是层叠式样式表,事实上翻译成什么可能并不是我们关心的内容,我们需要关心的是他能做些什么。作为三剑客之一,它的主要目的在于可以让我们方便灵活地去控制 Web 页面的外观表现。我们可以用它做出像淘宝一样复杂的界面,也可以像我们的书本一样简单,不过如果要和我们书本一样简单的话,可能不需要用到 CSS。HTML 一开始就是依照报纸的格式而设计的,我们还可以继续用上面说到的编辑器,又或者是其他的。如果你喜欢DreamWeaver 那也不错,不过一开始使用 IDE 可无助于我们写出良好的代码。
 
-忘说了,CSS也是有版本的,和windows,Linux内核等等一样,但是更新可能没有那么频繁,HTML也是有版本的,JS也是有版本的,复杂的东西不是当前考虑的内容。
+忘说了,CSS 也是有版本的,和 windows,Linux 内核等等一样,但是更新可能没有那么频繁,HTML 也是有版本的,JS 也是有版本的,复杂的东西不是当前考虑的内容。
 
 ####代码结构
 
-对于我们的上面的Red示例来说,如果没有一个好的结构,那么以后可能就是这样子。
+对于我们的上面的 Red 示例来说,如果没有一个好的结构,那么以后可能就是这样子。
 
 ```HTML
 <!DOCTYPE html>
@@ -55,7 +55,7 @@ CSS(Cascading Style Sheets),到今天我也没有记得他的全称,CSS还
 ```
 
 虽然我们看到的还是一样的:
-	
+
 ![No Style](assets/article/chapter1/nostyle.png)
 
 于是我们就按各种书上的建议重新写了上面的代码
@@ -119,7 +119,7 @@ CSS(Cascading Style Sheets),到今天我也没有记得他的全称,CSS还
 </html>
 ```
 
-然后我们有一个像app.js一样的style.css放在同目录下,而他的内容便是
+然后我们有一个像 app.js 一样的 style.css 放在同目录下,而他的内容便是
 
 ```CSS
 .para{
@@ -136,7 +136,7 @@ CSS(Cascading Style Sheets),到今天我也没有记得他的全称,CSS还
 }
 ```			
 
-这代码和JS的代码有如此多的相似
+这代码和 JS 的代码有如此多的相似
 
 ```javascript
 var para={
@@ -155,7 +155,7 @@ var para={
 	color:#f00,
 	text_align:center,
 	padding_left:20px,
-}	
+}
 ```
 
 目测差距已经尽可能的小了,至于这些话题会在以后讨论到,如果要让我们的编译器更正确的工作,那么我们就需要非常多这样的符号,除非你乐意去理解:
@@ -164,9 +164,9 @@ var para={
 (dotimes (i 4) (print i))
 ```
 
-总的来说我们减少了符号的使用,但是用lisp便带入了更多的括号,不过这是一种简洁的表达方式,也许我们可以在其他语言中看到。
+总的来说我们减少了符号的使用,但是用 lisp 便带入了更多的括号,不过这是一种简洁的表达方式,也许我们可以在其他语言中看到。
 
-```	
+```
 \d{2}/[A-Z][a-z][a-z]/\d{4}
 ```
 
@@ -186,38 +186,38 @@ var para={
 	padding-left: 20px;
 }
 ```
-	
+
 我们的目标就是
 
 > 如果没有一个好的结构
-	
-所以样式和目标在这里牵手了,问题是他们是如何在一起的呢?下面就是CSS与HTML沟通的重点所在了:
+
+所以样式和目标在这里牵手了,问题是他们是如何在一起的呢?下面就是 CSS  HTML 沟通的重点所在了:
 
 ###选择器
 
-我们用到的选择器叫做类选择器,也就是class,或者说应该称之为class选择器更合适。与类选择器最常一起出现的是ID选择器,不过这个适用于比较高级的场合,诸如用JS控制DOM的时候就需要用到ID选择器。而基本的选择器就是如下面的例子:
+我们用到的选择器叫做类选择器,也就是 class,或者说应该称之为 class 选择器更合适。与类选择器最常一起出现的是 ID 选择器,不过这个适用于比较高级的场合,诸如用 JS 控制 DOM 的时候就需要用到 ID 选择器。而基本的选择器就是如下面的例子:
 
 	p.para{
 		color:#f0f;
 	}
 
-将代码添加到style.css的最下面会发现“如果没有一个好的结构”变成了粉红色,当然我们还会有这样的写法
+将代码添加到 style.css 的最下面会发现“如果没有一个好的结构”变成了粉红色,当然我们还会有这样的写法
 
 	p>.para{
 		color:#f0f;
 	}
-	
+
 为了产生上面的特殊的样式,虽然不好看,但是我们终于理解什么叫层叠样式了,下面的代码的重要度比上面高,也因此有更高的优先规则。
 
 而通常我们可以通过一个
-   
+
     p{
     	text-align:left;
     }
-    
-这样的元素选择器来给予所有的p元素一个左对齐。
 
-还有复杂一点的复合型选择器,下面的是HTML文件
+这样的元素选择器来给予所有的 p 元素一个左对齐。
+
+还有复杂一点的复合型选择器,下面的是 HTML 文件
 
 	<!DOCTYPE html>
 	<html>
@@ -232,8 +232,8 @@ var para={
 		</div>
 	</body>
 	</html>
-	
-还有CSS文件
+
+还有 CSS 文件
 
 
 	.para{
@@ -255,23 +255,23 @@ var para={
 	div#content p {
 		font-size:22px;
 	}
-	
-###更有趣的CSS
 
-一个包含了para2以及para_bg的例子
+###更有趣的 CSS
+
+一个包含了 para2 以及 para_bg 的例子
 
 		<div id="content">
 			<p class="para2 para_bg">那么以后可能就是这样子。。。。</p>
 		</div>
-		
+
 我们只是添加了一个黑色的背景
 
 	.para_bg{
 		background-color:#000;
 	}
-	
+
 重新改变后的网页变得比原来有趣了很多,所谓的继承与合并就是上面的例子。
 
-我们还可以用CSS3做出更多有趣的效果,而这些并不在我们的讨论范围里面,因为我们讨论的是be a geek。
+我们还可以用 CSS3做 出更多有趣的效果,而这些并不在我们的讨论范围里面,因为我们讨论的是 be a geek。
 
-或许我们写的代码都是那么的简单,从HTML到Javascript,还有现在的CSS,只是总有一些核心的东西,而不是去考虑那些基础语法,基础的东西我们可以在实践的过程中一一发现。但是我们可能发现不了,或者在平时的使用中考虑不到一些有趣的用法或者说特殊的用法,这时候可以通过观察一些精致设计的代码中学习到。复杂的东西可以变得很简单,简单的东西也可以变得很复杂。
+或许我们写的代码都是那么的简单,从 HTML 到 JavaScript,还有现在的 CSS,只是总有一些核心的东西,而不是去考虑那些基础语法,基础的东西我们可以在实践的过程中一一发现。但是我们可能发现不了,或者在平时的使用中考虑不到一些有趣的用法或者说特殊的用法,这时候可以通过观察一些精致设计的代码中学习到。复杂的东西可以变得很简单,简单的东西也可以变得很复杂。

+ 57 - 58
chapters/1.4.2-js.md

@@ -1,11 +1,11 @@
 JavaScript
 ---
 
-Javascript现在已经无处不在了,也许你正打开的某个网站,他便可能是node.js+json+javascript+mustache.js完成的,虽然你还没理解上面那些是什么,也正是因为你不理解才需要去学习更多的东西。但是你只要知道Javascript已经无处不在了,它可能就在你手机上的某个app里,就在你浏览的网页里,就运行在你IDE中的某个进程里。
+JavaScript 现在已经无处不在了,也许你正打开的某个网站,他便可能是 node.js+json+javascript+mustache.js 完成的,虽然你还没理解上面那些是什么,也正是因为你不理解才需要去学习更多的东西。但是你只要知道 JavaScript 已经无处不在了,它可能就在你手机上的某个 app 里,就在你浏览的网页里,就运行在你 IDE 中的某个进程里。
 
 ###hello,world
 
-这里我们还需要有一个helloworld.html,Javascript是专为网页交互而设计的脚本语言,所以我们一点点来开始这部分的旅途,先写一个符合标准的helloworld.html
+这里我们还需要有一个 helloworld.html,JavaScript 是专为网页交互而设计的脚本语言,所以我们一点点来开始这部分的旅途,先写一个符合标准的 helloworld.html
 
 ``` html
 <!DOCTYPE html>
@@ -15,7 +15,7 @@ Javascript现在已经无处不在了,也许你正打开的某个网站,他
 </html>
 ```
 
-然后开始融入我们的javascript,向HTML中插入Javascript的方法,就需要用到html中的\<script>标签,我们先用页面嵌入的方法来写helloworld。
+然后开始融入我们的 JavaScript,向 HTML 中插入JavaScript 的方法,就需要用到 html 中的 \<script> 标签,我们先用页面嵌入的方法来写 helloworld。
 
 ``` html
 <!DOCTYPE html>
@@ -43,7 +43,7 @@ Javascript现在已经无处不在了,也许你正打开的某个网站,他
 </html>
 ```
 
-没有显示hello,world?试试下面的代码
+没有显示 hello,world ?试试下面的代码
 
 ``` html
 <!DOCTYPE html>
@@ -63,13 +63,13 @@ Javascript现在已经无处不在了,也许你正打开的某个网站,他
 
 ###JavaScriptFul
 
-我们需要让我们的代码看上去更像是js,同时是以js结尾。就像C语言的源码是以C结尾的,我们也同样需要让我们的代码看上去更正式一点。于是我们需要在helloworld.html的同一文件夹下创建一个app.js文件,在里面写着
+我们需要让我们的代码看上去更像是 js,同时是以 js 结尾。就像 C 语言的源码是以 C 结尾的,我们也同样需要让我们的代码看上去更正式一点。于是我们需要在 helloworld.html 的同一文件夹下创建一个 app.js 文件,在里面写着
 
 ``` javascript
 document.write('hello,world');
 ```
 
-同时我们的helloworld.html还需要告诉我们的浏览器js代码在哪里
+同时我们的 helloworld.html 还需要告诉我们的浏览器 js 代码在哪里
 
 ``` html
 <!DOCTYPE html>
@@ -84,20 +84,20 @@ document.write('hello,world');
 	</body>
 </html>
 ```
-	
+
 ####从数学出发
 
-让我们回到第一章讲述的小明的问题,<strong>从实际问题下手编程,更容易学会编程</strong>。小学时代的数学题最喜欢这样子了——某商店里的糖一个5块钱,小明买了3个糖,小明一共花了多少钱。在编程方面,也许我们还算是小学生。最直接的方法就是直接计算3x5=?
+让我们回到第一章讲述的小明的问题,**从实际问题下手编程,更容易学会编程**。小学时代的数学题最喜欢这样子了——某商店里的糖一个5块钱,小明买了3个糖,小明一共花了多少钱。在编程方面,也许我们还算是小学生。最直接的方法就是直接计算 3x5=?
 
 ``` javascript
 document.write(3*5);
 ```
 
-document.write实际也我们可以理解为输出,也就是往页面里写入3*5的结果,在有双引号的情况下会输出字符串。我们便会在浏览器上看到15,这便是一个好的开始,也是一个糟糕的开始。
+document.write 实际也我们可以理解为输出,也就是往页面里写入 3*5 的结果,在有双引号的情况下会输出字符串。我们便会在浏览器上看到15,这便是一个好的开始,也是一个糟糕的开始。
 
 ####设计和编程
 
-对于实际问题,如果我们只是止于所要得到的结果,很多年之后,我们就成为了code monkey。对这个问题进行再一次设计,所谓的设计有些时候会把简单的问题复杂化,有些时候会使以后的扩展更加简单。这一天因为这家商店的糖价格太高了,于是店长将价格降为了4块钱。
+对于实际问题,如果我们只是止于所要得到的结果,很多年之后,我们就成为了 code monkey。对这个问题进行再一次设计,所谓的设计有些时候会把简单的问题复杂化,有些时候会使以后的扩展更加简单。这一天因为这家商店的糖价格太高了,于是店长将价格降为了4块钱。
 
 ``` javascript
 document.write(3*4);
@@ -111,15 +111,15 @@ num=3;
 document.write(tang*num);
 ```
 
-这才能叫得上是程序设计,或许你注意到了";"这个符号的存在,我想说的是这是另外一个标准,我们不得不去遵守,也不得不去fuck。
+这才能叫得上是程序设计,或许你注意到了";"这个符号的存在,我想说的是这是另外一个标准,我们不得不去遵守,也不得不去 fuck。
 
 ####函数
 
 记得刚开始学三角函数的时候,我们会写
-  
+
     sin 30=0.5
-    
-而我们的函数也是类似于此,换句话说,因为很多搞计算机的先驱都学好了数学,都把数学世界的规律带到了计算机世界,所以我们的函数也是类似于此,让我们一个简单的开始。
+
+而我们的函数也是类似于此,换句话说,因为很多搞计算机的先驱都学好了数学,都把数学世界的规律带到了计算机世界,所以我们的函数也是类似于此,让我们一个简单的开始。
 
 ``` javascript
 function hello(){
@@ -128,7 +128,7 @@ function hello(){
 hello();
 ```
 
-当我第一次看到函数的时候,有些小激动终于出现了。我们写了一个叫hello的函数,它返回了往页面中写入hello,world的方法,然后我们调用了hello这个函数,于是页面上有了hello,world。
+当我第一次看到函数的时候,有些小激动终于出现了。我们写了一个叫 hello 的函数,它返回了往页面中写入 hello,world 的方法,然后我们调用了 hello 这个函数,于是页面上有了 hello,world。
 
 ``` javascript
 function sin(degree){
@@ -137,12 +137,12 @@ function sin(degree){
 sin(30);
 ```
 
-在这里degree就称之为变量。
-于是输出了-0.9880316240928602,而不是0.5,因为这里用的是弧度制,而不是角度制。
+在这里 degree 就称之为变量。
+于是输出了 -0.9880316240928602,而不是 0.5,因为这里用的是弧度制,而不是角度制。
 
     sin(30)
-    
-的输出结果有点类似于sin 30。写括号的目的在于,括号是为了方便解析,这个在不同的语言中可能是不一样的,比如在ruby中我们可以直接用类似于数学中的表达:
+
+的输出结果有点类似于sin 30。写括号的目的在于,括号是为了方便解析,这个在不同的语言中可能是不一样的,比如在 ruby 中我们可以直接用类似于数学中的表达:
 
 ``` ruby
 2.0.0-p353 :004 > Math.sin 30
@@ -160,7 +160,7 @@ function calc(tang,num){
 calc(3,4);
 ```
 
-但是从某种程度上来说,我们的calc做了计算的事又做了输出的事,总的来说设计上有些不好。
+但是从某种程度上来说,我们的 calc 做了计算的事又做了输出的事,总的来说设计上有些不好。
 
 ####重新设计
 
@@ -185,28 +185,28 @@ function printResult(tang,num){
 printResult(3, 4)
 ```
 
-看上去更专业了一点点,如果我们只需要计算的时候我们只需要调用calc,如果我们需要输出的时候我们就调用printResult的方法。
+看上去更专业了一点点,如果我们只需要计算的时候我们只需要调用 calc,如果我们需要输出的时候我们就调用 printResult 的方法。
 
-####object和函数
+####object 和函数
 
-我们还没有说清楚之前我们遇到过的document.write以及Math.sin的语法为什么看上去很奇怪,所以让我们看看他们到底是什么,修改app.js为以下内容
+我们还没有说清楚之前我们遇到过的 document.write 以及 Math.sin 的语法为什么看上去很奇怪,所以让我们看看他们到底是什么,修改 app.js 为以下内容
 
 ``` javascript
 document.write(typeof document);
 document.write(typeof Math);
 ```
 
-typeof document会返回document的数据类型,就会发现输出的结果是
+typeof document 会返回 document 的数据类型,就会发现输出的结果是
 
 ``` javascript
 object object
 ```
 
-所以我们需要去弄清楚什么是object。对象的定义是
+所以我们需要去弄清楚什么是 object。对象的定义是
 
-<blockquote>无序属性的集合,其属性可以包含基本值、对象或者函数。</blockquote>
+> 无序属性的集合,其属性可以包含基本值、对象或者函数。
 
-创建一个object,然后观察这便是我们接下来要做的 
+创建一个 object,然后观察这便是我们接下来要做的
 
 ``` javascript
 store={};
@@ -215,10 +215,10 @@ store.num=3;
 document.write(store.tang*store.num);
 ```
 
-我们就有了和document.write一样的用法,这也是对象的美妙之处,只是这里的对象只是包含着基本值,因为
-  
+我们就有了和 document.write 一样的用法,这也是对象的美妙之处,只是这里的对象只是包含着基本值,因为
+
     typeof story.tang="number"
-    
+
 一个包含对象的对象应该是这样子的。
 
 ``` javascript
@@ -231,10 +231,10 @@ var wall=new Object();
 wall.store=store;
 document.write(typeof wall.store);
 ```
-	
-而我们用到的document.write和上面用到的document.writeln都是属于这个无序属性集合中的函数。
 
-下面代码说的就是这个无序属性集中中的函数。
+而我们用到的 document.write 和上面用到的 document.writeln 都是属于这个无序属性集合中的函数。
+
+下面代码说的就是这个无序属性集合中的函数。
 
 ``` javascript
 var IO=new Object();
@@ -246,15 +246,15 @@ IO.print("a obejct with function");
 IO.print(typeof IO.print);
 ```
 
-我们定义了一个叫IO的对象,声明对象可以用
+我们定义了一个叫 IO 的对象,声明对象可以用
 
     var store={};
-   
+
 又或者是    
-   
+
     var store=new Object{};
 
-两者是等价的,但是用后者的可读性会更好一点,我们定义了一个叫print的函数,他的作用也就是document.write,IO中的print函数是等价于print()函数,这也就是对象和函数之间的一些区别,对象可以包含函数,对象是无序属性的集合,其属性可以包含基本值、对象或者函数。
+两者是等价的,但是用后者的可读性会更好一点,我们定义了一个叫print的函数,他的作用也就是 document.write,IO 中的print 函数是等价于 print() 函数,这也就是对象和函数之间的一些区别,对象可以包含函数,对象是无序属性的集合,其属性可以包含基本值、对象或者函数。
 
 复杂一点的对象应该是下面这样的一种情况。
 
@@ -298,19 +298,19 @@ document.write(typeof person.future+"<br>");
 document.write(person.future()+"<br>");
 ```
 
-只是在这个时候Person是一个函数,但是我们声明的person却变成了一个对象<strong>一个Javascript函数也是一个对象,并且,所有的对象从技术上讲也只不过是函数。</strong>这里的"\<br\>"是HTML中的元素,称之为DOM,在这里起的是换行的作用,我们会在稍后介绍它,这里我们先关心下this。this关键字表示函数的所有者或作用域,也就是这里的Person。
+只是在这个时候 Person 是一个函数,但是我们声明的 person 却变成了一个对象 **一个Javascript函数也是一个对象,并且,所有的对象从技术上讲也只不过是函数。** 这里的"\<br\>"是 HTML 中的元素,称之为 DOM,在这里起的是换行的作用,我们会在稍后介绍它,这里我们先关心下 this。this 关键字表示函数的所有者或作用域,也就是这里的 Person。
 
 上面的方法显得有点不可取,换句话说和一开始的
- 
+
     document.write(3*4);
-    
+
 一样,不具有灵活性,因此在我们完成功能之后,我们需要对其进行优化,这就是程序设计的真谛——解决完实际问题后,我们需要开始真正的设计,而不是解决问题时的编程。
 
 ``` javascript
 var Person=function(name,weight,height){
 	this.name=name;
 	this.weight=weight;
-	this.height=height;	
+	this.height=height;
 	this.future=function(){
 		return "future";
 	};
@@ -322,11 +322,11 @@ document.write(phodal.height+"<br>");
 document.write(phodal.future()+"<br>");
 ```
 
-于是,产生了这样一个可重用的Javascript对象,this关键字确立了属性的所有者。
+于是,产生了这样一个可重用的 JavaScript 对象, this 关键字确立了属性的所有者。
 
 ###其他
 
-Javascript还有一个很强大的特性,也就是原型继承,不过这里我们先不考虑这些部分,用尽量少的代码及关键字来实际我们所要表达的核心功能,这才是这里的核心,其他的东西我们可以从其他书本上学到。
+JavaScript 还有一个很强大的特性,也就是原型继承,不过这里我们先不考虑这些部分,用尽量少的代码及关键字来实际我们所要表达的核心功能,这才是这里的核心,其他的东西我们可以从其他书本上学到。
 
 所谓的继承,
 
@@ -338,7 +338,7 @@ var Chinese=function(){
 var Person=function(name,weight,height){
 	this.name=name;
 	this.weight=weight;
-	this.height=height;	
+	this.height=height;
 	this.futrue=function(){
 		return "future";
 	}
@@ -347,17 +347,17 @@ Chinese.prototype=new Person();
 
 var phodal=new Chinese("phodal",50,166);
 document.write(phodal.country);
-```	
-	
-完整的Javascript应该由下列三个部分组成:
+```
+
+完整的 JavaScript 应该由下列三个部分组成:
 
  - 核心(ECMAScript)——核心语言功能
  - 文档对象模型(DOM)——访问和操作网页内容的方法和接口
  - 浏览器对象模型(BOM)——与浏览器交互的方法和接口
- 
-我们在上面讲的都是ECMAScript,也就是语法相关的,但是JS真正强大的,或者说我们最需要的可能就是对DOM的操作,这也就是为什么jQuery等库可以流行的原因之一,而核心语言功能才是真正在哪里都适用的,至于BOM,真正用到的机会很少,因为没有完善的统一的标准。
 
-一个简单的DOM示例,
+我们在上面讲的都是 ECMAScript,也就是语法相关的,但是 JS 真正强大的,或者说我们最需要的可能就是对 DOM 的操作,这也就是为什么 jQuery 等库可以流行的原因之一,而核心语言功能才是真正在哪里都适用的,至于 BOM,真正用到的机会很少,因为没有完善的统一的标准。
+
+一个简单的 DOM 示例,
 
 ``` html
 <!DOCTYPE html>
@@ -373,27 +373,26 @@ document.write(phodal.country);
 	<script type="text/javascript" src="app.js"></script>
 </html>
 ```
-	
-我们需要修改一下helloworld.html添加	
+
+我们需要修改一下 helloworld.html 添加
 
 ```HTML
 <p id="para" style="color:red">Red</p>
 ```
 
-同时还需要将script标签移到body下面,如果没有意外的话我们会看到页面上用红色的字体显示Red,修改app.js。
+同时还需要将 script 标签移到 body 下面,如果没有意外的话我们会看到页面上用红色的字体显示 Red,修改 app.js。
 
 ``` javascript
 var para=document.getElementById("para");
 para.style.color="blue";
 ```
-	
-接着,字体就变成了蓝色,有了DOM我们就可以对页面进行操作,可以说我们看到的绝大部分的页面效果都是通过DOM操作实现的。
+
+接着,字体就变成了蓝色,有了 DOM 我们就可以对页面进行操作,可以说我们看到的绝大部分的页面效果都是通过 DOM 操作实现的。
 
 ####美妙之处
 
-这里说到的Javascript仅仅只是其中的一小小部分,忽略掉的东西很多,只关心的是如何去设计一个实用的app,作为一门编程语言,他还有其他强大的内制函数,要学好需要一本有价值的参考书。这里提到的只是其中的不到20%的东西,其他的80%或者更多会在你解决问题的时候出现。
+这里说到的 JavaScript 仅仅只是其中的一小小部分,忽略掉的东西很多,只关心的是如何去设计一个实用的 app,作为一门编程语言,他还有其他强大的内制函数,要学好需要一本有价值的参考书。这里提到的只是其中的不到20%的东西,其他的80%或者更多会在你解决问题的时候出现。
 
  - 我们可以创建一个对象或者函数,它可以包含基本值、对象或者函数。
- - 我们可以用Javascript修改页面的属性,虽然只是简单的示例。
+ - 我们可以用 JavaScript 修改页面的属性,虽然只是简单的示例。
  - 我们还可以去解决实际的编程问题。
-