<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[编程人生]]></title>
<link>http://blog.pfan.cn/12567</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[“实现能力”与“设计能力”]]></title>
		<link>http://blog.pfan.cn/12567/28998.html</link>
		<description><![CDATA[“实现能力”与“设计能力”
　　原文出处：http://www.sunistudio.com/nicrosoft/ 　　nicrosoft@sunistudio.com
Nicrosoft 2001.8.17
　　我见过太多的代码（我自己以前也是），只注重实现功能。国内绝大多数的程序员都以为实现了就成功了。在开始敲键盘之前，有多少人想过即将被创建的代码会有多少的可维护性？是准备创建用完就扔的代码，还是需要不断升级、改进的代码？如果是需要长期被维护、改进的代码，在最初的时候，如果只是注重实现，而忽略整体框架的设计，那么最终等待程序员的只是无数的bug和灾难。
　　其实，相对来说，实现是简单的。你能够实现的东西都是基于平台或者特定软硬件环境的。你所实现的，只是因为平台提供给了你这样的功能而已，这个实现并不是你创造出来的。而框架的设计就需要相当的经验。没有人可以一开始就完成一个优秀的框架。
　　在一次工作中，要为Delphi写几个简单组件，组件类之间有继承关系（很简单，只有两层而已）。对于这个非常微小的“框架”，在最初有了“想当然”的设计之后，就开始动手写代码了。完成父类层的组件后，在写派生类的组件时，才发现当初的“设计”存在问题。那时我奇怪自己当初怎么会有那么奇怪的想法，构建这样的框架。在写到派生类组件时，才发现有些东西是那么的理所当然，而在最初设计的时侯的想法却与之相反！于是，重新构建这些代码，幸好，代码量不大，即使重写，也没有花费多少时间。
　　我想说的是，即使一个那么简单的框架，我是在第三次重写后，才将其确立下来。同时，获取了宝贵的经验。设计的难处在于，人的思维习惯是从下往上，逐步抽象的。但是，在类的框架设计中，去需要从上往下的设计，也就是逐步细化。而一旦在原始类（如：VCL的TObject）的设计上存在问题的话，那么随着类层次的展开，问题将会逐步放大，最后可能会导致整个框架的崩溃。这就要求设计者具有丰富的经验！
　　我从不相信程序员的寿命只到35岁，也许35岁以后，实现能力（其实就是工匠能力）有下降的可能，而设计能力是随着经验的增加不降反升的。这才是最宝贵的。
　　国外的软件开发小组，一般的骨干都是40岁上下的人，那些才是大师级的程序员，而所谓的过了35岁就不能当程序员的程序员根本没有资格被称为程序员。
　　而软件工程是要将程序员变成编码员，变]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-30 16:16:00</pubDate>
		</item>
				<item>
		<title><![CDATA[VC++中的头文件包含问题]]></title>
		<link>http://blog.pfan.cn/12567/28889.html</link>
		<description><![CDATA[VC++中的头文件包含问题




在一些大的工程中，可能会包含几十个基础类，免不了之间会互相引用(不满足继承关系，而是组合关系)。也就是需要互相声明。好了，这时候会带来一些混乱。如果处理得不好，会搞得一团糟，根据我的经验，简单谈谈自已的处理办法：
编码时，我们一般会尽量避免include头文件，而是采用声明 class XXX。但有时候还是必须用Include头文件，那么，两者的划分在于什么呢？应该是很明确的，但书上好像都少有提及。
首先：我们要明白为什么要用声明取代头文件包含：对了，是为了避免无必要的重编译(在头文件发生变更时)。工程较大，低速机，或基础类经常变更(不合理的设计吧)，编译速度还是会在意的，另外，更为重要的是，采用声明可降低代码(class)之间的藕合度，这也是面向对象设计的一大原则。
二：一般原则：a. 头文件中尽量少include, 如果可以简单申明 class clsOld; 解决，那最好。减少没有必要的include；b. 实现文件中也要尽量少include,不要include没有用到的头文件。 
三：那什么时候可以只是简单声明class clsOld呢？简单的说：不需要知道clsOld的内存布局的用法都可以(静态成员除外)，也就是讲如果是指针或引用方式的都行。比如：&nbsp;&nbsp; clsOld * m_pOld;&nbsp;&nbsp;&nbsp; //指针占4个字节长&nbsp;&nbsp; clsOld &amp; test(clsOld * pOld) {return *pOld};&nbsp; 一切OK。
四：什么时候不能简单声明class clsOld，必须include呢？不满足三的情况下：&nbsp;比如：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clsOld m_Objold;&nbsp; //不知道占据大小，必须要通过它的具体声明来计算原因很简单，想想你要计算sizeof(classNew)，但连clsOld的size都不知道，编译器显然会无能为力。特殊情况：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int test() { return]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-27 15:51:00</pubDate>
		</item>
				<item>
		<title><![CDATA[用&nbsp;Java&nbsp;保存位图文件]]></title>
		<link>http://blog.pfan.cn/12567/28619.html</link>
		<description><![CDATA[教程 -- 其中包括将图像对象写入位图文件的全部代码作者 Jean-Pierre Dubé
摘要虽然 Java 提供了几种打开图像的机制，但保存图像并不是它的强项。这篇技巧将讲述如何将图像保存在 24 位位图文件中。另外，Jean-Pierre 还提供了将图像文件写入位图文件所需的全部代码。 这篇技巧是 Java 技巧 43 的补充，那篇技巧说明了在 Java 应用程序中加载位图文件的过程。本月我再提供一篇教程，说明如何将图像保存在 24 位位图文件中，其中还包含将图像对象写入位图文件的代码片断。 如果您在 Microsoft Windows 环境中工作，那么创建位图文件的功能将为您提供许多方便。例如，在我的上一个项目中，我必须将 Java 与 Microsoft Access 对接。Java 程序允许用户在屏幕上绘图。这幅图随后被打印到 Microsoft Access 报表中。由于 Java 不支持 OLE，我的唯一选择就是创建该图的一个位图文件，并通知 Microsoft Access 报表在何处能找到这个位图文件。如果您写过向剪贴板发送图像的应用程序，则这个技巧可能对您有用 -- 尤其是当您将这个信息传递给另一个应用程序时。 位图文件的格式位图文件格式支持 4 位 RLE（行程长度编码）以及 8 位和 24 位编码。因为我们只处理 24 位格式，所以下面我们查看一下该文件的结构。 位图文件分为三个部分。我已将它们列在下面。 第 1 部分：位图文件的标头标头包含位图文件的类型大小信息和版面信息。结构如下（摘自 C 语言结构定义）： typedef struct tagBITMAPFILEHEADER {&nbsp;&nbsp;&nbsp;UINT bfType;&nbsp;&nbsp;&nbsp;DWORD bfSize;&nbsp;&nbsp;&nbsp;UINT bfReserved1;&nbsp;&nbsp;&nbsp;UINT bfReserved2;&nbsp;&nbsp;&nbsp;DWORD bfOffBits;}BITMAPFILEHEADER;下面是对这个清单中的代码元素的说明： 

bfType：指定文件类型，其值始终为 BM。 
bfSize：指定整个文件的大小（以字节为单位）。 
bfReserved1：保留 -- 必须为 0]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-18 14:45:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Const和＃define大比拼]]></title>
		<link>http://blog.pfan.cn/12567/28476.html</link>
		<description><![CDATA[&nbsp;




const给人的第一印象就是定义常量。 
(1)const用于定义常量。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：const int N = 100;const int M = 200;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样程序中只要用到 N、M 就分别代表为整型100、200，N、M 为一常量，在程序中不可改变。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但有人说他编程时从来不用const定义常量。我相信。但他是不懂得真正的编程艺术，用const定义常量不仅能方便我们编程而且能提高程序的清晰性。你是愿意看到程序中100、200 满天飞，还是愿意只看到简单清晰的N、M。相信有没有好处你慢慢体会。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 还有人说他不用const定义常量，他用#define宏定义常量。可以。但不知道你有没有发现有时#define宏并没有如你所愿在定义常量。下面我们比较比较const和#define。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a) const定义常量是有数据类型的：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样const定义的常量编译器可以对其进行数据静态类型安全检查，而#define宏定义的常量却只是进行简单的字符替换，没有类型安全检查，且有时还会产生边际效应(不如你愿处)。所谓边际效应举例如下：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define N 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #define M 200 + N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当程序中使用 M*N 时，原本想要 100 * （200+ N ）的却变成了 100 * 200 + N。&nbsp;&nbsp;&nbsp;&nbsp;&]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-13 22:57:00</pubDate>
		</item>
				<item>
		<title><![CDATA[JAVA代码编写程序的基本规范&nbsp;]]></title>
		<link>http://blog.pfan.cn/12567/28474.html</link>
		<description><![CDATA[1.Java命名规范 
1.1 Package 的命名 
Package 的名字应该都是由一个小写单词组成，例如：net.ebseries.modules。 
1.2 Class 的命名 
Class 的名字必须由大写字母开头而其他字母都小写的单词组成，例如：DataFile或InfoParser。 
1.3 Class 变量的命名 
变量的名字可大小写混用，但首字符应小写。词由大写字母分隔，限制用下划线，限制使用美元符号（$），因为这个字符对内部类有特殊的含义。如： inputFileSize。 
类中的属性不能定义为public变量直接存取，而是定义成protect变量来防止继承类使用他们并编写get/set方法。 
1.4 Class 属性(成员变量)使用 
Class 属性(成员变量)使用一定要加前缀this或super标识对应的成员变量，以增加程序的可读性。 
1.5 Static Final 变量的命名 
Static Final 变量的名字应该都大写，并且指出完整含义，例如：final MAXUPLOADFILESIZE=1024。 
1.6 方法的命名 
方法名应该是动词，大小写可混用，但首字母应小写。在每个方法名内，大写字母将词分隔并限制使用下划线。参数的名字必须和变量的命名规范一致，问题参数名是否采用以下划线开始作为统一标识，如setCounter(int _size)，以标识成员变量size和传入参数_size区别。使用有意义的参数命名，如果可能的话，使用和要赋值的字段一样的名字： 
setCounter(int size){ 
this.size = size; 
} 
1.7 数组的命名 
数组应该总是用下面的方式来命名：byte[] buffer;而不是：byte buffer[]; 
2.代码格式 
2.1 代码样式 
代码应该用 unix 的格式，而不是 windows 的（比如：回车变成回车+换行） 
2.2 文档化 
必须用 javadoc 来为类生成文档。不仅因为它是标准，这也是被各种 java 编译器都认可的方法。 
2.3 缩进 
缩进应该是每行4个空格. 不要在源文件中保存Tab字符. 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度. 
2.]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-13 22:37:00</pubDate>
		</item>
				<item>
		<title><![CDATA[WPS软件17年发展历史]]></title>
		<link>http://blog.pfan.cn/12567/28418.html</link>
		<description><![CDATA[第一代： 　　WPS 1.0：开天之作 称雄DOS时代 　　1988年，中国的IT界尚处于萌芽时期，然而，5月的深圳，中国的办公软件已经开始在这个萌动的春天孕育。一个名叫求伯君的普通技术人员在一个宾馆的出租房间里凭借一台386电脑写出了WPS（Word Processing System）1.0，这几万行代码从此开创了中文字处理时代。 　　1988年到1995年的7年间，WPS凭借技术的领先横扫大江南北，所向无敌。WPS几乎成了电脑的代名词。书店里摆满了《WPS使用教程》之类的书，专业、非专业报刊整版整版地刊登WPS使用技巧，社会上各种电脑培训班的主要课程除了五笔字型输入法就是WPS操作。电脑几乎全部是由企业购买，企业购买电脑几乎全部用来打字，打字几乎全部都用WPS。WPS成为中国第一代电脑使用者的启蒙软件，至今，WPS如日中天的激情年代还为许多人津津乐道。 　　 
国内早期接触计算机的人们一定非常熟悉这个界面
纯字符的操作系统，窗口式的办公软件　　第二代： 　　盘古组件：转战Windows平台遭重创 　　就在WPS日趋火爆，年销3万多套的时候，微软Windows系统在中国悄然登陆。凭借操作系统的优势，微软Office中的Word正式进军中文字处理软件市场。 　　1993年，为了迎接Word的挑战，求伯君带领金山公司开发出了类似于Office套件的“盘古组件”，包括金山皓月、文字处理、双城电子表、金山英汉双向词典、名片管理、事务管理。但是，这个产品不仅没有赢得市场，而且丢掉了在Dos操作系统中的领先优势。 　　后来，求伯君把盘古组件失利的原因归纳为四点：（1）“盘古”力量分散，没有发挥WPS当时在字处理领域的领先优势；（2）没有沿用WPS这个很有号召力的名称；（3）盘古自身不够完善，没有做到“所见即所得”，完全是DOS版的照搬；（4）刚刚独立的珠海金山公司缺少销售经验。 　　 
“盘古组件”标志着WPS向windows平台的过渡　　第三代： 　　WPS 97：所见即所得 凤凰涅磐 　　盘古的失利使金山进入了发展的低谷，一些员工开始陆续离开，WPS 97一度仅有4名程序员坚持开发。求伯君卖掉别墅和宝马车，在没有任何资料可供参考的情况下，终于摸索出了WPS 97。WPS 97是一套运行在Windows3.X、Windows 95环境下的中文字处理软件，在保留原有文]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-11 17:30:00</pubDate>
		</item>
				<item>
		<title><![CDATA[c语言中命令行参数argc,argv]]></title>
		<link>http://blog.pfan.cn/12567/28387.html</link>
		<description><![CDATA[c语言中命令行参数argc,argv关键词： argc,argv &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
main(int argc,char **argv)argv为指针的指针argc为整数char **argv or: char *argv[] or: char argv[][]main()括号内是固定的写法。下面给出一个例子来理解这两个参数的用法：假设程序的名称为prog，当只输入prog，则由操作系统传来的参数为：argc=1,表示只有一程序名称。argc只有一个元素，argv[0]指向输入的程序路径及名称：./prog当输入prog para_1，有一个参数，则由操作系统传来的参数为：argc=2，表示除了程序名外还有一个参数。argv[0]指向输入的程序路径及名称。argv[1]指向参数para_1字符串。当输入prog para_1 para_2 有2个参数，则由操作系统传来的参数为：argc=3，表示除了程序名外还有2个参数。argv[0]指向输入的程序路径及名称。argv[1]指向参数para_1字符串。argv[2]指向参数para_2字符串。]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-10 21:50:00</pubDate>
		</item>
				<item>
		<title><![CDATA[雷军：接任金山CEO时曾经挣扎了3天]]></title>
		<link>http://blog.pfan.cn/12567/28315.html</link>
		<description><![CDATA[　也许仅仅依靠学习，雷军永远不是人们心目中的天才，但是，加上一点点不死心，就足以让他在中国IT界留下自己的名字了
　　“天才之所以是天才，绝不是我雷军这样的凡夫俗子靠勤奋所能达得到的，但是我仍然有一点点不死心。”雷军不是一个天才，但是，他总是在追赶跑在前面的天才们。这一点点的不死心，让雷军付出了更加多的精力和时间。
　　接任金山CEO的时候，雷军有过挣扎，前后辗转反侧3天，他始终觉得自己很难成为心目中的偶像柳传志这样的管理型人才。毕竟，雷军曾经的梦想是成为中国最好的程序员。然而，依靠着那一点点不死心，雷军接任金山CEO的9年，逐渐带领金山走出了10年前遭遇微软惨败的阴影。
　　如今，金山毒霸、WPS OFFICE已经成功打入日本及东南亚市场，金山的网络游戏也做出了口碑，雷军作为毒霸、WPS、游戏三驾马车的掌舵人，未来还要带领着这三驾马车继续走国际化道路，走融资上市的道路。
　　书生意气
　　雷军身上有一种书生气，不少认识雷军的人这样评价。从他过去的经历看，他确实是一个“书生”。小学升初中、初中升高中直至高中升大学，雷军的成绩始终名列前茅。走进大学的第一个晚上雷军就去上自习。
　　“在我的印象中，闻一多等很多名人都是在大学成名的，我当时也想利用大学的机会证明我的优秀。”雷军每天早上七点钟去教室占座位，总要坐在最好的位置上听课；周末他喜欢看电影，但经常要自习到九、十点钟后看晚间场。
　　回忆那段学生生涯，雷军把最后的结果归于最初的不自信。他说：“我特别害怕落后，怕一旦落后，我就追不上，我不是一个善于在逆境中生存的人。我会先把一个事情想得非常透彻，目的是不让自己陷入逆境，我是首先让自己立于不败之地，然后再出发的人。”为了不落后于人，雷军戒掉了午睡的习惯，把时间分割成以半小时为单位，为自己制定好每半小时的学习计划，最终，雷军大一写的程序，等他上大二的时候，已经被编进大一教材里了。他用两年的时间学完了大学四年的课程。
　　创业初体验
　　学业的成功让雷军有了自己的梦想，他希望可以成为中国最好的程序员。也正是由于能写出好的程序，雷军误打误撞加入了最早一批在大学就开始创业的人群当中。然而，这次学校中的创业最终不了了之，在发布了几个不赚钱的程序后，雷军意识到了自己的不足。“我们那时候都不懂做生意，以为会写程序就行了，还是太嫩了。”
　　雷军至今依然记得结束创业回]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-08 22:54:00</pubDate>
		</item>
				<item>
		<title><![CDATA[CreateProcess函数详解]]></title>
		<link>http://blog.pfan.cn/12567/28173.html</link>
		<description><![CDATA[&nbsp;




说明：WIN32API函数CreateProcess用来创建一个新的进程和它的主线程，这个新进程运行指定的可执行文件。函数原型：BOOL CreateProcess(&nbsp; &nbsp; LPCTSTR lpApplicationName,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LPTSTR lpCommandLine,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LPSECURITY_ATTRIBUTES lpProcessAttributes。&nbsp; &nbsp; LPSECURITY_ATTRIBUTES lpThreadAttributes,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BOOL bInheritHandles,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DWORD dwCreationFlags,&nbsp; &nbsp; LPVOID lpEnvironment,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LPCTSTR lpCurrentDirectory,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LPSTARTUPINFO lpStartupInfo,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LPPROCESS_INFORMATION lpProcessInformation );参数：lpApplicationName：指向一个NULL结尾的、用来指定可执行模块的字符串。&nbsp;&nbsp;这个字符串可以使可执行模块的绝对路径，也可以是相对路径，在后一种情况下，函数使用当前驱动器和目录建立可执行模块的路径。&nbsp;&nbsp;这个参数可以被设为NULL，在这种情况下，可执行模块的名字必须处于 lpCommandLine 参数的最前面并由空格符与后面的字符分开。&nbsp;&nbsp;这个被指定的模块可以是一个Win32应用程序。如果适当的子系统在当前计算机上可用的话，它也可以是其他类型的模块（如MS-D]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-08-03 14:39:00</pubDate>
		</item>
				<item>
		<title><![CDATA[API函数MultiByteToWideChar的用法]]></title>
		<link>http://blog.pfan.cn/12567/28073.html</link>
		<description><![CDATA[API函数MultiByteToWideChar的用法有关手机发送接受短消息的AT指令集采用TPDU发送格式，要将中文转换，看到提示要用API函数MultiByteToWideChar，就是把 AnsiString 转成 WideString, 用 BCB 非常简单了 AnsiString s = "源字符串";WideString w = s; //w 就是转成 WideChar 的了，使用 w 就可以了如果你想用 API 函数，参数如下：API 函数 MultiByteToWideChar &nbsp;&nbsp;第一个参数为代码页, 用 GetLocaleInfo 函数获取当前系统的代码页，936: 简体中文, 950: 繁体中文&nbsp;&nbsp;第二个参数为选项，一般用 0 就可以了&nbsp;&nbsp;第三个参数为 ANSI 字符串的地址, 这个字符串是第一个参数指定的语言的 ANSI 字符串 (AnsiString)&nbsp;&nbsp;第四个参数为 ANSI 字符串的长度，如果用 -1, 就表示是用 0 作为结束符的字符串&nbsp;&nbsp;第五个参数为转化生成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算生成的字符串的长度&nbsp;&nbsp;第六个参数为转化生成的 unicode 字符串缓存的容量int BufSize = MultiByteToWideChar(936,0,s,-1,NULL,0); //计算简体中文字符串 s 转成 widestring 之后占用的内存字节数…… //在此处为 wsbuf 分配内存 BufSize 个字节MultiByteToWideChar(936,0,s,-1,wsbuf,BufSize); //把简体中文 AnsiString 字符串 s 转化为 unicode 的 WideString]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-07-31 20:16:00</pubDate>
		</item>
				<item>
		<title><![CDATA[如何才能正确地激励程序员]]></title>
		<link>http://blog.pfan.cn/12567/27537.html</link>
		<description><![CDATA[先问一个问题：假设你有四百美元来奖励你手下的程序员团队：A，给你的star 程序员这四百美元做奖金；B，给他买一个24英寸 1920*1200的液晶显示器。你会选择哪个？ 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你选A，那请你读下去；如果选B，那么你知道如何激励程序员，但我还是建议你读下去。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 印象中，我们多以为程序员代表着高智商。Tim Bryce 在他的一篇文章中写道，“除了程序员显露出来的感觉，他们的智商并不高于同等学历的其他行业的工作者。”这篇文章很值得一读，因为它充分揭示了我们对程序员的不了解和错误认识。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也许你会认为激励程序员跟激励其他人是一样的，那么你错了！比较起其他行业的人，程序员也并没有你所认为的优越感，程序员也不会跟他们比，而大多只跟其他程序员比。
所以在决定如何奖励手下的程序员时，上面的结论尤其重要。当你给销售部的人购买新设备时，他们的反应也许是无所谓，但如果你给程序员购买新的配置，他们会马上分析其他程序员得到的是怎样的配置，进而看出谁奖励的多、谁奖励的少。而实际上，如果你给每个人同样的配置作为奖励，还是有人不满意，因为你给的配置也许并不是他们最需要的。
硬件配置
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表面看来，程序员并不关心所谓的商业做法，也不在乎谁是谁的上级。但当涉及到硬件配置的时候，这个观点就不灵了，因为在开发环境下，硬件配置是程序员地位的象征，体现着程序员“无形的等级”。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以当你作为领导者要升级属下程序员的机器时，有一点至关重要：你必须清楚你团队的那个“无形的等级”。把握住了这个原则，你就没有必要担心升级配置所带来的重启、影响工作等问题，程序员们会很开心地自己抽时间去处理的。
解决问题的吸引力
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序员所以写程序是因为他们乐于解决问题，所以记住这条准则：如果你给程序员的工作不涉及解决什么，那么他一定不开心。
&nbsp;&nbsp;&nbsp;&nbsp]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-07-15 00:39:00</pubDate>
		</item>
				<item>
		<title><![CDATA[游戏公司23岁创始人彭海涛成亿万富翁]]></title>
		<link>http://blog.pfan.cn/12567/27368.html</link>
		<description><![CDATA[　&nbsp; 盛大(SNDA.NASDAQ)昨日宣布一项针对国内网络游戏公司的收购，据悉收购涉及金额超过人民币1亿元。此举将使年仅23岁的加拿大籍青年彭海涛成为亿万富翁。 
　　成都锦天科技发展有限责任公司(下称“锦天科技”)是一家中国本土游戏公司，创立于2004年，目前在运营两款自主研发的3D大型多人角色扮演游戏，其中一款主要产品注册用户超过600万。企业被收购前，彭海涛拥有锦天科技的绝大多数股份。
　　1984年出生的彭海涛有着退学创业的传奇经历。受韩国公司开发、盛大代理的《传奇》迅速流行的启发，2002年他从四川大学计算机专业退学，用父亲支持的100万元开始创业。
　　彭海涛先后研发了3D游戏引擎和国内第一款玄幻3D网游《传说Online》。2006年12月，锦天科技的第二款游戏《风云Online》商业化运营，并取得成功。
　　彭海涛本人是“骨灰级”游戏玩家。他曾是盛大某次游戏比赛的赛区冠军。对于此次选择收购，彭海涛表示，之所以选择被盛大收购，是因为“个人爱好”。锦天科技本身就是一家以研发为主的公司。他希望将主要精力放在研发上。
　　盛大对锦天科技的收购完成后，有望在收入上继续在行业内领先。2007年第一季度盛大网游收入达到5.05亿元，重新成为国内同行业第一，但超出主要的竞争对手网易(NTES.NASDAQ)不多。
　　盛大董事长兼CEO陈天桥表示，收购将对盛大的3D游戏产品线进行有力支持。
　　陈天桥另表示，对锦天科技的收购将壮大盛大在成都的研发基地，双方的整合会相当迅速而顺利。
　　此前盛大在国内进行过多项收购，但从未直接针对网游企业，而是试图直接建立自己的研发基地。不过由于各种原因，这些研发基地尚未发挥明显效果。盛大发言人诸葛辉表示，盛大此类收购将会继续，以进一步加强研发能力和丰富产品线。
　　23岁亿万富翁的财富“传奇”
　　文/新浪科技
　　彭海涛，原成都锦天科技发展有限责任公司董事长兼总经理，国内第一款玄幻3D网游《传说Online》的制作者，被媒体誉为“中国比尔?盖茨”。从盛大的玩家到走上游戏研发道路，再到被盛大收购身价上亿，年仅23岁的彭海涛用了3年不到的时间成就了新一代“陈天桥”的财富神话。其发展之快、成功之早、创富速度之快、之巨，成为“新新人类”年轻人羡慕的对象。
　　彭海涛小学三年级便开始接触任天堂黑白机，是有]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-07-08 00:16:00</pubDate>
		</item>
				<item>
		<title><![CDATA[2006年中国软件收入规模前100家企业名单]]></title>
		<link>http://blog.pfan.cn/12567/27335.html</link>
		<description><![CDATA[2006年中国软件收入规模前100家企业名单





http://www.sina.com.cn 2006年05月30日&nbsp;10:13 信息产业部网站




　　2006年5月26日，信息产业部经济体制改革与经济运行司在北京梅地亚中心召开“2006年中国软件收入规模前100家企业信息发布暨软件产业研讨会”，揭晓了2006年中国软件收入规模前100家企业名单(见附件)，并对软件产业发展进行了广泛深入的研讨。国家发改委、商务部、统计局等有关部门，各地电子信息产业主管部门，重点软件企业，有关行业协会及30多家媒体单位参加了会议。
　　中国软件收入规模前100家企业名单，是由信息产业部经济体制改革与经济运行司根据软件产业统计年报数据进行排定的，主要目的是为了宣传我国软件产业发展成绩，提高软件企业的知名度和竞争力，引导软件产业做大做强。该排序活动自2002年举办至今，已完成了四届，引起了业界广泛的关注和重视。
　　2006年第五届“中国软件收入规模前100家企业”排序，是根据2005年国家统计局和我部联合统计的全国软件产业统计年报数据，按照企业2005年完成的软件收入规模进行排定，经各省市软件产业主管部门初审，由信息产业部经济体制改革和经济运行司最终审定。华为技术有限公司以软件年收入152.1亿元连续五届名列软件收入前100家企业榜首，海尔集团公司以76.1亿元跃居第二， 
中兴通讯股份有限公司以63.6亿元排名第三，进入前十家的企业还有UT斯达康通讯有限公司、神州数码(中国)有限公司、浙江浙大网新科技股份有限公司、 
熊猫电子集团有限公司、北京北大方正集团、浪潮集团有限公司和海信集团有限公司。
　　软件收入规模前100家企业，是我国软件产业在软件产品、系统集成、软件服务三方面的优势企业，其销售收入占我国软件产业总量的28.9%，是我国软件产业在自主研发、市场销售和出口的主力军。主要特点有： 
　　(一)企业规模不断扩大，入围门槛继续提高
　　我国软件产业在国家各项政策的扶持下迅猛发展。2006年“软件收入规模前100家企业”软件收入达到1127.5亿元，比上届增加了223.8亿元，增长了24.7%。企业规模得到了快速发展，首次出现了软件收入超过100亿元的企业，超过60亿元的企业有3家，超过30亿元的企业有7]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-07-05 23:04:00</pubDate>
		</item>
				<item>
		<title><![CDATA[印度理工学院--亚洲大学的典范]]></title>
		<link>http://blog.pfan.cn/12567/27216.html</link>
		<description><![CDATA[印度理工学院--亚洲大学的典范 印度精英走向世界，接轨经济 徐枫 印度最抢手的出口是什么？有人说，是印度理工学院(Indian Institutes of Technology，简称IIT，印度工院)的毕业生。 出口目的地主要是美国，那里的大学研究院抢着要印度工院的毕业生。印度工院卡拉格普尔分校的校长戈什说，美国马里兰大学帕克学院的院长一次打电话给他，邀请他“把整个毕业班送到马里兰大学”去，而且答应给所有学生提供财政补助。这样的待遇可能只发生在印度工院身上。 一、一个庞大“兵团” 美国是最吸引高等教育学生的国家之一。在80年代，世界各地出国留学的学生有四成跑到美国去；到去年，这比例已下降至三成。其他发达国家为了争夺精英分子，也纷纷向印度工院毕业生招手。例如面对工程师不足的德国和法国，都在以交换生的方法向印度工院抛媚眼。 始终，印度工院毕业生最爱前往的国家是美国，也因此成为美国高科技人才的重要来源地之一。加州大学帕克莱分校副教授萨克斯恩最近对美国高科技企业集中地硅谷的新移民企业家进行了一项调查，在约2000个新起家的企业之中，约有四成是由印度人开办的。而当中一半是印度工院培育出来的人才。 印度工院毕业生大批拥至美国，始于70年代。他们进入美国的名牌大学如史丹福、麻省理工学院和卡内基大学的研究院深造，然后加入美国的高科技企业，继而在风起云涌的八九十年代，在电脑、金融、跨国公司等领域尽领风骚。如今，这些来自印度工院的精英分子，已在世界上形成一个庞大的“兵团”，除了反馈祖国和母校，还对西方的企业文化产生越来越大的影响力。 二、华尔街炙手可热人物 在印度工院这些成就辉煌的校友中，最近又增添了两个世界瞩目的名字。今年11月1日，美国万国宝通银行把49岁的麦尼扎斯（印度工院孟买分校，1970年毕业）晋升为行政总裁；11月18日，美国航空公司(US Airways Group)委任了45岁的甘瓦尔（印度工院坎普尔分校，1975年毕业）为行政总裁。 其实，从硅谷到华尔街，在大企业中执牛耳的印度工院校友名单可以开出一大串： ——太阳微系统（SunMicrosystems）创办人科斯拉，1976年德里分校毕业； ——麦克金斯公司（McKinsey&amp;Co）合伙人古普塔，1967年德里分校毕业； ——集成电路设计商（CirrusLogic）创办人帕蒂尔，1965年坎普尔分校毕业； 投]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-06-30 12:59:00</pubDate>
		</item>
				<item>
		<title><![CDATA[和应聘者的聊天记录&nbsp;转]]></title>
		<link>http://blog.pfan.cn/12567/26649.html</link>
		<description><![CDATA[今天，给一个应聘者打电话，通过qq和他进行了聊天，聊天中基本表达了我的思想和看法，对员工的]要求。征求对方意见，同意将其放在我的搏客上。以后应聘的人员，就不用在耗费时间说明了。
2007-05-31 14:34:34 海您好: 我是张海
2007-05-31 14:34:52 卓越科技好.&nbsp;
2007-05-31 14:35:49 卓越科技我们是小公司,现在有程序员3人,前台一人, &nbsp; 
2007-05-31 14:36:23 海我写的4000左右的程序是博士生导师的省级课题, 
2007-05-31 14:36:30 卓越科技以定制软件开发为主的公司，成立于2004年，是一个喜欢软件编程，有事业心的男人的平台。公司的目标是用软件解决企业重复的劳动，提高其工作效率。公司需要的是快乐工作，工作快乐的员工。公司认为，只有喜欢，才有精品，才有回报。公司欲求把企业当家，把公司当成自己终生归宿的员工，公司本身就是家庭，只有我为人人，才能人人为我，员工、老板是一家人。坚信人品第一，技术第二。公司愿意提供一个生存、发展的平台，愿意提供一个钻研技术，忘我工作的平台。斤斤计较，自私自利的人请不要投递简历。我们需要能够正确认识自身价值，具有准确人生定位的朋友，共同发展。你有多大，公司有多大，公司有多大，你有多大!海阔凭鱼跃，天高任鸟飞！ &nbsp; 
2007-05-31 14:36:52 卓越科技主要的是这些理念 &nbsp; 
2007-05-31 14:37:32 卓越科技公司现在的目标是针对30万一下的项目的定制开发 &nbsp; 
2007-05-31 14:37:39 海有道理,公司要由小到大. 
2007-05-31 14:38:50 卓越科技现在运营中有许多困难.主要是项目的前期需求落实不准确,带来后面的需求无限扩张 &nbsp; 
2007-05-31 14:38:49 海网站还是应用程序,我个人更加倾向与应用程序,当然我也写过网站 
2007-05-31 14:39:18 卓越科技我们主要是做b/s的企业管理软件 &nbsp; 
2007-05-31 14:39:43 海前面作的4000左右的 程序亦有此问题&nbsp;
2007-05-31 14:40:17 卓越科技网站也作，有一个员工专门作，去年，作了40余个]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-06-10 22:33:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Jbuilder里光标错位问题的解决办法]]></title>
		<link>http://blog.pfan.cn/12567/26438.html</link>
		<description><![CDATA[Jbuilder里光标错位问题的解决办法&nbsp;&nbsp;这是个老问题了，很多地方说的不清楚或者太麻烦，或者是解决了错位问题后汉字又显示乱码，总之挺让人头痛，下面就教给你最简单的解决办法：
1. 用记事本打开C:\JBuilder9\jdk1.4\jre\lib\font.properties.zh文件。
2. JBuilder里默认的字体是dialoginput，所以你只要改下面几行就行:
3. dialoginput.bold.0=Courier New,ANSI_CHARSET 
上面一行改成
dialoginput.bold.0=Courier New Bold,ANSI_CHARSET 
4. dialoginput.italic.0=Courier New,ANSI_CHARSET 
上面一行改成
dialoginput.italic.0=Courier New Italic,ANSI_CHARSET 
5. dialoginput.bolditalic.0=Courier New ,ANSI_CHARSET 
上面一行改为
dialoginput.bolditalic.0=Courier New Bold Italic,ANSI_CHARSET 
6. 重新运行JBuilder.
7. 搞定！（看出规律来了么？JBuilder默认的字体是dialoginput，所以其他选项不用动，如果你选择其他字体，也是这么个改法）&nbsp;&nbsp;]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-06-05 22:31:00</pubDate>
		</item>
				<item>
		<title><![CDATA[如何提高自己的编程水平&nbsp;(转)]]></title>
		<link>http://blog.pfan.cn/12567/26385.html</link>
		<description><![CDATA[摘要



　　1. 扎实的基础　　2. 丰富的想象力　　3. 最简单的是最好的　　4. 不钻牛角尖　　5. 对答案的渴求　　6. 多与别人交流　　7. 良好的编程风格　　8. 韧性和毅力

不知不觉做软件已经做了十年，有成功的喜悦，也有失败的痛苦，但总不敢称自己是高手，因为和我心目中真正的高手们比起来，还差的太远。世界上并没有成为高手的捷径，但一些基本原则是可以遵循的。 
1. 扎实的基础。数据结构、离散数学、编译原理，这些是所有计算机科学的基础，如果不掌握他们，很难写出高水平的程序。据我的观察，学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写，但当你发现写到一定程度很难再提高的时候，就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP，即使你再精通OOP，遇到一些基本算法的时候可能也会束手无策。 
2. 丰富的想象力。不要拘泥于固定的思维方式，遇到问题的时候要多想几种解决问题的方案，试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上，除计算机以外，多涉猎其他的学科，比如天文、物理、数学等等。另外，多看科幻电影也是一个很好的途径。 
3. 最简单的是最好的。这也许是所有科学都遵循的一条准则，如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式：E=mc2。简单的方法更容易被人理解，更容易实现，也更容易维护。遇到问题时要优先考虑最简单的方案，只有简单方案不能满足要求时再考虑复杂的方案。 
4. 不钻牛角尖。当你遇到障碍的时候，不妨暂时远离电脑，看看窗外的风景，听听轻音乐，和朋友聊聊天。当我遇到难题的时候会去玩游戏，而且是那种极暴力的打斗类游戏，当负责游戏的那部分大脑细胞极度亢奋的时候，负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候，我会发现那些难题现在竟然可以迎刃而解。 
5. 对答案的渴求。人类自然科学的发展史就是一个渴求得到答案的过程，即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念，一定要找到问题的答案，你才会付出精力去探索，即使最后没有得到答案，在过程中你也会学到很多东西。 
6. 多与别人交流。三人行必有我师，也许在一次和别人不经意的谈话中，就可以迸出灵感的火花。多上上网，看看别人对同一问题的看法，会给你很大的启发。 
7. 良好的编]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-06-04 11:59:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Windows快捷键大全]]></title>
		<link>http://blog.pfan.cn/12567/26269.html</link>
		<description><![CDATA[Windows快捷键大全
2007-05-12 23:51
一、常用快捷键 
F1 显示当前程序或者Windows的帮助内容。 
F2 当你选中一个文件的话，这意味着"重命名" 
F3 当你在桌面上的时候是打开"查找：所有文件" 对话框 
F10或ALT激活当前程序的菜单栏 
windows键或CTRL+ESC 打开开始菜单 
CTRL+ALT+DELETE 在win9x中打开关闭程序对话框 
DELETE 删除被选择的选择项目，如果是文件，将被放入回收站 
SHIFT+DELETE删除被选择的选择项目，如果是文件，将被直接删除而不是放入回收站 
CTRL+Z 撤消 
CTRL+C 复制 
CTRL+V 粘贴 
CTRL+ESC 显示"开始"菜单 
CTRL+N 新建一个新的文件 
CTRL+O 打开"打开文件"对话框 
CTRL+P 打开"打印"对话框 
CTRL+S 保存当前操作的文件 
CTRL+X 剪切被选择的项目到剪贴板 
CTRL+INSERT 或 CTRL+C复制被选择的项目到剪贴板 
SHIFT+INSERT 或 CTRL+V 粘贴剪贴板中的内容到当前位置 
ALT+菜单上带下划线的字母执行菜单上相应的命令 
ALT+F4 关闭当前窗口或退出程序 
ALT+空格键 显示当前窗口的系统菜单 
ALT+TAB 切换到另一个窗口 
ALT+BACKSPACE 或 CTRL+Z 撤销上一步的操作 
ALT+SHIFT+BACKSPACE 重做上一步被撤销的操作 
Windows键+M 最小化所有被打开的窗口。 
Windows键+CTRL+M重新将恢复上一项操作前窗口的大小和位置 
Windows键+E 打开资源管理器 
Windows键+F 打开"查找：所有文件"对话框 
Windows键+R 打开"运行"对话框 
Windows键+BREAK 打开"系统属性"对话框 
Windows键+CTRL+F打开"查找：计算机"对话框 
SHIFT+F10或鼠标右击 打开当前活动项目的快捷菜单 
SHIFT在放入CD的时候按下不放，可以跳过自动播放CD。在打开Word的时候按下不放，可以跳过自启动的宏 
ALT+F4 关闭当前应用程序 
ALT+SPACEBAR打开程序最左上角的菜单]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-05-30 17:16:00</pubDate>
		</item>
				<item>
		<title><![CDATA[字符数组和字符指针的区别]]></title>
		<link>http://blog.pfan.cn/12567/26232.html</link>
		<description><![CDATA[字符数组和字符指针的区别
char* s1="hello"; char&nbsp; s2[]="world";两个表达式的含义是一样的.如果讲不同之处的话,VC6中编译时,对这两种定义进行了不同的处理;char *s1 = "hello"; 中的"hello",编译时指针指向的区域位于PE文件的.rdata节中,是只读的.不信的话,你可以试试:
main(){&nbsp; char *s1="hello";&nbsp; char s2[]="world";
&nbsp; *(s2+2)='x'; //正确&nbsp; *(s1+2)='x'; //编译通过，运行时出错.}
1.严格的说两个表达的意思是不完全一样的，因为前者是个字符串指针，这个指针S1所存的地址就是存储字符串"hello"的首地址。2.而后者是字符数组。每个字符都有一个独立的地址。
不能这样写：char ch[20];ch="hehe"ch表示数组地址，是常量，不能被赋值。
可以这样写：char *ch;ch="hehe"这里是将字符串"hehe"的首地址赋给指针变量ch.]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-05-28 22:16:00</pubDate>
		</item>
				<item>
		<title><![CDATA[变量的声明和定义以及extern的用法]]></title>
		<link>http://blog.pfan.cn/12567/26210.html</link>
		<description><![CDATA[变量的声明和定义以及extern的用法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变量的声明不同于变量的定义，这一点往往容易让人混淆。l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变量的声明是告诉编译器，该变量名称已经存在，编译器认识这个名字，不会引起编译错误。l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对变量进行定义之后，编译器就会给变量分配空间，链接时，链接器可以找到它们的地址。在程序代码组织过程中，人们往往把变量的声明放在头文件中，而把变量的定义放在源文件中，如下面的例子所示（该例子在VC6.0中编译、链接通过）：file1.h/////////////////////////////////////////////////////// 文件名：file1.h// 该文档用来测试extern的用法// extern表示外部声明一个变量// 声明一个变量就是告诉编译器，这个变量名已经存在// 但是没有给它分配空间。也就是说，声明了一个变量// 如果程序中引用了该变量，能够通过编译，但是，// 如果没有在某个文件中定义该变量的话，则链接会出错// 因为链接目标文件的时候，需要该变量的确切地址./////////////////////////////////////////////////////&nbsp;#ifndef _FILE1_H#define _FILE1_H#include &lt;iostream.h&gt;extern void FilePrint(int, int); //外部声明函数FilePrintextern&nbsp;&nbsp; m_nNum ;&nbsp;&nbsp;&nbsp;&nbsp;&n]]></description>
		<author><![CDATA[a204480]]></author>
		<pubDate>2007-05-27 23:32:00</pubDate>
		</item>
		</channel>
</rss>