极限编程的12个实践原则

justjavac 发表于 2012-04-13

1.计划的制定

制定计划的目的是确定本次迭代的范围。

本步骤的重心应该放在决定什么是对客户来说最重要的任务和如何首先完成这些任务。 计划的制定包括客户选择的项目大小、程序功能的优先级、各个版本的合成和发布日期。

2.小版本

小版本这一实践背后的观点是:用最少的代码工作量带来最大的业务价值。 程序的特性必须有原子性(不可分解)。 一个特性必须实现足够的功能来实现它的业务价值。 这个步骤可能是违反直觉的,但这样做是为了使项目尽快转化为产品。

发布小版本可以从客户那儿得到反馈和通过让客户确认,这就是他们需要的软件来降低项目的风险。 基本上,这个步骤使用Paredo规则:20%的努力能带来80%的业务价值。 小版本在计划的制定下,一版接一版地发布来决定何种特性将带来巨大的影响, 同时这也配合保持简单设计这一实践的实施。

3.简单设计

简单的设计能保证代码的简单。

  • 最简单的设计并不通过预测未来的需求来尝试未来的问题。
  • 最简单的设计将软件的一个可测试版本交付给用户。
  • 最简单的设计通过所有测试,没有重复和费解的逻辑代码,但能够表达每一个程序员的意图。

这个步骤伴随着小版本的发布。 如果你的系统架构不能够很好的表达和满足预期的需要,你将不能够尽快的交付。

我们是程序员,不是占卜者。 我们没有水晶球,所以预测客户未来的需求最好的方法是给他们一个可以工作的系统, 并且从他们那儿得到反馈。 大多数客户不知道如何准确表达他们的需要,你交付一些他们能够切实可用的东西有助于缓解这种问题。 记住,一幅图片胜过千言万语,一个工作模型抵得上一千幅图片。

4.测试

测试是极限编程的核心。

测试应该是自动的,这样你会有信心和勇气来改变和重构代码,同时不破坏系统。 这与瀑布开发模型正好相反。

5.持续集成

持续集成是一个至关重要的概念。

为什么我们要等到项目的最后才检查系统的每一部分是否都能正常工作? 每几个小时(至少一天一次)系统必须构建和测试一遍。...

什么是Node.js

justjavac 发表于 2012-04-06

简介

如果您听说过 Node.js,或者阅读过一些文章,宣称 Node.js 是多么多么的棒,那么您可能会想: Node.js 究竟是什么东西?” 即便是在参阅 Node.js 的主页之后,您甚至可能还是不明白 Node.js 为何物? Node.js 肯定不适合每个程序员,但它可能是某些程序员一直苦苦追寻的东西。

为试图解释什么是 Node.js,本文将简要介绍一些背景信息:它要解决的问题,它如何工作, 如何运行一个简单应用程序,最后,Node.js 在什么情况下是一个好的解决方案。

本文不涉及如何编写一个复杂的 Node.js 应用程序,也不是一份全面的 Node.js 教程。 阅读本文应该有助于您决定是否应该继续学习 Node,以便将其用于您的业务。

Node.js 旨在解决什么问题?

Node.js 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。

当前的服务器程序有什么问题?我们来做个数学题。

在 Java? 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB...

你不懂javascript

justjavac 发表于 2012-04-05

过去几年我注意到技术圈一个很奇怪的现象,有太多程序员将那些他们只是有过非常浅显的了解, 但其实根本就不懂的技术写到他们的简历中,这个现象几乎每种语言都有,但这其中最严重的就要数javascript了。

你不知道你不懂

出现这种状况的一个很大的原因就是现如今几乎每个开发者的工作都或多或少要依赖于javascript, 但大多数人并不真的理解这门语言,他们常用的学习方式是复制粘贴,使用这种方式, 你永远不会真正学会这门语言,而只能得到一个你已经懂了的假象。

根据我过去几年学习和使用javascript的经验,在你了解之前,你不会知道你其实不懂, 这听起来有点绕,你真正需要的就是有个人来告诉你你其实不懂,你需要全面系统的学习。 我经常面试一些自豪的将javascript列在他们简历中的家伙,但他们通常也就只能做个简单的onClick处理或是表单验证。 使用jQuery或者Dojo这样的框架当然没什么问题,但是除非你能了解隐藏在这些框架之后的javascript技术, 否则你不可能真正的掌握这些工具包的能量所在,下面就是我划分的从低到高的javascript知识点, 分为基础,中级和高级3个部分,看看你知道多少:

javascript的基础知识

  • 知道基本的编程语法,比如循环,判断,try/catch等等 * 理解包括多种函数定义以及赋值的方式,包括匿名函数
  • 理解基本的命名空间,全局(window)空间以及对象空间(不包括闭包)
  • 理解上下文的角色以及this变量的使用 * 理解各种对象以及函数的初始化和声明方式
  • 理解javascript比较操作符,如<, >, ==, ===,以及对象和字符串比较的原理和对象映射 * 理解对象属性和函数的数组索引,以及这和真实的数组之间的区别。

javascript中级知识

* 理解定时器,以及它的工作原理,包括何时以及如何使用定时器来异步执行方法调用

  • 关于回调的深度支持,以及如何通过call和apply方法来控制上下文和函数参数传递
  • 理解JSON标记以及eval函数 * 理解闭包以及他们如何影响你的代码效率
  • AJAX以及对象序列化
  • ...

什么是Node

justjavac 发表于 2012-04-05

Node不是万能药!但的确能解决一些关键问题。

学习Node不是一件轻松事儿,但你所收到的回报是对得起你的付出的。 因为当下Web应用开发中的诸多难题唯有JavaScript才能解决。

目录

1. 专家们的警告!

  1. Node:几个小例子
  2. Node不是JavaScript, Node可以运行JavaScript
  3. 和Node服务器的交互 5. 快速入门手册 6. 解释器之惑
  4. 基于事件的Web应用
  5. Node的用武之地

“你够酷吗?来用我吧!”

Node.js 为最新潮的编程语言提供了一系列很酷的API和工具箱,它可以直接应用于传统 的Rails、Ajax、Hadoop、甚至可以某种程度上用于iPhone开发和HTML5。

如果你参加过一些大型技术会议,你总是会听到一些关于Node.js的主题演讲, 尽管这些话题对普通的开发者来说依然有些难以企及。

你可能已经听说Node.js(有时我们将其简称为“Node”)是一个服务器端的解决方案, 它可以运行JavaScript,并可以作为Web服务来处理HTTP请求。 如果这些东东还不至于让你晕头转向的话,转眼间关于端口、sockets和线程的讨论就又成了当下最热门的话题, 你会觉得这些东西让你眼花缭乱。这些内容真的属于JavaScript的范畴吗? 为什么世界上那么多人宁愿将JavaScript脱离浏览器而运行,更不用说将JavaScript运行于服务器端了?

好消息是,你所听到的(所想到的)关于Node的一切都是正确的。 Node的的确确是属于网络编程的范畴,用以处理服务器端的请求和响应。

坏消息是和之前的Rails、Ajax和Hadoop一样,真正实用的技术资料实在太少。 等到基于Node的“优秀的”框架成熟之后,技术资料一定会跟得上的, 但何必要等到技术书籍和教程都出来之后再去尝试使用Node呢? 现在就使用Node,说不定会给你的代码带来意想不到的改观,甚至让你的程序变得更易实现。

使用jekyll在Github上搭建博客

justjavac 发表于 2012-04-05

jekyll是一个使用Ruby编写的静态站点生成工具,使用Liquid模板渲染引擎,支持Markdown和Textile标记语言,并且可以为所有以 .html、.markdown、.textile扩展名结尾的文件使用YAML配置,内置语法高亮功能。

而Github的Pages服务可以为每个Github主机上的仓库提供静态页面服务,并且Pages服务支持jekyll。因为Github Pages有两种Pages,分别是用户页面和项目页面,所以我们可以使用用户页面来创建自己的Blog。

在开始前,请确保你已经有了Github账号一枚和Git的正确配置。没有的朋友可以先移步Github注册并安装配置Git。

首先,创建你的 Blog 仓库 username.github.com:

$ mkdir username.github.com $ cd username.github.com

新建一个 index.html 文件,像下面这样:

<!doctype html> <html> <head> <title>Hello</title> </head> <body> <h1>Hello!</h1> </body> </html>

初始化仓库、提交并push到Github:

$ git init $ git add . $ git commit -a...