﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Oo缘来是你oO-随笔分类-技术杂谈</title><link>http://www2.blogjava.net/majianan/category/14237.html</link><description>&lt;br&gt;
&lt;div align=center &gt;
&lt;img width=200 height=50 src="http://www.blogjava.net/images/blogjava_net/majianan/14891/r_5858488902000cu2.gif" name="welcome"&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;script language="JavaScript"&gt;
&lt;!-- Begin
text = "人本是人，不必刻意去做人；世本是世，无须精心去处世；自然的才是快乐的。"; 
color1 = "blue"; 
color2 = "red"; fontsize = "2"; 
speed = 100; 
i = 0;
if (navigator.appName == "Netscape") {
document.write("&lt;layer id=a visibility=show&gt;&lt;/layer&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;");
}
else {
document.write("&lt;div id=a&gt;&lt;/div&gt;");
}
function changeCharColor() {
if (navigator.appName == "Netscape") {
document.a.document.write("&lt;center&gt;&lt;font face=arial size =" + fontsize + "&gt;&lt;font color=" + color1 + 
"&gt;");
for (var j = 0; j &lt; text.length; j++) {
if(j == i) {
document.a.document.write("&lt;font face=arial color=" + color2 + "&gt;" + Text.charAt(i) + "&lt;/font&gt;");
}
else {
document.a.document.write(text.charAt(j));
}
}
document.a.document.write('&lt;/font&gt;&lt;/font&gt;&lt;/center&gt;');
document.a.document.close();
}
if (navigator.appName == "Microsoft Internet Explorer") {
str = "&lt;center&gt;&lt;font face=arial size=" + fontsize + "&gt;&lt;font color=" + color1 + "&gt;";
for (var j = 0; j &lt; text.length; j++) {
if( j == i) {
str += "&lt;font face=arial color=" + color2 + "&gt;" + text.charAt(i) + "&lt;/font&gt;";
}
else {
str += text.charAt(j);
}
}
str += "&lt;/font&gt;&lt;/font&gt;&lt;/center&gt;";
a.innerHTML = str;
}
(i == text.length) ? i=0 : i++;
}
setInterval("changeCharColor()", speed);
// End --&gt;
&lt;/script&gt; 
</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 14:58:04 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 14:58:04 GMT</pubDate><ttl>60</ttl><item><title>QQ木马win32.QQPsw.wunaiwangdaod.a删除方法！！！</title><link>http://www.blogjava.net/majianan/archive/2007/02/09/99032.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Fri, 09 Feb 2007 08:30:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2007/02/09/99032.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/99032.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2007/02/09/99032.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/99032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/99032.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: QQ木马win32.QQPsw.wunaiwangdaod.a删除方法！！！&nbsp;&nbsp;<a href='http://www.blogjava.net/majianan/archive/2007/02/09/99032.html'>阅读全文</a><img src ="http://www.blogjava.net/majianan/aggbug/99032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2007-02-09 16:30 <a href="http://www.blogjava.net/majianan/archive/2007/02/09/99032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>条件注释</title><link>http://www.blogjava.net/majianan/archive/2006/12/09/86522.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Sat, 09 Dec 2006 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/12/09/86522.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/86522.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/12/09/86522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/86522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/86522.html</trackback:ping><description><![CDATA[
		<font face="Verdana">
				<font color="#0000ff">
						<font size="2">                                                  <font size="3">条件注释<br /></font>                                             <br />                                               </font>
						<a href="/majianan">
								<font color="#000080" size="2">马嘉楠</font>
						</a>
						<font size="2">
								<font color="#000080">2006-12-09</font>
								<br />
						</font>
				</font>
				<br />
		</font>
		<p>
				<font face="Verdana" size="2">条件注释就是一些if判断，但这些判断不是在脚本里执行的，而是<font color="#0000ff">直接在html代码里执行的</font>,例如:<br /><br /></font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if XXX]&gt;<br />这里是正常的html代码<br />&lt;![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
		</div>
		<p>
				<br />
				<font face="Verdana" size="2">这里XXX是一些特定的东东，在此列表几个出来，详细介绍各自的含义：<br /><br />&lt;!--[if IE]&gt;             / 如果浏览器是IE /<br />&lt;!--[if IE 5]&gt;          / 如果浏览器是IE 5 的版本 /<br />&lt;!--[if IE 6]&gt;          / 如果浏览器是IE 6 的版本 /<br />&lt;!--[if IE 7]&gt;          / 如果浏览器是IE 7 的版本 /<br /><br /><br />上面是几个常用的判断IE浏览器版本的语法，下面再来介绍一下相对比较少用的逻辑判断的参数：<br />有几个参数：lte，lt，gte，gt，!<br /><br />lte ：Less than or equal to   <br />lt   ：Less than               <br />gte ：Greater than or equal to<br />gt  ：Greater than<br />!    ：不等于<br /><br />例如：</font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<span style="COLOR: #008000">
						<font face="Verdana" size="2">[if gt IE 5.5]&gt;        / 如果IE版本大于5.5 /<br />&lt;!--[if lte IE 6]&gt;           / 如果IE版本小于等于6 /<br />&lt;!--[if !IE]&gt;                 / 如果浏览器不是IE /<br /></font>
				</span>
		</div>
		<p>
				<br />
				<font face="Verdana" size="2">明白了条件注释的用法，再举个例子（可把代码直接放到html代码中,看看执行效果^+^）：<br /><br />下面一段代码是测试在微软的IE浏览器下的条件注释语句的效果</font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if IE]&gt; <br />根据条件判断，这是Internet Explorer&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #000000"> <br /></span>
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if IE 5]&gt; <br />根据条件判断，这是Internet Explorer 5&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #000000"> <br /></span>
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if IE 5.0]&gt; <br />根据条件判断，这是Internet Explorer 5.0&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #000000"> <br /></span>
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if IE 5.5]&gt; <br />根据条件判断，这是Internet Explorer 5.5&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #000000"> <br /></span>
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if IE 6]&gt; <br />根据条件判断，这是Internet Explorer 6&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if IE 7]&gt; <br />根据条件判断，这是Internet Explorer 7&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #000000"> <br /></span>
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if gte IE 5]&gt; <br />根据条件判断，这是Internet Explorer 5 或者更高&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #000000"> <br /></span>
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if lt IE 6]&gt; <br />根据条件判断，这是版小于6的Internet Explorer&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #000000"> <br /></span>
								<span style="COLOR: #008000">&lt;!--</span>
						</font>
				</font>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">[if lte IE 5.5]&gt; <br />根据条件判断，这是Internet Explorer 5.5或更低&lt;br /&gt; <br />&lt; ![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
		</div>
		<p>
				<font face="Verdana">
						<font size="2">下面的代码是在非IE浏览器下运行的条件注释 <span class="code"></span></font>
				</font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">&lt;!--</span>
								<span style="COLOR: #008000">[if !IE]&gt;&lt;!</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font face="Verdana" size="2">您使用不是 Internet Explorer</font>
				</span>
				<font face="Verdana" size="2">
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">br </span>
						<span style="COLOR: #0000ff">/&gt;</span>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">&lt;!--</span>
								<span style="COLOR: #008000">&lt;![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">&lt;!--</span>
								<span style="COLOR: #008000">[if IE 6]&gt;&lt;!</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font face="Verdana" size="2">您正在使用Internet Explorer version 6</font>
				</span>
				<font face="Verdana" size="2">
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">br </span>
						<span style="COLOR: #0000ff">/&gt;</span>
				</font>
				<span style="COLOR: #000000">
						<br />
						<font face="Verdana" size="2">或者 一个非IE 浏览器</font>
				</span>
				<font face="Verdana" size="2">
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">br </span>
						<span style="COLOR: #0000ff">/&gt;</span>
				</font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font face="Verdana">
						<font size="2">
								<span style="COLOR: #008000">&lt;!--</span>
								<span style="COLOR: #008000">&lt;![endif]</span>
								<span style="COLOR: #008000">--&gt;</span>
						</font>
				</font>
		</div>
		<p>
				<font face="Verdana" size="2">注:<br />条件注释是在IE5.0/Win以后才被IE支持的，对于IE5以前的浏览器是无效的.<br /></font>
		</p>
<img src ="http://www.blogjava.net/majianan/aggbug/86522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-12-09 11:44 <a href="http://www.blogjava.net/majianan/archive/2006/12/09/86522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>垃圾收集趣史（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/11/04/79067.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Sat, 04 Nov 2006 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/11/04/79067.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/79067.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/11/04/79067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/79067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/79067.html</trackback:ping><description><![CDATA[
		<div id="article">
				<p>
						<font face="Verdana" size="2">
								<font color="#000080" size="4">                                            垃圾收集趣史（转）</font>
								<br />
						</font>
				</p>
				<p>
						<font face="Verdana" size="2">                                                     王咏刚，2003年12月<br /><br /></font>
						<br />写作本文的初衷是想和大家分享垃圾收集（ Garbage Collection ）技术简单而有趣的发展史。动笔之前，我站在窗边，望了望正在小区里装运垃圾的清洁车。和生活中环卫工人们清运垃圾的工作相似，软件开发里的垃圾收集其实就是一种自动打扫和清除内存垃圾的技术，它可以有效防范动态内存分配中可能发生的两个危险：因内存垃圾过多而引发的内存耗尽（这和生活垃圾堵塞排污管道的危险并没有什么本质的不同），以及不恰当的内存释放所造成的内存非法引用（这类似于我们在生活中买到了一瓶已经过期三年的牛奶）。 </p>
				<p>
						<font face="Verdana" size="2">据历史学家们介绍，四千多年前的古埃及人已经在城市里建设了完善的排污和垃圾清运设施，一千多年前的中国人更是修筑了当时世界上保洁能力最强的都市 ——长安。今天，当我们在软件开发中体验自动垃圾收集的便捷与舒适时，我们至少应当知道，这种拒绝杂乱、追求整洁的“垃圾收集”精神其实是人类自古以来就已经具备了的。 </font>
				</p>
				<div class="section" id="S01">
						<a name="S01">
						</a>
						<h3> </h3>
						<h3>
								<font face="Verdana" color="#000080" size="3">拓荒时代</font>
						</h3>
						<p>
								<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
						</p>
						<p>
								<font face="Verdana" size="2">国内的程序员大多是在 Java 语言中第一次感受到垃圾收集技术的巨大魅力的，许多人也因此把 Java 和垃圾收集看成了密不可分的整体。但事实上，垃圾收集技术早在 Java 语言问世前 30 多年就已经发展和成熟起来了， Java 语言所做的不过是把这项神奇的技术带到了广大程序员身边而已。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">如果一定要为垃圾收集技术找一个孪生兄弟，那么， Lisp 语言才是当之无愧的人选。 1960 年前后诞生于 MIT 的 Lisp 语言是第一种高度依赖于动态内存分配技术的语言： Lisp 中几乎所有数据都以“表”的形式出现，而“表”所占用的空间则是在堆中动态分配得到的。 Lisp 语言先天就具有的动态内存管理特性要求 Lisp 语言的设计者必须解决堆中每一个内存块的自动释放问题（否则， Lisp 程序员就必然被程序中不计其数的 free 或 delete 语句淹没），这直接导致了垃圾收集技术的诞生和发展——说句题外话，上大学时，一位老师曾告诉我们， Lisp 是对现代软件开发技术贡献最大的语言。我当时对这一说法不以为然：布满了圆括号，看上去像迷宫一样的 Lisp 语言怎么能比 C 语言或 Pascal 语言更伟大呢？不过现在，当我知道垃圾收集技术、数据结构技术、人工智能技术、并行处理技术、虚拟机技术、元数据技术以及程序员们耳熟能详的许多技术都起源于 Lisp 语言时，我特别想向那位老师当面道歉，并收回我当时的幼稚想法。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">知道了 Lisp 语言与垃圾收集的密切关系，我们就不难理解，为什么垃圾收集技术的两位先驱者 J. McCarthy 和 M. L. Minsky 同时也是 Lisp 语言发展史上的重要人物了。 J. McCarthy 是 Lisp 之父，他在发明 Lisp 语言的同时也第一次完整地描述了垃圾收集的算法和实现方式； M. L. Minsky 则在发展 Lisp 语言的过程中成为了今天好几种主流垃圾收集算法的奠基人——和当时不少技术大师的经历相似， J. McCarthy 和 M. L. Minsky 在许多不同的技术领域里都取得了令人艳羡的成就。也许，在 1960 年代那个软件开发史上的拓荒时代里，思维敏捷、意志坚定的研究者更容易成为无所不能的西部硬汉吧。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">在了解垃圾收集算法的起源之前，有必要先回顾一下内存分配的主要方式。我们知道，大多数主流的语言或运行环境都支持三种最基本的内存分配方式，它们分别是： </font>
						</p>
						<p>
								<font face="Verdana" size="2">一、静态分配（ Static Allocation ）：静态变量和全局变量的分配形式。我们可以把静态分配的内存看成是家里的耐用家具。通常，它们无需释放和回收，因为没人会天天把大衣柜当作垃圾扔到窗外。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">二、自动分配（ Automatic Allocation ）：在栈中为局部变量分配内存的方法。栈中的内存可以随着代码块退出时的出栈操作被自动释放。这类似于到家中串门的访客，天色一晚就要各回各家，除了个别不识时务者以外，我们一般没必要把客人捆在垃圾袋里扫地出门。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">三、动态分配（ Dynamic Allocation ）：在堆中动态分配内存空间以存储数据的方式。堆中的内存块好像我们日常使用的餐巾纸，用过了就得扔到垃圾箱里，否则屋内就会满地狼藉。像我这样的懒人做梦都想有一台家用机器人跟在身边打扫卫生。在软件开发中，如果你懒得释放内存，那么你也需要一台类似的机器人——这其实就是一个由特定算法实现的垃圾收集器。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">也就是说，下面提到的所有垃圾收集算法都是在程序运行过程中收集并清理废旧“餐巾纸”的算法，它们的操作对象既不是静态变量，也不是局部变量，而是堆中所有已分配内存块。 <br /><br /><br /></font>
						</p>
						<div class="section" id="S0101">
								<h3>
										<font face="Verdana" color="#000080" size="3">
										</font> </h3>
								<h3>
										<font face="Verdana" color="#000080" size="3">引用计数（ Reference Counting ）算法</font>
								</h3>
								<p>
										<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
								</p>
								<p>
										<font face="Verdana" size="2">1960 年以前，人们为胚胎中的 Lisp 语言设计垃圾收集机制时，第一个想到的算法是引用计数算法。拿餐巾纸的例子来说，这种算法的原理大致可以描述为： </font>
								</p>
								<p>
										<font face="Verdana" size="2">午餐时，为了把脑子里突然跳出来的设计灵感记下来，我从餐巾纸袋中抽出一张餐巾纸，打算在上面画出系统架构的蓝图。按照“餐巾纸使用规约之引用计数版”的要求，画图之前，我必须先在餐巾纸的一角写上计数值 1 ，以表示我在使用这张餐巾纸。这时，如果你也想看看我画的蓝图，那你就要把餐巾纸上的计数值加 1 ，将它改为 2 ，这表明目前有 2 个人在同时使用这张餐巾纸（当然，我是不会允许你用这张餐巾纸来擦鼻涕的）。你看完后，必须把计数值减 1 ，表明你对该餐巾纸的使用已经结束。同样，当我将餐巾纸上的内容全部誊写到笔记本上之后，我也会自觉地把餐巾纸上的计数值减 1 。此时，不出意外的话，这张餐巾纸上的计数值应当是 0 ，它会被垃圾收集器——假设那是一个专门负责打扫卫生的机器人——捡起来扔到垃圾箱里，因为垃圾收集器的惟一使命就是找到所有计数值为 0 的餐巾纸并清理它们。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">引用计数算法的优点和缺陷同样明显。这一算法在执行垃圾收集任务时速度较快，但算法对程序中每一次内存分配和指针操作提出了额外的要求（增加或减少内存块的引用计数）。更重要的是，引用计数算法无法正确释放循环引用的内存块，对此， D. Hillis 有一段风趣而精辟的论述： </font>
								</p>
								<p>
										<font face="Verdana" size="2">一天，一个学生走到 Moon 面前说：“我知道如何设计一个更好的垃圾收集器了。我们必须记录指向每个结点的指针数目。” Moon 耐心地给这位学生讲了下面这个故事：“一天，一个学生走到 Moon 面前说：‘我知道如何设计一个更好的垃圾收集器了……’” </font>
								</p>
								<p>
										<font face="Verdana" size="2">D. Hillis 的故事和我们小时候常说的“从前有座山，山上有个庙，庙里有个老和尚”的故事有异曲同工之妙。这说明，单是使用引用计数算法还不足以解决垃圾收集中的所有问题。正因为如此，引用计数算法也常常被研究者们排除在狭义的垃圾收集算法之外。当然，作为一种最简单、最直观的解决方案，引用计数算法本身具有其不可替代的优越性。 1980 年代前后， D. P. Friedman ， D. S. Wise ， H. G. Baker 等人对引用计数算法进行了数次改进，这些改进使得引用计数算法及其变种（如延迟计数算法等）在简单的环境下，或是在一些综合了多种算法的现代垃圾收集系统中仍然可以一展身手。 </font>
								</p>
						</div>
						<div class="section" id="S0102">
								<a name="S0102">
								</a>
								<h3> </h3>
								<h3>
										<font face="Verdana" color="#000080" size="3">标记－清除（ Mark-Sweep ）算法</font>
								</h3>
								<p>
										<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
								</p>
								<p>
										<font face="Verdana" size="2">第一种实用和完善的垃圾收集算法是 J. McCarthy 等人在 1960 年提出并成功地应用于 Lisp 语言的标记－清除算法。仍以餐巾纸为例，标记－清除算法的执行过程是这样的： </font>
								</p>
								<p>
										<font face="Verdana" size="2">午餐过程中，餐厅里的所有人都根据自己的需要取用餐巾纸。当垃圾收集机器人想收集废旧餐巾纸的时候，它会让所有用餐的人先停下来，然后，依次询问餐厅里的每一个人：“你正在用餐巾纸吗？你用的是哪一张餐巾纸？”机器人根据每个人的回答将人们正在使用的餐巾纸画上记号。询问过程结束后，机器人在餐厅里寻找所有散落在餐桌上且没有记号的餐巾纸（这些显然都是用过的废旧餐巾纸），把它们统统扔到垃圾箱里。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">正如其名称所暗示的那样，标记－清除算法的执行过程分为“标记”和“清除”两大阶段。这种分步执行的思路奠定了现代垃圾收集算法的思想基础。与引用计数算法不同的是，标记－清除算法不需要运行环境监测每一次内存分配和指针操作，而只要在“标记”阶段中跟踪每一个指针变量的指向——用类似思路实现的垃圾收集器也常被后人统称为跟踪收集器（ Tracing Collector ） </font>
								</p>
								<p>
										<font face="Verdana" size="2">伴随着 Lisp 语言的成功，标记－清除算法也在大多数早期的 Lisp 运行环境中大放异彩。尽管最初版本的标记－清除算法在今天看来还存在效率不高（标记和清除是两个相当耗时的过程）等诸多缺陷，但在后面的讨论中，我们可以看到，几乎所有现代垃圾收集算法都是标记－清除思想的延续，仅此一点， J. McCarthy 等人在垃圾收集技术方面的贡献就丝毫不亚于他们在 Lisp 语言上的成就了。 </font>
								</p>
						</div>
						<div class="section" id="S0103">
								<a name="S0103">
								</a>
								<h3> </h3>
								<h3>
										<font face="Verdana" color="#000080" size="3">复制（ Copying ）算法</font>
								</h3>
								<p>
										<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
								</p>
								<p>
										<font face="Verdana" size="2">为了解决标记－清除算法在垃圾收集效率方面的缺陷， M. L. Minsky 于 1963 年发表了著名的论文“一种使用双存储区的 Lisp 语言垃圾收集器（ A LISP Garbage Collector Algorithm Using Serial Secondary Storage ）”。 M. L. Minsky 在该论文中描述的算法被人们称为复制算法，它也被 M. L. Minsky 本人成功地引入到了 Lisp 语言的一个实现版本中。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">复制算法别出心裁地将堆空间一分为二，并使用简单的复制操作来完成垃圾收集工作，这个思路相当有趣。借用餐巾纸的比喻，我们可以这样理解 M. L. Minsky 的复制算法： </font>
								</p>
								<p>
										<font face="Verdana" size="2">餐厅被垃圾收集机器人分成南区和北区两个大小完全相同的部分。午餐时，所有人都先在南区用餐（因为空间有限，用餐人数自然也将减少一半），用餐时可以随意使用餐巾纸。当垃圾收集机器人认为有必要回收废旧餐巾纸时，它会要求所有用餐者以最快的速度从南区转移到北区，同时随身携带自己正在使用的餐巾纸。等所有人都转移到北区之后，垃圾收集机器人只要简单地把南区中所有散落的餐巾纸扔进垃圾箱就算完成任务了。下一次垃圾收集的工作过程也大致类似，惟一的不同只是人们的转移方向变成了从北区到南区。如此循环往复，每次垃圾收集都只需简单地转移（也就是复制）一次，垃圾收集速度无与伦比——当然，对于用餐者往返奔波于南北两区之间的辛劳，垃圾收集机器人是决不会流露出丝毫怜悯的。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">M. L. Minsky 的发明绝对算得上一种奇思妙想。分区、复制的思路不仅大幅提高了垃圾收集的效率，而且也将原本繁纷复杂的内存分配算法变得前所未有地简明和扼要（既然每次内存回收都是对整个半区的回收，内存分配时也就不用考虑内存碎片等复杂情况，只要移动堆顶指针，按顺序分配内存就可以了），这简直是个奇迹！不过，任何奇迹的出现都有一定的代价，在垃圾收集技术中，复制算法提高效率的代价是人为地将可用内存缩小了一半。实话实说，这个代价未免也太高了一些。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">无论优缺点如何，复制算法在实践中都获得了可以与标记－清除算法相比拟的成功。除了 M. L. Minsky 本人在 Lisp 语言中的工作以外，从 1960 年代末到 1970 年代初， R. R. Fenichel 和 J. C. Yochelson 等人也相继在 Lisp 语言的不同实现中对复制算法进行了改进， S. Arnborg 更是成功地将复制算法应用到了 Simula 语言中。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">至此，垃圾收集技术的三大传统算法——引用计数算法、标记－清除算法和复制算法——都已在 1960 年前后相继问世，三种算法各有所长，也都存在致命的缺陷。从 1960 年代后期开始，研究者的主要精力逐渐转向对这三种传统算法进行改进或整合，以扬长避短，适应程序设计语言和运行环境对垃圾收集的效率和实时性所提出的更高要求。 </font>
								</p>
						</div>
				</div>
				<div class="section" id="S02">
						<a name="S02">
						</a>
						<h3> </h3>
						<h3>
								<font face="Verdana" color="#000080" size="3">走向成熟</font>
						</h3>
						<p>
								<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
						</p>
						<p>
								<font face="Verdana" size="2">从 1970 年代开始，随着科学研究和应用实践的不断深入，人们逐渐意识到，一个理想的垃圾收集器不应在运行时导致应用程序的暂停，不应额外占用大量的内存空间和 CPU 资源，而三种传统的垃圾收集算法都无法满足这些要求。人们必须提出更新的算法或思路，以解决实践中碰到的诸多难题。当时，研究者的努力目标包括： </font>
						</p>
						<p>
								<font face="Verdana" size="2">第一，提高垃圾收集的效率。使用标记－清除算法的垃圾收集器在工作时要消耗相当多的 CPU 资源。早期的 Lisp 运行环境收集内存垃圾的时间竟占到了系统总运行时间的 40% ！——垃圾收集效率的低下直接造就了 Lisp 语言在执行速度方面的坏名声；直到今天，许多人还条件反射似地误以为所有 Lisp 程序都奇慢无比。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">第二，减少垃圾收集时的内存占用。这一问题主要出现在复制算法中。尽管复制算法在效率上获得了质的突破，但牺牲一半内存空间的代价仍然是巨大的。在计算机发展的早期，在内存价格以 KB 计算的日子里，浪费客户的一半内存空间简直就是在变相敲诈或拦路打劫。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">第三，寻找实时的垃圾收集算法。无论执行效率如何，三种传统的垃圾收集算法在执行垃圾收集任务时都必须打断程序的当前工作。这种因垃圾收集而造成的延时是许多程序，特别是执行关键任务的程序没有办法容忍的。如何对传统算法进行改进，以便实现一种在后台悄悄执行，不影响——或至少看上去不影响——当前进程的实时垃圾收集器，这显然是一件更具挑战性的工作。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">研究者们探寻未知领域的决心和研究工作的进展速度同样令人惊奇：在 1970 年代到 1980 年代的短短十几年中，一大批在实用系统中表现优异的新算法和新思路脱颖而出。正是因为有了这些日趋成熟的垃圾收集算法，今天的我们才能在 Java 或 .NET 提供的运行环境中随心所欲地分配内存块，而不必担心空间释放时的风险。 </font>
						</p>
						<div class="section" id="S0201">
								<a name="S0201">
								</a>
								<h3> </h3>
								<h3>
										<font face="Verdana" color="#000080" size="3">标记－整理（ Mark-Compact ）算法</font>
								</h3>
								<p>
										<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
								</p>
								<p>
										<font face="Verdana" size="2">标记－整理算法是标记－清除算法和复制算法的有机结合。把标记－清除算法在内存占用上的优点和复制算法在执行效率上的特长综合起来，这是所有人都希望看到的结果。不过，两种垃圾收集算法的整合并不像 1 加 1 等于 2 那样简单，我们必须引入一些全新的思路。 1970 年前后， G. L. Steele ， C. J. Cheney 和 D. S. Wise 等研究者陆续找到了正确的方向，标记－整理算法的轮廓也逐渐清晰了起来： </font>
								</p>
								<p>
										<font face="Verdana" size="2">在我们熟悉的餐厅里，这一次，垃圾收集机器人不再把餐厅分成两个南北区域了。需要执行垃圾收集任务时，机器人先执行标记－清除算法的第一个步骤，为所有使用中的餐巾纸画好标记，然后，机器人命令所有就餐者带上有标记的餐巾纸向餐厅的南面集中，同时把没有标记的废旧餐巾纸扔向餐厅北面。这样一来，机器人只消站在餐厅北面，怀抱垃圾箱，迎接扑面而来的废旧餐巾纸就行了。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">实验表明，标记－整理算法的总体执行效率高于标记－清除算法，又不像复制算法那样需要牺牲一半的存储空间，这显然是一种非常理想的结果。在许多现代的垃圾收集器中，人们都使用了标记－整理算法或其改进版本。 </font>
								</p>
						</div>
						<div class="section" id="S0202">
								<a name="S0202">
								</a>
								<h3> </h3>
								<h3>
										<font face="Verdana" color="#000080" size="3">增量收集（ Incremental Collecting ）算法</font>
								</h3>
								<p>
										<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
								</p>
								<p>
										<font face="Verdana" size="2">对实时垃圾收集算法的研究直接导致了增量收集算法的诞生。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">最初，人们关于实时垃圾收集的想法是这样的：为了进行实时的垃圾收集，可以设计一个多进程的运行环境，比如用一个进程执行垃圾收集工作，另一个进程执行程序代码。这样一来，垃圾收集工作看上去就仿佛是在后台悄悄完成的，不会打断程序代码的运行。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">在收集餐巾纸的例子中，这一思路可以被理解为：垃圾收集机器人在人们用餐的同时寻找废弃的餐巾纸并将它们扔到垃圾箱里。这个看似简单的思路会在设计和实现时碰上进程间冲突的难题。比如说，如果垃圾收集进程包括标记和清除两个工作阶段，那么，垃圾收集器在第一阶段中辛辛苦苦标记出的结果很可能被另一个进程中的内存操作代码修改得面目全非，以至于第二阶段的工作没有办法开展。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">M. L. Minsky 和 D. E. Knuth 对实时垃圾收集过程中的技术难点进行了早期的研究， G. L. Steele 于 1975 年发表了题为“多进程整理的垃圾收集（ Multiprocessing compactifying garbage collection ）”的论文，描述了一种被后人称为“ Minsky-Knuth-Steele 算法”的实时垃圾收集算法。 E. W. Dijkstra ， L. Lamport ， R. R. Fenichel 和 J. C. Yochelson 等人也相继在此领域做出了各自的贡献。 1978 年， H. G. Baker 发表了“串行计算机上的实时表处理技术（ List Processing in Real Time on a Serial Computer ）”一文，系统阐述了多进程环境下用于垃圾收集的增量收集算法。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">增量收集算法的基础仍是传统的标记－清除和复制算法。增量收集算法通过对进程间冲突的妥善处理，允许垃圾收集进程以分阶段的方式完成标记、清理或复制工作。详细分析各种增量收集算法的内部机理是一件相当繁琐的事情，在这里，读者们需要了解的仅仅是： H. G. Baker 等人的努力已经将实时垃圾收集的梦想变成了现实，我们再也不用为垃圾收集打断程序的运行而烦恼了。 </font>
								</p>
						</div>
						<div class="section" id="S0203">
								<a name="S0203">
								</a>
								<h3> </h3>
								<h3>
										<font face="Verdana" color="#000080" size="3">分代收集（ Generational Collecting ）算法</font>
								</h3>
								<p>
										<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
								</p>
								<p>
										<font face="Verdana" size="2">和大多数软件开发技术一样，统计学原理总能在技术发展的过程中起到强力催化剂的作用。 1980 年前后，善于在研究中使用统计分析知识的技术人员发现，大多数内存块的生存周期都比较短，垃圾收集器应当把更多的精力放在检查和清理新分配的内存块上。这个发现对于垃圾收集技术的价值可以用餐巾纸的例子概括如下： </font>
								</p>
								<p>
										<font face="Verdana" size="2">如果垃圾收集机器人足够聪明，事先摸清了餐厅里每个人在用餐时使用餐巾纸的习惯——比如有些人喜欢在用餐前后各用掉一张餐巾纸，有的人喜欢自始至终攥着一张餐巾纸不放，有的人则每打一个喷嚏就用去一张餐巾纸——机器人就可以制定出更完善的餐巾纸回收计划，并总是在人们刚扔掉餐巾纸没多久就把垃圾捡走。这种基于统计学原理的做法当然可以让餐厅的整洁度成倍提高。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">D. E. Knuth ， T. Knight ， G. Sussman 和 R. Stallman 等人对内存垃圾的分类处理做了最早的研究。 1983 年， H. Lieberman 和 C. Hewitt 发表了题为“基于对象寿命的一种实时垃圾收集器（ A real-time garbage collector based on the lifetimes of objects ）”的论文。这篇著名的论文标志着分代收集算法的正式诞生。此后，在 H. G. Baker ， R. L. Hudson ， J. E. B. Moss 等人的共同努力下，分代收集算法逐渐成为了垃圾收集领域里的主流技术。 </font>
								</p>
								<p>
										<font face="Verdana" size="2">分代收集算法通常将堆中的内存块按寿命分为两类，年老的和年轻的。垃圾收集器使用不同的收集算法或收集策略，分别处理这两类内存块，并特别地把主要工作时间花在处理年轻的内存块上。分代收集算法使垃圾收集器在有限的资源条件下，可以更为有效地工作——这种效率上的提高在今天的 Java 虚拟机中得到了最好的证明。 </font>
								</p>
						</div>
				</div>
				<div class="section" id="S03">
						<a name="S03">
						</a>
						<h3> </h3>
						<h3>
								<font face="Verdana" color="#000080" size="3">应用浪潮</font>
						</h3>
						<p>
								<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
						</p>
						<p>
								<font face="Verdana" size="2">Lisp 是垃圾收集技术的第一个受益者，但显然不是最后一个。在 Lisp 语言之后，许许多多传统的、现代的、后现代的语言已经把垃圾收集技术拉入了自己的怀抱。随便举几个例子吧：诞生于 1964 年的 Simula 语言， 1969 年的 Smalltalk 语言， 1970 年的 Prolog 语言， 1973 年的 ML 语言， 1975 年的 Scheme 语言， 1983 年的 Modula-3 语言， 1986 年的 Eiffel 语言， 1987 年的 Haskell 语言……它们都先后使用了自动垃圾收集技术。当然，每一种语言使用的垃圾收集算法可能不尽相同，大多数语言和运行环境甚至同时使用了多种垃圾收集算法。但无论怎样，这些实例都说明，垃圾收集技术从诞生的那一天起就不是一种曲高和寡的“学院派”技术。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">对于我们熟悉的 C 和 C++ 语言，垃圾收集技术一样可以发挥巨大的功效。正如我们在学校中就已经知道的那样， C 和 C++ 语言本身并没有提供垃圾收集机制，但这并不妨碍我们在程序中使用具有垃圾收集功能的函数库或类库。例如，早在 1988 年， H. J. Boehm 和 A. J. Demers 就成功地实现了一种使用保守垃圾收集算法（ Conservative GC Algorithmic ）的函数库（参见 </font>
								<a href="http://www.hpl.hp.com/personal/Hans_Boehm/gc">
										<font face="Verdana" size="2">http://www.hpl.hp.com/personal/Hans_Boehm/gc </font>
								</a>
								<font face="Verdana" size="2">）。我们可以在 C 语言或 C++ 语言中使用该函数库完成自动垃圾收集功能，必要时，甚至还可以让传统的 C/C++ 代码与使用自动垃圾收集功能的 C/C++ 代码在一个程序里协同工作。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">1995 年诞生的 Java 语言在一夜之间将垃圾收集技术变成了软件开发领域里最为流行的技术之一。从某种角度说，我们很难分清究竟是 Java 从垃圾收集中受益，还是垃圾收集技术本身借 Java 的普及而扬名。值得注意的是，不同版本的 Java 虚拟机使用的垃圾收集机制并不完全相同， Java 虚拟机其实也经过了一个从简单到复杂的发展过程。在 Java 虚拟机的 1.4.1 版中，人们可以体验到的垃圾收集算法就包括分代收集、复制收集、增量收集、标记－整理、并行复制（ Parallel Copying ）、并行清除（ Parallel Scavenging ）、并发（ Concurrent ）收集等许多种， Java 程序运行速度的不断提升在很大程度上应该归功于垃圾收集技术的发展与完善。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">尽管历史上已经有许多包含垃圾收集技术的应用平台和操作系统出现，但 Microsoft .NET 却是第一种真正实用化的、包含了垃圾收集机制的通用语言运行环境。事实上， .NET 平台上的所有语言，包括 C# 、 Visual Basic .NET 、 Visual C++ .NET 、 J# 等等，都可以通过几乎完全相同的方式使用 .NET 平台提供的垃圾收集机制。我们似乎可以断言， .NET 是垃圾收集技术在应用领域里的一次重大变革，它使垃圾收集技术从一种单纯的技术变成了应用环境乃至操作系统中的一种内在文化。这种变革对未来软件开发技术的影响力也许要远远超过 .NET 平台本身的商业价值。 </font>
						</p>
				</div>
				<div class="section" id="S04">
						<a name="S04">
						</a>
						<h3> </h3>
						<h3>
								<font face="Verdana" color="#000080" size="3">大势所趋</font>
						</h3>
						<p>
								<font face="Verdana" color="#000080">-------------------------------------------------------------------------------------------------------</font>
						</p>
						<p>
								<font face="Verdana" size="2">今天，致力于垃圾收集技术研究的人们仍在不懈努力，他们的研究方向包括分布式系统的垃圾收集、复杂事务环境下的垃圾收集、数据库等特定系统的垃圾收集等等。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">但在程序员中间，仍有不少人对垃圾收集技术不屑一顾，他们宁愿相信自己逐行编写的 free 或 delete 命令，也不愿把垃圾收集的重任交给那些在他们看来既蠢又笨的垃圾收集器。 </font>
						</p>
						<p>
								<font face="Verdana" size="2">我个人认为，垃圾收集技术的普及是大势所趋，这就像生活会越来越好一样毋庸置疑。今天的程序员也许会因为垃圾收集器要占用一定的 CPU 资源而对其望而却步，但二十多年前的程序员还曾因为高级语言速度太慢而坚持用机器语言写程序呢！在硬件速度日新月异的今天，我们是要吝惜那一点儿时间损耗而踟躇不前，还是该坚定不移地站在代码和运行环境的净化剂——垃圾收集的一边呢？ </font>
						</p>
				</div>
				<p>
						<font face="Verdana" size="2">
								<br />
						</font> </p>
		</div>
<img src ="http://www.blogjava.net/majianan/aggbug/79067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-11-04 16:10 <a href="http://www.blogjava.net/majianan/archive/2006/11/04/79067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>李开复：21世纪7种人才最抢手（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/10/28/77850.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Sat, 28 Oct 2006 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/10/28/77850.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/77850.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/10/28/77850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/77850.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/77850.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">                                           <font color="#000080"> <font size="3">李开复：21世纪7种人才最抢手</font></font><br /><br /><br />21世纪最需要哪些人才？<br /><br />昨（22）日，Google副总裁、Google大中华区总裁李开复博士作客电子科技大学，以《21世纪最需要的七种人才》为题给大学生们带来了一场充满睿智而又不失幽默的演讲。<br /><br />李开复说：“21世纪，我们最需要7种人才：创新实践者、跨领域工作者、三商兼高者、高效能沟通者、热爱工作者、积极主动者和乐观向上者。” </font>
		<p>
				<font face="Verdana" size="2">　　<font color="#0000ff">人才·创新实践者</font></font>
		</p>
		<p>
				<font face="Verdana" size="2">　　在互联网时代，我们的任何一个好的商业想法或开拓市场的新点子，很容易被人复制和抄袭，但创新永远是最安全，最不容易被人抄袭的方法。我们需要进行有应用价值的创新，而且创新在任何领域都可以。李开复举了Google用创新的方法实践来吸引人才的方式的一个例子：</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　在美国加州一条高速公路上有一个很大的指示牌，上面有一道很困难的题目，并给你提供了一个帮你寻找答案的网站。当你回到家中，绞尽脑汁解出答案时，它会给你另一个网站，做第二道智力题，等做完第三道这样的题之后，你就会进入一个页面，那就是Google的招聘网站。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　<font color="#0000ff">人才·跨领域工作者</font></font>
		</p>
		<p>
				<font face="Verdana" size="2">　　很多同学进入大学时总认为“专业就是职业，把专业学好就是金饭碗”。“这个观点是错误的”，李开复提高了音调，“21世纪是各学科、各产业相互融合、相互促进的世纪。对人才的要求也从传统的专才转向了跨领域，跨专业的综合性人才”。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　“你们有谁听过‘Lexis_Nexis’吗”？李开复突然甩出这个问题，可难住了台下的学生。“很多人会认为Google一定在信息检索方面掌握了先进的技术，取得了重大的突破”，李开复说，其实，早在Google成立的20多年前，Lexis_Nexis就已经是世界一流信息检索水平的公司，但因为他们太专注于专业本身而错过了互联网革命，以至于被淘汰。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　<font color="#0000ff">人才·三商兼高者</font></font>
		</p>
		<p>
				<font face="Verdana" size="2">　　三商———智商、情商以及灵商，所谓“灵商”，是指有正确的价值观，能分辨是非。一个人能否取得成果，不只要看他的成绩或智商的高低，而要看他在智商、情商、灵商这三个方面表现均衡。灵商即人品，它比情商、智商重要。孤僻自傲的天才也不再是最好的天才。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　以某跨国软件公司一位“天才同事”为例：他智商非常高，一个人能做20个人做的活，但是他的孤傲难以和其他同事共处，惟一和同事说话时也是骂别人“你是个大笨蛋”，并且在给同事的邮件上用红色的大号字“stupidest”羞辱对方。说到这里，李开复惋惜地说：“最后老板不得不请走他。虽然他一个人可以承担20个人的工作，但是可能伤害20个人的团队，甚至还可能影响400个人的士气。”</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　<font color="#0000ff">人才·高效能沟通者</font></font>
		</p>
		<p>
				<font face="Verdana" size="2">　　这些人是能鼓舞士气的人，被理解、被信任的人。在信息随手可得的今天，重要的不是你有多少信息，而是你能否用合适的易于理解的方式表达这些信息，用说故事的方法来取得共鸣。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　在计算机领域，李开复认识不少从事“企业架构设计师”工作的朋友。这个高新的职位其实就是“能说会道”的工程师。有一位架构设计师说，“会做工程师的人很多，但是很难找到这样的工程师———他能到一个不懂技术的客户面前解释一种新的技术，然后让人家纷纷掏腰包购买”。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　<font color="#0000ff">人才·热爱工作者</font></font>
		</p>
		<p>
				<font face="Verdana" size="2">　　孔子说：“知之者不如好知者，好之者不如乐之者。”热爱工作的人会把工作当作一种享受，往往会比其他人做出更好的成绩。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　在谈到该问题时，李开复说，近期Google公司将会到电子科技大学来选才，但对于大四的不少同学来说已经太迟了。他提示说，因为要拿到进入公司的一个条件是：需要有10万行编程能力的经验。对于大一、大二的学生来说，现在到该“动手”的时候了。“目前，所有中国的申请者被拒绝的最大理由是动手能力不行，缺乏编程能力的经验。”李开复遗憾地说。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　<font color="#0000ff">人才·积极主动者</font></font>
		</p>
		<p>
				<font face="Verdana" size="2">　　21世纪需要更主动的人才，要让别人了解你的能力和才干，没有老板会喜欢“谦虚、没有想法”的人。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　在此，李开复用自己的行动做了诠释。2005年5月，他从网上看到Google要来中国的招聘信息，这对他来说，简直就是“千载难逢的好机会”，于是，他主动从网上搜索Google老板的E－mail，抱着碰运气的心态主动给他发邮件毛遂自荐。最终，才有了现在的李开复用自己的行动为“积极主动者”做了诠释。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　<font color="#0000ff">人才·乐观向上者</font></font>
		</p>
		<p>
				<font face="Verdana" size="2">　　21世纪这个更实时、善变的环境一定会带来更多的错误，更多的挫折，而且每个人在一生中总会遇到大大小小的挫折与失败。李开复的经验是，不要把失败当做一种惩罚，而应该把失败当作学习的机会，做一个乐观向上的人。</font>
		</p>
		<p>
				<font face="Verdana" size="2">　　随后，李开复还给学生们做了一道题，上面罗列了一个人在前半生的失业、经商失败、爱人死亡、发表演说失败、角逐国会议员提名失败、未被再度提名国会议员、想转任地方官失败等等一系列挫折，然后让大家猜这个人是谁。“美国总统林”！“我想，林肯之所以能够取得最终的成就，这应该与他乐观看待失败，从失败中获得力量的态度密不可分。”李开复说。 <br /><br /><br /></font>
				<a href="http://blog.csdn.net/AloneSword/archive/2006/10/24/1348979.aspx">
						<font face="Verdana" size="2">http://blog.csdn.net/AloneSword/archive/2006/10/24/1348979.aspx</font>
				</a>
				<br />
		</p>
<img src ="http://www.blogjava.net/majianan/aggbug/77850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-10-28 21:48 <a href="http://www.blogjava.net/majianan/archive/2006/10/28/77850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国程序员的26种能力之八--说话的能力（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/08/28/66136.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Mon, 28 Aug 2006 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/28/66136.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66136.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/28/66136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66136.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66136.html</trackback:ping><description><![CDATA[
		<font size="4">如果你已经是善于倾听了，下一步不妨提高自己说的能力。或许有人经常苦恼于别人总是不好好听自己的说话，这里面的主要原因正是你自己。 <br /><br />   语言交流虽然方便迅速，但是说出去的话，泼出去的水，很快就消失于无形，被人们所忘记。所以，如何良好的表达自己的意思，如何让听众准确地理解自己的思想，是一个很值得研究和学习的课题。 <br /><br />   下面列举了几个在语言交流中容易出现的问题以及应对之策。 <br /><br />l         听众的态度问题 <br /><br />听众如果没有以认真的姿态来听你讲话，那么你讲多少都是没用的，得不到良好的反馈。这种情况下，自己如果一味的从最重要的部分开始讲起，往往达不到预期的效果或者效果很差，不得不重新再讲一遍。对一件事情重复多次的经历，我想谁都有过，费了很大力气，效率还不高。这种问题的对策很简单，就是在说话之前先把自己要说的内容作一个简单的概括。例如， <br /><br />-- 今天我们要对今后项目中使用的文档列表做一个说明。 -- <br /><br />这样做有两个好处，其一，先抛出题目，可以引起对方的注意力，大家听你的话的就不会漫不经心，其二，明确了题目之后，建立了一个上下文，有助于大家理解你的话。 <br /><br />l         话语的逻辑难于把握 <br /><br />        说完的话，很快也就消失了，不要指望你说的任何东西都会被别人记住，那是不可能的，所以，说话的过程中，听众往往对你所说的内容的逻辑关系，前后顺序感到迷惑。这种问题的对策就是，承前启后。说话的过程中，说完一个小题目之后，总结一下刚才说的话，然后再简单扼要的说明一下下面要说的内容。这有助于听众了解你的说话的来龙去脉，并对你现在所说的内容在整体之中的位置有一个良好的把握。 <br /><br />l         没听到的内容再也无法弥补 <br /><br />    这个经验大家都有，一个不注意，刚才讲什么就不知道了。要不然上课老师老是强调认真听讲呢。最简单的对策就是把自己讲话内容里面重要的部分不断的重复，多给听众理解你的机会，也是为了自己好。 <br /><br />上面列举了几个说话过程中容易出现的问题以及应对策略，下面谈一谈在谈话交流中比较实用的一些技巧 <br /><br />l         重复对方的话 <br /><br />重复对方的话，意思并不是简单的重复，而是提示对方希望对方能把这部分再详细说明或者用更简单易懂的方式进行说明。举个例子，对方说 <br /><br />这部分内容比较重要。 <br /><br />如果你不明白为什么重要，不妨说一句，这部分是么？ <br /><br />这时候，对方就会将话题深入下去，解释为什么重要了。 <br /><br />l         总结对方的话 <br /><br />    谈话的过程中在适当的时机对对方的话进行总结是一个很好的方法，不仅可以明确论点和主张，也有利于对方了解自己的话是不是被你正 <br />确地理解了。 <br /><br />     例如， <br /><br />我想您说的是不是这么一回事。 <br /><br />        您看我这么理解行么？ <br /><br />      等等。 <br /><br />l         用沉默来让对方发话或者做决断 <br /><br />沉默是金，谈话中的沉默表达出的是更为复杂丰富的内容。持续一段时间的沉默，会让对方意识到是该自己说些什么的时候了。沉默的好处是，让对方自己来决定作什么，而不是通过询问来强制对方作出反应，往往不会引起反感。 <br /><br />l           说话之前想象一下对方的反应 <br /><br />         想象一下，写完报告书后，自己总要再看一边，看看有没有错别字，标点符号的错误，排版的错误。可是，对于说话，我们往往就没有那么多耐心了。不过，为了事后不后悔，在说话之前我们应该想象一下对方的反应。 <br /><br />l           不说“不“ <br /><br />          对方表述了自己的意见后，如果与自己的想法不同，一般来讲有三种回答的方式，虽然传达的是同样的内容和意思，但是传达的方式不一样，给人的印象也是不一样的。 <br /><br />1． 直接说不。 <br /><br />这是最直接的说法，直接表明了彼此立场的不同。 <br /><br />2．  Yes,but <br /><br />这种说法的意思就是，我仔细倾听了你的意见，但是我还是主张自己的意见是正确地。 <br /><br />3． Yes,and <br /><br />       这种说法的意思是在充分尊重对方的意见的基础上，更进一步提出自己的看法。 <br /><br />  <br /><br />举个例子来说， <br /><br />对方说，能不能再快点完成？ <br /><br />你的回答有三种方式。 <br /><br />n         不，再不能快了。 <br /><br />n         我明白你想让我们快点完成，可是为了保证质量，我们需要更多的时间。 <br /><br />n         是呀，确实需要快点完成，正因为这样，这块的工作才需要充足的时间来保证做好。 <br /><br />  <br /><br />上述的第三个方式应该是比较聪明的回答方式。为什么呢？意见的交流都是建立在有共同的利益的基础之上的，反过来说，没有共同的利益，也就没有交流的必要了。所以，交流的过程中不要让意见对立起来（就是直接说 NO 的做法），而是尽量的求同存异，这样，对双方都有好处。交流的目的也是为了双赢，而不是为了让自己去说服别人。找到一个双方都认同的基点，之后的工作会更好的进行</font>
<img src ="http://www.blogjava.net/majianan/aggbug/66136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-28 11:21 <a href="http://www.blogjava.net/majianan/archive/2006/08/28/66136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国程序员的26种能力之七--倾听的能力（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/08/28/66132.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Mon, 28 Aug 2006 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/28/66132.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66132.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/28/66132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66132.html</trackback:ping><description><![CDATA[
		<font size="4">有很多程序员常常为不会说话而烦恼，那不如先去学会倾听。造物主给我们两个耳朵，一个嘴巴，或许就是暗示我们要多听少说。能够很好的倾听，引导对方把他自己希望表达的内容表达出来并获取自己一方所需要的信息，是一个看似简单其实颇具挑战性的实践能力。 <br /><br />首先应该认识到，良好的倾听是解决问题的一个重要开始。在软件开发中，首先是获取客户需求，作为信息接收得一方，需要良好的倾听能力。当客户发现他说的内容并没有被真正理解和接受的时候，会感到不安和不满，更严重的是明明没有听懂却作出一副听懂的样子迷惑了客户，结果作出的东西根本不符合要求，这种失败的例子并不少见。 <br /><br />那么如何才能进行良好的倾听呢？与其去寻求一些倾听的技巧不如先从最最基础的细节做起，细节做好了自然而然也就掌握了倾听的技巧。 <br /><br />●     倾听的表情从微笑开始 <br /><br />微笑的人给人以好感，所以要让人对你有好感的话，不妨先微笑对人。用软件行业的行话来说，就是把倾听时的缺省表情设置为微笑<img height="19" src="http://www.blogjava.net/Emoticons/emteeth.gif" width="19" border="0" />。当然了，随着对方表述内容的不同，表情是应该不断的变化的。 <br /><br />●     点头 <br /><br />说话人的行动很容易受到听众的影响而变化。如果听众对自己讲话表现出完全不感兴趣态度，那么说话人的信心和积极性就会受到打击。所以，作为一个会倾听人，应该传达给说话者这样的信息，就是我正在津津有味的听你在说话。最有效的方法就是点头。即使不完全同意对方的观点也应该点头，这不是谄媚，而是告诉对方我听懂了你说得话。 <br /><br />●     赞许 <br /><br />对说话人最大的褒奖就是听众都同意他所说的话。所以，如果真的觉得对方说的很对，不要吝啬，把你的赞许通过你的眼神和态度表示出来吧。 <br /><br />●     疑问 <br /><br />       如果说话人的传达的信息你不能马上理解或者存在疑问，那么也不用客气，表达出来。虽然多少会打击对方的情绪，但是同时也告诉对 <br />方你是在认真倾听，并且特别希望理解对方的意思。 <br /><br />   <br /><br />   好的倾听必然伴随着好的发问，记得小时候老师常常告诉我们，不要羞于问问题，因为能问问题的学生才是听懂了课的学生。日语里面把听和问都用汉字闻来表达，我想也是有一定道理的。下面介绍一下发问时需要注意的地方。 <br /><br />●     首先要明确问问题并不可耻<br /><br />有很多人会觉得问别人是一件让人不好意思的事情，因为会让人觉得自己能力不行。这是完全错误的，问问题并不是说明自己不行，而是为了更好的解决问题而进行的信息收集，所以，不要害怕和退却，大胆的问你想问的问题吧，然那些嘲笑你的人见鬼去。 <br /><br />●     自己的发问得不到对方的回答这种情况也经常出现<br /><br />解决这个问题，就需要在问问题的同时也把对方应该回答这个问题的理由说明一下。一般来讲，应该从以下几个方面说明。 <br /><br />  问题意图的说明 <br /><br />有时候为了消除对方的疑问和不信任感，必须向被询问一方说明我为什么要向你询问这个问题，不妨同时有礼貌的请对方腾出时间来回答这个问题。最重要的一条就是要告诉对方我问这个问题是为了对方的利益着想，这样对方也会很认真的来回答你的问题 <br /><br />先调查后发问 <br /><br />对方和你一样，工作也很忙。所以，问问题之前，尽可能的自己多做一些调查，将自己需要问的内容具体化。让对方觉得你并不是一味等着人来教你，你自己也主动学习了很多，当然有不明白的地方，就需要对方来解答了。这种时候，大部分人都很乐意帮助你的。 <br /><br />显示关心 <br /><br />   交流的过程中也有不顺畅的时候，这时候不妨对对方的情况显示一下关心，询问一下对方工作中遇到的不快，和他们聊聊工作的辛苦，赞许一下他们的长处。从人的心理角度出发，很多人都喜欢将自己的辛苦和得意之处跟别人说，不妨借用这个来让你们的交流更顺畅。 <br /><br />●     想得到具体的回答，就需要问具体的问题。 <br /><br />问一个比较抽象的问题，对方往往不知道应该怎么回答，即使勉强回答了，答案也未必是你所需要的。所以问题越具体越好。所谓具体就是把该问题的前因后果以及关联的信息都提供给对方，这样对方才能作出比较满意的回答。 <br /><br />●     预先判断 <br /><br />  问对方问题的时候，应该对对方会如何回答这个问题做一个假设和预先判断。这么做的目的是让自己的问题更加明了，让对方更容易回答，同时还可以随时判断对方的回答是不是自己想要的，如果不是，还可以进一步发问。 <br /><br />  <br /><br />最后，说一下问问题分为闭式发问和开式发问。 <br /><br />◆     所谓闭式发问就是需要对方回答 YES 或者 NO 的问题。 <br /><br />优点 <br /><br />   问题意图明确 <br /><br />   对方不需要过多思考 <br /><br />缺点 <br /><br />   发问方要做很多工作，将问题具体化 <br /><br />   对方选择的余地变小。 <br /><br />◆       所谓开式发问就是不能仅仅回答 YES 或者 NO 的问题。 <br /><br />优点 <br /><br />    不用过多考虑问题的细节。 <br /><br />    对方选择的余地很大 <br /><br />缺点 <br /><br />    容易导致所答非所问。 <br /><br />    给对方以思考的负担 <br /><br />    有时对方会无法回答。<br /></font>
<img src ="http://www.blogjava.net/majianan/aggbug/66132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-28 11:16 <a href="http://www.blogjava.net/majianan/archive/2006/08/28/66132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国程序员的26种能力之六--不被别人替代的能力（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/08/28/66129.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Mon, 28 Aug 2006 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/28/66129.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66129.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/28/66129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66129.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66129.html</trackback:ping><description><![CDATA[
		<font size="4">对于程序员来说，什么最重要？ <br /><br />对于程序员来说，最重要的莫过于对技术的掌握，可是应该还有更重要的东西，那就是<font color="#0000ff">思考的能力。 <br /></font><br />作为有一定经验的程序员来说，会发现学到的并运用的知识大体上分为两类，就是比较具体的知识和相对来说不那么具体的知识，例如 <br /><br />Oracle 的性能优化有关的设置项目 <br /><br />Java 语言里面字符串的各种 method 的使用 <br /><br />Unix 负载测量的方法。 <br /><br />    这些都可以说是比较具体的知识，基本上的类型都是 how to 。学习这样的知识，最好的方法就是读书，上网读读文档，也就是说经过一定的学习和训练就能掌握的知识。通过一定的学习，每个人对这些知识的掌握不会有太大差别，换句话说，这些知识就是属于那种查一下书就知道的那种。当然了，还有另外一种，看看下面的例子。 <br /><br />    从客户那里获取需求的方法。 <br /><br />    项目的进行中顺利的进行沟通的方法。 <br /><br />    对于业务信息化的要求，决定采取什么样的技术的思考能力。 <br /><br />这些知识相对来说不是很具体，比较抽象，正因为比较抽象，所以获取这些知识的途径和方法并不是很明确。而且，同样的学习每个人的所掌握得程度也不一样。就拿顺利沟通来说，不和很多人进行实际的交往和沟通，不经历过一些失败和挫折，不尝试一些好的沟通方法和技巧，并不断的总结，光看书是不会学习到如何沟通的。 <br /><br />     那么这两种知识哪一种更有价值就不言自明了，一百个程序员里面有一百个人会说第二种更有价值，更有用。那么我们不妨再考虑一下，换一个角度，不作为程序员而作为公司的管理者来来考虑这个问题。对公司来说，熟练使用 java 和 oracle 的人有很多，光考虑这一点的话， A,B 两个人，雇谁都一样，也就是说，如果光具有前面所说的具体的知识的话，你跟别人没有任何差别，没有差别说白了也就是没有竞争优势。你可能会想，那么我学点 .net, 再来点 python，这样总算可以了吧。其实，只要是技术，存在即有其存在的价值和理由，那么就肯定会有人掌握这些东西 , 也就是说，只要出钱，公司一样能找到这样的人来代替你。 <br /><br />    中国那么多程序员，但是熟悉这个行业的人都清楚地知道，好的程序员还是很少，大家都去学习 java, 都去学习 stuts,spring,hibernate, 每个人好像都是很了不起，当你骄傲的时候，不妨想一想，<font color="#0000ff">你是不是不可替代的，你能不能做别人不能做的事情？</font>要做一个一流的程序员，具体的知识当然要学习，同时更应该去学习那些抽象的知识。对于一个项目来说，那些只懂技术的程序员就是一个标准件，标准件对公司的好处就是替换起来很容易。那么，好的程序员，在项目中起到举足轻重的作用，别人无法替代，做这样的程序员才应该是我们的目标。 <br /><br />    再举一个例子，我们都有过参加这种会议的经验，负责企划的部门和负责技术的部门一起开会，企划一方经常会提出各种方案并向技术部门询问其可行性，而技术部门的人，马上就说不能实现，并且用各种各样技术词汇来解释为什么不行，企划的一方，根本不懂这些技术词汇，会议也就不欢而散了。在这种情况下，一个好的程序员就会说，这个根据目前的情况还不能判断能不能实现，在我们做出 Yes 或者 No 这样的结论之前，不妨好好想想怎么才能实现。这样的话，会议的气氛就会向思考“怎么做才能实现”这样的积极的方向发展，大家也都会更有兴趣。 <br /><br />    写程序，写设计书，管理自己的日程这些都是最最基本的素质，仅有这些并不会成为一个好的程序员。好的程序员应该是不断地考虑，如何让项目顺利的进行，如何让对方积极的回应你的意见，并付诸于实践，而且能够实现。这样的程序员，才具有了别人不可替代的价值。 <br /><br />    那么如何成为这种不可替代的程序员呢？没有特别好的方法，建议到有一个。就是在日常的工作中有意识的要求自己去具有这种能力，不断的考虑，<font color="#0000ff">现在的自己应该如何思考才能成为一个不可替代的人，自己在哪些方面还有所欠缺</font>，不断的想这些问题，不知不觉也就有了去深入思考的潜意识，具有了这种潜意识之后，你平常所作的事情都会不知不觉地向这个目标靠拢，一切都是在不知不觉中进行的，这是第一步，也是最关键的一步。 <br /><br /><br />   写到这里，我不禁想起了前一阵在一个 Forum 里面听的一个人力资源方面的讲座，讲座的老师就提出了一个社会人要有能不依赖于公司的能力，这种能力是什么，说简单了就是离了公司你能活的很好，再进一步的话，就是公司离了你损失很大。成为这种人，人生的选择就会更加自由了。我想具有不依赖公司的能力与这里面所说的做一个好的别人无法替代的程序员的提法是比较统一的，只是从不同的角度阐述而已。 <br /><br />    如果从谈技术的角度来看的话，做一个好的程序员并不是会使用最新的技术，会使用什么什么框架，而是有良好，全面，扎实的基础。技术的发展并不是跳跃的，而是连续的，任何的一个所谓的新技术，无非是某一个旧知识的重新包装和整合，东西还是那么多东西，只不过用的方法和方式不一样了。如果有一个好的基础，无论什么东西，你都会快速理解，看透其本质，掌握其精髓。但是任何一个人，都不可能一开始就把基础打得天衣无缝，一个好的程序员的学习曲线我想应该是上上下下的，学习上面的新技术的同时，静下心来好好学习一下相关的底层的基础知识，不断的循环往复，不断的积累，并且不浮躁，应该是一个成为好的程序员的途径。<br /></font>
<img src ="http://www.blogjava.net/majianan/aggbug/66129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-28 11:10 <a href="http://www.blogjava.net/majianan/archive/2006/08/28/66129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国程序员的26种能力之五--把握十分钟的能力（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/08/28/66128.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Mon, 28 Aug 2006 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/28/66128.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66128.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/28/66128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66128.html</trackback:ping><description><![CDATA[
		<font size="4">不知道大家周围有没有这种情况。 <br /><br />    工作内容大致相同，但是不同的人，工作进行的速度是不一样的。有的人累死累活好不容易赶在交付期限前把工作完成，有的人不怎么加班却能提前把设计书以及代码交付。同时，后者往往不知什么时候，学习了别人还没来得及去学的新知识，对最近出现的新技术要点也了然于胸。如果你的周围有后面这种人的话，恭喜你，赶紧向他讨教。 <br /><br />    其实，后面这种人如果不是绝顶聪明，那么他一定是具备了别人所不具备的把握时间的能力。这种能力就是把握十分钟的能力。 <br /><br />   不妨想一下，给你 10 分钟你能干什么，或许你说，做什么都做不完，那么给你一个小时呢，其实 1 个小时不也就是 6 个十分钟组成的，如果你认为 10 分钟什么也做不了的话，那么你就真的什么也做不了。可是有的人却能将这十分钟活用起来，充分的发挥了 10 分钟的威力。 <br /><br />    细想想，一天里面零散的十分钟有多少？等车的十分钟，开始工作前的十分钟，吃完午饭的十分钟等等，能不能用好这样的十分钟，决定了你的工作能不能有效率的进行。那么该怎么用呢，举几个例子来说说 <br /><br /><br /></font>
		<font size="4">
				<font color="#0000ff">读书的十分钟 <br /></font>
				<br />假如等车的话，不妨把等车的十分钟利用起来读书。其实也不一定要是书，什么材料都以，只要你认为对你有用的。这样做的目的只有一个，就是知识储备。这直接决定了你能不能快速解决客户提出的问题，完成上司交给的工作。常常听到要抽出一段时间学习什么什么这样的话，真的能抽出时间么，如果真的如自己所愿能抽出时间的话，那我很羡慕你的运气，如果不能，我想利用好琐碎的十分钟也是一个很好的方法。 <br /><br />个人推荐的实践是，把自己感兴趣又没有时间读的技术资料打印出来，也就是 10 分钟左右能读完的那种，放在随身携带的包里，如果有这样的十分钟，就拿出来读一读。例如，我想了解 AOP 方面的知识，利用 10 分钟时间上网搜集一下材料，把涉及基本概念的打印出来，如果有十分钟的空余，就读一下，不明白的记下来，再利用十分钟去网上搜索一下，不断的这样循环，我想有个十天半个月，等车的功夫，你就能领会 AOP 的要义了。读的时候最好随身带一支笔，便读边做个记号。 <br /><br />   <br /><br /><font color="#0000ff">记忆的十分钟 <br /></font><br />       最好的利用琐碎的时间方法莫过于记忆。技术人员有好多需要记忆的东西，环境的配置参数， API 的接口定义，设计模式的使用环境，利用琐碎的十分钟，不妨试着背一下这些东西，用的时候也就不用去查文档看资料了，也就比别人省出好多时间。有人说重复是最好的记忆方法，这样的十分钟用来进行重复记忆最好不过了，第一次没记住或者没记全不要紧，下一个十分钟再拿出来看看，再有这样的十分钟再拿出来看看，几次也就记住了。 <br /><br /><font color="#0000ff">会议前的十分钟</font> <br /><br />     开会前的十分钟也很重要。至少得把会议相关资料扫一眼吧，要不然开什么会都不知道。 那跟演什么电影都不知道就去看电影有什么区别，毫无目的性。如果能大致了解一下会议的相关资料，那么你就能准确把握会议的重点，快速察觉别人发言里面的问题，不是什么会都没有用的，关键是你抱着什么态度去开会。 <br /><br /><font color="#0000ff">休息的十分钟</font> <br /><br />        休息的十分钟对程序员来说是非常重要的，你可以利用十分钟闭目养神，或者打个盹，睡不着的话，不如在座位上做个伸展运动，把四肢尽量向前伸，可以放松全身。总之，工作中的 1 个小时里面，抽出十分钟来稍微放松休息一下，余下的 50 分钟你会工作的更有效率。尤其是解决项目中出现的问题的时候，不要一个劲的拼命解决，适当的休息一下，或许会给你带来意想不到的收获。张弛有度，才能体会到工作得快乐。我就经常在坐车的时候突然想到一个问题的解决方案。 <br /><br />  <br /><br />不浪费属于你的十分钟，首先你要明白给你十分钟你能干什么，回邮件，技术调查，寻找Sample Code等等，总之，意识决定行动，你觉得十分钟很宝贵的话，你就会自然而然的运用好它。另外，充分利用十分钟的时候，需要注意要保持所作的事情的连续性，读书的话，不妨把读到的那一页折一下，工作的话不妨作个笔记，记录一下自己现在做到哪里了，就是说要知道自己现在处于什么位置。这种记录并不是仅仅为了备忘，更重要的是让你明确自己所作的工作。其次要明白什么事情不适于在十分钟里做。日常工作中，还是某种程度上需要大块的时间的工作比较多，给你 6 个间断的十分钟，你并不能完成平常需要整整一个小时才能做完的工作。所以做事的时候要有所选择和区别，什么工作可以利用琐碎的时间来完成，什么工作不行，不行的就尽量保证有大块的时间来做。 <br /><br />    以上总结了一下运用十分钟的能力。其实，琐碎的时间很多，平常不用就根本看不出它们的作用，有意识的好好利用一下，你会发现，有好多工作根本不需要加班就能完成。当然了，如果你愿意加班而且你们公司愿意给你加班费的话，就算我没说。<br /></font>
<img src ="http://www.blogjava.net/majianan/aggbug/66128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-28 11:02 <a href="http://www.blogjava.net/majianan/archive/2006/08/28/66128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国程序员的26种能力之四 信息整理的能力（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/08/28/66123.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Mon, 28 Aug 2006 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/28/66123.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66123.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/28/66123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66123.html</trackback:ping><description><![CDATA[会议的资料不知道哪里去了。 <br /><br />以前的一个客户的名片没有了。 <br /><br />那个有关需求定义的电子邮件找不到了。 <br /><br />某某类的设计文档在哪里？ <br /><br /><br />日常工作中，有各种各样的找不到的情况，想找却找不到东西也是五花八门，但是归根结底，我们找不到并不是什么东西，而是附着于该物体上的信息。解决这个问题的最好办法就是分类整理。<br /><br />分类整理的意思就是按照一定的标准，把符合这个标准的信息发到一起，便于查找。 <br /><br />分类的标准，大体上也就五个。类别，时间，位置，字母顺序，还有某一个数值的大小高低。所谓分类整理也就是适当的运用这几个分类标准对各种信息进行归纳分类。学问就在这个适当运用四个字上，那么什么样的分类才算适当呢？ <br /><br />      首先，不要分的过细。就拿类别标准来说，个个类别之间应该是排他的，不能互相有重叠的部分。如果类别分的过细，很容易出现某一 <br />个信息，既属于 A, 又可以属于 B 的情况，这个时候你怎么办，那就再造一个 C 吧，专门存放这类信息，那么你的分类就会越来越多，这就直接导致了想找什么找不到的局面。 <br /><br />      其次，分类而不是分离。相关的几个信息，可能有的打印在 A4 的纸上，有的存在电子邮件里面，有的印在名片上，这是一种信息的分离。分类与分离的不同点是，前者是根据内容来分的，后者是根据形式来分的。所以，相关的信息不限于其形式，尽量把它们整理到一起，不要让它们因为不同的形式而分开。 <br /><br /><br />        下面说说几个具体技巧 <br /><br />1． <font color="#0000ff">减少纸张的使用<br /></font><br />软件开发中，各种各样的信息，不是存在于纸张上，就是存在于电脑里面，作为整天与电脑打交道的程序员，或许更喜欢把各种信息整理到电脑里面，那么下面的方法或许对你有用。 <br /><br />1．1   日常的联络方式有邮件，面谈和电话，程序员或许都比较喜欢用邮件，但是因为电话和面谈的迅速与直接我们很多时候也是通过这些来进行交流的。那么，最好养成一个习惯，谈完的事情，要在邮件里面整理一下留作备份，也可以给对方发过去予以确认。 <br /><br />1．2  无论如何都只有通过纸张来保存信息的情况下，最好能通过扫描把信息数字化。 <br /><br /><br />2． <font color="#0000ff">纸张信息的整理</font><br /><br />上面说到减少纸张的使用，但是现实是纸张也确实有其优势，例如，看起来舒服等等。那么纸张的信息该如何整理呢？ <br />这里介绍一个按照时间来分类整理的方法。把相关资料放到一个档案袋里面（文件夹也行，随你喜欢），然后在外面写上日期，题目，在书架上由左向右开始摆，使用过的档案袋，放回的时候要放回左边。这样有两个好处，最新的资料和经常使用的资料总是在最左边，想找的信息一下子就能找到，而右边的资料就是使用率最低的了，合适的时候就可以扔掉。 <br /><br /><br />3．<font color="#0000ff"> 数字信息的整理</font><br /><br />程序员的电脑里面有各种各样的资料，工具，程序等等，不好好整理的话，别说找，时间长了自己有什么都忘了。但是说实话，这种整理并不是很好做的，但是首先自己一定要有这种意识。邮件的分类，文档的分类，程序的分类等等。另外，有好多桌面工具都可以用来整理自己的资料。只有一个原则，要严格按照自己的分类来存放资料，有时候因为懒惰，随手就把资料存放到桌面上了，那么以后桌面上的东西就会越来越多，弄得你想找个我的电脑都找不到，随手一放，贻害无穷。不要懒惰，严格执行应该是最有效的办法。 <br /><br />  <br /><br />    以上，就是有信息整理的一些介绍。突然想到一句题外话，好像是听余世维的讲座听到的，美国的珍珠港被炸了很多年后，才在他们的文件堆里面发现了国民党政府发给他们的警告，告诉他们日本会袭击他们的珍珠港。其实，任何没有整理好的信息，没人愿意去看，包括你自己。那就啥话都别说了，开始干吧。<br /><img src ="http://www.blogjava.net/majianan/aggbug/66123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-28 10:45 <a href="http://www.blogjava.net/majianan/archive/2006/08/28/66123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国程序员的26种能力之三 汇报的能力（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/08/28/66120.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Mon, 28 Aug 2006 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/28/66120.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66120.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/28/66120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66120.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66120.html</trackback:ping><description><![CDATA[技术再出色，如果没有良好的沟通能力，也不会成为一名好的程序员的。沟通是双方的互动，把自己得信息传达给对方，再从对方获得反馈，如此循环往复。<br /><br />那就先说说把自己这一方的信息准确地传达出去的能力。 <br /><br />首先一个是写报告。程序员经常要写日报，周报，月报，在很多人的眼里，这是一个可有可无，对日常工作没有什么帮助的体力活。可是真的是这样么？报告里面要记录自己完成了什么工作，出了什么问题，怎么解决之类的一些信息，可是作用不仅此而已，还有更重要的作用。 <br /><br />1． <font color="#0000ff">责任的分散</font><br /><br />这出现在工作中发生问题的时候，想象一下，如果出现了一个 bug ，出于某种目的，你没有及时把这个情况告诉别人，而是想自己解决，这种情况下，关于这个问题的所有责任全部压在了你自己身上，解决了到还好办，解决不了的话，相关模块，甚至整个项目都要受到牵连，你需要负这个责任。如果你能把这个信息通过日常报告及时传达出去，那么大家都会知道这件事情，那么这个问题的责任就不是你自己的了，而是整个团队的，团队的力量是无穷的，那个问题会很快迎刃而解。说到这里，或许有点推卸责任的意思，其实不然，<font color="#0000ff"><strong>项目的进行要以成功为目的，以团队协作为手段</strong></font>，任何问题都不是个人的，而是大家的，你也没有必要没有权利去规避任何问题，公布出来，更有利于项目的顺利进行。 <br /><br />2． <font color="#0000ff">防止问题的发生</font><br /><br />个人的能力毕竟是有限的，由于经验的不足，知识的欠缺会导致对某些问题的判断失误。这种时候，你如果能把对某个问题的分析判断以报告的形式公布出来，那么比你更有经验的人就会注意到你的判断中的失误以及遗漏，及时指出来也就避免了问题的发生，节省了由此而发生的各种成本。 <br /><br />3．<font color="#0000ff"> 经验的借鉴</font><br /><br />发生了问题，报告出来，有经验的人回来帮助你解决，你也会跟着学习处理这种问题的方法和技巧。 <br /><br />4．<font color="#0000ff"> 消除上司的不安</font><br /><br />一项工作布置给你了，进行到什么程度了，有没有什么问题，这是上司比较关心的问题。如果能够及时汇报的话，就会让上司及时掌握工作的进行情况，有利于工作更好的进行。 <br /><br />5． <font color="#0000ff">构筑良好的信任关系</font><br /><br />常常把自己的工作情况予以汇报，减少了别人对你的担心，很容易让别人对你产生信任。取信于人的好处就不多说了。 <br /><br /><br /><br /><font size="4">报告的形式</font> <br /><br />报告的形式有多种多样，但是其基本模式并没有太多变化。这里分两类进行说明。 <br /><br />第一类，初级程序员的报告 <br /><br />谁都有从菜鸟走过的历程，作为初级程序员更多的是从别人那里获取经验，而日常的报告是一个比较有效的途径和工具。报告的形式应该是这样的 <br /><br />  现状   描述一下现在的情况，就是怎么做的，都做了什么 <br /><br />  预测   根据自己的判断预测一下进行的情况 <br /><br />  确认   询问自己的判断有没有什么问题 <br /><br />而出现了问题的时候除了描述现状和分析一下问题之外，第三个就应该询问该采取什么对策了。 <br /><br />第二类，初级以上程序员的报告 <br /><br />作为有经验的程序员，对很多问题都有自己的分析和解决方法了。所以这时候的报告就没有必要老是询问，更多的是自己的主张和建议，但是注意一定要把自己的判断的根据说清楚，跟论文一样，通过论据和论证来让你的论点成立。 <br /> <br /><br />汇报前需要考虑什么 <br /><br />最重要最基本的是需要好好想想我到底要传达什么。但是这个时候要注意，自己想传达的信息和自己应该传达的信息是不一样的。应该好好想想你汇报的对象最想从你的报告里面获取什么信息，什么信息对当前的工作顺利进行最有用，当然一切要以事实为基础，不能为了取悦别人而说假话。 <br /><br /><br />以上就是有关写汇报的一些介绍。应该这么说，这些信息对技术提高没什么用，但是对如何做好自己的工作或多或少有所帮助。因为程序员的工作并不是仅仅面对计算机，还要面对各种各样角色的人和各种各样的问题，能把自己这边的信息，准确有效的传达出去，有利于一切工作的顺利进行。 <br /><br /><br />另，强力推荐大家看余世维的有效沟通系列录像，一定会有所收获的。<br /><img src ="http://www.blogjava.net/majianan/aggbug/66120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-28 10:40 <a href="http://www.blogjava.net/majianan/archive/2006/08/28/66120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国程序员的26种能力之二 取信于人的能力（转载）</title><link>http://www.blogjava.net/majianan/archive/2006/08/28/66106.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Mon, 28 Aug 2006 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/28/66106.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66106.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/28/66106.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66106.html</trackback:ping><description><![CDATA[程序员除了要学习技术知识以外，掌握更多的工作以及与人相处的技巧也是十分重要的，<font color="#0000ff">取信于人的能力</font>当属其中的重中之重。 <br /><br />为什么要具备取信于人的能力呢？ <br /><br />我想对程序员来说，具备了这种能力至少有以下两点好处 ：<br /><br />1) <font color="#0000ff"><strong>更多的工作机会<br /></strong></font><br />公司都喜欢把重要的工作交给值得信任的人来做，你也就获得了比别人更多的工作机会，同时也会不断的提高自己，至于经济上的利益，一定也会少不了的。 <br /><br />2) <font color="#0000ff"><strong>更广泛的人际关系<br /></strong></font><br />如果你是一个值得信任的人，那么就会有好多人和你交朋友，你的社交圈也就比别人要广，这往往意味着更多的机会。 <br /><br />那么如何取信于人呢？以下几点我与大家共勉。 <br /><br />最最基本的是不说假话。日常生活和工作中迫于各种各样的压力而说假话应该是司空见惯的事情。做到不说假话真的很难，不过不要紧，先把下面说的几点做好。 <br /><br /><br />1． <font color="#0000ff">答应的事情一定做到 <br /></font><br />反过来说，就是做不到的事情就不要答应。与任何人做的约定无论是口头的还是书面的都是非常重要的。如果一件事情你做不到的话，那么最好一开始就不要答应。常常有这种情况，面对客户或者上司，迫于面子和经济利益，不得不说保证会做到什么什么事情这样的话，如果这种事情是你不可能做到的，那么千万不要答应，后果往往很严重，别人很生气，自己很受伤。 <br /><br />2． <font color="#0000ff">不确定的事情不要断言。 <br /></font><br />自己都不确定的事情不要去断言。对了到还好说，如果错了，就跟说假话一样，很容易失去别人的信任，而信任这东西，一旦失去，想再找回来很难。 <br /><br />3． <font color="#0000ff">降低别人对自己的期待</font> <br /><br />如果干的工作比预想的要好得话，别人会很高兴，相反，如果低于预期的话，那就会很失望。人人都想努力做的比预想的要好，可是事实是更多的时候我们做的工作的成果比预想要有差距。所以，为了不让别人对你失望，需要降低别人对你的期望值。方法就是，提前将一些悲观的信息，问题，或者困难传达给对方。例如，这个东西我没做过，我试试看。我同时还有测试的任务，这个工作可能会往后拖一拖。等等。重要的就是要告诉对方，我很想努力做好，但是有些困难不得不考虑。 <br /><br />4． <font color="#0000ff">学会示弱</font> <br /><br />都希望得到别人的认可，把自己最强的一面展现给别人。如果总是以强者的姿态出现，同时又不是真正的强者的时候，需要注意了，你会发现工作起来很费劲，因为给你的工作都是你力所不能及的。所以，不妨在一定的限度下，展示自己的弱点，这不是做作，而是让自己更顺利的提高，成为真正的强者。 <br /><br />5． <font color="#0000ff">传达风险</font> <br /><br />这个世界上没有风险的事情基本不存在，工作中更是如此。软件开发中的风险因素更多，需求的不稳定，计划的不完善，人员的流动，测试的遗漏等等。所以说话的时候不妨这样说，正常情况下，怎么怎么样，如果出现了什么什么问题，会怎么怎么样。传达风险，其实也就是给自己留有余地，问题发生的时候让自己不至于太被动。 <br /><br />6． <font color="#0000ff">提出解决对策 <br /></font><br />对别人尤其是上司说我不能是比较难开口的。别人对你有所期待，所以才拜托你做一些事情，力所不能及的时候，简简单单的一句我不能并不是最好的解决办法，说我不能的同时，说说你能怎么怎么做，给别人提出一个解决对策。例如，客户要求周末交付使用，但这个实在是不可能的，可以对客户这么说，周末交付实在不可能，但是能够在下周一早上交付，这样对工作也不会有太大影响。基本原则就是，<font color="#0000ff" size="4">告诉别人你不能做什么的同时，也告诉别人你能做什么。 <br /></font><br />7． <font color="#0000ff">约定的东西要双方留有记录</font><br /><br />最好的工具莫过于电子邮件了，商量好的事情，整理到邮件里面，然后给对方发过去确认。一旦出了什么问题，谁的责任也就不言自明了。 <br /><br />8． <font color="#0000ff">答应好的事情努力去做<br /><br /></font>这不用多说，是最基本的原则。 <br /><br />9． <font color="#0000ff">努力到最后</font> <br /><br />一旦再怎么努力也做不到的时候，也不能放弃努力，一定要努力到最后。这不是做给别人看得，是为了挽救自己的信誉。 <br /><br />10．   做不到的话，一定要真诚的道歉。 <br /><br />11．  <font color="#0000ff">一旦失败，好好总结，不犯相同的错误</font><br /><br />除了不去做之外，这是避免失败的最有效的方法。 <br /><br /><br />以上是关于取信于人的几个要点，其实做到并不难，都是很简单的方法，别人的信任其实是一个人的骄傲和财富。<br /><br />希望大家都能获取这份财富。<br /><img src ="http://www.blogjava.net/majianan/aggbug/66106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-28 10:14 <a href="http://www.blogjava.net/majianan/archive/2006/08/28/66106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国程序员的26种能力之一 保持健康的能力（转载） </title><link>http://www.blogjava.net/majianan/archive/2006/08/27/66015.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Sun, 27 Aug 2006 10:27:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/27/66015.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66015.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/27/66015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66015.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66015.html</trackback:ping><description><![CDATA[
		<font size="4">
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun">这个能力并不是排在这本书的第一个，但是我却想把它第一个提出来，因为程序员往往被要求不断的提高工作能力，技术水平，却很少被要求有自我管理健康的能力。</span>
				<span lang="EN-US">
						<?XML:NAMESPACE PREFIX = O /?>
						<o:p>
						</o:p>
				</span>
		</font>
		<p class="MsoNormal">
				<font size="4">
						<span lang="EN-US">
								<span>  </span>
						</span> <br /></font>
				<font size="4"> <span lang="EN-US">1．</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">健康管理支撑着你的工作。<br /><br />从公司的角度考虑，一个经常患病的人，是不会被委以重任的。从个人角度考虑，经常患病给自己和家庭都带来很大的烦恼。俗话说身体是革命的本钱，有个好身体，干什么都有可能</span><br /><br /></font>
				<font size="4">
						<span lang="EN-US">2．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span> <span lang="ZH-CN" style="FONT-FAMILY: SimSun">简单的每日检查。<br /><br /></span></font>
				<font size="4">
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">首先，体重的检查。对程序员来说，每日测量一下体重是最可行的方法，每个人都有标准体重，通过每天的测量，你就可以有意识的通过减少饭量，多做运动来保持自己的体重。然后是吃饭，如果因为工作很晚才能吃饭的话，就考虑一下自己的睡觉时间，把饭量减一减。少吃油腻的东西，多吃蔬菜。每天喝一升的茶，多喝无糖的水。感到疲劳的时候吃点维生素。</span>
						<br />
						<br />
				</font>
				<font size="4">
						<span lang="EN-US">3．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">职业病的处方。</span>
						<br />
						<br />
				</font>
				<font size="4">
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">程序员因为长时间保持坐姿，长时间面对电脑画面，容易引起肩膀疼，腰疼和眼睛疲劳。所以应该每工作一个小时就起身活动</span>
						<span lang="EN-US">5</span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">分钟左右，这个活动包括身体的屈伸，肩部运动等等。同时，闭上眼睛转动眼球，使用眼药等对缓解眼睛疲劳比较有效。去厕所，去买东西的时候，做做这些，也算是对时间的有效利用吧。</span>
						<br />
						<br />
				</font>
				<font size="4">
						<span lang="EN-US">4．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">对付睡眠不足</span>
						<br />
						<br />
				</font>
				<font size="4">
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">干</span>
						<span lang="EN-US">IT</span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">的没有不加班的，所以很多时候就容易睡眠不足。为了保证睡眠时间就要合理的安排好自己的工作，分好优先级，把今天最应该干完的做完就可以了，然后早点回家睡觉。这一点，书里讲的我想有点牵强，在中国或许没有什么很好的办法来解决加班的问题，在全世界或许都是个问题。</span>
						<br />
						<br />
				</font>
				<font size="4">
						<span lang="EN-US">5．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">心理健康很重要。<br /><br />不要光注意身体，也要时常注意自己的心理健康，程序员常年面临各种各样的压力，不断重复的工作，保持自己的心理健康，也是一个非常重要的课题。方法很简单，就是自己奖励自己。解决了一个</span>
						<span lang="EN-US">bug</span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">，完成了一个复杂的算法，明白了一个需求，都可以适当的奖励自己。奖励的形式多种多样，总之自己喜欢什么就干什么。其实这里也给项目的领导者一个启示，就是要适当的对手下的程序员予以鼓励和奖励，完成了一个阶段计划，完成了一次测试，解决了一个关键问题，都可以组织大家轻松一下，有利于提高团队的凝聚力和个人的工作热情。</span>
						<br />
						<br />
				</font>
				<font size="4">
						<span lang="EN-US">6．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span>  <span lang="ZH-CN" style="FONT-FAMILY: SimSun">尽情的放松。<br /><br />如果项目时间很长，结束遥遥无期或者项目陷入了泥潭，无法前进的时候，为了保持自己的工作劲头，不妨选择适当的一天，什么也不做，让自己好好放松，换换大脑，有利于更有效率的工作。</span><br /><br /></font>
				<font size="4">
						<span lang="EN-US">7．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">最后，说一下简单的营养补给。平常吃点食物纤维和复合维生素，肩膀疼的时候多吃维生素</span>
						<span lang="EN-US">E</span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">比较有效，眼睛疲劳时多吃维生素</span>
						<span lang="EN-US">A</span>
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">。</span>
						<br />
						<br />
						<br />
				</font>
				<font size="4">
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">以上列出了几个有关健康管理的要点。自己的健康自己管理，意识到自己的健康的重要，不要勉强自己做一些会损害自己健康的事情，例如连续通宵等等。良好的健康，对自己，对家庭，对公司都是一笔财富。年轻的时候用健康换钱，上了年纪就不得不用钱来换健康了。</span>
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN-LEFT: 21pt">
				<font size="4">
						<span lang="ZH-CN" style="FONT-FAMILY: SimSun">
								<br />祝大家都健健康康！！</span>
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
<img src ="http://www.blogjava.net/majianan/aggbug/66015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-27 18:27 <a href="http://www.blogjava.net/majianan/archive/2006/08/27/66015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是FreeMarker？</title><link>http://www.blogjava.net/majianan/archive/2006/08/27/66001.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Sun, 27 Aug 2006 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/27/66001.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/66001.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/27/66001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/66001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/66001.html</trackback:ping><description><![CDATA[
		<font size="4">FreeMarker 是一个模版引擎，一个基于文本的模板输出工具（生成任意的<span style="FONT-SIZE: 10pt; COLOR: black">HTML</span><span style="FONT-SIZE: 10pt; COLOR: black">表单代码</span>）。它是一个Java package，面向Java程序员的class library。它本身并不是针对最终用户的应用，而是允许程序员将其嵌入到他们的产品中。 </font>
		<div style="TEXT-INDENT: 21.75pt">
				<font size="4">FreeMarker被设计用来生成HTML Web页面，特别是基于MVC（Model View Controller）模式的应用程序。使用 MVC 模式作为动态的WEB页面的想法，是为了分隔页面设计者 (HTML 设计者) 和程序员。.每个人做自己擅长的那一部分。设计者可以不通过程序员的改变或修改代码来改变网页的样子，因为应用逻辑(Java程序)和页面设计（FreeMarker 模版）是分开的。模板不会被复杂繁琐的程序框架所<span style="COLOR: red"><font color="#000000">破坏。即使当一个项目的程序员和</font></span>HIMTL页面的制作者是同一个人时，这种分隔也是很有用，因为这样有助于保持应用的清晰并易于维护。</font>
		</div>
		<div style="TEXT-INDENT: 21.75pt">
				<font size="4">尽管FreeMarker有一些编程的能力，但它并不是一个象PHP那样的成熟的编程语言。与Java不同的是，Java程序准备用来显示的数据(如<span style="FONT-SIZE: 10pt; COLOR: black">SQL queries)</span><span style="FONT-SIZE: 10pt; COLOR: black">，而</span><span style="FONT-SIZE: 10pt; COLOR: black">Freemarker</span><span style="FONT-SIZE: 10pt; COLOR: black">仅是生成文本页，这个文本页显示用于模板的预备数据。</span></font>
		</div>
		<div style="TEXT-INDENT: 21.75pt">
				<span style="FONT-SIZE: 10pt; COLOR: black">
						<font size="4">
								<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/microrain/34e66a6b6d4541298ba39f3d1fb98b65.gif" />
						</font>
				</span>
		</div>
		<div style="TEXT-INDENT: 21.75pt">
				<font size="4">
						<span style="FONT-SIZE: 10pt; COLOR: black">FreeMarker </span>
						<span style="FONT-SIZE: 10pt; COLOR: black">不是一个</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">Web</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">应用框架，而更适合充当</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">Web</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">应用框架里的一个组件的角色，但</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">FreeMarker</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">引擎本身对</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">HTTP</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">或</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">servlets</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">并不关心，它仅仅是生成文本。在非</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">Web</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">应用环境中它同样能够展示完美的用途。然而值得注意的是：我们为使用</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">FreeMarker</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">提供了方便的解决方案，作为</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">Model2</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">框架（如</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">Struts</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">）的视图组件，你也可以在模版中使用</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">JSP</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">标签。</span>
				</font>
		</div>
		<div style="TEXT-INDENT: 21.75pt">
				<font size="4">
						<span style="FONT-SIZE: 10pt; COLOR: black">FreeMarker</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">是免费的，有</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">BSD-style license</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">。它是由</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">OSI</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">认证的开源软件。</span>
				</font>
		</div>
		<div style="TEXT-INDENT: 21.75pt">
				<font size="4">
				</font> </div>
		<div style="TEXT-INDENT: 21.75pt">
				<font size="4">
				</font> </div>
		<div style="TEXT-INDENT: 21.75pt">
				<font size="4">
				</font> </div>
		<div>
				<strong>
						<span style="COLOR: olive">
								<font size="4">注释：</font>
						</span>
				</strong>
		</div>
		<div>
				<font size="4">
						<span style="FONT-SIZE: 9pt; COLOR: olive">1</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">．什么是</span>
				</font>
				<font size="4">
						<span style="FONT-SIZE: 9pt; COLOR: olive">Servlet<br />Servlet</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">是用</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Java</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">编写的</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Server</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">端程序，它与协议和平台无关。</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Servlet</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">运行于</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Java</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">－</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">enabled Web Server</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">中。</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Java Servlet</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">可以动态地扩展</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Server</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">的能力，并采用请求－响应模式提供</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Web</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">服务。</span>
				</font>
				<font size="4">
						<span style="FONT-SIZE: 9pt; COLOR: olive">
								<br />
								<br />
						</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">　　最早支持</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Servlet</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">技术的是</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">JavaSoft</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">的</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Java Web Server</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">。此后，一些其它的基于</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Java</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">的</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Web Server</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">开始支持标准的</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Servlet API</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">。</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Servlet</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">的主要功能在于交互式地浏览和修改数据，生成动态</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">Web</span>
						<span style="FONT-SIZE: 9pt; COLOR: olive">内容。<br /><br /><br />来源：<a href="http://blog.csdn.net/microrain/archive/2006/08/26/1124390.aspx">http://blog.csdn.net/microrain/archive/2006/08/26/1124390.aspx</a></span>
				</font>
		</div>
<img src ="http://www.blogjava.net/majianan/aggbug/66001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-27 15:41 <a href="http://www.blogjava.net/majianan/archive/2006/08/27/66001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>敏捷开发与极限编程的简介</title><link>http://www.blogjava.net/majianan/archive/2006/08/24/65597.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Thu, 24 Aug 2006 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/majianan/archive/2006/08/24/65597.html</guid><wfw:comment>http://www.blogjava.net/majianan/comments/65597.html</wfw:comment><comments>http://www.blogjava.net/majianan/archive/2006/08/24/65597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/majianan/comments/commentRss/65597.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/majianan/services/trackbacks/65597.html</trackback:ping><description><![CDATA[
		<p>什么是敏捷开发？<br /><br />一种以人为核心、迭代、循序渐进的开发方法。<br /><br />在敏捷开发中，软件项目的构建被切分成多个子项目，各个子项目的成果都经过测试，具备集成和可运行的特征。简言之，就是把一个大项目分为多个相互联系，但也可独立运行的小项目，并分别完成，在此过程中软件一直处于可使用状态。</p>
		<p>敏捷开发是由一些业界专家针对一些企业现状提出了一些让软件开发团队具有快速工作、响应变化能力的价值观和原则，并于2001初成立了敏捷联盟。他们正在通过亲身实践以及帮助他人实践，揭示更好的软件开发方法。<br /><br />通过这项工作，他们认为： </p>
		<p>
				<br />·个体和交互 胜过 过程和工具<br /></p>
		<p>·可以工作的软件 胜过 面面俱到的文档 </p>
		<p>·客户合作 胜过 合同谈判 </p>
		<p>·响应变化 胜过 遵循计划 </p>
		<p> </p>
		<p>
				<br />并提出了以下遵循的原则： </p>
		<p>
				<br />我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。 </p>
		<p>即使到了开发的后期，也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。</p>
		<p>经常性地交付可以工作的软件，交付的间隔可以从几个星期到几个月，交付的时间间隔越短越好。 </p>
		<p>在整个项目开发期间，业务人员和开发人员必须天天都在一起工作。 </p>
		<p>围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持，并且信任他们能够完成工作。 </p>
		<p>在团队内部，最具有效果并富有效率的传递信息的方法，就是面对面的交谈。 </p>
		<p>工作的软件是首要的进度度量标准。 </p>
		<p>敏捷过程提倡可持续的开发速度。<br /><br />责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。</p>
		<p>不断地关注优秀的技能和好的设计会增强敏捷能力。 </p>
		<p>
				<font color="#0000ff">简单是最根本的。</font>
		</p>
		<p>最好的构架、需求和设计出于自组织团队。 </p>
		<p>每隔一定时间，团队会在如何才能更有效地工作方面进行反省，然后相应地对自己的行为进行调整。 </p>
		<p>
				<br />参看《<a class="blog_content" href="http://www.zdnet.com.cn/techupdate/software/analysis/story/0,3800080947,39385751,00.htm" target="_blank">敏捷开发横空出世</a>》</p>
		<p>
				<br />
				<br />
				<br />极限编程（XP）是一种轻量级的软件开发方法论，XP从实践中来，是对实践的总结，也是经过实践检验的，其主要特征是要适应环境变化和需求变化，充分发挥开发人员的主动精神。XP承诺降低软件项目风险，改善业务变化的反应能力，提高开发期间的生产力，为软件开发过程增加乐趣，相信这些足以吸引每个人的眼球。</p>
		<p>在XP的项目开发中，首先引入了四个变量：<font color="#0000ff"><strong>成本、时间、质量和范围</strong></font>，通过研究变量之间的相互作用，将项目开发分析的更加透彻，成功讲述一个项目成功的原则。</p>
		<p>为了能成功地实施XP，XP制定四个准则：<font color="#0000ff"><strong>沟通、简单、反馈和勇气</strong></font></p>
		<p>和十二条原则：计划游戏、小版本、隐喻、简单设计、测试、重构、结队编程、代码集体所有、持续集成、每周工作40小时、现场客户、编码标准</p>
		<p>以及对开发人员的工作要求：编码、测试、倾听和设计。</p>
		<p>XP是一个非常庞大的知识库，每一项都是一门值得深究的学问。提出这些要求和原则后，XP有提出了一系列的解决方案，也就是策略，其中包含：管理策略、设施策略、计划策略、开发策略、设计策略和测试策略。在真正去实现XP时，XP又提供了将策略成功应用的实践。可以说XP为你的软件开发的指导老师。</p>
		<p>XP是从实践中来的，应此有好多人围绕XP发表了一些自己的实践经验，其中主要包括：测试驱动开发、结队编程、重构和极限编程工具。<br /><br />参看《<a class="blog_content" href="http://sd.csdn.net/n/20060815/93733.html" target="_blank">敏捷开发的七种武器</a>》<br /><br />对敏捷设计的认识： <a class="blog_content" href="http://jigee.cnblogs.com/archive/2006/06/25/435113.html" target="_blank">http://jigee.cnblogs.com/archive/2006/06/25/435113.html</a><br /><br />极限编程与敏捷开发： <a class="blog_content" href="http://tech.acnow.net/Html/Program/soft_project/SoftProcess/2005-8/7/23175325.shtml" target="_blank">http://tech.acnow.net/Html/Program/soft_project/SoftProcess/2005-8/7/23175325.shtml</a><br /><br />敏捷软件开发（上篇） <a class="blog_content" href="http://sd.csdn.net/n/20060809/93506.html" target="_blank">http://sd.csdn.net/n/20060809/93506.html</a><br />敏捷软件开发（中篇） <a class="blog_content" href="http://sd.csdn.net/n/20060809/93507.html" target="_blank">http://sd.csdn.net/n/20060809/93507.html</a><br />敏捷软件开发（下篇） <a class="blog_content" href="http://sd.csdn.net/n/20060809/93508.html" target="_blank">http://sd.csdn.net/n/20060809/93508.html</a><br /><br /><br /></p>
		<p>来源：<a href="http://www.cnbruce.com/blog/showlog.asp?log_id=1015">http://www.cnbruce.com/blog/showlog.asp?log_id=1015</a><br /></p>
<img src ="http://www.blogjava.net/majianan/aggbug/65597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/majianan/" target="_blank">马嘉楠</a> 2006-08-24 17:45 <a href="http://www.blogjava.net/majianan/archive/2006/08/24/65597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eric Raymond对于几大开发语言的评价</title><link>http://www.blogjava.net/majianan/archive/2006/08/24/65471.html</link><dc:creator>马嘉楠</dc:creator><author>马嘉楠</author><pubDate>Thu, 24 Aug 2006 03:32:0