Archive for 二月, 2005

wireless 802.11a. 802.11g, 802.11b

Posted in 计算机科学 on 二月 24, 2005 by maximliu
  • Both 802.11a and 802.11g operate at up to 54Mbps data rates
  • 802.11a and 802.11g use common 802.11 medium access control (MAC) layer functions

With 802.11 systems, transmission delays are created because of other user traffic is sharing the same channel, the presence of RF interference and the enabling of various configuration settings, such as power management and fragmentation. For example, a wireless mobile device may transmit frames at 48Mbps, but very poor throughput may prevail if the user is operating close to a microwave oven that uses the same chunk of spectrum or if the immediate area is full of wireless users operating VoWLAN phones associated with the same access point.

  • 802.11a and 802.11g operate in different frequency bands – 802.11g is in the 2.4GHz band and 802.11a in is in the 5GHz band
  • 802.11a has much higher total capacity due to a greater number of non-overlapping channels. In fact, current 802.11a access points have eight completely separate channels.
  • 802.11g users encounter substantial decreases in throughput if just one 802.11b device associates with the same access point. (b and g require sam protection mechanism that they cannot be sent IN THE SAME TIME)

 

Advertisements

[杂文] 战争电影中感人台词

Posted in 网络文章 on 二月 23, 2005 by maximliu

10、《黑鹰坠落》
"Mike Thurrent, We won’t leave without you!"
“Mike Thurrent, 我们决不丢下你!”
《黑鹰坠落》中一名游骑兵在直升机上对着下面被困的战友喊道。

9、《未列入名册》
这部反映苏联卫国战争的影片,一名苏军战士躲在已经失守的布列斯特要塞的地道里坚持战斗一年多,直到被德国人发现,当他被德国人从地穴中押出来的时候,刺眼的阳光让他几乎失明。面对德国将军的审问,他的回答是:“将军,现在您知道一俄里有多远了吧?”(战前德军宣称这个距苏德边境仅一俄里的要塞一个冲锋就能拿下)

8、《拯救大兵瑞恩》
任务完成,米勒中尉临死前说道:“Earn it……”
这句话很难直译,大意为“别辜负我们(以后你要好好的活着)”。

7、《莫斯科保卫战》
一名苏军中尉在防守阵地时高喊:
“15辆坦克小意思,咱们阵地上每人还分不到一辆哪!!!”

6、《最长的一天》
这部反映诺曼底登陆的影片,在登陆前夕,片中的法国海军军官命令士兵:
“再过几分钟,我将下令向祖国的海岸开炮。这是为了自由所必须付出的代价,我相信你们每一个人都会克尽自己的职责。法兰西万岁!”

5、《英雄儿女》
王成:“为了胜利,向我开炮!向我开炮!”

4、《兄弟连》
在影片最后,德国宣布投降,德军军官命令部下放下武器并做最后致词。原话如下:
“这是一场漫长的战争,也是一场艰苦的战争。你们英勇并且骄傲地为祖国作战,你们是不平凡的一群,彼此紧密相连,这样的情谊存在也只存在于战斗中。象兄弟一样,共同使用散兵坑,在最需要的时刻彼此互相扶持,你们共同面对死亡,一同接受磨难。最后,我想说的是,我为能够与你们每个人共同服役而感到骄傲。你们有权享受永远快乐而和平的生活”。

Maenner!
Es war ein langer Krieg.
Es war ein hater Krieg.
Ihr habt tapfer und stoltz fuer euer Vaterland gekaempft.
Ihr seid ein ganz besondere Truppen,
die ineinander einden Zusammenhalt gefunden hat,
wie er sich nur im Kampf entwicheln kann.
Unsere Kameraden,
die Fuchshoelhen geteilt haben,
die sich in schrecklichen Momenten gegenseitig gestuetzt haben,
und gemeinsam gelitten haben.
Ich bin stoltz mit euch gedient zu haben.
Sie alle verdienen ein langes und glueckliches Leben in Frieden!

3、《莫斯科保卫战》
苏军连政治指导员克洛奇科夫—季耶夫率领28名战士同几十辆德军坦克进行了4小时的艰苦战斗,在牺牲前高呼:“俄罗斯虽大,但我们已无路可退,身后就是莫斯科!”

2、《兄弟连》
I remember my grandson asked me the other day, he said: "Grandpa, were you a hero in the great war?" "No,"I replied,"But I served in a company of heroes."
有一天我的小孙子问我“爷爷,你是大战中的英雄吗?我回答:不……但我与英雄们一同服役。”

1、《勇敢的心》
WILLIAM WALLACE:“Fight,and you may die.Run,and you”ll live at least a while.And dying in your beds many years from now.Would you be willing to trade? All the days from this day to that,for one chance,just one chance,
to come back here and tell our enemies that they may take our lives,
but they”ll never take our Freedom!
Freedom——”
威廉华莱士:“如果战斗,可能会死。如果逃跑,至少还能活。年复一年,直到寿终正寝。
你们!愿不愿意用这么多苟活的日子去换一个机会,就一个机会!
那就是回来,告诉敌人,他们也许能夺走我们的生命,
但是,他们永远夺不走我们的自由!”

“我们的自由!!!”
“我们的自由!!!”
在苏格兰上映本部电影时,出现上面的画面时,投入的观众曾经集体起立高呼“Freedom—

 

[网络文章]如何成为一个好的系统分析员

Posted in 网络文章 on 二月 23, 2005 by maximliu

如何成为一个好的系统分析员   
Truely眼中的设计定义:设计的过程就是将事务处理抽象成计算机模型的过程。
1. 首先要明白设计远比编程重要。
2. 平时注重训练自己的思维严谨性和从全局考虑问题的能力。建立冷静思考问题的处事态度。
3. 设计时(尤其是数据库设计时)不要完全被规矩约束,设计好比作诗,懂得韵律是对的,但完全被韵律所束缚,就作不出好诗了。
4. 多做设计,经常总结自己的不足之处和成功之处,向他人请教。
5. 专门去找别人设计的漏洞和不足,也是提高自己设计水平的重要手段。
(记住:这个好方法不要顺便外传,自己知道就行了,嘻嘻-:)
6. 经验是重要的,但如果观念老化而不善于总结提高,所谓的经验就成为束缚自己进步的枷锁。
7. 学好数学特别是理论数学如数学分析、运筹学、数学模型等。多玩策略性经营游戏也是有益的。推荐《帝国时代》和《模拟首都3000》以及《大富翁4》。(但不要沉陷在里面)
8. 根据项目情况和开发平台工具的特点确定最佳的设计方法。模块化设计方法和面向对象设计。两种设计方法的结合使用。
9. 将复杂无序的过程用模块化的方法进行分解,但要注重事务间的联系,并且用开放的眼光去设计。
10. 设计时对严谨性、灵活性、开发效率、客户要求四个方面做衡量取舍。
11. 设计时还要根据整个工程的进度安排和客户对软件的要求而决定是否设计得足够灵活和严谨。
12. 复杂而无条理是最糟的设计,简单实用并不一定是最好的,但一定不是最坏的。(不要说我偷懒哟)
13. 训练自己良好的表达能力,能用清晰明确而且简单的描述表达出自己的基本思路。
14. 在一个项目中建立统一的系统分析模式和文档模板,同时,一个项目中必须至少有一个人对整个系统设计进行检查和进行全局的考虑。

再谈如何成为一个好的系统分析员?

ByLsfBoy

系统分析员基本功:

好的系统分析员都是从优秀的程序员中产生的,坚实的编程功底、丰富的经验是今后做系统分析的基础。没有对系统本身进行过透彻剖析过,很难领会到其中一些难以言述的精华。但并不等于好的程序员就能够成为好的系统分析员。

合理的知识结构。语言能力、文字表达能力、技术的全面性等是对系统分析员的基本要求。比如说C/S和3层开发,如果仅仅对NETSCAPE公司的产品熟悉还不够,还需要了解比如微软等产品,并且要了解他们中产生历史,发展思路,技术优劣,以应付各种穷追猛打的提问。但更重要的是,这是你为应用定制技术要求的前提。

系统分析员思想:

全局观念是系统分析员必须具备的观念。如果系统分析员设计时太注重细节,往往会陷入在某个问题上纠缠不清的泥潭。(93年,我论文指导老师的一席话影响了我随后几年对软件开发的理解—-今后计算机会越来越快,多写几行代码少写代码无关紧要,最重要的是整体;一开始就错了,某个部份编得再好,也是没有用的)

任务难度的预测能力

系统分析员要具备快速的任务难度预测能力以及具备快速确定开发小组人员构成和任务划分的能力。(我将这条归为思想,而不是能力)昆虫自然会长出翅膀,而思想却需要长期的浸润。要做到这点,需要大量的思考、学习。设计远比编程重要。当今软件业的发展,各种开发工具的出现,编程已经不是什么问题,程序员的工作某种程度上讲是将别人现成的东西拼凑堆砌起来。系统分析员要清楚的认识到,现在大多数程序员没有学会怎么去整体的了解一个系统,有些甚至不了解编程(这不是说他们不会写代码)。可视化的开发工具加五花八门的控件,程序员可以偷点懒了。(这可不是夸大,我好几年的管理工作,接触过大量的程序员)基于技术,跳出框架。基于现有技术结合用户需求思考问题,设计时跳出框架。

系统分析员思想:

系统分析员要有面向用户的思想。系统分析员应当有能力将自己扮演成用户,来了解要交付的项目看起来想什么样式,感觉想什么,从而了解用户的想法并挑选出合理部份去开发。从这个意义上说,系统分析员才能获得有意义的见解去引导他的开发组成员。系统分析员头脑中要对项目结局有一个清楚的认识,并保证项目不偏离方向。系统分析员要有根植于技术,高于技术思考问题的思想。纯粹的程序员通常对最终结果考虑的不是很多,当一种新的技术在市场上出现时,他们对能否按时交付的考虑就比较少,而强烈希望他们的计划能够建立在新的技术之上。因此,系统分析员的想法和行动要象一个用户,又要能够站在技术的高度,成为真正的用户、程序员之间的代言人。

系统分析员的关键

获得信任。系统分析员最重要的素质是获得信任,这是成为优秀系统分析员的关键。成熟最为关键。成熟可以为整个项目组提供正确的支持,能够理解技术怎样才能解决用户的需求。

系统分析员的准备工作

统一的各种文档模式,这其中包括今后软件变量、字段命名规则。我推荐用PB制定的规则做基础,通过改造成为适合自身实用的标准。统一的文档管理。统一的分析软件。比如说ROSE(UML太规范,国内的软件管理水平根本用不上,只不过尽量应用,你自己对系统分析的理解有好处)

方法是思想的放映,在具体方法上就不多说了。我托人从U$A弄到几本书,用于面向对象系统开发的使用》、《面向对象的分析》、《项目管理》等都是很不错的,推荐大家看看。

我在拙作"在中国没有人懂计算机"里发了点牢骚,听说挨了部份人(习惯性的)骂。其实,BBS本来就是发泄的地方,在这里从来就罕有有内容的文章。

自从"维纳斯"登陆深圳后,大家更着眼于从宏观看中国的IT业了。中国IT这棵小树,说实在的,长到今天实在是不容易。一些人提出了"反对微软霸权"的口号,不少人呼唤中国"硅谷"的出现。微软的成功不是技术的成功,更多的是商业运作的成功。中国IT这棵树能长多高,取决于他所植根于的土壤。而现在的事实是,这片土壤实在是太贫瘠了!如果按我们现在的思路和搞法,是长不成大树,更别指望能结出"微软","硅谷"这样丰硕的果实。如果说,我们的软件技术落后美国十年,我们的硬件制造技术则落后美国二十年,我们的管理水平落后美国至少三十年。而最终决定发展速率的恰恰是我们的死穴──低劣的管理水平。低劣的管理水平的形成的原因有着深厚的背景和多方面的原因。

系统分析工作是解决一个问题的工作,目标是将一个对计算机应用系统的需求转化成实际的物理实现,其中复杂就复杂在实际的面太多.在系统分析过程之中注意问以下的问题,可能会所进行的系统分析设计工作有帮助.

1)您所完成的系统目的是什么?注意不是功能要求,而是目的.也就是为什么要建设、为什么要现代建设。

2)您所完成的系统有哪些方面参与,各方面的初衷是什么?那些人可能在系统建设中起重要作用,他们会采取什么样的态度?你对他们有多少影响力?

3)您的系统是否有一个明确的评价标准?最好从参与的各方面都进行考虑。

4)你的系统设计思想是什么?是否能够得到各方面的认可。

5)你对参与系统设计开发的人员了解吗?他们的特长在哪里,是否愿意与你合作,为什么?你对他们有足够的影响力吗?

6)你的系统开发计划是否完善?你的计划表有明确的阶段吗?任何一阶段都应该怎样完成?如何对这一阶段完成的情况进行评价?

7)你对所采用的系统开发方法以及工具是否熟悉?你的夥伴是否熟悉?

8)你所完成的系统是否有原型?计算机的或者物理的。

以上的几个问题都是在系统分析以及系统规划时涉及到的,供各位参考。

系统分析工作是解决一个问题的工作,目标是将一个对计算机应用系统的需求转化成实际的物理实现,其中复杂就复杂在实际的面太多.在系统分析过程之中注意问以下的问题,可能会所进行的系统分析设计工作有帮助

1)您所完成的系统目的是什么?注意不是功能要求,而是目的.也就是为什么要建设、为什么要现代建设。在考虑系统目的时,我更多的侧重于系统的最终目标考虑,因为一个系统不可能一下子完美,为系统留些余地。

2)您所完成的系统有哪些方面参与,各方面的初衷是什么?那些人可能在系统建设中起重要作用,他们会采取什么样的态度?你对他们有多少影响力?中国IT行业的失败之一就是人"太年轻",一定要有领导的支持,否则完蛋。不要认为自己对他们会有多少影响力,即便有,也要尽可能的认为是决策者再影响他们。在中国,一个技术员,你算老几?说到这里我很悲哀。哪些人在系统中起重要作用并弄清楚他们的态度,这点十分关键。

3)您的系统是否有一个明确的评价标准?最好从参与的各方面都进行考虑。不知道这样说对不对,在系统建设之前,对你的程序员、对你的领导要有至少不同的两种评价。

4)你的系统设计思想是什么?是否能够得到各方面的认可。如果高明,对领导、对程序员都采用引导,得到认可的最好办法,就是让他们认可他们自己的想法。(我力图这样做,但做得不好,系统分析员有一点要学会韬光养晦,忍)

5)你对参与系统设计开发的人员了解吗?他们的特长在哪里,是否愿意与你合作,为什么?你对他们有足够的影响力吗?软件发展到一定的程度,不是编程,不是数学,而是管理。

6)你的系统开发计划是否完善?你的计划表有明确的阶段吗?任何一阶段都应该怎样完成?如何对这一阶段完成的情况进行评价?

7)你对所采用的系统开发方法以及工具是否熟悉?你的夥伴是否熟悉?事实上,不是每种好的工具都要使用,也并不一定都要他们熟练掌握。提醒诸位一句,当你将方案做得可以不依赖某个程序员,你在程序员面前就无信任可言,因为从此程序员将受到更大的生存压力。我坚决不在公司使用ROSE。

8)你所完成的系统是否有原型?计算机的或者物理的。

以上的几个问题都是在系统分析以及系统规划时涉及到的,供各位参考。

这文章很好,我的话是:"需求分析实际应该是问题分析"。含义是系统要解决的是问题。而不是用户提出的需求。经常发现系统完成后,客户说"我的问题还没有解决"。可是,需求分析稿上的目标都搞定了。

既然是问题分析,所以,熟悉目标系统的知识就是必要的。甚至,可以说,一个好的系统分析员也应该是好的业务专家。

我很高兴在这里遇到许多分析高手,可以交流分析中的问题。我赞同从来的观点。在中国作分析重要的是人气,因为中国的企业级信息系统的建设在很大程度上可以说并非确有需求,而是迫于某种压力。用户在很多时候考虑的不是系统的长远发展,而只是短期的成果,要求开发单位在很短的时间内完成一个很大的系统的开发,没有时间对系统进行周密的分析,在这种情况下,很多开发商就会粗分析,粗设计,尽快进入编码阶段,这样的系统的生命周期肯定不会很长。说了这么多,只是想说,系统分析员确实应是业务和管理专家,并且需要有很好的语言组织能力,他需要根据问题域中存在的问题去尽力说服用户,引导用户需求,毕竟,我们是专家,如果让用户牵着鼻子走,系统不会是成功的系统。(当然了,这要建立在用户是可引导的前提下)本人拙见。

在理解和分析用户的需求时,应说服用户明白:建立计算机应用系统并不是简单地用计算机代替手工劳作,它更应该是管理思想的一次革命,是现用户模式的一次升华和提高。如果系统不能高于现实,开发的系统将长期陷入需求的反复修改,其软件的生命周期也短了。

针对我对您的问题的理解,试着作如下一般性/理论性的回复:

需求分析(您可以采用UseCaseDriven的方法进行需求分析)在明确需求分析的基础上,确定需要采用的系统分析方法(结构化/面向对象/构件式)应用您的开发团队所确定采用的分析/设计方法,进行系统分析.根据您所采用的分析方法,依次或反复进行系统设计/建模.

任何一套软件系统的模型的建立,是必须的根据所建立模型的性质上,依次或反复进行系统实现题是这样的,我用PB编程已有一年半时间,其间也做过7,8个程序,有自己独立开发的,也有和别人合作完成的。大部份都是与用户谈一谈,了解了用户的基本需求后,就立即开始编写程序,其间顶多有不懂的地方再向用户了解情况,直到编程完成。从来也没有想过什么别的,就算有文档一类的东西也多是编完了再写。但往往事后维护量特别大,用户反映缺少功能,或者认为遍出来的东西并非他所想要的。虽然最后都完成了,但感觉特别费劲。也看了一些软件工程方面的书,但总感觉不实用,因此想看看别人是怎样做的,是否自己看书方法不对,没有掌握系统分析方面的精髓。同时我感到自己长期以来,在编程方面没有丝毫进步,是否与没有理论基础有关。

[网络小文] 中国与印度软件开发之比较

Posted in 网络文章 on 二月 23, 2005 by maximliu

中国与印度软件开发之比较 
 
 
  我在工作中,接触到印度软件公司开发出来的软件:整个体系架构非常清晰,按照我们的要求实现了全部功能,而且相当稳定。但是打开具体的代码一看,拖沓冗长,水平不咋样。我们自己的一些程序员就有怪话了,说他们水平真低。但是!印度人能够把软件整体把握得很好,能够完成软件,并得到相当好的设计文档。而中国人在那里琢磨数据结构、算法,界面人员就还没编码就想着是Outlook式的还是Visual  Studio式的界面。到最后就成为Code高手,对某些特定的开发工具精通,但是就是不能保证能够把一个软件稳当、完整的开发出来。 
 
  举个简单的例子: 
 
  软件中需要一个列表,用来表示我们处理的事务。该类表在业务繁忙的时候将变得很大。中国人就用双向链表,抱着《数据结构》书在那里写链表的类。印度人开了一个大数组,然后就开始干。为什么印度人不用链表,他们说:1、你们给出的设备(小型机),最少具备512M内存,浪费一些没有什么。2、数组方式访问方便、效率高。  看出了一拿到东西就吭哧吭哧作Code,和好好进行软件分析的不同了吗?正好前几天我有几个同事从印度回来和我们交流,那家公司是CMM4级公司.  我感受的几点: 
 
  1,流程重于项目 
 
  2,QC(就是QA)独立于研发部门,专门检查研发部门的开发流程是不是按照既定流程走.如果QC觉得流程不对,他会直接上报高层,  项目肯定就此停止. 
 
  3,所谓的项目经理(PC)一般也是从编码人员升上来的,并不是所谓的不懂技术,一般都至少有四年以上的经验 
 
  4,PC主要就是制定开发计划,负责协调,填写各种表格. 
 
  5,所有的东西(包括草稿)都有文档. 
 
  6,详细文档要求达到只有这个文档就可以编码的程度,一般写文档时间占60%,编码时间极少 
 
  7,有各种详细的review(同行评审),项目组内的,项目组之间的,客户的… 
 
  8,计划很详细,的确能达到小时级,但是实际情况还是误差比较大,所以他们也有加班. 
 
  先学习UML和Rose以及RUP,不要总是要找着证据。在中国的软件开发水平下,很难给你一个好的例子,OK?中国人总是要看到一个东西有了试验田,而且稻子长得好,才换稻种。要知道在国外上述的软件开发模式的应用,大可以看看Rational网页上的story。Just  do  it!  一句话,中国的软件开发水平低得很。赶不上印度人,印度的软件公司可以让高中生编代码,它的软件工程水平可想而知。当然,你如果是个很牛的程序员。估计够呛,因为中国的气氛中,很牛的程序员都很难接受软件工程的。你可以测试一下自己,  看看自己适不适合现在学习软件工程: 
 
  1、你是不是不能忍受一个编程序不如你的人做你的项目经理? 
 
  2、你是不是觉得你的老板对客户吹牛皮、夸大自己而感到不舒服? 

  3、你是不是一个拿到一个需求脑袋里第一念头就是如何实现的人? 
 
  4、你是不是很崇拜Stallman,Linus,很讨厌Microsoft? 
 
 
  5、你是不是曾经在深夜编码的时候,突然感觉到一种乏味,对Code的生涯感到一种无趣? 
 
  以管窥豹──印度神话  作者:"Kino"  我们现在处于深深的自卑当中,感到中国的软件工程水平的低下已经是牵涉到民族劣根性的问题了。 
 
  1、他们的软件教育水平:  我们招聘印度人,给应聘者出了一份与国内差不多的试卷,有基础概念和编程题目。  等到他们完成后,我们这些中国的自认高手惊呆了!他们的编程题目简直象是抄袭的?程序结构,注释,变量命名就不说了吧,全部都是极其类似!反观中国的牛人、高手,每个人有自己的一套。到了新的岗位,先把前任的程序贬损一通,然后自己再开发更多的问题的代码来代替。我的公司统计,一个软件中有4个以上  CSocket版本, 
 
  >    每个人都觉得别人做得差,自己再搞一套。中国人,就是这个样子,还会辩解说“我们这样有创造性”。  其实软件发展,早就走过了求伯君那个编码英雄的年代,程序员已经是个坐办公室的蓝领了。你具备拧好一个螺丝钉的能力就可以了。Code是最低级的事情了。 
 
  2、他们许多公司的项目经理根本就不懂技术。  中国的项目经理如果不能在技术上压服下属,那么下属将与他搞鬼,越是高手越喜欢搞鬼,根本不知道作软件的终极目的是从别人兜里掏钱,而在内部搞不团结。技术高手都会纠集一些对他技术上崇拜的菜鸟,与管理层作对。而印度的软件经理根本就不懂正在做的东西,许多甚至直接就是MBA,或者是领域专家  (工业设计、地理专家等),而不是编码的专家。但是却能够领导大群素质良好的程序员把工作做好,没有内部不团结的情况。许多印度的程序员加入一个公司很长时间,都不知道自己整天编的代码是干什么用的。给他们的任务可能就是一个函数的声明以及该函数要实现的功能。我们呢? 
 
  3、他们的编程人员的流动率达到30%!  他们的编程人员流动率(包括内部项目之间的流动)高达30%,可以想见他们的文档水平如何。他们的产品不依赖任何一个人,谁都可以立即辞职,产品的开发还是会正常进行。  而中国,是老板怕总工。技术骨干拥兵自重,抗拒管理。任何制定好的计划,都有可能被技术人员推翻或者跟你消极怠工。 
 
  4、他们的开发计划能够做到小时级别。  如果一个印度公司的项目经理没有上班,那么他的下属将可能不知道作什么。他们的计划一般都定到天,每个基层开发人员每天的工作量就是8小时。而我们能够给出月度计划的公司就很少,而给出的月度计划要么不可能实现,要么就可  能被取消。开发人员被初略的给个任务,他在月初,可以慢慢琢磨是做成什么样子,然  后上上网,聊聊天。到了月中和月末,就开始熬夜编码。 
 
  看到每年,从各大高校不尽牛人滚滚来,我们是不得不要召人,同时又是不抱希望。我公司现在有意以后将核心软件开发外包给印度公司,中国人?做做界面吧,中国人做界面会极尽奇技淫巧,搞得花里胡哨的。BTW,我公司非外企,大家不要误会我们有什么种族歧视。但是我们现在就是对自己歧视,自卑得很。中国的程序员骂微软,追Linux是全世界最狠的,可是我们除了汉化Linux,做了什么东西出来。CDE是瑞典人写的,Linus是芬兰的,GNome是墨西哥人写的。哎,我们曾经是多么的瞧不起印度人.

[网络小文] 迷时师渡 悟了自渡

Posted in 网络文章 on 二月 23, 2005 by maximliu

迷时师渡 悟了自渡

元智大学和清华大学的资讯系同学,最近不约而同邀请我在自校的资讯周上为同学们做个演讲。对於那些吊尔郎当,连自己也不关心自己的同学,我向来一点气力都舍不得花;但对於积极上进的同学,我可倒是很喜欢和他们谈话。曾经在不同的学校讲过好些个不同的谈话性题目(非关技术,但都不脱资讯范围),这次有感於在学校任教三年了,颇知道同学们的一些学习情况,所以想和大家谈谈学习的心态、老师的角色、以及学习者自己的角色。

我想先说一个小故事。

●六祖檀经

佛教东传中土之後,虽然大德大贤备出,但由中国和尚所着,被奉为「经」者,也只「六祖檀经」一书而已。六祖檀经记录着佛教禅宗六祖惠能一生的思想言行。其中对於六祖得道的过程,有详细的叙述。

六祖惠能俗姓卢,南海新兴人。年少失父,母且寡居,家亦屡空,业无腴产。所以他从小做了樵夫,养家活口。有一天他偶闻肆间诵金刚般若经,心有所感,於是询问邻人何处学佛,遂安置母亲,至河北黄梅山礼拜五祖。

●五祖弘忍

五祖弘忍见惠能谈吐甚有根性,不动声色地让他到後院碓米。八个月後有一天,弘忍告诉众弟子说,每一个人写一首偈,谁能悟道,我便传他衣钵。当时人人以为五祖座下第一大弟子神秀必得衣钵,所以也没有人去作这首偈。神秀在这种情况下,一来「责无旁贷」,二来也想让师父看看自己心中的见解,便在三更时候於南廊壁上写下心偈一首:

身是菩提树,心如明镜台;时时勤拂拭,莫使惹尘埃。

第二天五祖弘忍见到了这首偈,把神秀叫到座前询问。并谓:「汝作此偈,见即未到,只到门前,尚未得入… 」。要神秀回去再作一偈。过了数天,神秀却作不出来。

●千古名诵

有个童子行过碓房,唱诵神秀的偈。惠能闻後,问明缘由,便请童子引至大堂。礼拜之後,惠能说自己也有一首偈,但是他既不识字更不会写字,乃请人代书写下千古名诵:

菩提本非树,明镜亦非台;本来无一物,何处惹尘埃。

此偈一成,众总皆惊。消息传至五祖,了然於心,但恐人损害,遂脱了鞋子当抹布,立刻把这首偈擦掉,并且说「这首也嘛没有悟道」!

第二天,五祖弘忍悄悄来到後院,看到惠能把大石头系在腰上,增加身体的重量来碓米,很是感动,於是和惠能展开一段非常空灵神妙的对话。弘忍问「米熟也未」?惠能曰:「米熟久矣,犹欠筛在」。於是祖以仗击碓三下而去。惠能知祖意,是夜三鼓入室,由祖为说金刚经。当说到「因无所住而生其心」,惠能大悟,於是五祖授衣钵以为信,并且说「衣为争端,止汝勿传…,汝须速去,恐人害汝」。

●迷时师度,悟了自度

五祖弘忍亲自送惠能到九江驿,令上船,把 自摇。惠能曰:「请和尚坐,弟子合摇 」。祖云:「合是吾渡汝」。惠能云:「迷时师度,悟了自度」。

我曾经在研究所毕业的前夕,因为看了这个故事,有感师恩,在实验室黑板上写下大大的这八个字,表达我心中强烈的情绪。我知道我就要永远告别我的学生生涯,再也没有人度我,我要自己度化自己了。

今天我意料之外地成为许多人的老师。远在接受学校的聘书之前,我其实也已经在外面开过很多课程,做着授业解惑的神圣工作。我的书籍文章,更使我扮演与广大读者之间一种默默的师生关系。每当一个课程的开始,不管面对的是业界的工程师,或是学校的学子,我总是告诉他们,课程是短暂的,课後才是长久的。一个课程就算长达一学期,也只是(只能是)奠定学习者日後自修的基础。

进入社会的人,我想比较能够了解这里面的意义。象牙塔里的学生,即令闻言成理,总似乎不容易感受深刻。於是日复一日,年复一年,看着同学们勤嬉戏而荒精业。我带过好几届学生,大凡转学生、五专插班生、重考生都比较用功些,大概因为他们经历过一些小小的挫折。而他们的努力,很快使他们立於同侪之上。

挫折在人生早些时候到来,谁曰不宜!

●谁悟了?

禅宗讲究顿悟,基本上是一种比较「玄」的境界。说是「迷时师度,悟了自度」,其实,除了大德大贤,谁又敢说自己悟了?智慧容或可以顿悟,知识又岂能够如此?谁敢说他对知识「突然都懂了」?所以「悟了自度」的「悟」,在这里我把它解释为「有了扎实的基础」:当你有了足够的基础,你就可以不依靠任何人任何时间任何地点传授您知识。只要有书籍,你随时可以自度。拥有足够的基础,你甚至可以开始另一种更高层次的自度:你开始自己设想问题,自己推敲解答,自己设计验证的方法,并自己判断逻辑有没有破绽。再高明的老师,也没有办法把自己的悟力灌入学生心中;唯有学生自己动念思考,再由老师协助解开关键环节,学生自己才能开悟。

●南宗与北宗,顿悟与渐悟

佛法有顿悟,学问可没有。如果有人说,我突然在某一天对 Java 开悟了,对 OO 开悟了,对 MFC 开悟了… ,我想那是他刻意(为了炫耀)或非刻意(因为遗忘)地忽略了他所谓的「悟」那一天之前的所有努力。是的,那叫渐悟,不是顿悟。

Inside OLE 一书作者 Kraig Brockschmidt 在他的序里面有这段话:

1993 年一月的某个周日下午,当我正做着与 OLE 全然无关的事情时,我突然获得了所谓的 OLE 涅 状态。所有关於 OLE 的支支节节突然全都归定位。在六个月的模糊心智之後,我突然看清楚了 OLE。

Essential COM 一书作者 Don Box 在他的序里面亦有一段类似的话:

幸运的是有一天(1998 年八月八日),突然像神迹一般,COM 对我变得再明白不过,我终於了解了 COM 的动机。如何把这个 programming model 应用在每天遇到的程式设计问题中,也因此显得再明白不过。

听起来都是顿悟的例子。难道学习 COM/OLE 特别需要宗教信仰吗?我想是因为这些技术特别需要高度抽象思考,使得霍然开朗後的喜悦巨大到令人觉得是一种「突然的神迹降临」。其实你我都明白不过,求知过程中,点的突破要靠面的累积。

●时时勤拂拭,莫使惹尘埃

既然知道点的突破要靠面的累积,同时也知道我们「具足凡夫」,没有大宗师的智慧,我建议你还是多体会神秀的见解(六祖佛法南传,神秀创立北宗,主张渐悟)。把神秀的「时时勤拂拭,莫使惹尘埃」至少应用在你满桌子的经典好书上面。噢,你应该有满桌子的好书吧?没有?!那我就很为你惋息了,你连自度的小船都没有,连自救的工具都没有,谁来拯救你?我知道好多工程师桌上可怜没几本书,月入倒有 7,8 万,年终股票分红的张数比全年买书的本数还多。叹!不看书,你的日子会愈来愈贫乏,愈来愈空虚,因为你一直掏东西出去,掏空了人也就瘪掉了。

工程师或许说「我都嘛看 paper 和 document。看书?呵呵,等书出来都太慢了啦」。喔,在 project 方面你不得不冲,你不冲公司也会要你冲。但你不觉得有很多基本的东西,其实你摇摇晃晃?有很多基础的东西,其实你从来没有好好把它搞懂变成自己的中心思想?你的 project 总是急如星火,所以可以 work 就好啦!「旗正飘飘(到处埋设 flag)」管它的!模组规划管它的!文件撰写管它的!目光浅短者,从来不去想日後的维护工作要如何进行,「深谋远虑」者,则想反正到时候我已经走人了。

这不就是我所看到的业界通病吗?

「学海无涯,唯勤是岸」,这句话我总想错不了。有人说,勤勉二字诀不是万灵丹,若无兴趣,再勤勉也没有用。我想从两个角度来看这件事。

第一,「勤」能不能够克服「难」?如果目标是放在成为一个胜任的从业人员,这一点应该没有问题,毕竟 computer science 能有多难?computer engineering 又能有多难?多花点功夫还有读不会的吗!一本不懂,再读另一本(前提是都是筛选过的好书)。一试再试做不成,再试一下嘛。

第二,「勤」能不能够克服「没兴趣」?大概不能!「学海无涯,唯勤是岸」这句话本来就是要以兴趣做为基础,这是大前提,着毋庸议,本来就不必说的。电子、电机、资讯的循环太快,竞争太烈,如果没有强烈的兴趣,念起来会非常非常痛苦,趁早转系转业吧。

然而,有多少人根本是懵懵懂懂地进入大学,懵懵懂懂地填了科系?他们根本不知道自己真正的兴趣在哪里。也许兴趣会因为努力後的成绩提升而加分,亦未可知呀!

坚定知道自己兴趣在哪里的人,是最幸福的人。自从我自己的人生终於归定位後,我清楚地有这种感受。

元智大学管理学院从去年起就大一不分系,大二开始才由同学自己选系。我非常佩服校方的这种从善精神与兴革魄力。

●书籍是永远的老师

说到底,阅读习惯以及鉴赏能力的培养,是你能不能够在求学的道路上「自度」的关键。广义地说,也是你能不能够在人生道路上「自度」的关键。如果一辈子要靠别人来指点你该看哪些书,该怎麽看,忒也太没有长进了。你能阅读,就能鉴赏;阅读数量愈多,鉴赏能力愈高。很多人好奇我如何有能力评析那麽多又厚又深的大块头书,无它,因为我读得多,因为我读得深。

【余秋雨.台湾演讲】(余秋雨/尔雅/1998)一书中在「建议阅读」这篇文章上写道:『我觉得一个人的最佳读书状态大多产生在中年以後,但能不能取得这种状态则取决於青年时期的准备』。余先生又说,曾有两位年老的大学图书馆管理员告诉他,他们能从一年级学生的借书卡上预测这些学生将来的成就,几乎百试不爽。有人毫无规律胡乱借,有人穷数年之力死啃一大堆名着,有人的借书卡过於疏空,有人的借书卡却又太密密麻麻。

这些话应该能给我们一些启示。对於尚在学校就读的学生,我想特别指出,进入社会之後的工作是如此繁忙,你更需要在学校把握机会,奠定良好的习惯和良好的基础。

●边际效益

如果你有一笔钱,放在银行的活存利息有 3%,定存利息有 7%,而且你暂时无需用钱,那麽你会把钱活存还是定存?

当然是定存。多麽简单的选择。

如果你知道,课前预习的话,上课听讲可吸收 70%;课後立刻复习,可把效果再提升 10%;课後第二天复习,只能提升 5%;课後第三天才复习,能保住原来的 70% 不错了;课後一个星期复习,只能保持 30%;期末考前才看,则当时脑袋瓜里只留有 10% 的残存记忆。

那麽,你会课前预习并且课後立刻复习吗?

很多人处理金钱时都机关算尽,聪明过人,但处理时间时则愚蠢得令人叹息。

你是哪一种?

●如果可以循序来

一位读者写 email 给我,他说『有点可惜,Windows 3.0 年代我刚开始碰电脑。如果照程序走的话,应该可以把基础打好的』。

面对此言我思潮起伏,想起自己这五、六年来的人生转折。『如果照程序走的话』,是的,我很幸运地照了程序来走,所以路不是太颠簸。我从 DOS 时代开始学习C programming、然後触摸低阶的 BIOS call 和 interrupt 并学习 assembly 语言,然後研究保护模式以及记忆体管理,然後学习 SDK programming、学习 C++、学习 MFC programming、钻研 Windows 作业系统、钻研 C++ Object Model 学理、钻研 COM/ActiveX…。由於基础愈挖愈深,成果愈垒愈高,新技术新知识也就愈来愈容易上手。核心基础打得稳,更能够以不变应万变。

现在才面对这五彩缤纷花花亮丽的资讯世界的人,不管你是大一新生,或是忙於工作专案一直没有机会充电,还停留在古早年代的工程师,我可以想像你们的苦闷。新知识新技术如泰山压顶,你不知道从哪一条路开始走。有师长前辈指导正确的学习次序已是万幸,有些东西(还不少)偏又不是那麽有绝对的次序性。好比说作业系统好了,是先学习抽象的一般性作业系统概论(一般大三课程)好呢?还是先学习专一而具象的作业系统(例如 Windows)实作技术呢?一开始就抽象会使我坠入五里路,没有踏实感;一开始就具象又使我的常识与一般观念不足。又例如C++ 和 OO,臻於高峰前通常必须经过几个阶段的反覆学习,包括语言本身、程式实务经验、classes 设计能力、市售application framework 之运用、对 object model 的彻底认识。这些阶段并不是结束一个而後开始另一个,它们都有重叠性;经过这样的铺陈,你会发现,原来通往 COM 的基础已经在这些阶段中扎好了。

身处知识爆炸的时代,算是对求知行为的一个不幸吧。可是,永远有人生在你之前,也永远有人生於你之後,还能怎麽样?认命一点。

●令人佩服的学习精神

这学期我开的 Win32 system programming and Win95 OS 课程,除了自校学生选修,就我所知道的还有交大两位大学生和清大一位研究生,以及中坜地区几位工程师来旁听。过去也曾有台北来的工程师旁听。我非常佩服这些同学的学习精神。从台北或新竹坐车到内坜可不是件轻松的事,尤其在那想起来就头痛欲裂的下班时段。有一天我顺巧载那位清大研究生回竹,才知道他每周四上完我的课回到住处都超过晚上 11 点了。

为了上三小时的课,前後再花四小时。这样的求知心真是不容易呀,我很佩服。

旁听的同学永远是最认真的,远道来的同学又更认真。因为环境的不便,他们更懂得珍惜。

●经典好书再次整理

三不五时就会收到一些 email,要我推荐专业上的书籍。我再次把个人研习领域(C,C++,Win32 OS,Win32 Programming)内的一些好书胪列出来给大家做叁考。

很多人混淆了所谓的入门书与基础书。入门书必须浅显易懂,因为它面对的是全然无知的新手;如何吸引并提升读者的兴趣,几乎是入门书最重要的功课。如果画一只狗狗可以吸引你的注意力,赶跑你的瞌睡虫,我想画三只狗狗也是可以接受的。

基础书不一样,它的读者早已入门,甚至有相当经验;它的任务是为读者挖好更深更实在的基础。通常这种书的论述层次都很深,一件事直接探到了源头;碰触范围也很广,旁徵博引以求全效。

过了入门阶段,一本入门书大概对你已是毫无滋味(但不要回过头来骂它,毕竟你也曾受过它的帮助。况且一本入门好书是非常不容易写的)。至於基础书,可以伴你长长久久,上面的注解眉批、心得笔记,甚至还可以唤起你的许多艰苦而欣慰的回忆。

有时在 BBS 上看到网友出售旧书,我都为他们惋息。他们出售了他们自己一段宝贵的记忆。虽然余秋雨先生也曾在…文章中谈到他对旧书的处理方式:「 」,但一般人是不可能有这种书籍过多的困扰的,我现在就真後悔没留下初中高中的课本,上面有我当时的心情、笔迹、我的青春岁月…。

大家对佛家所说的「顿悟」实在是有些误解。

实际上,佛家讲的是「理可顿悟,行要渐修」,更何况我们看一些禅宗公案也可发现,很多大师的「顿悟」是在花了数十年的「渐修」所得来,这样,跟任何知识的学习过程有何两样?

不否认有一些天才,不用「渐修」就可以达到「顿悟」的境界,但那毕竟是少数人。

我从不相信在没任何基础的情况下,可以「顿悟」某种领域的知识,很多人学程式也是透过不断的学习,写很多的小程式,除很多bug,请教很多人,然後才终於有点所得。就算是佛陀入定六天後夜睹明星而「顿悟」,但他之前所花的时间在修行,大家都没看见。

佛学是一种很需要思考的一种学问,而不是说说禅话,打打机锋就是了。大家只是看看「色即是空,空即是色,色不异空,空不异色」,桌上有「一叠钞票」,你空给我看。没有经过修行,道理虽懂了,但还是无法体会的。佛法如果只是顿悟的话,大家都成佛去了。

就像学资料结构,如果只是一直在看书,背演算法,这样或许会考上台大的资研所,但是这样要当工程师的话,恐怕,嘿嘿,还早呢。。。。

「迷时师度,悟时自度」何尝不能用在学问的学习。悟是有层次的,你学会了「基本电学」,大概就有办法自修「电路学」了;你「程式设计」学会的话,大概就可以自修「资料结构」,或许比不上有人教时学的快,但决不是学不会。

很多知识既然没有钻研过的话,就少开尊口,也别乱引用,这样只是自曝其短罢了。

 

[专业] 计算机图书推荐

Posted in 图书 on 二月 23, 2005 by maximliu

【Unix & Linux】
1。Linux内核情景分析,上,下册。浙江大学出版社
2。Linux内核源代码分析(美)[S.麦克斯韦尔]
3。Linux编程白皮书
4。Linux IP协议栈源代码分析
5。莱昂氏unix源代码分析
6.Running Linux (3rd Edition) by Matt Welsh, Matthias Kalle Dalheimer, Lar Kaufman, Matthew Welsh
7.Hacking Linux Exposed   by Brian Hatch, James B. Lee, George Kurtz
8.Linux System Administration (Linux Library)   by Vicki Stanfield, Roderick Smith, Roderick W. Smith
9.Linux Complete by Sybex (Editor)

5) Unix system administration handbook 0131510517 PTH/1995-2ed
***网路上昵称其为"红皮书",系统,网路都说的十分详细,无可挑惕!!
进阶用书,不适合初学者

1) Unix internals -the new frontiers 0131019082 PTH/1996-1ed
***深入UNIX…..进阶用书(SVR4 BSD都有讨论)
2) 4.4 BSD Operating System 0201549794 A-W/1996-2ed
***同上,但以4.4BSD为主题
3) The Magic Garden Explained : The 0130981389 PTH/1994-1ed
Internals of Unix System V Release 4 : An Open Systems Design
4) The Design of the UNIX operating system 0132017997 PTH/1986-1ed
***同上,BACH着,很多教科书都指名它为reference….
5) Lions’ Commentary on Unix : With Source Code 1573980137 P-t-P/1996-6th
6) Unix Internals : A Practical Approach 020187721X A-W/1996-1ed
7) Unix Systems for Modern Architecture 0201633388 A-W/1994-1ed
: Symmetric Multiprocesssing and Caching for Kernel Programmers
8) The Linux Kernel Book 0471981419 Wiley/1998-1ed
***我觉得翻译得怪怪的(因为它是由别国语言翻成英文)….
最好先对kernel有多些概念再读会较好….
9) Linux Kernel Internals 0201331438 A-W/1997-2ed
***讨论linux kernel的书,恐龙书上在linux部分的reference,个人推荐
10)Linux Device Drivers 1565922921 O’reilly/1998-1ed
***网友推荐,作者是来自义大利的骇客….
1) Advanced programming in the UNIX environment 0201563177 A-W/1992-1ed
***Richard Steven所着,十分适合对系统,C有基础的人,亦是一本好的manual
2) UNIX systems programming(for SVR4) 1565921631 O’relly/1997-1ed
***网路上评语为其讨论内容过杂,但我觉得满适合拿来当reference
1) managing projects with make 0937175900 O’reilly/1993-2ed
***对make有详细的说明
2) programming with GUN SOFTWARE 1565921127 O’reilly/1997-1ed
***个人强力推荐!!教你用emacs,gcc,gdb,gmake….
1) A Practical Guide to Linux 0201895498 A-W/1997-1ed
***(A Practical Guide to UNIX的再版)
Linus写序提到, 他当初就是用这本书学Unix, 没想到七年後很荣幸的为
作者写序.
2) Running Linux  O’Reilly/1999-3ed
3) Linux Network Administrator’s Guide  O’Reilly/1999-2ed

【系统安全】
1) maximum Security:A hacker’s guide to 0672313413 Sams/1998-2ed
protecting your internet site and network
2) Cracking Des : Secrets of Encryption 1565925203 O’reilly/1998-1ed
Research, Wiretap Politics & Chip Design
3) Practical Unix and Internet Security 1565921488 O’reilly/1996-2ed
4) Building Internet Firewalls 1565921240 O’reilly/1995-1ed

 

【Network】
3) internetworking with TCP/IP vol 1: 0132169878 PTH/1995-3ed
Principles, Protocols, and Architecture
4) internetworking with TCP/IP vol 2: 0130102210 PTH/1999-3ed
design,implementation and internals
5) internetworking with TCP/IP vol 3: 0132621487 PTH/1996-2ed
client-server programming and application
***以上三本乃comer所着,属bible级读物。为大学教科书…..
vol1讲TCPIP的原理,vol2讲TCPIP的implementation,vol3讲APP的写作
另外vol3分成三个版本,分别为BSDsockets,winsock,TLI
6) TCP/IP illustrated vol 1 0201633469 A-W/1994-1ed
7) TCP/IP illustrated vol 2 020163354x A-W/1995-1ed
8) TCP/IP illustrated vol 3 0201634953 A-W/1996-1ed
***以上三本乃Richard Steven所着,影响小弟甚深,bible级读物。
vol1讲TCPIP的原理,vol2讲TCPIP的implementation,vol3讲APP的写作
10)UNIX network programming 0136493289 PTH/1998-2ed
vol 1:networking API:Sockets and XTI
***以上两本亦为Richard Steven所着,第一本为第一版,小弟无缘
第二本为第二版,强力推荐!!
11)UNIX network Programming 0130810819 PTH/1998-2ed
vol 2: Interprocess Communications
***以IPC为主题,觉得"杂"了点….但不失为一代宗师之作

【Data structure and algorithm】
1。数据结构算法与应用-C++语言描述(英文版) 原书名: Data Structures,Algorithms, and Applications in C++ 原出版社 McGraw-hill 作者: Sartaj Sahni
2。数据结构与程序设计——C++语言描述(影印版)原出版社 Prentice Hall/Pearson
作者: Robert L.Kruse,Alexander J.Ryba
3。数据结构C++语言描述 原书名: Data Structures C++
原出版社  作者: William Ford,William Topp 译者: 刘卫东 沈官林
4。数据结构 C++语言描述(英文影印版)原书名: Data Structures with C++
原出版社 Prentice Hall/Pearson 作者: William Ford ,William Topp
5。数据结构与算法分析 原书名: A Practical Introduction to DATA STRUCTURES AND ALGORITHM ANALYSIS 原出版社  作者: CLIFFORD A.SHAFFER 译者: 张铭 刘晓丹
6。数据结构算法与应用-C++语言描述 原书名: Data Structures, Algorithms, and Applications in C++ 原出版社 Mcgraw-Hill 作者: Sartej Sahni 译者: 汪诗林等

1) Fundamemtals of DATA STRUCTURES IN C 0716782502 CS/1993-1ed(?)
***大学教科书(data structure),另有PASCAL,C++版本
//蒋按:有大陆版
2) Introduction to algorithms 0262031418 MIT/1990-1ed
***大学教科书(algorithm)
3) Computer Algorithms/C++ 0716783150 CS/1996-1ed
***大学教科书(algorithm),另有PASCAL版本。
不必我说,IA和CA两本都是超棒的!!都拿来读读,多读几次……
阅读顺序由个人选择。我选CA->IA
//蒋按:有大陆版
4) The Art of Computer Programming (Vol 1): 0201896834 A-W/1997-3ed
Fundamental Algorithms
5) The Art of Computer Programming (Vol 2): 0201896842 A-W/1997-3ed
Seminumerical Algorithms
6) The Art of Computer Programming (Vol 3): 0201896850 A-W/1998-2ed
Sorting and Searching
***以上三本….我不必介绍了吧??(好想找时间完整的研究一次….)
7) Distributed Algorithms 1558603484 M-K/1997-1ed
***还没玩完,但只想说: 真的好棒!!

【作业系统通论】
1) Operating System concepts 0201591138 A-W/1997-5ed
***大学教科书(operating system),俗称"恐龙书"。很棒的作业系统入门书
2) Modern operating system 9813076623 PTH/1996-2ed
***大学教科书,配合恐龙书服用,效果加倍
3) Operating systems design and implememtation 0136301959 PTH/1997-2ed
***大学教科书(advanced operating system)
教你写一个完整的OS(Minix),不含网路系统
4) Distributed Operating systems 0131439340 PTH/1995-2ed

【系统分析,设计,软件工程】
1。《软件工程》实践者的研究方法
Software Engineering A Practitioner’s Approach Fourth Edition
(美)Roger S.Pressman著
黄柏素  梅宏  译
机械工业出版社
3。软件工程实践者之路(第5版)(英文影印版)
    ROGER S.PRESSMAN/ 7-302-04139-3/清华大学出版社/ 2001-1-1出版
4。软件需求
    Karl E.Wiegers/ 7-111-08127-7/机械工业出版社/
2。软件工程——理论与实践(第二版 影印版)
    (美)Shari Lawrence Pfleeger/ 7-04-010099-1/高等教育出版社/
3。能力成熟度模型(CMM):软件过程改进指南
    (美)卡耐基梅隆大学软件工程研究所/ 7-5053-6729-3/电子工业出版社/
6。面向对象系统分析与设计
    Ronald J.Norman/ 7-302-02342-5/清华大学出版社/
7。面向对象系统分析与设计(英文影印版)
    Ronald J.Norman/ 7-302-02944-X/清华大学出版社/ 1999-10-1出版
8.系统分析与设计方法(第五版 影印版)原出版社 Prentice Hall/Pearson
作者: Jeffrey L.Whitten,Lonnie D.Bentley,Kev

【Java】
1。thinking in java
2。Java2核心技术系列
3。J2EE服务器端高级编程 Professional Java Server Programming J2EE Edition
原出版社 Wrox Press 作者: (美)Subrahmanyam Allamaraju 等著
4。J2EE平台上的EJB组件开发 Applying Enterprise JavaBeans Component-Based Development for the J2EE Platform
原出版社 Addison Wesley/Pearson 作者: (美)Vlada Matena Beth Stearns
5。 《Mastering EJB II》Ed Roman http://www.theserverside.com
6。Enterprise JavaBean
7.《Java in a Nutshell 》 David Flanagan
8.JAVA与XML 原出版社 O’Reilly 作者: (美)Brett McLaughlin 译者: 孙照林 汪东 王鹏
9.Effective Java(TM) Programming Language Guide   by Joshua Bloch
10.Core J2EE Patterns: Best Practices and Design Strategies  by Deepak Alur, John Crupi, Dan Malks
11.J2EE Applications and BEA WebLogic Server   by Michael Girdley, Rob Woollen, Sandra L. Emerson
12.Professional EJB

【XML】
1.Java & XML, 2nd Edition: Solutions to Real-World Problems by Brett McLaughlin
2.XML in a Nutshell : A Desktop Quick Reference (Nutshell Handbook)  by Elliotte Rusty Harold, W. Scott Means
3.XML高级编程 原书名: Professional XML 原出版社 Wrox Press    作者: Didier Martin 
4.Java XML编程指南 原书名: Professional Java XML Programming  作者: (美)Tom Myers Alexander Nakhimovsky

[网路小文] 编程水平论

Posted in 网络文章 on 二月 23, 2005 by maximliu

不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差的太远。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。

1. 扎实的基础。数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序。据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。

2. 丰富的想象力。不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。另外,多看科幻电影也是一个很好的途径。

3. 最简单的是最好的。这也许是所有科学都遵循的一条准则,如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。

4. 不钻牛角尖。当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,而且是那种极暴力的打斗类游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。

5. 对答案的渴求。人类自然科学的发展史就是一个渴求得到答案的过程,即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在过程中你也会学到很多东西。

6. 多与别人交流。三人行必有我师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。多上上网,看看别人对同一问题的看法,会给你很大的启发。

7. 良好的编程风格。注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。大家都知道如何排除代码中错误,却往往忽视了对注释的排错。注释是程序的一个重要组成部分,它可以使你的代码更容易理解,而如果代码已经清楚地表达了你的思想,就不必再加注释了,如果注释和代码不一致,那就更加糟糕。

8. 韧性和毅力。这也许是"高手"和一般程序员最大的区别。A good programming is 99% sweat and 1% coffee。高手们并不是天才,他们是在无数个日日夜夜中磨练出来的。成功能给我们带来无比的喜悦,但过程却是无比的枯燥乏味。你不妨做个测试,找个10000以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。

这些是我这几年程序员生涯的一点体会,希望能够给大家有所帮助。