软微学院生涯(大结局篇)----三朝元老经验谈终结版

来源:互联网 发布:企业淘宝费用预算 编辑:程序博客网 时间:2024/04/30 13:02
Tag: 程序人生 
  

这篇文章本来已经整理好了,结果不巧这里的blog出问题了,现在就没那么详细的整理
了。整篇文章并非全部作者原创,比较多的更早以前的师兄师姐写的经验,还有一些是
网上的热心读者的作品。黑体的部分是我的说明或者为了突出重点而设置的。

引言:这个是作者作最后的总结。

  软微学院生涯(大结局篇)----三朝元老经验谈终结版
  

 最近工作比较忙,实在没时间,最后要说点什么呢?好象已经该说的都说得差不多了,人生
规划还是要及早做来,我看到我们BBS上有一个这方面的文档,大家可以看一下
http://bbs.ss.pku.edu.cn/cgi-bin/topic.cgi?forum=143&topic=75&show=0 (内部论
坛外网可能看不了)
希望大家都能够早日成为这种有独立思考和判断能力的人.
   

终极版写点什么好呢?就写点我个人和我听到其他软微学院老生的悲惨经历,希望大家看
清楚前面的路.其实也不一定算是弯路了,条条大道通罗马,也许有了这些经历后也会闯出
一片更好的天地也说不定,但愿给大家带来点启示就好了.李敖前几天在清华演讲说到,现
代人挺可怜,通过电脑和网络可以获得太多的知识,但如何分析判断这些知识的价值和如
何使用
却很让人头痛,所以我会尽量举些不同的例子,希望大家自己好好分析判断.
   

首先说说一年理论学习与实习的关系,以及对未来的作用.我们学院比较有特色的就是学
习期间就比较重视与实际工作的不脱节,大家在上课时会模拟一些项目,会成立小组做项
目,基本上和实际工作中的环境相似.所以我们在一年中要认真的对待这些项目,将来实习
时很有可能会因为你这个项目做得好与实习项目相关而被实习公司相中.已经实习和正在
找实习单位的同学都有这样的体会,实习单位面试时一般会问你做过和这些项目,以及你
在项目中的角色和体会.你至少要有一二个非常典型代表你实力的项目写在简历里,因为
面试时先是看你技术功底,如果你把这二个项目讲得很透,人家就会开始问你体会和对工
作的看法,这就是看你的人格魅力了,主要靠你的性格和人品了.因为一个好的实习单位其
实就是来招新人的,他们会培养你一年,如果你性格和人品非常令他们相信,他们才会花时
间和金钱培养你,这样你直接就有了就业的机会.但我发现许多同学直到实习时也没想清
楚到底要找个什么样的实习单位,投简历就是来一个投一个,没什么原则.写的简历一看你
也看不出来他将来到底想做什么,你自己都不知道想做什么,用人单位怎么敢用你?当然,
如果是什么比较强的牛人可能会不太一样,但牛归牛,除非碰到能欣赏并且敢欣赏这种牛
人的单位才行.因为现在有许多单位不喜欢清华北大的学生,就是有些牛人太牛了,做工作
不踏实,高兴干就干,不高兴就走,没有团队精神,单打独干没有配合意识,不服从管理无法
融合到企业文化中去.所以大家应该在一年的学习期间注意这些问题,要打好技术基础,也
要想一想企业真正需要的是什么样的人才,为什么需要这样的人.一年在校有计划有目标
有针对性的学习,找一个较适合的实习单位,在实习期间进一步理论联系实际,多学我实
践,相信将来一定会找到一个理想的工作的.
   

找实习单位其实是个很有意思的事,现在我们学院学生越来越多,实习单位要求也越来越
高,所以大家还是提早准备.这个机会其实还是很多的,包括我有一个同学在北大高科实习
的,他的实习单位竟然是他在公共汽车上找到的.他跟我说他本来亲戚朋友帮他找了中科
院下面的一个研究所去实习,但有一天他在公共汽车上碰到北大高科一个项目经理,结果
聊聊天就让他去北大高科实习了.还有的同学是因为在参加某些展会时认识了IT企业的朋
友,然后大家谈得来就有可能帮你找到一个不错的实习单位.还有就是平时和在职生上课
时,多和他们沟通交流,一方面学习企业真正需要的知识是什么,一方面也是为了将来让人
家帮你介绍一个实习机会啦,而且就算他介绍不了去他所在的公司,没准别的你想去实习
的公司的人和他熟,到时候找实习单位,介绍一下,谁不顺水推舟给个人情呀?
 

  一般来说,本科基础不是特别好的,选择嵌入式和网络通讯方向时要谨慎,要想到将来去
面试时,人家会对你要求更高一些.所以如果你要是真的感兴趣,那么选了之后就要拼命的
学习了,一定要做出一二个特别棒的项目,这样在一年后实习面试时才能让考官相信你.电
子服务和软件开发相对来说可能难度要小一点,入门会容易些,而且市场前景大,就业机会
多,建议在校期间考个JAVA和ORACLE的认证,这样找实习单位或者工作都比较有底.
  

 前面说得都是经验性的东东,但是大家不要忘记前提是你要达到实习公司要求的技术基
础底线,如果达不到,那实习公司要了你去人家完不成任务也不行啊.所以这一年一定要好
好学习,努力实践,我想多数人都是基础一般,不好不坏的多吧,赶快给自己一个目标,然后
精通一样将来对你找实习单位非常关键的技术,别的技术你可以去一般性了解,因为IT业
涉及面太广了,我觉得大家一定要有一个专的地方,别的了解越多当然越好,但是必须要有
一个让你找到实习单位和工作的技术做保证.
  

 平时做作业和做项目问题,许多同学包括我自己,做作业和项目时不是很认真,有时候懒
着写就参考别人的,自己不动脑.这是很不好的习惯,实习一年了,发现许多以前不认真不
动脑做的作业和项目,收获不多,而且现实中想用时又无法应用,特别后悔当时为什么不好
好做一下这个作业和项目呢!大家一定要尽最大努力去自己完成自己的作业和项目分配的
任务,这样才会有所收获,才会在实习时更有感觉.有些同学在实习中遇到在以前做项目时
遇到过的同类问题,很容易解决了,而且还可以帮助所在的实习公司做更多事,实习单位怎
么会不重用这样的人呢?
  

 还有,我不建议大家去自己不喜欢的实习单位,我们这届有一些去的实习单位不理想,实
习结束觉得学到什么东西,然后去找工作又无法找到理想的工作单位,实习经验基本上无
用,这样就带来了许多麻烦.所以请大家切记,学习和实习是紧密联系在一起的,这些又与
你将来就业联系在一起的,一定要提早计划好.
  

 最后再说一下不爱写代码,不想干程序员的怎么办?我其实就是这样的人,现在做技术支
持,叫现场应用工程师(FAE).这个职业也不错,你学了如何编程,但是不用自己去开发项
目,基本上是管售前售后的技术人员,你只需要精通你负责的这块就好了.然后把开发方法
介绍给客户,客户开发过程中有问题,你帮助解决.我水平低,所以勉强能做这个,这行如果
做得好,在外企是不错的.我一个同学在菲利浦做FAE,就是现场应用工程师,一个月一万的
薪水.而且经验多了,以后还可以往管理岗位走,也是个不
错的选择.
 

  还有我再举个例子,我不提人名和单位,因为人家可能不愿意我说出来.我知道有许多学
生特别不喜欢编程序,这样的路可能会和我们熟悉的不一样,但不是没出路.我知道一二
个,平时也不写程序,也不喜欢写程序,但是能力还是很强的,我相信能来我们学院的人能
力都不会差的;人家英语特别好,而且做PPT本事比较强,表达能力好,外表也不错,这样的
做销售或者售前是很好的条件,结果听说现在人家都在顶级IT企业做行政和销售方面的.
我们学院的IT协会我不了解,我想他们可能也是这样的目标吧,将来会不会出几个这样的
同学也说不准呢.不过,这个要靠机遇和实力的,而且相信机会要比什么软件开发和嵌入式
什么的少一些.所以希望不喜欢技术和程序的同学还是不要太多.
   

我是一直认为,学到的知识不是最重要的,最关键的是能力上的提高.IT业知识更新最快
了,电脑和网络让这个世界成了知识爆炸的时代,我们只是人,只有人脑,记不住这么多这
么大量的信息,所以最关键的是能力上的提高.这种能力包括学习能力,沟通交流能力,还
有寻找快乐和创造幸福的能力,希望大家在软微学院真正提高的是这些能力:)

   感谢大家一直以来的关注和支持,三朝元老经验谈感觉象是电视节目一样,每周一期,
又像软件一样,过一阵子一升级,相信大家过一二个月再回头来看,或许会更有感觉;过了
半年甚至一年再看可能感觉又不同了.实在是没时间精力好好打补丁升级,还望大家见谅.

       

接下来是这篇文章发表一段时间后根据大家的反馈再补充的内
容                            

-----------------------------------------------------------------------------
-------
       软件工程方法规划软微学院生涯----三朝元老经验谈

   其实不说大家也猜到了,所谓升级版不过是打打补丁,顶多是增加点功能,所以不会
有特别多的内容。此次升级版主要是根据广大同学反馈信息,补充一些对未来的设计方
法。这个只是个人的一些想法,请大家参考,切勿忘记与自己的实际情况结合,我说的
其实也没什么根据,也害怕会误人子弟,所以这一次不会说太多。好,以下便是我根据
软件工程
的思想,希望与大家一起探讨一下我们在软院的学习规划。
   
       理想与规划(软件需求分析阶段,确定我们要做什么)

   我觉得有相当多的新生对未来的理想还没有规划好,这也正常,因为有许多人是半路
出家来到这里的,他们没有想过自己的未来会有这样一种改变。大多数原来有计算机基
础的,看过我的贴子基本上已经心里有数了。不管以前基础如何,大家都要有个目标,
比如说将来要嫁入微软或者IBM这样的豪门也好,或者是将来去华为、中兴等国企做网络
通讯也好,或者去做ERP、嵌入式开发等,刚开始第一个学期目标最好定下来,然后上网
去查这个目标需要你掌握哪些知识,需要哪些技能,你在学习过程中要加强这方面的学
习投入。我个人感觉,刚开始这个工作是值得的,你现在收集的信息越多,就越知道往
哪个方向努力,选课和投入精力分配就越合理。如同软件工程的需求定义阶段,定义准
确,很好的描述出软件要实现的功能,才能最大限度满足客户的需要。这个阶段找出问
题是最容易解决的,不然假设你想做嵌入式应用软件,却又希望多学知识而选了质量工
程、管理营销、网络安全等,你去网上查一下,什么项目什么公司需要这样的人才?这
样的结构很
明显是不合理的。这样的选课很明显是图多图全,想做全才,如果真是基础特别好,也
不是不可以,但如果到实习时发现自己没有想象中那么强就惨了,那时候想改可就难
了。所以如果想多学知识,建议去听一下第一堂课的介绍就可以了,知道那个课讲什么
的,对将来有什么意义就可以了,如果真是喜欢再决定是选还是继续旁听。一年的时
间,不要分散得太厉害,因为这一年不仅要学理论,还有留有几乎1比1的时间来做实
践,这个实践包括编码和写各种文档资料,所以规划之前一定要做大量的查询调研工
作。
   

我简单举个例子,如果你对网络与通讯很感兴趣,去朗讯贝尔、CISCO、华为、中兴等公
司的网站上看看他们对实习生和新招人才的要求是什么?网络与通讯涉及的领域也同样
很广的,你要有一个思想准备,一年后去实习时,你用什么去打动这些用人单位。当
然,其实我们在校学的这些知识多数也都是基础知识,不会直接满足现在社会的具体应
用的。举
个具体的例子,头一阵子看到来我们学院招实习生的西门子,它对实习生的具体要求如
下: 
 

  微码开发实习生技能要求: 
1.扎实的网络基础知识;

2.熟悉路由交换原理及TCP/IP协议栈;

3.熟悉Intel IXP2800的硬件结构;

4.熟悉Intel IXP2800的微码编程;5

.熟练使用Intel的IXA集成开发环境;

6.熟悉ME之间的并行处理、微码流水线处理、线程之间的信号机制;
7.熟练使用各种Ring和Queue的操作;

8.有较强的微码开发的能力;

9.C 语言开发能力。


这个实习生技能要求我觉得网络与通讯和嵌入式以及集成电路方向的都可以参考一下,
这些要求,我想除非是事先准备好否则你肯定达不到要求,因为INTEL IXP2800整个软硬
件开发环境成本极高,我们学院现在还没有,但它的开发原理,和一些基础知识,你在
一年之内是可以学好的,而且如果提前半年左右时间好好准备一下,这个实习岗位应该
就会属于你。如果实习中你努力实践,那么等实习结束后,你掌握的知识足够保证你找
到月薪不少于6K的工作。也就是说,在实习之前你们就要做好提前量,找到自己的理
想,提前规划好。不要等一年时间过去了,到了去找实习单位的时候再去查人家对你的
要求,因为那时候你想改变已经来不及了。这和软件工程的思维是一样的,项目快结束
时发现问题改动太难了,所以尽可能在需求分析阶段把问题都找到并解决好。而且这个
阶段还是可行性研究的阶段,有些人在实习时才发现,自己当初的软院生涯规划根本就
不可行,这是大家都不希望看到的。而且这个时候的查询调研工作,还会让你发现,你
是不是真的喜欢你要选择的方向,还会帮助你有计划的选择课程。
   

比如,你将来想去银行证券类做电子金融,那你就要先去这些网站上查一下,人家的要
求,你会发现,人家一般都要求熟悉UNIX/LINUX系统,如果用到大机还会要求COBOL语
言,可能会要求某种数据库,还会要求软件测试专业,因为金融类软件出错要命,所以
对软件测试也是比较重视的。然后你再想针对自己如何找到切入点,如果刚好有亲戚朋
友在某个给银行做系统的公司,那就好办多了,提前一年和人家打个招呼,看人家缺什
么,如果缺测试也没关系,你到时候可以去先从测试入手,等和工作人员熟悉了,就可
以把整个项目都了解一下。如果你本科时还有会计、财经的背景,加上外语又极好,二
年后,搞不好进麦肯锡之类的咨询公司也是有可能的。

       注重实践,不要搞笑(设计阶段,确定怎么做)

   需求分析明确的基础上,我们就要开始进入实现阶段了,这个时候我们要有一颗平常
心,不浮燥,不怕困难,尽自己最大的可能学习。同时还要切记李素科老师的教导“计算机
科学是非常重视实践能力的,光学习理论知识,不重视动手能力的培养而又号称自己在
学习计算机科学,简直是在搞笑。”
   

因为你的方向已经明确,这时候的选择就变得容易得多了,你会选择对你未来希望发展
方向相关的课程,比如还是以刚才说的西门子招实习生为例,你就会根据这个来选择网
络与通讯的课,还有嵌入式微处理器的课,因为INTEL IXP2800用了一个基于ARM CORE的
微处理器做管理;因为这个项目用在未来移动通讯的基础设施里,可能你还会选移动通
讯和INTERNET高级编程等相关课程,这样有针对性的选择,目标明确,找实习单位时才
会一击就中。
   

当然有些人想去做大机,这个就比较难了,很有可能你在学校学的都不会是直接用得上
的,不管你JAVA和C++学得多好,面向对象的技术多精通,你会发现,COBOL语言与这些
根本不是一个时代的东东。这样的同学,你们在校期间要培养一种学习的能力,其实这
种能力非常重要,很多同学将来都可能用上。根据我们实习的经验,有许多人到了实习
岗位,发现用人单位看重的只是你的学习理解能力,因为该实习项目根本就没有可能在
学校里学到,还以传真师兄为例(他的知名度如果提高,有我很大功劳)。他二年前
(他是我们学院首届学生)去斯伦贝谢的中国人民银行信用卡项目组实习,斯伦贝谢只
给他一周的时间看上G的英文文档资料和自学COBOL语言,那超过1G的文档里几乎全是英
文文档,涉及到项目的方方面面,你要知道项目大概怎么回事,需要你学什么东西等,
然后一周之内会用COBOL写代码,COBOL语言的书多少年前就停版了,想找有关资料要多
难有多难。所以这就需要你自身的学习能力,同时还需要你沟通交流的能力,你要找一
个项目组的比较好说话的员工多交流,让人家给你些入门的指导等,让自己尽快进入角
色。所以这些需要的能力,你在一年的在校生活里要注意培养,就是快速掌握新知识新
技术的能力,还有就是团队精神合作意识,学会沟通交流。这里要注意,英文根本就不
是对你的要求,是默认值,我们必须要习惯看英文技术文档,尤其是想去外企的。所以
大家像选张德昭老师的课时会有感觉,刚开始读英文资料很不习惯,但将来你必须习
惯,IT业英语是默认语言。所以选张老师的课难是难,但收获确实也大。
   

我们是工程硕士,必然要有实践,不停留在理论上,作业好好做,项目大家一起努力,
这些很多都是真实的模仿现实工作中的场景的,对我们将来实习和工作有很大帮助,所
以千万不要搞笑!还有就是要有重点要有针对性要结合自身情况来实践和选课,不要急
功近利和随波逐流,总有人问,现在用C++的多还是用JAVA的多(明显随波逐流),C++
好学
还是JAVA好学,哪个赚钱多呀?这都太急功近利了。比那些有意义吗?在网络和嵌入式
领域,C的使用量也是相当大的,关键是看你将来的发展领域,而不应该本末倒置。实践
的东东大家在自己的实践中体会吧,每个人基础都不一样,自己安排好实践量。


       找个适合的实习单位(软件测试阶段)

   通过需求分析,找到自己的方向和要做什么;通过设计实践阶段,做了相应的准备工
作;项目已经有了原型,现在该去实习单位测试一下了。经过一年的测试,你会进一步
飞速成长,完善各种功能,查缺补露,向着高质量的软件产品迈进。

       毕业找到理想的工作单位(项目完成,验收阶段)
   最后实习结束,写一份详细的测试报告,也就是论文了,通过后就毕业了。项目做得
怎么样,最后由企业用人单位来验收决定给你多少薪水,一个软件项目就此暂告一段
落。你的人生从此进入另一个阶段,在此我们就不做过多讨论,希望那时候各位回首,
发现师兄写的这些经验谈原来还是有些帮助,然后在BBS上和我打个招呼,我也就觉得没
白写这
些了。
   我相信能来我们软微学院的同学都是非常优秀的,不管你以前什么专业一定会找到和
计算机软件结合点的,请你试着用我所说的软件工程的方法来规划你在软微学院的生
活,看看是否会有帮助,我只是举了些例子,没有针对各种情况和各个专业背景来举
例,大家可以举一反八,针对自己的情况试着去规划一下,有什么想法大家可以一起探
讨,多多沟通
交流。

下面是正文部分,讲得很不错

-----------------------------------------------------------------------------
-------

           写给为选方向困惑的师弟师妹----三朝元老经验谈(各个方向的均可参考)

   转眼已成三朝元老,为新生写点什么吧。觉得这是责任,是义务,希望师弟师妹们有
个广阔的视野来对自己的软院生涯进行很好的规划。人有两只眼睛,一个显微镜,一个
望远镜,先聚焦进来看看吧:)

                先要有自信,要团结互助

   软院人的传统还是比较好的,那就是团结互助,我们老家伙会尽量帮新生的,因为当
年我们来时师兄们也很照顾我们,希望大家把这种人人为我,我为人人的精神传递下
去。软院招生一年比一年多,这也算是人脉呀,希望大家将来在社会上都能成为精英。

   首先,先给新生打打气,昨晚的迎新交流会讲了许多,李明、曾著和我是一届的,李
明以前和我一屋的,他们讲得非常好,后来的那个IT协会的讲得很生动。我觉得大家各
自经验兴趣都不同,背景各异,实在没办法有针对性的说什么,只好给大家些鼓励。大
家既然已经来了,就安心在这儿学习,如果后悔还是趋早,选择来了就要承担后果。我
想大家来这里都是带着梦想和希望的吧?那就帮你们对自己的前途更有信心吧!北大的
牌子有多响大家心里有数吧,只要我们学得和别人差不多,机会一定会落在我们身上
的,所以我们要维护北大软微学院的牌子,要提高自身素质,让自己也让以后的师弟师
妹们都跟着光荣,在社会上形成一定的气候。今年我们学院签IBM的光我知道的就有五、
六个人,各大IT企业都有我们同学的身影,在IT界表现还是不错的。以我们寝室为例,
李明去了IBM;还有一个现在去了数位红(国内最大的手机游戏软件公司是盛大的子公
司)做手机游戏(实习工资就有5K),因为这小子的理想就是做游戏,平时在学校里做的
项目也多半是简单的网络游戏;另一个兄弟去摩托罗拉实习(实习工资3800)马上就要
回来了,他今年本来考上北大遥感所的博士了,可是由于硕士论文没来得及写,所以还
不知道明年能不能读上博士;我在一家台湾企业实习,从技术支持到现在已经挂上APM
(区域产品经理)的名头了,老板从去年就多次要我留下,我还没想好是不是要留下。
此外我们学院二学位的也很出色,听说有一个签了IBM,还有一个二学位的朋友签了一家
外企月薪8K。所以请新来的学弟学妹们,一定要有信心,只要你肯努力,我们一定比其
他学校的学生有竞争力。我还记得我来时李传真师兄说的,北大的牌子就是块敲门砖,
别人砸不开的门,用它就能砸开,不过砸开门后能不能把握机会就看你自己的了。我们
要对得起北大的这块砖呀!要珍
惜将来会出现在我们面前,别的学校研究生想都不敢想的机会,所以这一年的学习时间
和你们交的学费可不能浪费呀!

(说到团结互助,如果您觉得看了之后有所收获,就转告别的同学吧,大家共同学习进步)

   说了这些,大家觉得前途是不是光明了许多?那么请你们在今后的学习生活中团结合
作,利用学校提供的一切条件,好好学习,开心生活,留下美好的人生回忆。遇到不开
心事,多宽容多沟通交流,同时要注重综合素质和综合能力,不要出去让人说,都北大
研究生了还不懂礼貌和礼仪,当然,我也粗人一个,有许多事还是很丢人的,但是还是
希望自己尽可能素质高些,不给北大丢人嘛。平时的小事也要注意些,特别是以后实习
时,我们IT界白领比较多,素质高和能力强的人很多,可以学到许多东西,比如,公司
的经理虽然职位高,但还是会自己打扫办公室,主动让女士优先等。这些要平时养成习
惯,我们中国的学生在这方面做得不够好,所以我觉得我们软微学院出来的要在这方面
强于别的学校学生。北大人其实过分强调自由与民主,而在团结和协作上强调得不够,
这个时代不是英雄主义时代了,单枪匹马是不行的,一定要多和人交流合作,搞技术的
这方面差些,所以想当经理很难呀,如果我们有技术又懂得沟通合作与管理方面知识,
就很容易走上管理岗位的。为了自己,也为了别人,请真心的关爱你的同学吧,因为你
懂得如何珍爱别人时也就懂得如何珍爱自己了。还是那句,人人为我,我为人人----
all for one ,one for all

                  方向性问题

   我们屋原来几个兄弟刚好都是不同方向的,李明是电子服务加管理与技术,去数位红
的是软件开发,在摩托罗拉的是网络与通讯的,我是嵌入式的,实习内容又涉及到网络
安全,所以我刚好对各个方向都还有那么点了解。刚来软院,最头痛的就是选方向,其
实各个方向很容易交叉的,所以你们可以不必特别在意自己到底是哪个方向的,可以先
按兴趣选择,到下学期想改也是可以的。其实这些方向不必分得这么明确,但我觉得大
家要知道这些方向对你意味着什么,对将来意味着什么才是更重要的,大家之所以选择
比较困难,很大程度上是因为不清楚这些技术的发展和走势,不知道如何和自己的兴趣
爱好结合,所以我根据自己经验,和网上查到的一些资料,现对方向性问题做如下总
结:

   (未完待续,广告回来更精彩,别走开哟!)
 

 1、网络与通讯
   我们学院开的专业都是最火的,网络与通讯其实很多地方和嵌入式系统有结合点,比
如路由器和交换机其实都是嵌入式系统,连到网络的嵌入式设备也越来越多,也正因如
此,网络与通讯已经成为最热门的专业了。这个世界早晚会被一网打尽的,网内的PC机
根本就算不上主流,随着可移动计算的嵌入式设备的大量使用,微软、GOOGLE、雅虎等
企业也都挤进了网络与通讯领域。网络与通讯我甚至觉得已经可以算是基础课的一部分
了,当然,你并不需要学网络与通讯的全部课程,因为底层细节基本上不需要开发人员

部了解,但李素科老师的INTERNET高级编程应该选,而且这门课也算到软件开发里了。
学了那门课,保证受益匪浅,不过基础不好的学那个会比较吃力。
  

 现在网络比较火的有VOIP、P2P相关的一些东东,做到底层就会和嵌入式有联系了;现
在网络上的多媒体相关应用也很火,因为未来网络要传大量多媒体信息;而且网络安全
又是网络发展的头等大事,所以网络与通讯又可以和网络安全结合。关键在于选课时要
注意各学科交叉,各位要想好自己将来要从事的大概行业,然后就要重点突破了。
  

 这个网和人间的情网很相似,你或我,男或女,都逃不过的。此(情)网恢恢,疏而不露,
你准备好触网了吗?未来世界的所有软件几乎都要有联网功能,通过网络升级或者做些更
新什么的,搞软件不懂网络肯定是不可思议的事情,所以网络与通讯的知识多少也要了
解一些才行,但具体了解深度要看你们自己的需要了。网络已经和英语一样成为基础性
东东了,我个人建议至少要看一看那部经典的小电影,就是TCP/IP打包的那部,把网络
世界非常生动的描绘了一下,看了觉得特爽。
  

 再说一下张德昭老师和高培春老师吧,他们都是业界的名人,高老师是非常受人尊敬
的,我一正在实习的朋友曾经和我说,当他去贝尔面试时,当面试考官得知他听过几门
高老师的课时,脸上露出羡慕的表情。张老师属于大师级人物,可能我们这些刚入行的
小生有时候不太理解她,她很多年前就是贝尔大牛,有些网络教科书上的技术就是在她
带领下研究出来的,这是我们这种没入门的人无法想像的。所以她上课时我们会觉得有
些难以领会,请大家要做好心理准备。

2、电子服务
   我感觉主要是企业计算,主要是指企业信息系统,如ERP软件(企业资源规划)、CRM
软件(客户关系管理)、SCM软件(供应链管理,即物流软件),银行证券软件,财务软
件,电子商务/政务(包括各种网站),数据仓库,数据挖掘,商务智能等企业信息管理
系统。
   这个领域对人才的需求显然永远是数量最大的,因为这是计算机应用最多的领域. 搞
这方面的好处是:
(1)人才需求量极大,从事企业计算的公司在IT企业中占了大多数。除非在专业上一无特
长,一般在这一领域总能找到工作。
(2)这方面的入门门槛相对较低(如果你的软件功底不是很深,可考虑这一领域)
(3)这方面的大公司较多,大公司要赚大钱,所以多将精力花在企业计算业务上.如与我院
同学目前实习的IBM、SAP、BEA等公司都属这一领域的公司。如果将来想到大公司找一份
相对稳定的工作,从事这方面机会要大很多。
  

 但从事这一领域的缺点也是明显的:
   由于这方面的入门门槛相对较低,虽然这方面的人才需求量是最大的,但将来竞争对
手会较多。你会发现,即使他原不是学IT专业的人,也许他突击几个月后,做得照样像
模像样。特别是当你年纪渐大后,你可能会发现,后面的年轻人可能很容易追上你的水
平。如果你将来到国外去工作,你可能会发现从事这领域的人更多且高手如云。当然,
若你在这一领域经过多年企业经验,达到较高境界(如能设计软件架构),则身价永远
是高的。国内在这方面人才领域的主要问题是,有经验的高手太少,皮毛了解的人太
多。
   

从事电子服务,最重要的技能型技术知识是

(1)J2EE架构与程序设计

(2)大型数据库系统(如Oracle)
(3)基于UML的系统分析与设计。

如果说还有什么重要的技能,还可将XML与Web Service技术包含进来,若你在这几个领
域掌握较好,则不愁找不到工作。其中尤其以J2EE最为重要,目前J2EE已成为企业计算
软件开发的最主要平台。希望我院同学无论将来想从事何种方向,都应学一下J2EE课
程,至少可为将来找工作备一手关键功夫。包括想从事嵌入式或其它领域的同学,也是
很有必要学一下J2EE的,毕竟J2EE是目前最重要的平台之一,即使你将来不想从事企业
计算领域,了解一下J2EE也是必要的,就像一门常识课程一样。其它与企业计算关系较
密切的技能还包括:Dot Net架构与程序设计、软件测试技术、软件配置管理,该领域较

层次的技能包括数据仓库技术、构件与中间件技术、设计模式等。像通信协议分析与网
络程序设计,Unix系统管理等也属有些关系的课程。希望各位一定要在某个领域有深入
的掌握。只是跟着听课,即使学了再多课程也是没用处的,自己钻研下去才是最重要
的。只一个J2EE便是博大精深的,足够你啃下去的,钻研下去,你会发现你还要学的相
关知识还有很多(包括EJB、XML、Web Service、Design Pattern等)
   

虽然从事企业计算的人才很多,但以下企业计算领域无论国内外都属稀缺人才:

  (1)掌握大型ERP系统,主要是SAP系统,包括SAP Basis(系统管理)或SAP ABAP(编
程)或SAP功能模块实施(特别是财务模块FI的实施)。SAP顾问身价是最高的,而且非
常难找。其它大型ERP系统,掌握PeopleSoft、Oracle Finacial、J.D.Edward、Siebel
等大型ERP软件系统的人也很值钱。这方面的人之所以身价奇高,主要是因为这些软件很
专业,特别大,很难有D版可学习,只有特大企业(如世界500强,90%以上使用SAP)才
用得起,而且必须有实际工作经验才能掌握。如果是一个个人人都很容易有机会接触的
软件,


那么这方面的人通常就不会稀缺。如果大家将来有机会接触学习这些大型ERP软件系统的
机会,建议毫不犹豫地抓住,那将捧上一辈的金饭碗。在国外,会SAP的人特别值钱。物
以稀为贵,这永远是颠扑不破的真理。SAP的价值不仅是因为他是一个ERP软件, 而是其
中体现的现代企业管理理念(如根据订货需求自动安排原料采购和生产计划等)。一般
500强公司绝不会像国内很多企业那样,用J2EE从头设计企业的ERP系统,一定都会使用
SAP这样成熟的ERP软件,用不起SAP的公司可能会用J2EE设计ERP系统。

  (2)掌握IBM大型机技术的人,如S/390主机,MVS操作系统,JCL作业控制语言,
COBOL程序设计语言,DB2关系数据库或IMS层次数据库,CISC中间件交易控制系统等IBM
大型机专用技术。国内五大银行,以及国外绝大多数银行的后台系统使用的都是以上平
台。IBM大型机号称永不宕机而且平台相对封闭(这样最安全),所以这些要求在24*7环
境中连续运行的关键应用(术语叫mission critical applications)都采用IBM大型机。
这方面的人才之所以稀缺,是因为会大型机的人都是老人(90年代以前搞IT的人),全
世界
新毕业的IT毕业生不可能再去学IBM大型机(这是一种相对"古老"的技术),没有新人补
上,而银行的系统必须维持下去而且银行还要不断开发新业务(如新的存款品种),虽然对
IBM大型机人才的绝对需求量不很大,但相对恒定,银行到哪里找这方面的新人,很难找
到.  如果你将来到国外找工作,会IBM大型机可能是最好找工作的领域之一了,而且保证
找的都是大银行等好工作.读书的最终目地还是为了工作. 如果你将来在国外找工作,根
本没人管你是什么文凭,国外企业绝不会花冤枉钱,只会招有领域工作经验能立即上手的
人,用最少的钱在限定的时间完成项目. 而在国内,因为人力成本较低,公司招聘一很多高
学历的人才,尽管可能根本用不到这么高的学历,但国内的人力太便宜了,为什么不高消费
一下人才呢?这样公司的门面还要好看些。(李传真师兄就是因为实习时接触了大机和
COBOL语音,现在去了IBM,由于他本科的财经背景,现在在IBM负责财经方面的咨询,这是
一个很经典的案例哟,请传真师兄原谅我未经允许就引用)

   (3)其它如掌握数据仓库技术的人在国内也很少. 目前最主流的数据仓库平台应是
ORACLE的数据仓库工具. 
   

同学们现在年纪都很轻,年轻人充满热情,喜欢追逐一些热门技术,这当然正确的,毕竟学
习SAP和大型机的机会毕竟不多,毕业时先能找到一份工作是重要的. 但我相信随着年纪
的增长,大家将来慢慢都会思考的,掌握一项竞争对手较少的绝技的重要性,将来如果自己
到国外工作什么技术最好找工作,你要考虑你今后一生的出路,什么样的绝技是最稳定最
轻松最高收入的. 搞软件的人,当年纪大些时,你可能更向住像搞医学人的那样能更多靠
经验吃饭,而不须整天像年轻人那样不得不去追逐不断出现的软件新技术,这个时候也许
你也许会发现,如果你在SAP或大型机等方面有些绝技,你会有很大优势,因为这些较偏的
领域其技术变化是相对很缓慢的.相反,掌握流行技术的人因太多而不很值钱. 同学们将
来找工作时,不仅要盯着国内市场,还要有一种放眼全球的眼光,对搞软件的人你将来完
全可能到其它国家去工作. 尤其是在欧美、日本、新加坡等国家,对SAP(包括IBM大型
机)人才的需求是很大的。

(http://play8.tom.com/song_open.php?song_id=2056      这是非常好看的机器舞)

  3、关于嵌入式系统方向(集成电路方向也可参考)

   嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些
特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对
成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显
重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数
字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游
戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗
仪器、航天航空设备等等都是典型的嵌入式系统。嵌入式将会是我们数字化生存的基础,
一台PC里其实就已经嵌入了10几个单片机,一辆高档轿车大约要用到六七十个单片机;嵌
入式处理器无所不在,无处不在,全世界的年产量超过100亿片,这是怎样惊人的数字呀!

   嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。
   一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时
要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board Support Package
(像PC的BIOS一样,往下驱动硬件,往上支持操作系统),最初级的硬件驱动程序等。他
们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件
系统往往力不从心(例如嵌入式操作系统原理和复杂应用软件等)。

   另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开
发。如果我们学软件的人对硬原理和接口有较好的掌握,我们完全也可写BSP和硬件驱动
程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了,嵌入式设备的增值很大程
度上取决于嵌入式软件,这占了嵌入式系统的最主要工作(目前有很多公司将硬件设计
包给了专门的硬件公司,稍复杂的硬件都交给台湾或国外公司设计,国内的硬件设计力
量很弱,很多嵌入式公司自己只负责开发软件,因为公司都知道,嵌入式产品的差异很
大程度在软件上,在软件方面是最有"花头"可做的),所以我们搞软件的人完全不用担
心我们在嵌入式市场上的用武之地,越是智能设备越是复杂系统,软件越起关键作用,
而且这是目前的趋势。
 

 从事嵌入式软件开发的好处是:
  (1)目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅
要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌
入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所
以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,
很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作系统、MPEG技术、
无线通信协议等),掌握这些新技术的人当然很找。嵌入式人才稀缺,身价自然就高,
越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需
要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。
  (2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不
低)。搞企业应用软件的IT企业,这个用户的系统搞完了,又得去搞下一个用户的,而
且每个用户的需求和完成时间都得按客户要求改变,往往疲于奔命,重复劳动。相比而
言,搞嵌入式系统的公司,都有自己的产品计划,按自己的节奏行事。所开发的产品通
常是通用的,不会因客户的不同而修改。一个产品型号开发完了,往往有较长一段空闲
时间(或只是对软件进行一些小修补),有时间进行充电和休整。另外,从事嵌入式软
件的每个人工作范围相对狭窄,所涉及的专业技术范围就是那些(ARM、RTOS、MPEG、
802.11等),时间长了这些东西会越搞越有经验,卖卖老本,几句指导也够让那些初入
道者琢磨半年的。若搞应用软件,可能下一个客户要换成一个完全不同的软件开发平
台,那就苦了。
   (3) 哪天若想创业,搞自已的产品,那么嵌入式是一个不错的主意,这可不像应用
软件那样容易被盗版。我们这届有个同学自己有点此类小生意,具体做什么的没细问,他
每月要进货几千片8位单片机,现在自己已经有车有房了。还有现在开发的饭馆用的点菜
PDA(WinCE平台,可无线连网和上网),据说销路不错,饭馆点点PDA让客户点菜,多显
派头档次。这些PDA的硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都
是通用的硬件,我们只管设计软件就变成自己的产品了。

从事嵌入式软件开发的缺点是:
(1) 入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操
作系统级软件功底不深,则可能不适于此行。
(2) 这方面的企业数量要远少于企业计算类企业。特别是从事嵌入式的小企业数量较
多(小企业要搞自己的产品创业),知名大公司较少(搞嵌入式的大公司主要有Intel、
Motorola、TI、Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半导体、
Microtek、研华、华为、中兴通信、上广电等制造类企业)。这些企业的习惯思维方式
是到电子、通信等偏硬专业找人。
(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公
司也并无此要求,只要有经验即可。

   同学们若学习嵌入式,显然应偏重于嵌入式软件,特别是嵌入式操作系统方面,应是
我们的强项。


对于搞嵌入式软件的人,最重要的技术显然是(实际上很多公司的招聘广告上就是这样
写的):
(1) 掌握主流嵌入式微处理器的结构与原理
(2) 必须掌握一个嵌入式操作系统 
(3) 必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目。

   在嵌入式软件方面最重要的课程包括:
(1) 嵌入式微处理器结构与应用:这是一门嵌入式硬件基础课程,我们说过,嵌入式
是软硬件结合的技术,搞嵌入式软件的人应对ARM处理器工作原理和接口技术有充分了
解,包括ARM的汇编指令系统。若不了解处理器原理,怎么能控制硬件工作,怎么能写出
节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率),怎么能写出驱
动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉
ARM处理器,将来若同学到公司中从事嵌入式软件开发,公司都会给你一本该设备的硬件
规格说明书 (xxx Specification),你必须能看懂其中的内存分布和端口使用等最基本
的说明(就像x86汇编一样),否则怎么设计软件。有些同学觉得嵌入式处理器课程较枯
燥,这主要是硬件课程都较抽象的原因。还有同学对ARM汇编不感兴趣,以为嵌入式开发
用C语言就足够了。其实不应仅是将汇编语言当成一个程序设计语言,学汇编主要是为了
掌握处理器工作原理的。一个不熟悉汇编语言的人,怎么能在该处理器写出最优的C语言
代码。在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包
括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压
缩),目前还会用到汇编写程序的,尽管用到的机会相对C要小得多。当你在一个嵌入式
公司工作时,在查看描述原理的手册时,可能很多都是用汇编描述的,这是因为很多硬
件设计人员只会写或者喜欢用汇编描述,此时你就必须看懂汇编程序,否则软硬件人员
可能就无法交流。很多嵌入式职位招聘时都要求熟悉汇编。

[小知识] 目前嵌入式处理器常见的有ARM、PowerPC、MIPS、Motorola 68K、ColdFire
(冷火)等,但ARM占据了绝对主流(有资料说手机中几乎90%都是ARM处理器)。ARM是一
个只卖知识产权的公司,目前获得购买了ARM CPU核授权许可的大公司很多,包括
Intel、Samsung、Amstel、Motorola、Philip等,他们都在ARM CPU核的基础上进行了一
些外围扩展,形成自己的处理器(如Samsung S3C2410,Motorola i.MXL9328等处理器都
是采用ARM 9内核,指令一级是相同的)。而众多中小公司又购买了这些处理器,设计了
各种各样的开发板,如华恒等国内很多著名嵌入式公司都生产基于Samsung S3C2410的开
发板,供最终用户使用或供教学实验。在ARM这个食物链上,ARM公司是大鱼,Intel、
Samsung等公司是小鱼,而华恒等则是虾米,最终用户(我们这些要采购嵌入式开发板
的)则是喂虾米的。Intel早期生产的是低端ARM(Strong ARM,相当于ARM 7),现在转向
主要生产高端ARM(即Intel Xscale处理器,属于ARMv5家族,主要用在高端PDA上,
如HP和DELL生产的PDA都采用Intel Xscale,价格较高)。目前应用最多的是ARM 7和ARM 
9两类处理器。 ARM 7较便宜,可跑uclinux(是一个不支持高级内存管理功能的嵌入式
Linux系统)、Vxworks、uc/os II等实时操作系统,但因处理器不带内存管理单元MMU
(无内存分页和地址映射机制,所以不能使用虚拟内存),所以不能跑Windows CE,另
外通用Linux中的某些内存管理功能也不能用在ARM 7上。ARM 9大都是一个带MMU功能的
高端处理器,可跑WinCE或通用Linux的大多数功能。ARM7和ARM9的区别是在与体系结构
上,前者是冯·诺伊曼结构,后者是哈佛结构——指令和数据总线是分开的。以上是我
的一点了解,可能有不对的地方。我们学院有十几套ARM 7开发系统(采用Samsung 
S3C44b0x开发板,主要用于嵌入式处理器结构、实时操作系统等课程实验用),ARM 9的
系统好象也已经到了(采用的芯片我不知道也没去问),还有以前的十几套MPC860开发
板(听说价格都很贵,很容易损坏),同学应爱护使用和珍惜这样的实验机会。

(2) 嵌入式操作系统类课程
除了WinCE的实时性稍差外,大多数嵌入式操作系统的实时性都很强,所以也可称为实时
操作系统Real TimeOperating System.从事嵌入式的人至少须掌握一个嵌入式操作系统
(当然掌握两个更好),这在嵌入式的所有技术中是最为关键的了。目前最重要的RTOS主要
包括:

第一类、传统的经典RTOS:最主要的便是Vxworks操作系统,以及其Tornado开发平台。
Vxworks因出现稍早,实时性很强(据说可在1ms内响应外部事件请求),并且内核可极
微(据说最小可8K),可靠性较高等,所以在北美,Vxworks占据了嵌入式系统的多半疆
山。特别是在通信设备等实时性要求较高的系统中,几乎非Vxworks莫属。Vxworks的很
多概念和技术都和Linux很类似,主要是C语言开发。像Bell-alcatel、Lucent、华为等
通信企业在开发产品时,Vxworks用得很多。但Vxworks因价格很高,所以一些小公司或
小产品中往往用不起。目前很多公司都在往嵌入式Linux转(听说华为目前正在这样
转)。但无论如何,Vxworks在一段长时间内仍是不可动摇的。与Vxworks类似的稍有名
的实时操作系统还有pSOS、QNX、Nucleus等RTOS。

第二类、嵌入式Linux操作系统:Linux的前途除作为服务器操作系统外,最成功的便是
在嵌入式领域的应用,原因当然是免费、开源、支持软件多、呼拥者众,这样嵌入式产
品成本会低。Linux本身不是一个为嵌入式设计的操作系统,不是微内核的,并且实时性
不强。

目前应用在嵌入式领域的Linux系统主要有两类:

一类是专为嵌入式设计的已被裁减过的Linux系统,最常用的是uClinux(不带MMU功
能),目前占较大应用份额,可在ARM7上跑;另一类是跑在ARM 9上的,一般是将Linux 
2.4.18内核移植在其上,可使用更多的Linux功能(当然uClinux更可跑在ARM 9上)。很
多人预测,嵌入式Linux预计将占嵌入式操作系统的50%以上份额,非常重要。缺点是熟
悉Linux的人太少,开发难度稍大。另外,目前我们能发现很多教材和很多大学都以
ucOS/II为教学用实时操作系统,这主要是由于ucOS/II较简单,且开源,非常适合入门
者学习实时操作系统原理,但由于ucOS/II功能有限,实用用得较少。况且熟悉了Linux
开发,不仅在嵌入式领域有用,对开发Linux应用软件,对加深操作系统的认识也有帮
助,可谓一举多得。据我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式开发,
Fujitum则是在自己的处理器上大搞Linux开发。目前在嵌入式Linux领域,以下几个方面
的人特别难找,一是能将Linux移植到某个新型号的开发版上;二是能写Linux驱动程序
的人;

三是熟悉Linux
内核裁减和优化的人。不过LINUX有一个硬伤,就是没有WINDOWS那样的友好方便美观的
交互界面,不然微软帝国早就守不住了。

第三类、 Windows CE嵌入式操作系统:Microsoft也看准了嵌入式的巨大市场,MS永远
是最厉害的,WinCE出来只有几年时间,但目前已占据了很大市场份额,特别是在PDA、
手机、显示仪表等界面要求较高或者要求快速开发的场合,WinCE目前已很流行(据说有
一家卖工控机的公司板子卖得太好,以至来不及为客户裁减WinCE)。WinCE目前主要为
4.2版(.NET),开发平台主要为WinCE Platform Builder,有时也用EVC环境开发一些较
上层的应用,由于WinCE开发都是大家熟悉的VC++环境,所以我院学过Windows程序设计
课程的同学都不会有多大难度,这也是WinCE容易被人们接受的原因,开发环境方便快
速,微软的强大技术支持,WinCE开发难度远低于嵌入式Linux。对于急于完成,不想拿
嵌入式Linux冒险的开发场合,WinCE是最合适了(找嵌入式Linux的人可没那么好找
的),毕竟公司不能像学生学习那样试试看,保证开发成功更重要。根据不同的侧重
点 ,WinCE还有两个特殊版本,一个是MS PocketPC操作系统专用于PDA上(掌上电
脑),另一个是MS SmartPhone操作系统用于智能手机上(带PDA功能的手机),两者也
都属于WinCE平台。在PDA和手机市场上,除WinCE外,著名的PDA嵌入式操作系统还有
Palm OS(因出现很早,很有名)、Symbian等,但在WinCE的强劲冲击下,Palm和
Symbian来日还能有多长?同学学过VC++后再学WinCE,非常方便自然,通过学习WinCE同
样也可了解嵌入式软件的一般开发过程,对Linux有惧怕心理的同学也很合适。很显然,
嵌入式Linux永远不可能替代WinCE,而且将来谁占份额大还很难讲,毕竟很多人更愿意
接受MS的平台,就像各国政府都在大力推LINUX已好长时间,但你能看到几个在PC机上真
正使用LINUX的用户?据我观察,目前在嵌入式平台上,LINUX是叫得最响,但还是WinCE实
际用得更多.嵌入式LINUX可能更多地是一些有长远产品计划的公司,为降低成本而进行长
远考虑.WinCE和多媒体(如MPEG技术)是微软亚洲工程院目前做得较多的
项目领域之一,现在社会很需要精通WinCE的人。现在有WINCE的智能手机,金山词霸、
WORD、EXCEL、REGEDIT等居然都有smartphone版的,PC上的MP3、DOC等居然在download
时都可被自动转换成smartphone格式,很爽的。完全可用Windows CE自己开发一些需要
的程序download到自己的手机上。现在市面销售PDA智能手机火爆,MS总是财源滚滚。

总结关于嵌入式操作系统类课程,若你觉得自己功底较深且能钻研下去,则可去学嵌入
式Linux;若你觉得自己VC++功底较好且想短平快地学嵌入式开发,自学WINCE是非常好
的选择。

(3) 嵌入式开发的相关领域

搞嵌入式若能熟悉嵌入式应用的一些主要领域,这样的人更受企业欢迎。主要的相关领
域包括:
A、数字图像压缩技术:这是嵌入式最重要最热门的应用领域之一,主要是应掌握MPEG编
解码算法和技术,如DVD、MP3、PDA、高精电视、机顶盒等都涉及MPEG高速解码问题。
B、通信协议及编程技术:这包括传统的TCP/IP协议和热门的无线通信协议。首先,大多
数嵌入式设备都要连入局域网或Internet,所以首先应掌握TCP/IP协议及其编程,这是
需首要掌握的基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编
程也是是很重要的。无线通信协议包括无线局域网通信协议802.11系列,Bluetooth,以
及移动通信(如GPRS、GSM、CDMA等)。
C、网络与信息安全技术:如加密技术,数字证书CA,以及各种网络安全设备,包括硬件防
火墙,入侵检测IDS,还有防毒墙,IPS等,中国在这方面还是没有自己优势的,我们陈院长好
象正在往这方面发展.
D、DSP技术:DSP是Digital Signal Process数字信号处理的意思,DSP处理器通过硬件
实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。数字信号处理是电
子、通信等硬件专业的课程,对于搞软件的人若能了解一下最好。目前DSP人才较缺。如
果有信号与系统、数字信号处理等课程基础,对于学习MPEG编解码原理会有很大帮助。

(4)嵌入式开发的相关硬件基础

对于软件工程专业的学生,从事嵌入式软件开发,像数字电路、计算机组成原理、嵌入
式微处理器结构等硬件课程是较重要的。另外,汇编语言、C/C++、数据结构和算法、特
别是操作系统等软件基础课也是十分重要的。我们的主要目地是能看懂硬件工作原理,
但重点应是在嵌入式软件,特别操作系统级软件,那将是我们的优势。我们的研究生里
有些是学电子、通信类专业过来的,有较好的模拟电路和单片机基础,学嵌入式非常合
适。
嵌入式本身就是从单片机发展过来的,只是单片机不带OS,而现在很多嵌入式应用越来
越复杂,以至不得不引入嵌入式操作系统。另外,为追求更高速的信号处理速度,现在
在一些速度要求较高场合,有不少公司是将一些DSP算法,如MPEG压缩解压缩算法等用硬
件来实现,这就涉及到HDL数字电路设计技术及其FPGA/IP核实现技术,这方面的人目前
市场上也很缺。

(5) 题外话
另外,能写驱动程序的人目前是非常紧缺的(驱动程序也可归于嵌入式范畴),包括桌
面Windows中的DDK开发环境和WDM驱动程序。公司每时每刻都要推出新产品,每一个新产
品出来了,要能被操作系统所使用,是必须写驱动程序的。写驱动程序就必须掌握操作
系统(如Windows或Linux)的内部工作原理,还涉及到少量硬件知识,难度较大,所以这
方面的人很难找。想成为高手的同学,也可从驱动程序方面获得突破。不过听做这方面
的朋友说,做过以后,你会发现也并不是怎样难的。其实搞驱动程序的工作是很舒服的,
搞完一个版本就会空一段时间,只有等公司新的芯片推出或新的OS出现后,才需要再去
开发新一版驱动。

www.myembed.com  这是我们这届的几个嵌入式方向的同学做的网站,上边有许多资料免
费下载的.
在GOOGLE网上能搜索太多的关于嵌入式系统的讨论了,介绍给大家一个
http://www.embyte.com非常不错,有很多有经验者谈自己的体会 投入到其中的论坛
中,你会切身感到嵌入式学习的热潮。要么走ARM+WinCE,要么走ARM+LINUX,要么走
ARM+VXWORKS。每个搞嵌入式的人都可选一条路,条条大路通罗马。

4、软件开发等其它方向
   这是所有方向的基础学科,也是最好的方向,因为可以非常灵活的选择应用领域,学
点嵌入式就可以去做嵌入式系统的应用软件开发,学点网络与通讯就可以去做网络方面
的研发,这也是我所说的方向其实要与具体应用结合。无论网络还是嵌入式都会与具体
现实应用结合,除了纯硬件,否则核心都是软件开发。
   算法是北大非常有名的屈老师讲,她讲课的经验实在太丰富了,如果有兴趣可以考
虑。陈向群老师在操作系统界也是非常有名气的,她的操作系统高级内容丰富,认真学
也会有相当的收获的。李素科老师的经典课程INTERNET高级编程我就不多说了。软件开
发的课或多或少我们肯定会接触到的,各位心中一定要记得应用的方向,然后再去选
课。各科交叉得其实非常紧,应用也需要许多交叉学科的知识,这时候要不断的调整二
只眼睛,不论是望远镜还是显微镜。
   

别的方向我其实就不太了解了,象管理与技术,我经验不够,又没学过管理,虽然想往
管理方向走,但我觉得纯管理的应该不是我们的方向吧?但是IT企业里的许多经理确实
是没什么技术背景,我实习公司的经理就不是学理的,但这种人往往有复杂的背景,而
且如果有了一个这样没技术背景的,公司里别的经理就一定要有技术背景的了,所以纯
管理的只能去那些公司里多数是技术牛人当经理的地方,这是我的看法。我觉得现在二
种经理都缺,但更缺的是有技术背景的,因为纯管理的各个学校都有很多研究生,选择
余地很大,
人家来软院应该是为了找懂技术的管理者吧?这是我的看法,不一定对,请大家指正。
  

 集成电路我也不是很懂,不过它与嵌入式系统的关系会多些,有许多嵌入式系统要用到
各种ASIC、FPGA还有SOC,集成电路也是非常急需的专业,上海某大学号称其集成电路专
业工程硕士研究生毕业后如果年薪少于7万还是几万,退学费,可见这行的前景有多好
了。有条件懂硬件的同学可以考虑这个方向,但是好象真正的高手也不容易当的,只是
我实在无法给出更多的建议了。
   

网络安全不知道现在还算不算一个方向,这个涉及的领域也很多,比如一个硬件防火
墙,要有嵌入式处理器做核心,要对网络有很深的了解,要有网络编程,扫描算法,甚
至正则表达式、文法与自动机的理论都会用上,是个很大很复杂的领域。但是社会是真
需要,特别是我们社会主义中国,对网络安全要求比别的国家更高,现在好多博士和教
授都在转向研究网络安全,各位如果有这个志向也是很好的。微软现在找人一个是测
试,一个就是网络安全方面,当然它比较狠,直接整个公司整个公司的收购,以至于全
球几大网络安全
厂商的股价一直在大跌。以前我们学院VC是由潘爱民讲的,后来听说微软给强行挖走
了,去微软做网络安全方面的东东了。不过接替潘老师的王亚沙老师也是非常优秀的,
他讲课我最服的是他讲得非常幽默风趣,让你睡意全无:)当然,他讲得确实好啦!
   数字艺术的我就更不懂了,我没什么美感,也不会享受与欣赏艺术,各位数字艺术的
朋友,对不起了。

(看累了吧,休息一会儿,看会儿广告吧)
 

(新增游戏方向介绍,数字艺术的可参考)
将游戏软件人才称为数字媒体软件人才可能更好听些,包括游戏软件策划(最缺游戏策
划的人)、游戏软件美术设计、游戏软件程序设计等多方面的人才,对软件学院,游戏
软件程序设计当然是最合适的了。

游戏软件人才的确目前很缺,听说很多游戏软件公司苦于没新人才补充,特别是没有高
手补充,不得不相互挖人才,以至将游戏软件人才身价越抬越高。网上说日本教育部刚
刚批准成立了日本第一家专门培养四年制游戏软件人才的本科大学。其实国内很多大
学,特别是软件学院都有搞游戏软件人才的设想,但目前很少有做成的,主要原因是找
不到能上游戏软件课的教师,听说有个学校只能花很大的价钱从Korea找老师来上课,果
真缺到此等地步?

已有很多青少年沉湎于网游而颓废的实例,好在还不至于上升到制造精神鸦片的高度,
所以开发游戏软件的人也不必每日惭悔(但开发儿童益智类游戏软件的人是不需惭悔
的),如果想想这是为发展民族软件产业做贡献,那反倒是一件有意义的事情了。不过
听一家游戏软件公司的老板讲,搞游戏软件开发是非常辛苦的。

若想自己创业,搞搞游戏软件是不错的主意。现在网上网站或公司都在收购游戏软件
(特别是手机游戏软件,因为手机游戏用户可选从网站上download到手机上,不像网游
那么复杂),按download次数分成或一次性收购的都有。我们的同学在校期间是否也可
发点小财?搞得好,说不定可卖到国外网站,直接挣$$$呢。

大致游戏分成以下几类:

(1) PC类游戏,包括单机和网游。这类游戏开发平台基本上都是基于VC++和DitrectX
(如DirectShow,DirectDraw,D3D等,DirectX资料可直接到MS网站上查)。DirectX和
OpenGL是两个主要的图形标准,OpenGL跨平台(Unix/Windows上都可跑),尽管很多搞
研究的人对OpenGL赞不绝口,将DirectX骂得一文不值,但事实是,在Windows平台上,
DirectX是最快最方便的,所以在Windows平台上的游戏还是DirectX当家。

(2) 手机游戏:目前手机游戏主要开发平台有两类:
第一类手机游戏是J2ME平台(Java 2 Micro Edition),J2ME本是为嵌入式平台设计的
Java,但由于Java生来就需要Java虚拟机(JVM)来解释,所以在嵌入式产品很少用J2ME
(太慢太耗内存)。但在手机游戏中J2ME倒有用武之地,我想这可能主要是Java可跨OS
平台的原因,因为手机的OS是千奇百怪的。我对J2ME完全外行,但上次听Square Enix公
司的人说,J2ME与我们同学学过的J2EE还是有较大差别的。据我所知,目前手机中用的
较多的是KJava语言,KJava是运行在一种叫K Java Virtual Machine的解释器上(K JVM
是SUN早期为演示J2ME在嵌入式系统应用而开发的一个虚拟机),所以将在K JVM上运行的
J2ME叫KJava。尽管SUN说今后不保证支持K JVM,将开发新的更高性能的J2ME虚拟机取而
代之,但由于KJava出现较早,很多早期的手机游戏软件都将K JVM假想成J2ME虚拟机的
标准了,所以目前有大量的KJava手机游戏软件存在,而且还在用KJava继续开发。特别
是日本的手机游戏软件由于开发较早(像叫什么docomi的日本最大的电信运营商手机游
戏搞得很火),多是基于KJava的。所以目前市场上在招聘手机游戏软件人才时,很多要
求掌握KJava。有关J2ME请到Sun的网站上找资料。
另一类手机游戏是BREW平台,BREW是美国高通公司(Qualcomm,CDMA核心技术都是该公司
开发的,有无数移动通信技术专利)发明的,据说可编译成二进制代码,那当然快了。主
要的开发语言是C/C++。但迫于被指责为较封闭的压力,目前Qualcomm已推出BREW平台上
的J2ME虚拟机(但可想像那将是怎样慢的速度)。Qualcomm搞定了很多手
机制造商签定BREW授权许可协议,最狠的是Qualcomm与中国联通绑在一起大堆基于BREW
的手机游戏,所以有些公司招聘时要求掌握BREW也就不奇怪了。

将来谁会更火,我估计随着手机硬件资源的不断提高,不会在乎一个JVM的开销,J2ME应
更有前途,毕竟它是更开放的。

(3) 专用游戏机:如电视游戏,XBOX等,我不太了解,不过这些游戏也太偏了。
同学可看大宇资讯股份有限公司对网游和手机游戏的人才需求,很有代表性。从中我们
可看出,游戏公司对人才
的需求主要是以下技术:
(1) 计算机图形学,特别是3D编程与算法,包括DirectX或OpenGL。开发平台是
VC++/DIRECTX或KJAVA。
(2) 公司说,手机游戏因手机资源有限,必须对图像进行压缩,所以若有一些图像压
缩算法知识比较好。像若能有MPEG压缩算法较好,手机上采用的是比MPEG压缩得更狠的
一些特殊算法,但触类旁通。
(3) TCP/IP Socket编程是搞网游开发的人必须掌握的。
(4) 人工智能知识:复杂游戏可能需要一些AI算法。
(5) 网络与信息安全知识:网游要防外挂。

有些公司的网游服务器是基于Linux平台的,所以还提出了对游戏服务器端软件工程师的
技术需求(精通MSSQL、ORACLE、MYSQL等数据库,精通Linux Programming,特别是
Socket编程)。还有对维护游戏网站人才需求(ASP .NET和数据库)。详细请同学自己
看服务器。注意一条,最好有自己的游戏软件作品,若你应聘时能带一个DirectX作品,
那将有多强的竞争力,所以最重要的是现在就要行动,实践,实践,再实践。

关于游戏方向,目前,会VC++的人本来就不多(现在很多年轻人都去追时髦的Dot Net来
了,VC++因难学,所以人就少),会DirectX的人就更少了,这正是我们的机会。


       最重要的是什么呢?

   昨晚李明曾经教过大家一个游戏,左右手的游戏,说明一件事情,那就是我们其实并
不一定很了解自己。人生的这些选择应该要先了解自己,然后再去决定。许多人拼命打
听别人选什么方向,选什么课程,别人和你是完全不同的,他们不知道你过去,不知道
你的兴趣,和你完全不同的经历和背景,没有太多可比性。所以不如多花些时间想想自
己到底喜欢什么样的生活,别人不能代替你,不管现在流行什么技术,不管哪个专业学
好了都会很赚钱的,所以没必要去那么急功近利。路遥知马力,日久见人心,重要的是
你做的决定是负责任的,是自己的决定就OK了,别的事情你把握不了。今天有了这样的
理想,就去实践就去追求,也许路上发现错了,也可以改目标的,当然尽可能少改会比
较省时间,但其实也无所谓了,人活着干任何事都不会白干的。你会在这里增长许多知
识和见识,会认识许多大师级的人物,会有许多真心的朋友,会有难忘的回忆。身心健
康,开心生活,有非常好的人际关系难道不比选什么课选什么方向更重要吗?别在匆忙
的现实生活中迷失我们自己的兴趣,我希望你们不要随波逐流,希望你们每个人都活出
真我的风采!
  

 好了,现在选什么,你们自己决定吧,重要的是你们已经来了软院这个大家庭,已经翻
开了人生更美丽的一页,前面的路你只需要自信的走下去就好了。COME ON,LET‘S 
GO!

   大家如果有什么问题,可以提出来,我们一起探讨。我觉得选课选方向要根据自己的
长期打算和短期目标来选择,课都是好课,不管老师教得怎么样,我们已经是研究生
了,不能全指着老师手把手带我们。我也不会告诉你们选什么方向好,选什么课好,因
为我不是你!我不知道你的感受,我负不起这个责任,这个责任是你们自己要承担的,
所以我不可能替你做任何决定。不过,有什么我可以帮你们的我还是会尽力的。

(根据这二天几位慕名而来的新生粉丝的关于以前没计算机背景如何选课的问题,好象是
一个比较有共性的问题.我觉得因为他们刚进入这个领域,可能会有许多东西要学,可能对
他们来说选择真的很困难,但我还是要说,我真的不能为你们做出这个决定,因为各个学科
各门课之间到最后的应用时都会有交叉,你们一定不要图多图快,我说过,不要随波逐流,
不要急功近利,要一点点来,最重要的是其实是你对IT业的理解能力,是一种学习能力,


一种很快接受新技术,适应新环境的能力,这才是你在这一年中最关键的侧重点,哪门课哪
个方向与之相比真的不重要,因为不仅你们没计算机背景的就算有计算机背景的也不可能
把所有的课程都学精学透,这是不可能的.我也只是懂得点皮毛,看上去好象懂不少,其实
我说的这些技术有许多我也只是知道个大概而已,要想达到这种程度真的不难,难就难在
入门.万事开头难,你们现在只需要多积累一些相关知识就好,不懂的就上GOOGLE上去查,
我们这届有许多本科没有计算机背景的,后来实习和工作也都不错的,所以你们要有稳定
的心态,多看书和资料,积累领域和相关技术知识,这是一个成长的过程,不会因为我说哪
个课好,哪个方向好就会给你带来帮助,就像爱的代价一样,人终归要自己去亲身经历成长
才行,学软件开发也一样,你们要积累理论与实践,然后就会成长,就会找到心中的梦,找到
如何实现梦的方法.学习的过程,以及学习过程中得到的能力才是最重要的!!这一点我本
应该早点提醒各位的,但现在提醒也不迟,祝新生在软院的生活是充实、快乐和精彩的!)

   谢谢各位耐心的看完!
 

  
评论: 0 | 发表时间:2006-2-1 | 点击数:399  | 阅读全文  


 JAVA学习之路
摘要:
学不可以已——我一年Java之路的回顾,反思以及展望(转自csdn)
 
点击数:2701    发布日期:2005-9-11 23:03:00   
【评论】【打印】【收藏此页到365Key】

 
Tag: 程序人生 
  

学不可以已——我一年Java之路的回顾,反思以及展望
作者:汪瑜佯    来自:CSDN

大约就是在去年的这个时候吧,Java这个字眼就开始占据了我学习计划中的重要席
位,从那时候那杯冒热气的咖啡一直陪伴我到今天。也不知道当时为什么要学习Java,
又是为什么选择了Java。因为我记得当时的我,心中所想和现在可谓是大相径庭!那时
我曾天真的想着,我将来学管理,你们这些学计算机的人出来也难逃给管理界人士做下
属的命运,现在想来,那时是多么的无知和幼稚,我怕现在的很多大学生,更确切的说
很多像我们专业――信息管理与信息系统的同学都还抱着这样的想法(当然也不排除很
多立志学习金融以及管理的同学^_^)!
其实在蔡学镛先生的Sleepless in Java中也就说过,他在上大学的时候,有两类同
学错误的认识,第一种就是瞧不起基础课,觉得学的什么Data Structure,Operating 
System,Database Concepts没用,以为会VC,VB,SQL Server的就真的能成为众人羡慕
的IT白领了;第二种也就是我刚才所说自己犯的错误,真以为那些写程序的人将来入了
社会会被那些学管理的人踩在脚下!第一种是短视进利,第二种呢就是好高骛远!在犯
了第二种错误后,值得庆幸的是,我对第一种错误总是避而远之!
记得我在网上搜索了很多资料,最后终于锁定两本书作为我的入门教材的入选书
籍,一本是《Core Java》,另一本就是《Thinking in Java》了。但是因为当时网上说
《TIJ》中文版翻译的不尽如人意,于是我就选择了《Core Java》,现在真觉得当时选
择是对的,就我那会的基础根本看不懂TIJ,而《Core Java》是属于教科书风格的书,
于当时的我比较适合。随着我翻开《Core Java》的第一页,我就正式踏上了Java之路!
当初我在刚学习Java的时候,我无论对Java还是程序设计都是不折不扣的门外汉,
我看《Core Java》第一章的时候完全是如履薄冰,一大堆技术名词搞得我晕头转向的,
什么分布式,多线程,GC…,虽然现在看来是非常自然而顺畅的,但在当时可以说是我
前面的一座高山,其实,那些技术名词根本不用看,慢慢的学,学的那儿自然就不言而
喻了!现在看CSDN上初学者恨不得一开始就把所有的名词全部搞懂,从J2EE,J2ME,
EJB,JMS,CORBA,JXTA…..就我觉得,这些都是图增烦恼,而且根本对真正的初学者即
使你知道你也无法理解。紧接着,喜马拉雅到了,设置环境变量,classpath的设置是我
当时最感郁闷的东西,相信现在的初学者对于此道还是一样的,确实还是Microsoft的东
西比较好用^_^,门槛很低,不至于吓退初学者!你要知道,一个没有path概念也没有
UNIX背景的初学者要设置以及弄明白为什么这么设置真不是一件容易的事,而且主要是
书上说的很模糊,而且当初我学习的时候环境并不好,因为我周围的同学并没有学习
Java的,我无处可问,惨啊……!我虽注册了一个CSDN的帐号,可是很少上论坛,现在想
来,如果当时能够好好利用CSDN的资源,也不用走这么多弯路了!也不知道当时在什么
地方找到这个配置方法,终于解了我的燃眉之急。随后又听说JCreator是比较好用的
IDE,下载了一个2.5版的,用了过后发现果然不错,至少不用每次都用console来编译运
行,翻过这个classpath这个拦路虎过后,此后的平原就比较开阔了,但当时只是感觉上
好像自己学习的比较轻松,其实有很多东西没有学扎实,以为自己懂了!打个比方吧,
我直到快学完《Core Java》第一本书的时候我才在《Java in a nutshell》上面知道什
么是class method,什么是instance method!
因为我没有什么C++基础也更谈不上什么Lisp,Smalltalk背景,所以《CoreJava》
的tips或者要求C++程序员注意的一些pitfalls,我都跳过没读,不过就我现在的C++水
平来看那本书,如果利用这些annotate对于一个从CPP转到Java阵营的Programmer来说是
非常有帮助的。
2003年的寒假《Core Java》的第一本就伴随我度过了一个懵懂的春节,当然这段时
间《程序员合订本》对我的帮助是很大的,不仅在技术上教会了我许多东西而且也使我
得知识面拓宽了不少!在寒假的时候我在网上固定的生活方式就形成,每天一打开
Browser,首先打开CSDN然后打开Sina,CSDN的论坛也成了我经常光顾的地方,当时看着
CSDN Java板块的那些牛人红星闪烁的,觉得特别羡慕!于是我也开始回答问题以挣取专
家分,不过就那会我的知识实在太过匮乏,混了整整一个寒假,也就到了三个裤衩^_^,
不过也在CSDN学到了很多东西!那段时间虽然进步不大,不过却是很值得怀念的!在假
期中我还学过一点的JSP/Servlet,不过,没有深入的学习,而且对web application的
理解也很浮浅,所以学了等于没学!给我印象最深的就是Tomcat运行Servlet的配置了,
那个其实就很简单的web.xml文件,真不明白当时怎么搞了差不多一天才出来,急的在
CSDN上面连连发帖子问…
看完《程序员合订本》,我基本对Java领域的好书有了一些了解,随后我知道了
china-pub,知道以后买书之前要上那儿去转转,看看书评。再回学校之前,我列出了要
买的一些书的清单,费用差不多到500RMB了。从家里一回学校,那500元也就众望所归的
换成了N斤的质量良莠不齐的纸张了,这些纸张还真不能对等成知识!我记得那次书籍大
采购中有用的书就只有这几本《Java in a nutshell》,《Effective Java》,
《Thinking in Java》(E),《Java与模式》(在我看《Design Pattern》以
前:)),《A breif introdution to Data Structure and Algorithm Java 
Edition》,《Core Java:VolumnII:Advanced Feature》!其他的么,唉,可惜
啊……
随着大三上学期的开始,也就开始了DS的学习,我使用的教材就是上面提到的那本
书,对基础数据结构和算法的学习让我也慢慢重新开始认识程序设计认识Java,我记得
梦魇先生在合订本中给《The STL Annotated Source》写推荐的时候说过:作为一个程
序员,如果你是做数据库编程的,大可以不懂汇编语言,如果你是写驱动程序的,大可
以不必通晓人工智能,写编译器的可以不用懂什么计算机图形学,操作系统内核高手的
不用精通网站架设,然而,如果你不懂数据结构与算法的基础知识,不具备数据结构与
算法的基本技能,那就完全丧失称为一个程序员的资格!这就足以说明DS的重要性!
(DS真的很重要,林斌在《如何编写优秀的程序》讲座中也特别强调,安安注)
看着CSDN上面蔡学镛老师的专栏,也在一期一期的程序员中看着他的文章,特别是
有一篇叫做《我所知到的O’Reilly》,慢慢我对O’Reilly的书籍的感情与日俱增,O’
Reilly的网站也成了我经常出没的地方了,那段时间我买了不少O’Reilly的书,因为
O’Reilly俱乐部有会员的活动,好像是积分多少可以免费送一本50或者60以下的书,主
要是这几个价格是O’Reilly的中文本比较喜欢订的价格,49,59,69,75,85….当时
我好像一共买了6本,关于Java方面我觉得比较好的就是一本同样是David Flanagan写的
《Java Example in a NutShell》,另一本就是《Java Cookbook》!随后有资格获得一
本60元以下的书籍,后来我千调万选选了一本《DNS与BIND》(3E)(其实我拿这些书根
本就没用:)) 59元,O’Reilly的工作人员非常热心,首先告诉我则本书已经出到第
四版了,但我告诉他我赠书的上限只能到60而则本书要69的时候,他告诉我一样可以赠
给我,当时可把我感动死了!^_^随着我看的O’Reilly的书籍不断增多,我看O’Reilly
的书也形成了一个独特的看法,没拿着一本O’Reilly的书籍,我一般是看封底的介绍,
介绍则本书的内容以及一些权威人士对这本书的评价,大家都知道,O’Reilly的书籍封
面都是一只动物, Java系列的代言人是Tiger,而且Java系列的书都是紫色的!随后我
会翻到最后几页看封面的动物是什么,然后看作者的介绍,最后才开始进入正文!那段
时间也就形成了一种特殊的O’Reilly情节!
大家都知道,O’Reilly的In a nutshell series一向是品质的代名词,刚开始看的
时候我实在困惑为什么O’Reilly要用XXX in a Nutshell命名,后来有一个躺床上午休
的时候突然想起以前高中的时候看过Steven Hawkings的一本书叫做《Universe in a 
nutshell》(果壳中的宇宙),就连Universe都in a Nutshell更何况其他东西呢,所以
技术手册包涵范围之广,知识之全,可以说是可见一斑!
上半年刚开学的时候,我就以为自己对于《Core Java:VolumnI》已经理解透彻
了,然后就开始看VolumnII了,而且在同时还在看《Thinking in Java》(E)为了进一
步巩固基础,不过在此之前我大致看了一下《Java in a NutShell》,也从前面的介绍
中学到了很多我漏网的知识,就像上面所说的class method和instance method,还有对
Java这个paltform也有了一些理解。不过开始读VolumnII的时候,第一章就把我绊倒
了,线程?什么东西,因为当时没有学习OS,所以要理解线程的概念以及理解线程同步
太过困难了,而且其中夹杂了一些AWT和Swing的一些应用,因为我在学习VolumnI的时候
对于GUI就不太重视,觉得GUI既浪费时间而且也学不到太多东西,而且还比较麻烦,对
于GUI的观点我一直持续到现在,唯一不同的只是现在认为Java的Swing是学习Design 
Pattern的很好的例子!
慢慢在学习VolumnII过程中,我愈发的感觉到基础的薄弱,于是我又拿起VolumnI,
复习了一遍,发现又有新的收获,我学习就这样,我只要学习偶有所得便喜不自禁的
^_^,如今我同样不定期的复习以前看过的书籍,以寻求新的收获。同时我也开始了
《Thinking in Java》的学习,我以为,我已经看过《Core Java》的VolumnI了,按道
理读《TIJ》应该是轻车熟路,应该没什么问题,但当我开始翻开第一章开始看的时候,
又给了我当头一棒,看不懂,特别是后面那些关于Software Engineering的东西,不过
到现在我还不怎么了解后面的东西:)
所以我觉得初学者读这本书的时候第一章根本就应该跳过,不然就是给自己找罪
受,我依然记得看不懂书那郁闷的心情,不仅这个心情影响你其他的学习,还打击你学
习Java的积极性!而且由于我看的是E文的,有些意思还是把握的不太准确,所以我就借
了一本同学的中文版的《TIJ》,(他是在我的鼓动下买的这本书:)),而我那本E文
的也就没怎么看了!这本书就是候捷老师翻译的了,说着候老师翻译的书籍,我又不得不
发一些牢骚了,现在我看技术书籍,慢慢的就习惯了网上所谓的候捷风格,不过这种风
格我甚是喜欢。
第一,字体排版都让人看着很舒服,而且行与行之间的间隔,还有正文与书边的间
隔都是恰到好处,很多书排版的满满的,看似节约纸张,但是给学习带来了很大的不
便,“为智者所不取”^_^,比如我现在正在看的那本《Inside JVM》的间距就非常小,
写个旁批都写不下。第二,就是翻译了,翻译的学问就大了,国内很多的技术书籍都翻
译的还是中规中具的,并没有从语言上润什么色,这种书即使内容很吸引你,但是不算
是你能够品味的好书,对于这种书,你只有从原著中找到乐趣拉!比如前段时间我看的
那本《Mastering EJB》的中文版….,候老师的书的语言功底我是非常认可的。然后就
是翻译到个什么度最好,又很多技术书的译者恨不得把每一个词都翻译的滴水不漏,我
个人认为是过犹不及,保留原有的技术名词无论对你以后阅读英文书刊,阅读
Specification,还是理解原书的意思都是非常有帮助的!我认为就应该像候老师的书中
所保留的那些比如stack,heap,interface,polymorphism,inheritance,
reference,primitive这些东西一看你就知道是什么东西,大脑中也就不需要进行第二
次的转换,无疑使你接受信息的速度变快了!这种例子在国内的翻译书籍中很普遍,比
如在我年底开始学习C++所买的第一本书《The C++ Programming Language》这本书是北
大的裘宗燕老师翻译的,当然这本书翻译的是没有什么问题的,不过正如我前面所说
的,这本书翻译的过多了,比如刚开始我看到界面这个词,我一愣,随后才反应过来,
原来说得是interface,再比如后面我看到在线函数,我又是一阵迷惑后才知道原来说得
就是inline function!在《Inside JVM》中也是如此,第一次看到内嵌函数,直到后面
解释才知道还是刚才说得那个冬冬!
关于书的牢骚发完了,又回到TIJ吧,从第二章开始学习的TIJ教会了我很多东西,
特别是第四章的Initialization and Clean up,补了很多我在学习《Core Java》中留
下的漏洞!所以说这本书是Java领域的一本圣经级的著作一点都不过分!这一学期伴随
着SARS,伴随着《TIJ》,《Core Java》,《A breif introdution to Data 
Structure and Algorithm Java Edition》,我的大三上学期就度过了,其实上学期主
要就是加深J2SE基础的学习,而且主要的精力放在DS上面,当然还伴随的一期一期的
《Programmer》:),其实在其中我还穿插着一些JSP的学习,我选的当然也是O’
Reilly的《Java Server Pages》,其实这本书有些年代久远了,不过讲原理性的东西还
是不错,但是我还是觉得当时用这本书根本没有学到些什么东西。因为无论要学习JSP还
是了解初步的J2EE构架,还是得把J2SE牢固,把io,net,util弄的非常熟悉,然后再
Servlet,JSP的一步一步的学上去!
在放暑假之前,我又去买了好几本书,《Java Network Programming》(看过
Bruce Eckel的推荐过后^_^),《Java Servlet》,《Java夜未眠》还有《Borland传
奇》随后把这个暑假的学习定了一个计划:继续学习《Core Java》VolumnII,学习
《Java Network Programming》,《Java Servlet》,《Java CookBook》以及再次复习
《Thinking in Java》(E)。学习《Core Java》VolumnII是为了学习一些高级应用,
不过这本书的学习再次止步于高级AWT和高级Swing那儿,我对GUI的确没什么兴趣。学习
《Java Network Programming》是为了学习Java中最为重点的网络编程,并且为J2EE打
基础,学习《Java Servlet》就更不用说了,也是为了跨向J2EE平台做准备;学习
《Java Cookbook》的目的很简单,就多看实例,知道处理一些常见问题的方法;复习
《TIJ》就是为了进一步的巩固基础!经过那个学期我就形成了一种观点,基础永远是最
重要的,只要把基础学习扎实了,什么东西很快就能学会,触类旁通!所以花更多时间
在学习高级的一些应用上面还不如花在基础上面更划算呢!你见过程序设计都没有学好
的同学想通过学习《人月神话》,《Peopleware》这些书来达到高手的境界的么?还有
些同学光关注程序语言的学习,关注practical的学习,对其中本质的东西确不闻不问!
在这里我又想引用候老师的一段话,个中味道自己去品位吧:程式语言是程式员最基础
的功夫,必须熟练它掌握它。但若只是如此,编写不出好程式、大程式、专业程式。大
家都会说中文,独独有人旁徵博引,左右逢源,字字珠玑,文思隽永,这是为什麽?功
夫在语言之外!
语言是首要条件,但不是决胜条件。功夫在语言之外,决胜在语言之外!
在暑假的学习中情况也是像我以前计划的那样发展,首先看的一本书就是《Java 
Network Programming》,Bruce确实推荐了一本好书,这本书循序渐进并且讲的非常的
透彻,学完这本书然后再学习新的net的API以及NIO是非常轻松的,这本书我花了10天看
完了,自我感觉好极了^_^。与此同时也每天练习《Java Cookbook》中的代码,这个假
期我把那本书的代码全部亲自实践了一遍,正因为如此就积累了很多解决实际问题的办
法,所以把这本书叫做Encyclopedia一点都不过分!顺利的学习完《JNP》以后我开始了
《Java Servlet》的学习,因为一直以来Java的基础比较扎实而且在上半学期对web 
application也逐步了解了很多东西,所以学起来是非常轻松的,当时我用的工具是
Jbuilder9,省得用Editplus + Tomcat每次写完一个Servlet还要再改xml文件。提到
JBuilder,我又想起当初死活不知道怎么破解的时候了,好不容易能使用JB了又不知道
怎么弄,Java的那些IDE对于那些初学者来说确实亲和力不如VS系列,但是只要你入了门
槛,那么那些工具就让你如虎添翼了!不过JB的庞大以及启动之缓慢确实让很多人敬而
远之,虽然它的功能强大,特别是配合Together以及Optimizeit外加配合一张英俊的
Blake Stone的照片^_^,不过我倒是更喜欢用Eclipse或者Idea!
不过暑假中收到一封来自O’Reilly的E-mail倒是影响了我后一个月的学习,那是
O’Reilly给会员优惠的购书活动,其中很多书都是2折起的,就在那个假期我又一口气
购了十多本书,内容覆盖XML,UML,Java,网络,不过只花费了200多RMB,相当于每本
书就20多RMB,这在IT图书界而且还是O’Reilly这样有图书质量保证的世界一流出版社
是非常罕见的!不过因为买的书实在太多了,我在暑假也看不完,所以在假期的后半段
我只读了这几本书,《JDBC与Java数据库编程》,《Java Threads》以及《Enterprise 
JavaBean》的前2章(因为不太懂,刚踏入EJB的时候又如同步入森林了一样),再加上
学习的《Core Java》(VolumnII),《TIJ》,那个假期我不敢说我有很大的进步,只
是我觉得熟练度增加了,基础知识也算比较牢固了!
(附:其实当初买的那些书,除了上述三本其他都没看,害我后来没办法只有再低
价出手。经过这一堑,我明白了,对于计算机图书,它不是《四书五经》可以拿来收
藏,可以传给后世(当然也不排除有乐于此道的同学),要买书只能买最近要看的书,
买来一本就就要订一个这本书的学习计划,至于于你没用的书,正如我当初买的DNS的,
网络的,即使很经典,很便宜就算是白送于你,也没有两卷卫生纸来得实在^_^)
说到上个暑假,还有不得不提的事就是沉迷于CSDN的论坛中。早在暑假回家之前,
除了那些学习计划,我还有一个目标就是一定要在CSDN的Java板块变成一个红星,因为
那个时候我觉得红星就是技术水平高的代名词(一般初学者才有这个想法^_^),所以那
个假期在CSDN回答问题可以用一个疯狂来形容,当时基本上事每一个帖子都有我得足
迹,每天泡CSDN就5,6小时,分数确实是扶摇直上,但是我很清楚,能力并没有向专家
分一样涨的那样的飙升!很快,不到一个月的时间,5000分就够了,看着自己名字后面
的红星,可以说是喜不自胜^_^,心想Java我也算入门了!当时有感于Java基础板块的入
门和基础问题在不同的时期要被不同的人重复提出N次,而且想起我入门的艰难,我就写
了一篇初学者入门的帖子,列出了初学者提问频率最高的4个问题(至少当初我在前3个
问题上面都栽过跟头)。1:环境变量 2:Servlet的配置 3:Java连接数据库 4:书籍
推荐!后来时常看见自己的文章想,我当时要有这样一篇文章,也不至于……
回到学校,慢慢的,对CSDN论坛的热情也就淡了,不过每天打开浏览器第一个上的
还是CSDN,可能这已经在我得生活里面成为定式了。就像我说,其实我每天上网也上不
了多久,也就收收邮件,看看新闻,上上论坛。但是要一天不上网就觉得特别别扭,这
已经固化为一种生活方式了!
如果说在升第二颗星之前我还有些许动力泡论坛,这点动力随着Converse旁边多了
一颗星后就基本消失了,而且因为平时学习实在太忙了,所以每次即使上论坛也只是上
会非技术版!更多上CSDN还是去看文档中心,因为每隔不久,就会有些非常好的文章可
以学习。除此之外,另一个宝库就是IBM开发者网站了!
在下半学期我给自己树立了两个目标:第一就是进军J2EE阵营,其中首先准备攻克
EJB,当然首选教材便是O’Reilly的那本《Enterprise JavaBean》,不过这本书委实太
老了,书中讲的都是EJB1.0和EJB1.1。
EJB的实践环境要比一般的J2SE的程序配置高多了,我当时用的Weblogic8.1 + 
Jbuilder9 + SQLServer, 用JB开发EJB是非常方便,自己只需要添加很少部分的代码就
行了!不过因为这样的配置造成机器的速度比较慢,所以我在学习EJB的时候并没有写多
少例程序,主要集中在原理的学习!
另外一个目标就是设计模式的学习以及应用,希望能够脱离语言的层面,说这话只
能是贻笑大方,因为脱离语言层面谈何容易,我得实践经验太少,光靠理论以及玩具级
代码的练习要达到这个目标简直就是痴人说梦!不过9月份我确实开始了对模式的学习,
选的书正是网上评价很好的《Java与模式》,不过这本书我只看了很少的部分,原因有
二,第一这本枕头一样的书籍不便携带,也不便翻阅;第二,书中简单的代码占了大部
分的篇幅,而且感觉有点累赘,或许因为我对东方文化孤陋,所以阎博士举的一些例
子,反倒使我迷惑了!
但是9月份我却看到了另一本好书,《Effective Java》,Bloch不愧为Java社区中
声誉极高的一个人物,这本书第一遍看的时候我就已经觉得就Joshua在这一条一条的建
议中,就把Java编程的精髓透于纸上,这本书于我得震撼超过当初看TIJ的感觉,也可能
是因为当时看TIJ的时候没理解其精华,也可能那些东西接触多了就没什么新鲜感,认为
是理所当然的。正如我后来学习CPP的时候,见书上描述神奇的Polymorphism的时候没什
么感觉一样!这本书在已过的这个学期完整的读过3遍,而且平时一有闲暇时间又在读这
本书,感觉每一遍都有新的收获!
其实刚过去的这个学期在Java上我花的时间很少,写程序代码的时间就更少了,写
的程序主要还是Java选修课和操作系统的作业^_^,因为我总感觉敲代码太费时间,实践
所学到的东西根本不比我看书所学到的东西,当然我知道这是错误的,可是心里就有这
种倾向!其实,蔡学镛的夜未眠中有这种境界,就是实践所能学到的确实不比看书所获
取的知识多,我虽没达到却有这种错觉,可笑……
可能因为《Effective Java》给我的感觉太好了,我又买了两本主题差不多的书,
一本是《Practical Java》,另一本是《Java Pitfalls》,前者深度上不及《EJ》,后
者又涉及太多GUI的东西了,不过,总的来说,这两本书也让我学到了不少的东西!我坚
信,多看点书始终对自己是有好处的^_^
《Mastering EJB》是我上个学期读的最后一本关于Java的书籍,我是把这本书的中
文版和英文文档concurrently读的,不过也辄止到高级主题那章,因为慢慢的,我就暂
时不准备向J2EE发展了,因为这些我都把他们叫做应用型的,如果你不出来实践那就没
什么作用,所以我只是了解一些EJB原理性的东西,开发部署也就不用了解的那么仔细。
所以后半期的Java学习还是把重心放在了J2SE上面。进入11月份,除了不时上技术网站
看一些关于Java的帖子,从《程序员》,《开发高手》上面看一些文章,还有没事复习
《EJ》,就没怎么拿着正式的书籍读过了!主要是因为我把精力全部放在了C++/STL上面
了^_^
第一次,在10月份我参加了Java年会,而且这一次真幸运,遇到James Gosling首次
访华,更为幸运的是,在James的见面交流会上面,能够和这位Java之父合影,而且那天
还幸运的得到了一套Sun赠送的StarSuite!
参加Java年会后,我在11月份又参加了Bea的Dev2Dev开发者大会,反正我觉得就是
大会是了解一些概念,要真正学到东西不太可能,那只是拓宽视野的地方,一句话,就
是长见识!
反思这一年走过的路,也就是品味学习的酸甜苦辣,我觉得唯一值得称道的就是自
己是一步一步坚持走过来,没有放弃!
至于短期内的目标就是学习深入了解JVM,而对于未来的展望,我个人不太喜欢憧憬
未来,因为我觉得立足脚下会让我感到充实!

下面几条就是我的反思或者说自己在学习中形成的一些想法,与诸君共勉,希望大
家能够提一些学习上面的建议以及纠正我得错误观点:

1.书读百遍,其义自现
我看书就是这样,看书看不懂很正常,技术书籍不是武侠书籍,看不懂没什么好奇
怪的!我遇到看不懂的地方,就不会在那儿阻塞太久,实在看不懂我就咕噜吞下去,等
到看完这一章或者这一节再回过头来学习,反复的读!我的学习就是一个往返的曲线,
不时的会把前面所学过的复习一遍!我觉得就是读过好几遍的书,就像我现在再读
《Thinking in Java》,每次都有新的收获,虽然收获一次比一次小吧,但是却不是可
以抹杀的!这可能就是所谓的温故而知新吧!

2.勿在浮沙筑高台
这里引用了候老师在《深入浅出MFC》中的一句话,其实贯穿这篇文章我无时无刻不
在强调基础的重要性,而且平时这个观念也是deeply rooted in my mind

3.天下大事,必作于细
又引用了候老师的话,学习技术就是要从细处下功夫!看一本书要理解透彻,其实
也要分什么书籍了,原理性的书籍那是来不得半点马虎,至于很多应用类书籍,实例类
书籍,看过知道在哪儿找就行了!

4.业精于勤荒于嬉,行成于思毁于随
这和本文的题目所要表达的思想是一样的,学习没有捷径,只有刻苦努力不要放弃
才能成功!不管前面的路如何,自己只要坚持走,等登上顶峰了,回头一看,自己走过
的路就是成功路!不论多聪明,或者有些许的愚顿,都请记住“骐骥一跃,不能十步;
驽马十驾,功在不舍”。

5.不积跬步,无以至千里;不积小流,无以成江海
要达到高手的境界,非一朝一日之功,平时要多看,多积累,博闻强识,厚积而薄
发才是正道!很多积累就在每天那么几分钟,半小时中。很多同学,我以前也是这样,
比如看电影看了一晚上,以前我就想反正都浪费了几个小时了,也就不去自习了,剩下
的时间也就再上上网听听音乐什么的就过了!现在就是还剩10分钟我也要去自习室(不
过这有一个前提条件,^_^,偶们学校小,宿舍到图书馆很近),因为这几分钟浪费也是
浪费了,为何不用这几分钟看看书呢?多看书总是有帮助的!

6.武学之道贵在精而不在多
《天龙八步》中的一句话,其实都是一个道理,打个比方说,鸠摩智对于武学所学
甚博,结果和乔峰比呢,乔峰就一个降龙十八掌,可以练到天下无敌!有些同学,今天
想学Java,明天想学C++,过了几天又想学习C#,不过到头来还是竹篮打水!其实只要有
一样你学精通了(要能称的上是精通,弹何容易啊!),其他的很快就能触类旁通了!

7.闻道有先后,术业有专攻
技术上强人太多了,不过不要妄自菲薄。很多同学,包括我自己在学习过程中都有
这种妄自菲薄的感觉,真强啊,我怎么什么都不会!其实没关系,慢慢来,对自己说,
汝所到之处,吾亦可至!!

8.天行健,君子以自强不息;地势坤,君子以厚德载物(清华的校训,安安注)
一句话,一条鞭子,鞭策自己前进!

PS:很久以来就想写这样一篇文章,总结自己一年以来的学习,好好看看一年自己走
过的道路,也算是封存自己03年的记忆好让以后有所回忆!虽然元旦过后就开始写,但
其中写写停停直到今天才把这篇文章完成,如释重负!我个人不善于写作,所以所谓文
章也只是心中想到什么也就附之纸上,可能错字别字误用的成语不在少数,之所以发到
CSDN也是为了那句话:发表是最好的记忆!
 

  
评论: 11 | 发表时间:2006-1-31 | 点击数:1356  | 阅读全文  


 计算机科学与技术学习心得(转) 
摘要:
乱七八糟] 有些话得打些折扣再听~~~~    计算机科学与技术这一门科学深深的吸引着
我们这些同学们,上计算机系已经有近  
三年了,自己也做了一些思考,我一直认为计算机科学与技术这门专业,在本科阶段是
不  
可能切分成计算机科学和计算机技术的,因为计算机科学需要相当多的实践,而实践
需  
要技术;每一个人(包括非计算机专业),掌握简单的计算机技术都很容易(包括程序
设  
计),但计算机专业的优势就在于,我们掌握许多其他专业并不"深究"的东西,例  
如,算法,体系结构,等等。非计算机专业的人可以很容易地做一个芯片,写一段程  
序,但他们做不出计算机专业能够做出来的大型系统。今天我想专门谈一谈计算机科  
学,并将重点放在计算理论上。   
    
计算机理论的一个核心问题——从数学谈起:   
    记得当年大一入学,每周六课时高等数学,天天作业不断(那时是六日工作制)。
颇  
有些同学惊呼走错了门:咱们这到底念的是什么系?不错,你没走错门,这就是计算机
科  
学与技术系。我国计算机科学系里的传统是培养做学术研究,尤其是理论研究的人
(方  
向不见得有问题,但是做得不是那么尽如人意)。而计算机的理论研究,说到底了,
如  
网络安全,图形图像学,视频音频处理,哪个方向都与数学有着很大的关系,虽然也
许  
是正统数学家眼里非主流的数学。这里我还想阐明我的一个观点:我们都知道,数学
是  
从实际生活当中抽象出来的理论,人们之所以要将实际抽象成理论,目的就在于想用
抽  
象出来的理论去更好的指导实践,有些数学研究工作者喜欢用一些现存的理论知识去
推  
导若干条推论,殊不知其一:问题考虑不全很可能是个错误的推论,其二:他的推论
在  
现实生活中找不到原型,不能指导实践。严格的说,我并不是一个理想主义者,政治
课  
上学的理论联系实际一直是指导我学习科学文化知识的航标(至少我认为搞计算机科
学  
与技术的应当本着这个方向)。   
      
        其实我们计算机系学数学光学高等数学是不够的(典型的工科院校一般都开
的  
是高等数学),我们应该像数学系一样学一下数学分析(清华计算机系开的好像就是
数  
学分析),数学分析这门科学,咱们学计算机的人对它有很复杂的感情。在于它是偏
向  
于证明型的数学课程,这对我们培养良好的分析能力极有帮助。我的软件工程学导师
北  
工大数理学院的王仪华先生就曾经教导过我们,数学系的学生到软件企业中大多作软
件  
设计与分析工作,而计算机系的学生做程序员的居多,原因就在于数学系的学生分析
推  
理能力,从所受训练的角度上要远远在我们之上。当年出现墓窒窒笫牵杭扑慊笛?  
的高中数学基础在全校数一数二(希望没有冒犯其它系的同学),教学课时数也仅次于
数  
学系,但学完之后的效果却不尽如人意。难道都是学生不努力吗,我看未见得,方向
错  
了也说不一定,其中原因何在,发人深思。   

我个人的浅见是:计算机系的学生,对数学的要求固然跟数学系不同,跟物理类差别
则  
更大。通常非数学专业的所谓"高等数学",无非是把数学分析中较困难的理论部分删  
去,强调套用公式计算而已。而对计算机系来说,数学分析里用处最大的恰恰是被删
去  
的理论部分。说得难听一点,对计算机系学生而言,追求算来算去的所谓"工程数学"  
已经彻底地走进了误区。记上一堆曲面积分的公式,难道就能算懂了数学?那倒不如
现  
用现查,何必费事记呢?再不然直接用Mathematics或是Matalab好了。   
    我在系里最爱做的事情就是给学弟学妹们推荐参考书。中文的数学分析书,一般
都  
认为以北大张筑生老师的"数学分析新讲"为最好。万一你的数学实在太好,那就去看  
菲赫金哥尔茨的"微积分学教程"好了--但我认为没什么必要,毕竟你不想转到数学系  
去。吉米奇的"数学分析习题集"也基本上是计算型的东东。书的名气很大,倒不  
见得适合我们,还是那句话,重要的是数学思想的建立,生活在信息社会里我们求的
是  
高效,计算这玩意还是留给计算机吧。不过现在多用的似乎是复旦大学的《数学分
析》  
也是很好的教材。   

中国的所谓高等代数,就等于线性代数加上一点多项式理论。我以为这有好的一面,
因  
为可以让学生较早感觉到代数是一种结构,而非一堆矩阵翻来覆去。这里不得不提南
京  
大学林成森,盛松柏两位老师编的"高等代数",感觉相当舒服。此书相当全面地包含  
了关于多项式和线性代数的基本初等结果,同时还提供了一些有用的又比较深刻的内  
容,如Sturm序列,Shermon-Morrison公式,广义逆矩阵等等。可以说,作为本科生如
能  
吃透此书,就可以算高手。国内较好的高等代数教材还有清华计算机系用的那本,清
华  
出版社出版,书店里多多,一看就知道。从抽象代数的观点来看,高等代数里的结果
不  
过是代数系统性质的一些例子而已。莫宗坚先生的《代数学》里,对此进行了深刻的
讨  
论。然而莫先生的书实在深得很,作为本科生恐怕难以接受,不妨等到自己以后成熟
了  
一些再读。   
      
正如上面所论述的,计算机系的学生学习高等数学:知其然更要知其所以然。你学习
的  
目的应该是:将抽象的理论再应用于实践,不但要掌握题目的解题方法,更要掌握解
题  
思想,对于定理的学习:不是简单的应用,而是掌握证明过程即掌握定理的由来,训
练  
自己的推理能力。只有这样才达到了学习这门科学的目的,同时也缩小了我们与数学
系  
的同学之间思维上的差距。   
      
概率论与数理统计这门课很重要,可惜大多数院校讲授这门课都会少些东西。少了的
东  
西现在看至少有随机过程。到毕业还没有听说过Markov过程,此乃计算机系学生的耻  
辱。没有随机过程,你怎么分析网络和分布式系统?怎么设计随机化算法和协议?据
说  
清华计算机系开有"随机数学",早就是必修课。另外,离散概率论对计算机系学生来  
说有特殊的重要性。而我们国家工程数学讲的都是连续概率。现在,美国已经有些学
校  
开设了单纯的"离散概率论"课程,干脆把连续概率删去,把离散概率讲深些。我们不  
一定要这么做,但应该更加强调离散概率是没有疑问的。这个工作我看还是尽早的做
为  
好。   
      
计算方法学(有些学校也称为数学分析学)是最后一门由数理学院给我们开的课。一
般  
学生对这门课的重视程度有限,以为没什么用。不就是照套公式嘛!其实,做图形图
像  
可离不开它,密码学搞深了也离不开它。而且,在很多科学工程中的应用计算,都以
数  
值的为主。这门课有两个极端的:一个是古典的"数值分析",完全讲数学原理和  
算法;另一个是现在日趋流行的"科学与工程计算",干脆教学生用软件包编程。我个  
人认为,计算机系的学生一定要认识清楚我们计算机系的学生为什么要学这门课,我
是  
很偏向于学好理论后用计算机实现的,最好使用C语言或C++编程实现。向这个方向努
力  
的书籍还是挺多的,这里推荐大家高等教育出版社(CHEP)和施普林格出版社  
(Springer)联合出版的《计算方法(Computational Methods)》,华中理工大学数学
系  
写的(现华中科技大学),这方面华科大做的工作在国内应算是比较多的,而个人认
为  
以这本最好,至少程序设计方面涉及了:任意数学函数的求值,方程求根,线性方程
组  
求解,插值方法,数值积分,场微分方程数值求解。李庆扬的那本则理论性过强,与
实  
际应用结合得不太紧。   

每个学校本系里都会开一门离散数学,涉及集合论,图论,和抽象代数,数理逻辑。
不  
过,这么多内容挤在离散数学一门课里,是否时间太紧了点?另外,计算机系学生不
懂  
组合和数论,也是巨大的缺陷。要做理论,不懂组合或者数论吃亏可就太大了。从理
想  
的状态来看,最好分开六门课:集合,逻辑,图论,组合,代数,数论。这个当然不现  
实,因为没那么多课时。也许将来可以开三门课:集合与逻辑,图论与组合,代数与
数  
论。(这方面我们学校已经着手开始做了)不管课怎么开,学生总一样要学。下面分
别  
谈谈上面的三组内容。   
古典集合论,北师大出过一本《基础集合论》不错。 数理逻辑,中科院软件所陆钟万
教  
授的《面向计算机科学的数理逻辑》就不错。现在可以找到陆钟万教授的讲课录像,  
http://www.cas.ac.cn/html/Dir/2001/11/06/3391.htm自己去看看吧。总的来说,学
集 
合/逻辑起手不难,普通高中生都能看懂。但越往后越感觉深不可测。   
     
学完以上各书之后,如果你还有精力兴趣进一步深究,那么可以试一下GTM系列中的  
《Introduction to Axiomatic Set Theory》和《A Course of Mathematical   
Logic》。这两本都有世界图书出版社的引进版。你如果能搞定这两本,可以说在逻辑
方  
面真正入了门,也就不用再浪费时间听我瞎侃了。   
      
据说全中国最多只有三十个人懂图论。此言不虚。图论这东东,技巧性太强,几乎每
个  
问题都有一个独特的方法,让人头痛。不过这也正是它魅力所在:只要你有创造性,
它  
就能给你成就感。我的导师说,图论里面随便揪一块东西就可以写篇论文。大家可以
体  
会里面内容之深广了吧!国内的图论书中,王树禾老师的"图论及其算法"非常成功。  
一方面,其内容在国内教材里算非常全面的。另一方面,其对算法的强调非常适合计
算  
机系(本来就是科大计算机系教材)。有了这本书为主,再参考几本翻译的,如Bondy 
&   
Murty的《图论及其应用》,人民邮电出版社翻译的《图论和电路网络》等等,就马马
虎  
虎,对本科生足够了。再进一步,世界图书引进有GTM系列的"Modern Graph 
Theory"。  
此书确实经典!国内好象还有一家出版了个翻译版。不过,学到这个层次,还是读原
版  
好。搞定这本书,也标志着图论入了门。   
      
离散数学方面我们北京工业大学实验学院有个世界级的专家,叫邵学才,复旦大学概
率  
论毕业的,教过高等数学,线性代数,概率论,最后转向离散数学,出版著作无数,
论  
文集新加坡有一本,堪称经典,大家想学离散数学的真谛不妨找来看看。这老师的课
我  
专门去听过,极为经典。不过你要从他的不经意的话中去挖掘精髓。在同他的交谈当
中  
我又深刻地发现一个问题,虽说邵先生写书无数,但依他自己的说法每本都差不多,
我  
实在觉得诧异,他说主要是有大纲的限制,不便多写。这就难怪了,很少听说国外写
书  
还要依据个什么大纲(就算有,内容也宽泛的多),不敢越雷池半步,这样不是看谁
的  
都一样了。外版的书好就好在这里,最新的科技成果里面都有论述,别的先不说,至
少  
是"紧跟时代的理论知识"。   
      
组合感觉没有太适合的国产书。还是读Graham和Knuth等人合著的经典"具体数学"吧,  
西安电子科技大学出版社有翻译版。 抽象代数,国内经典为莫宗坚先生的"代数学"。  
此书是北大数学系教材,深得好评。然而对本科生来说,此书未免太深。可以先学习
一  
些其它的教材,然后再回头来看"代数学"。国际上的经典可就多了,GTM系列里就有一  
大堆。推荐一本谈不上经典,但却最简   
单的,最容易学的:http://www.math.miami.edu/~ec/book/这本Introductionto   
Linear and Abstract Algebra"非常通俗易懂,而且把抽象代数和线性代数结合起
来,  
对初学者来说非常理想,我校比较牛的同学都有收藏。   
      
数论方面,国内有经典而且以困难著称的"初等数论"(潘氏兄弟著,北大版)。再追溯  
一点,还有更加经典(可以算世界级)并且更加困难的"数论导引"(华罗庚先生的名著,  
科学版,九章书店重印,繁体的看起来可能比较困难)。把基础的几章搞定一个大概,
对  
本科生来讲足够了。但这只是初等数论。本科毕业后要学计算数论,你必须看英文的  
书,如Bach的"Introduction to Algorithmic Number Theory"。   
计算机科学理论的根本,在于算法。现在很多系里给本科生开设算法设计与分析,确
实  
非常正确。环顾西方世界,大约没有一个三流以上计算机系不把算法作为必修的。算
法  
教材目前公认以Corman等著的"Introduction to Algorithms"为最优。对入门而言,
这  
一本已经足够,不需要再参考其它书。   
      
再说说形式语言与自动机。我看过北邮的教材,应该说写的还清楚。但是,有一点要
强  
调:形式语言和自动机的作用主要在作为计算模型,而不是用来做编译。事实上,编
译  
前端已经是死领域,没有任何open problems,北科大的班晓娟博士也曾经说过,编译
的  
技术已相当成熟。如果为了这个,我们完全没必要去学形式语言--用用yacc什么的就
完  
了。北邮的那本在国内还算比较好,但是在深度上,在跟可计算性的联系上都有较大
的  
局限,现代感也不足。所以建议有兴趣的同学去读英文书,不过国内似乎没引进这方
面  
的教材。可以去互动出版网上看一看。入门以后,把形式语言与自动机中定义的模
型,  
和数理逻辑中用递归函数定义的模型比较一番,可以说非常有趣。现在才知道,什么
叫  
"宫室之美,百官之富"!   
      
计算机科学和数学的关系有点奇怪。二三十年以前,计算机科学基本上还是数学的一
个  
分支。而现在,计算机科学拥有广泛的研究领域和众多的研究人员,在很多方面反过
来  
推动数学发展,从某种意义上可以说是孩子长得比妈妈还高了。但不管怎么样,这个
孩  
子身上始终流着母亲的血液。这血液是the mathematical underpinning of 
computer   
science(计算机科学的数学基础),也就是理论计算机科学。原来在东方大学城图书馆
中  
曾经看过一本七十年代的译本(书皮都没了,可我就爱关注这种书),大概就叫《计
算  
机数学》。那本书若是放在当时来讲决是一本好书,但现在看来,涵盖的范围还算
广,  
深度则差了许多,不过推荐大一的学生倒可以看一看,至少可以使你的计算数学入入  
门。   
      
最常和理论计算机科学放在一起的一个词是什么?答:离散数学。这两者的关系是如
此  
密切,以至于它们在不少场合下成为同义词。(这一点在前面的那本书中也有体现)
传  
统上,数学是以分析为中心的。数学系的同学要学习三四个学期的数学分析,然后是
复  
变函数,实变函数,泛函数等等。实变和泛函被很多人认为是现代数学的入门。在物  
理,化学,工程上应用的,也以分析为主。   
      
随着计算机科学的出现,一些以前不太受到重视的数学分支突然重要起来。人们发
现,  
这些分支处理的数学对象与传统的分析有明显的区别:分析研究的问题解决方案是连
续  
的,因而微分,积分成为基本的运算;而这些分支研究的对象是离散的,因而很少有
机  
会进行此类的计算。人们从而称这些分支为"离散数学"。"离散数学"的名字越来越  
响亮,最后导致以分析为中心的传统数学分支被相对称为"连续数学"。   
      
离散数学经过几十年发展,基本上稳定下来。一般认为,离散数学包含以下学科:   
1) 集合论,数理逻辑与元数学。这是整个数学的基础,也是计算机科学的基础。   
2) 图论,算法图论;组合数学,组合算法。计算机科学,尤其是理论计算机科学的核
心  
是   
算法,而大量的算法建立在图和组合的基础上。   
3) 抽象代数。代数是无所不在的,本来在数学中就非常重要。在计算机科学中,人们
惊  
讶地发现代数竟然有如此之多的应用。   
      
但是,理论计算机科学仅仅就是在数学的上面加上"离散"的帽子这么简单吗?一直到  
大约十几年前,终于有一位大师告诉我们:不是。D.E.Knuth(他有多伟大,我想不用
我  
废话了)在Stanford开设了一门全新的课程Concrete Mathematics。 Concrete这个词
在  
这里有两层含义:   
首先:对abstract而言。Knuth认为,传统数学研究的对象过于抽象,导致对具体的问
题  
关心不够。他抱怨说,在研究中他需要的数学往往并不存在,所以他只能自己去创造
一  
些数学。为了直接面向应用的需要,他要提倡"具体"的数学。在这里我做一点简单的  
解释。例如在集合论中,数学家关心的都是最根本的问题--公理系统的各种性质之
类。  
而一些具体集合的性质,各种常见集合,关系,映射都是什么样的,数学家觉得并不
重  
要。然而,在计算机科学中应用的,恰恰就是这些具体的东西。Knuth能够首先看到这
一  
点,不愧为当世计算机第一人。其次,Concrete是Continuous(连续)加上discrete(离  
散)。不管连续数学还是离散数学,都是有用的数学!   
      
理论与实际的结合——计算机科学研究的范畴   
    前面主要是从数学角度来看的。从计算机角度来看,理论计算机科学目前主要的
研  
究领域包括:可计算性理论,算法设计与复杂性分析,密码学与信息安全,分布式计
算  
理论,并行计算理论,网络理论,生物信息计算,计算几何学,程序语言理论等等。
这  
些领域互相交叉,而且新的课题在不断提出,所以很难理出一个头绪来。想搞搞这方
面  
的工作,推荐看中国计算机学会的一系列书籍,至少代表了我国的权威。下面随便举
一  
些例子。   
    由于应用需求的推动,密码学现在成为研究的热点。密码学建立在数论(尤其是计
算  
数论),代数,信息论,概率论和随机过程的基础上,有时也用到图论和组合学等。很
多  
人以为密码学就是加密解密,而加密就是用一个函数把数据打乱。这样的理解太浅显  
了。   
现代密码学至少包含以下层次的内容:   
第一,密码学的基础。例如,分解一个大数真的很困难吗?能否有一般的工具证明协
议  
正确?   
第二,密码学的基本课题。例如,比以前更好的单向函数,签名协议等。   
第三,密码学的高级问题。例如,零知识证明的长度,秘密分享的方法。   
第四,密码学的新应用。例如,数字现金,叛徒追踪等。   
在分布式系统中,也有很多重要的理论问题。例如,进程之间的同步,互斥协议。一
个  
经典的结果是:在通信信道不可靠时,没有确定型算法能实现进程间协同。所以,改
进  
TCP三次握手几乎没有意义。例如时序问题。常用的一种序是因果序,但因果序直到不
久  
前才有一个理论上的结果....例如,死锁没有实用的方法能完美地对付。例如,......
操  
作系统研究过就自己去举吧!   
    如果计算机只有理论,那么它不过是数学的一个分支,而不成为一门独立的科
学。  
事实上,在理论之外,计算机科学还有更广阔的天空。     
      
我一直认为,4年根本不够学习计算机的基础知识,因为面太宽了......   
    这方面我想先说说我们系在各校普遍开设的《计算机基础》。在高等学校开设
《计  
算机基础课程》是我国高教司明文规定的各专业必修课程要求。主要内容是使学生初
步  
掌握计算机的发展历史,学会简单的使用操作系统,文字处理,表格处理功能和初步
的  
网络应用功能。但是在计算机科学系教授此门课程的目标决不能与此一致。在计算机
系  
课程中目标应是:让学生较为全面的了解计算机学科的发展,清晰的把握计算机学科
研  
究的方向,发展的前沿即每一个课程在整个学科体系中所处的地位。搞清各学科的学
习  
目的,学习内容,应用领域。使学生在学科学习初期就对整个学科有一个整体的认
识,  
以做到在今后的学习中清楚要学什么,怎么学。计算机基本应用技能的位置应当放在
第  
二位或更靠后,因为这一点对于本系的学生应当有这个摸索能力。这一点很重要。推
荐  
给大家一本书:机械工业出版社的《计算机文化》(New Perspective of Computer   
Science),看了这本书我才深刻的体会到自己还是个计算机科学初学者,才比较透彻
的  
了解了什么是计算机科学。另外在厦门大学赵致琢老师的著作《计算科学导论》当中
的  
很多经典理论都是在同类书籍中很难找到的。看看他也许你才会明白一个最基本的问  
题:为什么计算机科学叫计算科学更为准确。这本书在世界上也可成为精品级的著
作。   
      
一个一流计算机系的优秀学生决不该仅仅是一个编程高手,但他一定首先是一个编程
高  
手。我上大学的时候,第一门专业课是C语言程序设计,念计算机的人从某种角度讲相
当  
一部分人是靠写程序吃饭的。在我们北京工业大学实验学院计算机系里一直有这样的
争  
论(时至今日CSDN上也有),关于第一程序设计语言该用哪一种。我个人认为,用哪
种  
语言属于末节,关键在养成良好的编程习惯。当年老师对我们说,打好基础后学一门
新  
语言只要一个星期。现在我觉得根本不用一个星期,前提是先把基础打好。不要再犹
豫  
了,学了再说,等你抉择好了,别人已经会了几门语言了。   
      
汇编语言和微机原理是两门特烦人的课。你的数学/理论基础再好,也占不到什么便
宜。  
这两门课之间的次序也好比先有鸡还是先有蛋,无论你先学哪门,都会牵扯另一门课
里  
的东西。所以,只能静下来慢慢琢磨。这就是典型的工程课,不需要太多的聪明和顿  
悟,却需要水滴石穿的渐悟。有关这两门课的书,计算机书店里不难找到。弄几本最
新  
的,对照着看吧。组成原理推荐《计算机组成与结构》清华大学王爱英教授写的。汇
编  
语言大家拿8086/8088入个门,之后一定要学80x86汇编语言。实用价值大,不落后,
结  
构又好,写写高效病毒,高级语言里嵌一点汇编,进行底层开发,总也离不开他,推
荐  
清华大学沈美明的《IBM—PC汇编语言程序设计》。有些人说不想了解计算机体系结
构,  
也不想制造计算机,所以诸如计算机原理,汇编语言,接口之类的课觉得没必要学,
这  
样合理吗?显然不合理,这些东西迟早得掌握,肯定得接触,而且,这是计算机专业
与  
其他专业学生相比的少有的几项优势。做项目的时候,了解这些是非常重要的,不可
能  
说,仅仅为了技术而技术,只懂技术的人最多做一个编码工人,而永远不可能全面地
了  
解整个系统的设计,而编码工人是越老越不值钱。关于组成原理还有个讲授的问题,
在  
我学这门课程时老师讲授时把CPU工作原理誉微程序设计这一块略掉了,理由是我们国
家  
搞CPU技术不如别的国家,搞了这么长时间好不容易出了个龙芯比Intel的还差个十万
八  
千里,所以建议我们不要学了。我看这在各校也未见得不是个问题吧!若真是如他所  
说,那中国的计算机科学哪个方向都可以停了,软硬件,应用,有几项搞得过美国,
搞  
不过别人就不搞了,那我们坐在这里干什么?教学的观念需要转变的。   
      
模拟电路这东东,如今不仅计算机系学生搞不定,电子系学生也多半害怕。如果你真
想  
软硬件通吃,那么建议你先看看邱关源的"电路原理",也许此后再看模拟电路底气会  
足些。教材:康华光的"电子技术基础"(高等教育出版社)还是不错的(我校电子系  
在用)。有兴趣也可以参考童诗白的书。   
      
数字电路比模拟电路要好懂得多。推荐大家看一看我们北工大刘英娴教授写的《数字
逻  
辑》业绩人士都说这本书很有参考价值(机械工业出版社的)。原因很明了,实用价
值  
高,能听听她讲授的课程更是有一种"享受科学"的感觉。清华大学阎石的书也算一本  
好教材,遗憾的一点是集成电路讲少了些。真有兴趣,看一看大规模数字系统设计吧  
(北航那本用的还比较多)。   
      
计算机系统结构该怎么教,国际上还在争论。国内能找到的较好教材为Stallings  
的"Computer Organization and Architectureesigning for Performance"(清华影
印   
本)。国际上最流行的则是"Computer architecture: aquantitative approach", by   
Patterson & Hennessy。   
    操作系统可以随便选用《操作系统的内核设计与实现》和《现代操作系统》两书
之  
一。这两部都可以算经典,唯一缺点就是理论上不够严格。不过这领域属于Hardcore   
System,所以在理论上马虎一点也情有可原。想看理论方面的就推荐清华大学出版社
《操  
作系统》吧,高教司司长张尧学写的,我们教材用的是那本。 另外推荐一本
《Windows  
操作系统原理》机械工业出版社的,这本书是我国操作系统专家在微软零距离考察半  
年,写作历时一年多写成的,教操作系统的专家除了清华大学的张尧学(现高教司司  
长)几乎所有人都参加了。Bill Gates亲自写序。里面不但结合windows2000,xp详述
操  
作系统的内核,而且后面讲了一些windows编程基础,有外版书的味道,而且上面一些
内  
容可以说在国内外只有那本书才有对windows内核细致入微的介绍,   
    如果先把形式语言学好了,则编译原理中的前端我看只要学四个算法:最容易实
现  
的递归下降;最好的自顶向下算法LL(k);最好的自底向上算法LR(k);LR(1)的简化
SLR  
(也许还有另一简化LALR)。后端完全属于工程性质,自然又是another story。   
推荐教材:Kenneth C.Louden写的"Compiler Construction Principles and   
Practice"即是《编译原理及实践》(机械工业出版社的译本)   
    学数据库要提醒大家的是,会用VFP,VB, Power builder不等于懂数据库。(这世
界  
上自以为懂数据库的人太多了!)数据库设计既是科学又是艺术,数据库实现则是典型
的  
工程。所以从某种意义上讲,数据库是最典型的一门计算机课程——理工结合,互相
渗  
透。另外推荐大家学完软件工程学后再翻过来看看数据库技术,又会是一番新感觉。
推  
荐教材:Abraham Silberschatz等著的 "Database System Concepts".作为知识的完
整  
性,还推荐大家看一看机械工业出版社的《数据仓库》译本。   
      
计算机网络的标准教材还是来自Tanenbaum的《Computer Networks》(清华大学有译  
本)。还有就是推荐谢希仁的《计算机网络教程》(人民邮电出版社)问题讲得比较
清  
楚,参考文献也比较权威。不过,网络也属于Hardcore System,所以光看书是不够
的。  
建议多读RFC,http://www.ietf.org/rfc.htm里可以按编号下载RFC文档。从IP的读
起。 
等到能掌握10种左右常用协议,就没有几个人敢小看你了。再做的工作我看放在网络
设  
计上就比较好了。   
      
数据结构的重要性就不言而喻了,学完数据结构你会对你的编程思想进行一番革命性
的  
洗礼,会对如何建立一个合理高效的算法有一个清楚的认识。对于算法的建立我想大
家  
应当注意以下几点:   
当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你
一  
般会顺利地做出来;如果没见过,那么考虑以下问题:   
1. 问题是否是建立在某种已知的熟悉的数据结构(例如,二叉树)上?如果不是,则要自
己  
设计数据结构。   
2. 问题所要求编写的算法属于以下哪种类型?(建立数据结构,修改数据结构,遍历,查
找,  
排序...)   
3. 分析问题所要求编写的算法的数学性质.是否具备递归特征?(对于递归程序设计,只
要  
设计出合理的参数表以及递归结束的条件,则基本上大功告成.)   
4. 继续分析问题的数学本质.根据你以前的编程经验,设想一种可能是可行的解决办
法,  
并证明这种解决办法的正确性.如果题目对算法有时空方面的要求,证明你的设想满足
其  
要求.一般的,时间效率和空间效率难以兼得.有时必须通过建立辅助存储的方法来节省
时  
间.   
5. 通过一段时间的分析,你对解决这个问题已经有了自己的一些思路.或者说,你已经
可  
以用自然语言把你的算法简单描述出来.继续验证其正确性,努力发现其中的错误并找
出  
解决办法.在必要的时候(发现了无法解决的矛盾),推翻自己的思路,从头开始构思.   
6. 确认你的思路可行以后,开始编写程序.在编写代码的过程中,尽可能把各种问题考
虑  
得详细,周密.程序应该具有良好的结构,并且在关键的地方配有注释.   
7. 举一个例子,然后在纸上用笔执行你的程序,进一步验证其正确性.当遇到与你的设
想  
不符的情况时,分析问题产生的原因是编程方面的问题还是算法思想本身有问题.   
8. 如果程序通过了上述正确性验证,那么在将其进一步优化或简化。   
9. 撰写思路分析,注释.   
对于具体的算法思路,只能靠你自己通过自己的知识和经验来加以获得,没有什么特定
的  
规律(否则程序员全部可以下岗了,用机器自动生成代码就可以了).要有丰富的想象力,
就  
是说当一条路走不通时,不要钻牛角尖,要敢于推翻自己的想法.我也只不过是初学者,
说  
出上面的一些经验,仅供大家参考和讨论。   
    关于人工智能,我觉得的也是非常值得大家仔细研究的,虽然不能算是刚刚兴起
的  
学科了,但是绝对是非常有发展前途的一门学科。我国人工智能创始人之一,北京科
技  
大学涂序彦教授(这老先生是我的导师李小坚博士的导师)对人工智能这样定义:人
工  
智能是模仿、延伸和扩展人与自然的智能的技术科学。在美国人工智能官方教育网站
上  
对人工智能作了如下定义:Artificial Intelligence, or AI for short, is a   
combination of computer science, physiology, and philosophy. AI is a broad   
topic, consisting of different fields, from machine vision to expert   
systems. The element that the fields of AI have in common is the creation 
of   
machines that can "think".   
    这门学科研究的问题大概说有:   
(1)符号主义: 符号计算与程序设计基础,知识表达方法 :知识与思维,产生式规  
则,语意网络,一阶谓词逻辑问题求解方法:搜索策略,启发式搜寻,搜寻算法,问
题  
规约方法,谓词演算:归结原理,归结过程专家系统:建立专家系统的方法及工具   
(2)联接主义(神经网络学派):1988年美国权威机构指出:数据库,网络发展呈直
线  
上升,神经网络可能是解决人工智能的唯一途径。   
   我想对于人工智能的学习,大家一定不要像学数学似的及一些现成的结论,要学会
分  
析问题,最好能利用程序设计实现,这里推荐给大家ACM最佳博士论文奖获得者涂晓媛
博  
士的著作《人工鱼—计算机动画的人工生命方法》(清华大学出版社)。搞人工生命
的  
同学不会不知道国际知名的涂氏父女吧。关于人工智能的书当然首选《Artificial   
Intelligence A New Synthesis》Nils J.Nilsson.鼻祖嘛!   
关于网络安全我也想在这里说两句,随着计算机技术的发展,整个社会的信息化水平
突  
飞猛进,计算机网络技术日新月异,网络成了当即社会各个工作领域不可缺少的组成
部  
分,只要有网络存在,网络安全问题就是一个必须解决好的问题,学习网络安全不是
简  
简单单的收集一些黑客工具黑一黑别人的网站,而是要学习他的数学原理,实现原
理,  
搞清底层工作机制,这样才能解决大部分的现有问题和新出现的安全问题。   
      
关于计算机科学的一些边缘科学我想谈一谈软件工程技术,对于一个企业,推出软件
是  
不是就是几个程序员坐在一起,你写一段程序,我写一段程序呢?显然不是。软件工
程  
是典型的计算机科学和数学,管理科学,心理学,社会学等学科的综合。它使我们这
些  
搞理论和技术的人进入了一个社会。你所要考虑的不仅仅是程序的优劣,更应该考虑
程  
序与软件的区别,软件与软件产品的区别,软件软件产品的市场前景,如何去更好的
与  
人交流。这方面我还在学习阶段,以后这方面再写文章吧,先推荐给大家几本书:畅
销  
20年不衰的《人月神话》(清华大学中文版,中国电力出版社影印版),《软件工程-
实  
践者研究的方法》(机械工业出版社译本),《人件》(据说每一位微软公司的部门
经  
理都读过这本书,推荐老总们和想当老总的同学都看看,了解一下什么是软件企业中
的  
人)以及微软公司的《软件开发的科学与艺术》和《软件企业的管理与文化》(研究
软  
件企业的制胜之道当然要研究微软的成功经验了!)   
      
关于计算机技术的学习我想是这样的:学校开设的任何一门科学都有其滞后性,不要
总  
认为自己掌握的某门技术就已经是天下无敌手了,虽然现在Java,VB,C,C++用的都很
多,  
怎能保证没有被淘汰的一天,我想.NET平台的诞生和X#语言的初见端倪完全可以说明
问  
题。换言之,在我们掌握一门新技术的同时就又有更新的技术产生,身为当代的大学
生  
应当有紧跟科学发展的素质。举个例子,就像有些同学总说,我做网页设计就喜欢直
接  
写html,不愿意用什么Frontpage,Dreamweaver。能用语言写网页固然很好,但有高效
的  
手段你为什么不使呢?仅仅是为了显示自己的水平高,unique? 我看真正水平高的是
能  
够以最快的速度接受新事物的人。高级程序设计语言的发展日新月异,今后的程序设
计  
就像人们在说话一样,我想大家从xml中应是有所体会了。难道我们真就写个什么都要
用  
汇编,以显示自己的水平高,真是这样倒不如直接用机器语言写算了。反过来说,想
要  
以最快的速度接受并利用新技术关键还是在于你对计算机科学地把握程度。   
      
计算机技术牵扯的内容更为广泛些,一项一项说恐怕没个一年半载也说不清。我只想
提  
醒大家的还是那句话,技术与科学是不能分家的,学好了科学同时搞技术,这才是上
上  
策。犹如英语,原先人们与老外交流必须要个翻译,现在满马路的人都会说英语。就
连  
21世纪英语演讲比赛的冠军都轮不到英语系的学生了。计算机也是一样的,我们必须
面  
对的一个现实就是:计算机真就只是一个工具,如果不具备其它方面的素养,计算机
系  
的学生虽然不能说找不到工作,不过总有一天当其他专业性人才掌握了计算机技术后
将  
比我们出色许多。原因就在于计算机解决的大都是实际问题,实际问题的知识却是我
们  
少有的。单一的计算机技术没有立足之地。   
    我想是时候指出:学习每一个课程之前,都要先搞清这一课程的学习目的。这一
学  
科的应用领域。据我自身所了解到的同龄同学和低年级的同学的学习状况:他们之中
很  
少有人知道学一个学科的学习目的,期末考试结束了也不知道学这科做什么用。这就
失  
去了读计算机科学的意义。当然这与现存的教育思想不能说一点关系都没有。   
总的来说,从教育角度来讲,国内高校的课程安排不是很合理,强调理论,又不愿意
在  
理论上深入教育,无力接受新技术,想避开新技术又无法避得一干二净。我觉得关键
问  
题就是国内的高校难于突破现状,条条框框限制着怎么求发展。我们虽然认识得到国
外  
教育的优越性,但为什么迟迟不能采取行动?哪怕是去粗取精的取那么一点点。我们
需  
要改变。从我们自身角度来讲,多数人4年下来既没有学习计算机科学的学术水平,也
没  
有学习计算机技术的那种韧劲。在我刚上大一时,我的计算机科学入门导师,淮北煤
炭  
师范学院王爱平教授曾经对我说过这样一番话:"当你选择了计算机这一门科学,就意  
味着你踏上了一条不归路,就意味着你一生都要为之奋斗......你的身后是悬崖,只有
向  
前走,不能往后退。"   
    有些同学说按照这样学习学的东西太多,有的未见得有用,我想打个形象的比
方:  
学校学出来的人都是一个球体,方方面面的知识都应具备。可是社会上需要球体的地
方  
很少,反而需要的是砖和瓦,即精通某一行的人才。但是对于同等体积的物体,用球
体  
来改造是最方便最省事的。学校的学生很多,为了能够使更多的学生来适应这个社
会,  
学校也就不得以把所有的学生都打造成一个球体,然后让社会对这些学生进行再加
工,  
成为真正能够有用的人才。即使你非常清楚自己的将来要干什么,并且非常下定决心
要  
走自己的路,这一步你也必须走,世界是在不断变化的,你不能预料未来。想清楚,
努  
力去干吧!   
必须结束这篇"胡侃"了,再侃下去非我力所能及。其实计算机还有很多基础课都值得  
一侃。怎奈我造诣有限,不敢再让内行耻笑。对于博大精深的计算机科学,我只能说
我  
永远都是个Beginner.最后声明:这些只针对本科阶段的学习。即使把这些全弄通了,
前  
面的路还长,计算机科学需要我们为之奋斗......学习计算机科学需要韧性,更需要
创  
新,需要激情。深刻学习理论知识,勇于接受新技术的挑战,这才是我们这一代人应
具  
有的素质。最后送大家一句话"Wake up every day with a feeling of passion for   
the difference technology will make in people's life!"。   
  
评论: 0 | 发表时间:2006-1-18 | 点击数:357  | 阅读全文  


 一个3流学校程序员的奋斗
摘要:
这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望
能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有
方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助。一转
眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、数据库,应用程
序,做过通信软件、硬件驱动、协议栈,到现在做操作系统内核和 IC相关开发,这中间
走了很多弯路,也吃了不少苦。 

  我上的是一个三流的高校,就连同一个城市的人多数都不知道。因为学校不好也就
没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了,大一开学
前的假期我就开始了学习,记得我买的第一本书是《计算机基础DOS3.0》,大家别吓着
了,其实当时已经普及了DOS6.22了,只是我在书店里看到了DOS4.0,5.0,6.0的书,以
为像英语那样是第四、五、六册,记得当时到处找DOS1.0,现在想想也幸好我没有找
到:)开学前我学完了 PASCAL,那时既没有计算机也没有人可以请教,我连程序是什么
的概念都没有,只好死记硬背代码,然后拿纸写,我一直到大三才有了一台486,在这之
前用纸写了多少程序我也记不清楚了,只知道最长的一个我拿A4大小的草稿纸写了30 多
页,我的C语言、C++ 、VC都是在这样的条件下入门的。所以说条件是可以克服的,希望
我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房,我的心情
激动的无与伦比,但是一上机我立刻傻了眼,他们用的是英文版的Win3.1,我的那点DOS
知识都见了鬼,上机提心吊胆的一阵瞎摸,一不小心把Word弄成了全屏,怎么都还不了
原,当时真是心急如焚,我以为机器被我弄坏了。第一个C语言程序,就是那个经典的
HelloWorld,我调了几个星期,上机机会非常少,也没有书告诉我开发环境(TC2.0)需
要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改
成.exe,结果可想而知。大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自
学上了,大一下四门课挂了彩,三类学校就是这点好,挂上一二十门也照样毕业。不过
扯远点说,我那么刻苦都及不了格,可见我们国家的计算机教育有多死板。 

  大二准备学VC和BC,当时难以取舍,后来选了VC,不为别的,只为书店里两本书,
VC 那本便宜6块钱。我的努力在班上无人能及,学的日夜不分,大三有了计算机后更是
如此,很多次父亲半夜教训我说我不要命了,我一直觉得自己基础差,记忆又不行,条
件也不好,所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学计算
机的天赋,让我哭笑不得。我用的是486,16M内存,1G硬盘,当时同学们的配置都是
P166MMX,我安装 一个Windows NT4.0需要一个通宵,编译一个BC5.0向导生成的程序需
要近两个小时,我的显示器是个二手的,辐射非常大,开机屏幕冒火花,看起来很酷
的:),有一次程序写的太久,觉得怎么白色的编辑器背景变成了紫色,以为显示器坏
了,后来才发现眼睛不行了,不过说来也奇怪,到今天我的视力还能保持1.5,真是个奇
迹。但是就是那台破机器陪伴了我两年,让我学会了VC、Delphi、SQLServer等。后来那
台机器给我阿姨打字用,据她说一天她正打的开心,一股青烟夹着火苗从显示器钻出
来,之后它才寿终正寝。 

  大三假期找了个机会在一个计算机研究所实习,与其说实习不如说是做义工,工作
了两个月一分钱没有拿。但是这两个月对我的发展帮助很大,让我早一步了解了社会,
刚去的时候我当然是一窍不通,在那里我熟悉了网络,学会了Delphi和Oracle。由于工
作很认真,得到了比较好的评价,在一位长者的引荐下,我开始和他们一起做项目,这
使我在大三大四就有了自己的收入,大四又找了两家MIS公司兼职,虽然钱不多,但是在
学生期间有1000多的收入我已经非常满足了,我终于用自己赚的钱把计算机换了。大四
下开始找工作,这时我的工作经验已经比较多(当然现在想想非常幼稚),开始听父母
的想去那个研究所, 实习过那个部门也希望我能去,但是不知道为什么最后不了了之,
这种单位就是比较官僚,我一气之下就到了我兼职的一个公司做MIS的TeamLeader。在大
三到毕业一年的时间,做过了各种MIS,从煤气、烟厂、公安、铁路、饮食到高校,什么
有钱做什么,工作也很辛苦,经常加班和熬通宵,从跟客户谈需求到设计、编码、测
试、交付都要上。那时觉得很有成就感,觉得自己还不错,现在想想真是很肤浅。 

  刚走上工作岗位的学生很容易被误导,各种开发工具让人眼花缭乱,同时也觉得很
受公司器重,但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么
多么重要,多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗,国
内又有几个公司能够做的很到位很规范?我是ISO9000内审员,也在Rational公司受过多
次培训,拿了4个证书,还有一个公司让我去做 CMM。这些我听过很多,但是很多事情到
国内就变了性质,一个公司不是通过了ISO9000或者CMM就能规范了,我现在在一家有几
十年历史的外企工作,里面的管理不是一般国内企业能及的。作为一个毕业不久以前没
有步入过社会的学生,几乎不可能在很短的时间掌握系统分析和设计,面向对象、UML只
是一个工具,关键是人本身的思想,不是说你熟悉了C++、Rose就能够做出好的设计,相
反如果你具备了很高的素质,你可以用C写出比别人用C++更加模块化的程序。 

  话说远一些,国内软件开发行业有一个怪圈,很多人觉得VC > Delphi > VB,真是
很搞笑。这几个软件我都做过开发,说白了他们都是工具,应该根据应用的需要选择采
用哪个,而不是觉得哪个上层次。如果你因为用某个开发工具很有面子而选择的话,只
能说明你很浅薄。如果说层次,那么这些工具都不上层次,因为它们用来用去都是一些
系统的API,微软的朋友不会因为你记住他们多少个 API或者多少个类就会觉得你很了不
起,你永远只是他们的客户,他们看重的是你口袋里的银子。我也做过系统内核,我也
封装过很多API,同样我也不会看重那些使用这些API做二次开发的客户,除非他能够作
出自己独到的设计。 [ 相约加拿大:枫下论坛 rolia.net/forum ] 

  至于有人认为C++ > C那更是让人笑掉大牙,不妨你去打听一下,现在有几个操作系
统内核是用C++写的,又有几个实时系统用的是C++,当然我也不是说C++不好,但是目前
的内核和实时系统中C++还无法与C匹敌,至于说C++适合做应用系统的开发那是另外一回
事。所以我的观点是不在于你用什么工具和语言,而在于你干什么工作。你的设计体现
了你的技术层次。 

  这样干了一年我觉得非常苦闷,做的大多数都是熟练工种的活,个人技术上没有太
多 的提高也看不到方向。所以决定离开这个城市去上海,寻求更好的发展,并且打算放
弃我以前的MIS转到通信行业。 

  写到这里不能不提到我女朋友,我们是在来上海前半年认识的,她大四在我公司实
习,公司派她给我写文档,我们的感情发展的很快。她告诉我很多事情,她家原本是改
革开放的第一批暴发户,她母亲爱打牌,输掉了几百万,还欠了很多债,她有男朋友,
但是她对他没有感情,只因为他给了她母亲两万多块钱,后来还强迫她写了四万块的借
条,她男朋友背叛过她并且不止一次打她,现在逼她结婚不然就要她还钱。这人居然还
是一个高校的老师!她母亲把父亲给她的学费花了,因为拖欠学费她没有办法拿到毕业
证。她母亲现在有病需要钱,我拿出了自己的一点积蓄并且跟朋友们接了一些,替她交
了学费并给她母亲看病(后来才知道看病的钱又不知所终,就连她母亲是不是有病我都
不知道,但她也是没有办法)。这个时候我家知道了一些事情,坚决反对我和她在一
起,她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市,并且
瞒着我们家。由于时间仓促,我只准备了4000块钱,她仅有的几百块钱也被她母亲要去
了,我买了三张票,一张是中午的,两张是晚上的,中午我的家人把我送上船,他们一
离开我就下了船,我和她乘坐晚上的船离开了这个我和她生活了很多年的城市,带走的
只是一身债务。没有来过上海的我们两个性倔强,都不愿意去麻烦同学和朋友。来到上
海是傍晚6点半,我们都不知道该去哪里,我们找了一个20块钱的旅馆,这个房间连窗户
都没有,7月份的天气酷热难耐,房间里非常闷热。第二天我们开始租房子,因为身上的
钱不多,我们基本都是步行,花了一个星期时间,不知道在浦东转了多少圈后找到了一
个400块的房子,但是我们都不了解上海是付三压一,还要付半个月的中介费,买了一些
锅碗瓢盆后,我们身上只有800块钱了,工作都还没有着落,这800块钱要支持到我们拿
到第一个月工资,为了省钱我们自己做饭,每天买菜只花两块钱,她非常喜欢吃(也可
能她在大学经常挨饿的愿意),看到她现在这样省吃俭用我真的很不忍心。她以前的男
朋友也没有放过她,经常打电话来骚扰,并且来上海看她,还说了不少恐吓她的话,她
过于善良,说他以前毕竟帮助过她,叫我不要与他一般见识。以后的每天在家就是苦等
面试通知,原本我想迅速找一家MIS公司解决眼前的困难,但是她坚持让我不要放弃自己
的理想,终于功夫不负有心人,我找到了一家通信公司,4000块的工资虽然赶不上MIS公
司给我开出的价位,但也够在上海生存。她也找到了工作,第一天上班她哭了,这是她
来上海第一次流泪,我心里很难受也很感动。 

  由于是全新的行业,我把自己降到了零点,我学的VC、Delphi、数据库派不上用
场,摆在我面前的是嵌入式、协议、信令一些我从未接触过的知识。我知道我没有退
路,于是拼命的学习,我把自己当做一个应届毕业生一样,一分努力一分收获,半年过
去我终于熟悉了工作,并且得到了公司的表彰,薪水也加了一级。后面的日子里我们省
吃俭用,把欠朋友的1万多块钱还了,日子终于上了正轨。这时女朋友告诉我她想考研究
生,我也很支持,于是她辞职在家备考。 

  另外,在这里我要感谢我的ProjectManager,他原来是一个大通信公司的产品经
理,对人非常和善,我从他那里学到了很多知识,而且他也给了我许许多多无私的帮
助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器软件,由
于代码量不算太小(5万行),资料和文档都不齐全,我维护起来非常吃力,所以想重新
把它做一遍,公司领导不太支持,可能觉得工作量太大,但是他极力支持我,私下里他
让我放手去做,我的维护工作他挤时间做。在他的支持下,我花了半年时间完成了接入
服务器的软件,并且实现了一个相对完整的TCP/IP协议栈。在这里我学会了嵌入式系统
设计、驱动开发、TCP/IP和很多通信的知识,我花了一年时间终于使自己从MIS开发转到
了通信行业,并且站稳了脚跟。我的开发大量是对硬件的直接操作,不再受微软的操作
系统,VC、Delhpi这些开发工具的约束,我终于看到了另外一片天空。 

  我做事情喜欢追根问底,随着开发的深入,软件开发与硬件联系越来越紧密,硬件
知识的匮乏又对我的发展产生了障碍,而且芯片技术基本上掌握在国外公司的手里,这
对做系统级设计是一个非常大的制约,一个新产品出来,第一道利润(也往往是最丰厚
的利润)常常都被IC公司如Intel、Motorola赚去了,国内的厂商只能喝点汤。所以我决
心解决自己的硬件技术障碍,并打算离开通信行业,进入IC设计相关领域。 

  当然我明白如果我对硬件了解的非常少,没有哪家IC公司会仁慈到招我这样一个一
窍不通的人来培训。所以我必须努力打好基础,学一些相关知识为以后做准备。就像我
开始从MIS转到通信一样,我看过大量通信方面的书,并且给一个ISP做过RADIUS计费分
拣台,在这样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计
的,有不少PCB Layout硬件人员,平常我就注意向他们学习,由于我做的是软件,在公
司看硬件资料不好意思,所以开始只好在家看,刚来上海工作我连续一年都在加班,后
来不加了,因为我要挤出时间学习,通常我12点左右睡,第二天5点半起,我上班比较
早,地铁上如果人不多我也用来看书。学习当然不会是一帆风顺的,有些实在不懂的问
题就积累起来问硬件人员,他们的帮助使我学习进度快了很多,因为在没有人点拨的情
况下自学,我的一半时间是花在解决疑难问题上,但这种问题经常是别人的一句话就可
以让我豁然开朗,我非常庆幸我有这样的学习环境。在后面的一年里,我学会了看硬件
原理图,学会了简单的硬件设计(模拟电路方面还有不小的差距),事情就是这样的,
当你安安份份做软件,别人永远认为你是软件开发人员,在你开始学习硬件时别人未必
会认同,有位中兴通讯的朋友还对我说过,一个人不可能把所有东西都学完。我也明白
这一点,但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬
件都懂的,同事们也都习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司
看,没有人再大惊小怪了。让我比较自豪的是我通过自己的努力做了一个IAD(软交换的
终端设备)系统方案,包含软硬件的选型、设计等内容,这个方案得到了公司和同事们
的认同,让我感到非常欣慰。 

  技术是相辅相成的,当我的硬件有了一定的进步后,我的软件设计也有了很大的提
高,我可以从更深层次理解问题,我做的接入服务器CPU是Motorola PowerPC860,熟悉
的朋友都知道860 QMC与软件的批量数据传输通常采用BD表的方式,硬件人员做驱动的时
候习惯采用固定BD表,每接收或发送数据都将数据从BD表拷贝到用户Buffer,或从用户
Buffer拷贝到BD表,由于理解的比较深入,我自己重新实现了这个过程,采用动态BD表
的方式,驱动从一个网口接收数据,提交给我的软件进行三层交换,直至从另外的接口
发送出去,没有进行一次拷贝。这样的设计大大提高了性能,使系统的指标接近理论
值。软硬件的结合使我的设计水平上了一个台阶。我现在写的这个操作系统,编译后我
把程序反编译成汇编,找出其中不优化的代码,然后在C程序中进行调整。举个例子,很
多CPU没有专门的乘法指令,这个大家应该都知道,在这种CPU上进行一个乘法操作常常
会花费大量的指令周期,有的朋友会说这个我知道,我会尽量避免采用×号,但是事情
往往不是那么简单,你知道 
C语言中数组的下标操作是怎么实现的吗?仔细看看反汇编的代码你就会明白,同样是通
过下标的定位操作,C编译器会有时候会产生位移指令,但有时候会用乘法实现,两者效
率往往是天壤之别,所以明白这些问题你才能将系统性能提升到极致。? 
些问题就不多说了,有兴趣的话以后可以共同探讨。 

  话说远一点,我由衷的希望在软件上做的比较深入的朋友们有机会学学硬件以及其
它相关知识,尤其是做底层开发和嵌入式设计的。这对软件技术的提高有非常大的帮
助,否则很多事情你只知道该这样但不会明白为什么该这样。我这个观点在我现在的IC
公司Project Manager那里也得到了验证。他告诉我们公司现在的802.11芯片产品的软件
经理原本是做该芯片硬件设计的,某某某原本是做软件的,现在在做IC,类似的例子还
有很多,只是在国内这样的风气不是非常流行。 
< r o l i a. n e t > 
  我有一些心得体会与大家分享,只有当我干好本职工作后,我才会学习与工作关系
不大的技术,这样公司的上司才不至于反感,在入门阶段的问题我通常不去问那些资深
人士,而是问一些资历比较浅的朋友,比如刚毕业不久的学生,因为他们往往会跟你详
细的讲解,而资深人士通常觉得你的问题太简单,所以回答的也很简单,我又不好意思
多问。等技术上了一定的层次后我才会问他们,他们也能给你比较深入的回答。另外,
有些朋友说我机会比较好,他们也希望能从事新的工作可惜没有机会,我听了只有苦
笑,我的机会了解的人都应该知道,我没有出生在什么IT世家:)也没有谁一路提拔
我,所有的路都是自己走出来的,我母亲去世比较早,我的后母(我叫她阿姨)看着我
努力过来的,一次她看我大年30还在写程序,她说像我这样努力木头都能学出来。 

  我的最终目的是IC而不是PCB,所以我下一步的准备开始学习IC设计的知识。公司的
同事没有懂IC设计的,后面的路又要靠自己了,我买了不少相关的书,在网上也查了很
多的资料,我花了大量的时间去学习VHDL,并且用软件进行了一些简单的设计和仿真
(没有设计ASIC,只是针对FPGA),随着学习的深入,我渐渐明白了IC设计的基本流
程,同时也明白了这条路的艰辛。这个时候我已经做好了跳槽的准备,我向一家业界又
一定知名度的IC设计公司投了简历,并通过了漫长的面试(4个多小时)。其他的一切我
都比较满意,唯独薪资差强人意,我也明白原因,因为我是这个行业的新人,我没有经
验,我再一次将自己清零了。公司老板问我6000多一个月能不能接受,我知道他也是照
章办事。想想我通信行业的朋友们,基本上都是年薪10万以上,月薪过万的也比比皆
是,朋友们也帮我介绍了不少待遇不错的公司,我该怎么选择,当时我很犹豫,我热爱
我的事业,我向往我的追求,但我也是一个普通的人,我也需要养家糊口,我也想早一
点买房买车。生活给我出了一道难题。 

  爱因斯坦在63岁时说过“一个人没有在30岁以前达成科学上的最大成就,那他永远
都不会有。”这句话给了我很大的压力和震动,我马上就26岁了,离 30只有四年时间,
我必须抓紧这几年宝贵的时间,努力达到我技术上的最高峰。为了这个理想,为了能离
自己的梦更近一些,我选择了这家IC公司,我明白自己的薪资和公司刚进来的硕士研究
生相差无几,但为了今后的发展只能忍受,一切又得重新开始。换行业是一个非常痛苦
的过程,尤其从一个春风得意的位置换到一个陌生的岗位,感觉象从温暖的被子里钻出
来跳进冰水中,让人难以接受。在原来那家通信公司,我是唯一两年时间涨了五次工资
的员工,公司和同事都给了我极大的认可,工作上也常常被委以重任。但现在这一切都
成了过去,在新的公司我只是一个新人,没有人知道也没有人在意我过去的成绩。我决定
重新开始,我把自己看作新毕业的学生,我要用自己的努力得到公司的认可。进入新的
行业是非常痛苦的,我告诉自己必须忍受这一切,虽然外面有很多诱惑,但是既然作出
了选择我就不允许自己轻易放弃。 

  我现在已经在这家新公司上了一个多月的班,开始非常艰难,现在慢慢适应了。第
一 个月结束时,Team Leader找我谈话,说我是新进员工中最优秀的一个,我心里很欣
慰,这也算对我努力的一个肯定吧。在这里还要感谢我的女朋友,她给了我很大的支持
和鼓舞,每次在我动摇的时候她都在鼓励我,让我坚持自己的理想,刚来上海是她让我
不要勉强去做MIS,这次也是她让我顶住了月薪过万的诱惑,没有她我可能不会有今天的
成绩。现在的公司有自己的操作系统,自己的CPU、DSP和其它芯片,在这里我能学到世
界上最先进的技术,我们的设计开发不再完全依赖别人的硬件和系统,这让我很开心。
我打算等工作步入正轨后,全力学习新的知识,实现我的理想。 
在后面的两年里我给自己定下了几个目标: 

一.努力做好本职工作,在工作上得到公司和同事们的认同; 
二.努力学习IC硬件设计知识,多向同事请教,并利用一切机会多实践; 
三.实现我的实时操作系统的主要部分,完成TCP/IP协议栈模块,并免费发布源代码; 
四.和我女朋友结婚并买一套小房子,这是最重要的,因为我明白事业是可以重来的,但
是珍贵的感情很难失而复得。 

在这里提一下我现在开发的操作系统,它是一个实时嵌入式系统,目前支持以下特性: 

a.支持时间片轮转调度和基于优先级调度,最多64个优先级; 
b.抢占式实时内核; 
c.为了便于移植,主体用标准C实现; 
d.汇编代码非常少,不到100行; 
e.支持任务管理,各任务有独立的堆栈; 
f.进程同步和通信目前完成了Semaphore,Message Queue正在调试; 
g.实现了定时系统调用; 
h.可以在windows上仿真调试 

我还打算下一步实现优先级反转保护,Event Flag,Data Pipe,内存管理(以前实现
过)、驱动接口等。 在这之后我还会努力完善它,比如加入文件系统,协议栈、调试接
口等。希望朋友们提出自己的意见和建议,在此不胜感激! 

后记: 

  就像有的朋友说的,我的经历或许会给一些朋友产生误导,在这里我必须说明一
下。我来上海以前学习过于拼命,常常晚上只睡3个多小时,我身高1米71,那时只有108
斤(我现在130多),家人也说我这样拼命活不过60岁,但是当时的我太固执,我对他们
说只要能实现理想活50岁我就够了。那时的拼命使我的身体受到了影响,有一次早上突
然腰肌剧痛难忍,痛的我倒在床上站不起来。虽然我现在已经比较注意,但有时候还会
隐隐作痛。后来在女朋友说服了我,来上海以后我不再如此。我经常引用父亲的一句话
“身体是革命的本钱”。 

  而且我也发现拼命不是办法,我可以熬一两个通宵,最多的一次我连续工作了三天
三夜,但是我半个月都没有恢复过来,这样是不是得不偿失?学习工作应该是一个长期
的过程,像马拉松而不是百米冲刺。我现在非常注意调整学习和工作的强度,我要保证
每天尽量有相对充沛的精力,一些年轻的朋友觉得自己也应该拼命努力,这让我多少有
些担心,如果我的故事能让你在学习工作上多一点兴趣,我会感到很开心,但如果误导
了某些朋友,让你做一些不值得的付出,我会感到很内疚。 

  技术没有贵贱之分,我以前换行业是因为自己的兴趣所致,而不是对哪个行业有什
么偏见。我希望我的经历不要给朋友一个错误的导向,觉得我始终向更高的技术发展。
其实各行各业做到顶尖都是很困难的。话又说回来虽然技术没有贵贱,但是门槛是有高
低的,无论如何,做IC的门槛要比做网页的高,这一点无可否认。国家各种人才都是需
要的,但是作为个人奋发向上的想法还是应该有的,努力在自己喜欢的行业上做的更
好,而不应该停留在比较肤浅的层次上。 

  我是一个自己觉得比较有自知之明的人,或许我最大的优点就是知道自己有很多缺
点:)。我的故事中很多的曲折和错误都是由我的缺点造成的,希望大家用审慎的眼光
看待我的经历,不要被我的“花言巧语”所迷惑。我学习有些随心所欲,这给我带来了
无尽的麻烦,也大大阻碍的我的发展。记得我小时候成绩比较出色,但是后来学习严重
偏科,导致我中学成绩一再滑坡,也没有考上什么好的学校,小时候的一个朋友,当时
的成绩和我相仿,但是没有我这个缺点,她上了清华,后来在去了美国深造,在一个著
名导师手下研究理论科学,这未尝不是一条更好的出路。另外我的学习方法也是在不断
改善中的,过去的学习过于讲究数量和时间,那样学习既苦而已效率不高,现在我非常
注意学习的效率和技巧,这样才是学习的捷径(当然不是指投机取巧),比如说学一相
对陌生的技术,如果有条件,不妨问一问有经验的人,不需要问很多,往往他不经意的
几句话会给你非常大的帮助,甚至超过你看一个星期的书。带着这样的思想再去学习你
会节省很多时间,这样何乐不为呢?这些年中我学了不少的东西,由于开始非常盲目,
所以学的东西杂乱无章,现在回想起来让我啼笑皆非,我把大量的时间浪费在一些没有
必要深入了解的知识上,毕竟一个人的精力是有限度的。很多朋友很我一样都背过五笔
字形,的确它是个不错的输入法,但是对一个研发人员它绝对不值得你去背,你的时间
应该花在有价值的地方。我这样的事情还做过很多,我背过CCED、WPS的命令和快捷键,
在dBase基本退出历史舞台后我还花了很多时间去学习它的使用。所以我的学习在前期缺
乏规划,没有明确的短期目的、中期目标,只有一个虚无飘渺的长期的理想。这就像做
设计一样,好的设计是从需求抽象到代码有很多过程,而不能得到了需求就立刻开始开
始编码。 

  当然这么些年的学习和工作多多少少有些收获,下面我说说我的一些学习的心得,
这些方法未必正确,我也在不断探索和改进中。我的学习和工作有相对明确的目标,我
不会一时心动而去学习某一技术,在下决定之前我会考虑很多,包括长期的发展,个人
路线的规划,需要付出的代价、可能遇到的困难及解决的办法等等,在决定后还会制定
更加明确的计划,包括短期、中期和长期的,身边可以利用到的资源(包括好的书籍、
资料、软硬件环境,也包括有经验的朋友或者师长),以及每一个阶段是怎么过渡到高
一阶段的计划,往往在一个学习阶段一旦上路后会走的相对顺利,但是跨阶段通常比较
麻烦,比如从学习基础知识转到实践。另外我买书也有自己的方法,现在世面上高质量
的书远不如低质量书多,对于一个陌生的技术,往往在第一次买书会选择错误,即使买
到一本好书但是它的方向也未必适合你,所以我通常会先在网上查找一些该技术的介
绍,有了一点点概念后再去买一本比较薄、相对便宜并且内容相对泛泛而谈的书,这是
国内作者最善于写的书:),再把它浏览一遍后我就会基本明白这门技术的要点,后面
买书和制定计划就会明确的多。否则一开始就想找本好书往往比较困难,而且买回来后
努力学习,有时候学了一半才发现是本低质量的书或者是相对过时技术,让人非常懊
恼。另外让有经验的人帮你介绍,通常也是一个不错的选择。 

  有些朋友想学通信、嵌入式开发,但总觉得自己没有软硬件环境,我就按我的了解
给大家介绍一下怎么建立这样的环境,当然我了解的只是我学习和工作的方向。通信我
做的是数据网方面的工作,包括TCP/IP、二三层交换、对接入网、 H.323和软交换也有
一点认识。这些软硬件环境都是可以在PC上构建的。你甚至可以在一个没有网卡的PC上
建立一个包含多个路由器、接入服务器、 VoIP网关、网守、主机等的仿真网络环境,而
且与实际的网络相当接近,当然这需要你有清晰的网络概念和一定的网络知识,我一直
在努力开发一套软件将这个过程简化,目前试验已经做完,我可能会将它融入我的操作
系统外围扩展软件中。这样的方法我无法用简单的语句讲的很清楚,我可以说一下大概
的思想,就是在 PC上实现仿真网卡,(知道Windows怎么在没有网卡的机器实现虚拟网
卡技术的朋友都应该会明白),然后每一个仿真网卡对应一个虚拟设备,如路由器或者
主机。你也可以借助第三方工具完成部分工作,如VmWare等。我现在就是利用一个仿真
网卡做自己的开发的。 

  至于嵌入式开发环境更加容易实现,PC就是一个非常大的硬件平台,现有的嵌入式
操作系统通常都支持X86,你可以在上面做开发,通过软盘Boot或者使用虚拟机装载,我
用VxWorks做了试验,在一台PC上跑Windows和 VxWorks两个系统。另外Windows上的兼容
DOS的16位仿真X86环境也为很多操作系统提供了绝佳的试验环境,我的操作系统在
Windows 上就是这样实现的。Linux在嵌入式中应用也比较广泛,它在网上有大量的资
料,而且也相对比较容易实践。同时很多完善的嵌入式开发环境支持软件仿真,如 
Tornado、WinCE等。
  
评论: 0 | 发表时间:2006-1-10 | 点击数:203  | 阅读全文  


 Java学习之路:不走弯路,就是捷径 (转载)
摘要:

.引言 

在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于"如何学习编程?Java该如
何学习?"。类似的问题回答多了,难免会感觉厌烦,就萌生了写下本文的想法。到时候
再有人问起类似的问题,我可以告诉他(她),请你去看看《Java学习之路》。拜读过
台湾蔡学镛先生的《Java夜未眠》,有些文章如《Java学习之道》等让我们确实有共
鸣,本文题目也由此而来。 

软件开发之路是充满荆棘与挑战之路,也是充满希望之路。Java学习也是如此,没有捷径
可走。梦想像《天龙八部》中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很
不现实的。每天仰天大叫"天神啊,请赐给我一本葵花宝典吧",殊不知即使你获得了葵
花宝典,除了受自宫其身之苦外,你也不一定成得了"东方不败",倒是成"西方失败"的
几率高一点。 

"不走弯路,就是捷径",佛经说的不无道理。 

1.如何学习程序设计? 

Java是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于Java,对C++
等其他程序设计语言也一样管用。有编程高手认为,Java也好C也好没什么分别,拿来就
用。为什么他们能达到如此境界?我想是因为编程语言之间有共通之处,领会了编程的
精髓,自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。 

1.1 培养兴趣 

兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话,你会活的很
累,也太对不起自己了。多关心一些行业趣事,多想想盖茨。不是提倡天天做白日梦,
但人要是没有了梦想,你觉得有味道吗?可能像许多深圳本地农民一样,打打麻将,喝
喝功夫茶,拜拜财神爷;每个月就有几万十几万甚至更多的进帐,凭空多出个"食利阶
层"。你认为,这样有味道吗?有空多到一些程序员论坛转转,你会发现,他们其实很乐
观幽默,时不时会冒出智慧的火花。 

1.2 慎选程序设计语言 

男怕入错行,女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是
掌握一门编程语言了事,它还需要其他很多方面的背景知识。软件开发也不仅仅局限于
某几个领域,而是已经渗透到了各行各业几乎每一个角落。 

如果你对硬件比较感兴趣,你可以学习C语言/汇编语言,进入硬件开发领域。如果你对
电信的行业知识及网络比较熟悉,你可以在C/C++等之上多花时间,以期进入电信软件开
发领域。如果你对操作系统比较熟悉,你可以学习C/Linux等等,为Linux内核开发/驱动
程序开发/嵌入式开发打基础。 

如果你想介入到应用范围最广泛的应用软件开发(包括电子商务电子政务系统)的话,
你可以选择J2EE或.NET,甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件
需要对数据库等很熟悉。总之,你需要根据自己的特点来选择合适你的编程语言。 

1.3 要脚踏实地,快餐式的学习不可取 

先分享一个故事。 

有一个小朋友,他很喜欢研究生物学,很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶
便会飞。有一次,他走到草原上面看见一个蛹,便取了回家,然后看着,过了几天以
后,这个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来。 这个过程达
数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎,怎么也没法子走出来。这个小孩看着看
着不忍心,就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开,使蝴蝶破蛹而出。 但
蝴蝶出来以后,因为翅膀不够力,变得很臃肿,飞不起来。 

这个故事给我们的启示是:欲速则不达。 

浮躁是现代人最普遍的心态,能怪谁?也许是贫穷落后了这么多年的缘故,就像当年的
大跃进一样,都想大步跨入共产主义社会。现在的软件公司、客户、政府、学校、培训
机构等等到处弥漫着浮躁之气。就拿笔者比较熟悉的深圳IT培训行业来说吧,居然有的
打广告宣称"参加培训,100%就业",居然报名的学生不少,简直是藐视天下程序员。社
会环境如是,我们不能改变,只能改变自己,闹市中的安宁,弥足珍贵。许多初学者
C++/Java没开始学,立马使用VC/JBuilder,会使用VC/JBuilder开发一个Hello World程
序,就忙不迭的向世界宣告,"我会软件开发了",简历上也大言不惭地写上"精通
VC/Java"。结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地
自容。到处碰壁之后才知道捧起《C++编程思想》《Java编程思想》仔细钻研,早知如此
何必当初呀。 

"你现在讲究简单方便,你以后的路就长了",好象也是佛经中的劝戒。

1.4 多实践,快实践 

彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。 

从前,四川边境有两个和尚,一个贫穷,一个有钱。一天,穷和尚对富和尚说:"我打算
去南海朝圣,你看怎么样?"富和尚说:"这里离南海有几千里远,你靠什么去呢?"穷和
尚说:"我只要一个水钵,一个饭碗就够了。"富和尚为难地说:"几年前我就打算买条船
去南海,可至今没去成,你还是别去吧!" 一年以后,富和尚还在为租赁船只筹钱,穷
和尚却已经从南海朝圣回来了。 

这个故事可解读为:任何事情,一旦考虑好了,就要马上上路,不要等到准备周全之
后,再去干事情。假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了。软件开
发是一门工程学科,注重的就是实践,"君子动口不动手"对软件开发人员来讲根本就是
错误的,他们提倡"动手至上",但别害怕,他们大多温文尔雅,没有暴力倾向,虽然有
时候蓬头垢面的一副"比尔盖茨"样。有前辈高人认为,学习编程的秘诀是:编程、编
程、再编程,笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要
等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况
可以让你更快更牢固的掌握知识点。 

1.5 多参考程序代码 

程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。许多人被
《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。为什么要以悲剧结
尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局,他把自己的感觉
融入到游戏中,却让众多的仙剑迷扼腕叹息。 

多多参考代码例子,对Java而言有参考文献[4.3],有API类的源代码(JDK安装目录下的
src.zip文件),也可以研究一些开源的软件或框架。 

1.6 加强英文阅读能力 

对学习编程来说,不要求英语, 但不能一点不会,。最起码像Java API文档(参考文献
[4.4])这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个"金山词霸"。看多了
就会越来越熟练。在学Java的同时学习英文,一箭双雕多好。另外好多软件需要到英文
网站下载,你要能够找到它们,这些是最基本的要求。英语好对你学习有很大的帮助。
口语好的话更有机会进入管理层,进而可以成为剥削程序员的"周扒皮"。 

1.7 万不得已才请教别人 

笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做
思考就可以解决。请教别人之前,你应该先回答如下几个问题。 

你是否在google中搜索了问题的解决办法? 

你是否查看了Java API文档? 

你是否查找过相关书籍? 

你是否写代码测试过? 

如果回答都是"是"的话,而且还没有找到解决办法,再问别人不迟。要知道独立思考的
能力对你很重要。要知道程序员的时间是很宝贵的。 

1.8 多读好书 

书中自有颜如玉。比尔?盖茨是一个饱读群书的人。虽然没有读完大学,但九岁的时候比
尔?盖茨就已经读完了所有的百科全书,所以他精通天文、历史、地理等等各类学科,可
以说比尔?盖茨不仅是当今世界上金钱的首富,而且也可以称得上是知识的巨富。 

笔者在给学生上课的时候经常会给他们推荐书籍,到后来学生实在忍无可忍开始抱
怨,"天呐,这么多书到什么时候才能看完了","学软件开发,感觉上了贼船"。这时
候,我的回答一般是,"别着急,什么时候带你们去看看我的书房,到现在每月花在技术
书籍上的钱400元,这在软件开发人员之中还只能够算是中等的",学生当场晕倒。
(注:这一部分学生是刚学软件开发的) 

对于在Java开发领域的好书在笔者另外一篇文章中会专门点评。该文章可作为本文的姊
妹篇。 

.9 使用合适的工具 

工欲善其事必先利其器。软件开发包含各种各样的活动,需求收集分析、建立用例模
型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具
帮忙可以说是寸步难行。工具可以提高开发效率,使软件的质量更高BUG更少。组合称手
的武器。到飞花摘叶皆可伤人的境界就很高了,无招胜有招,手中无剑心中有剑这样的
境界几乎不可企及。在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也
可作为本文的姊妹篇)。 

2.软件开发学习路线 

两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之
道,而是找寻学习软件开发的正确路线与规律。 

从软件开发人员的生涯规划来讲,我们可以大致分为三个阶段,软件工程师→软件设计
师→架构设计师或项目管理师。不想当元帅的士兵不是好士兵,不想当架构设计师或项
目管理师的程序员也不是好的程序员。我们应该努力往上走。让我们先整理一下开发应
用软件需要学习的主要技术。 

A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等,它们并非
不重要。如不想成为计算机科学家的话,可以采取"用到的时候再来学"的原则。 

B.一门编程语言,现在基本上都是面向对象的语言,Java/C++/C#等等。如果做WEB开发
的话还要学习HTML/JavaScript等等。 

C.一种方法学或者说思想,现在基本都是面向对象思想(OOA/OOD/设计模式)。由此而
衍生的基于组件开发CBD/面向方面编程AOP等等。 

D.一种关系型数据库,ORACLE/SqlServer/DB2/MySQL等等 

E.一种提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET等。 

F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模。 

G.一种软件过程,RUP/XP/CMM等等,通过软件过程来组织软件开发的众多活动,使开发
流程专业化规范化。当然还有其他的一些软件工程知识。 

H.项目管理、体系结构、框架知识。 

正确的路线应该是:B→C→E→F→G→H。 

还需要补充几点: 

1).对于A与C要补充的是,我们应该在实践中逐步领悟编程理论与编程思想。新技术虽
然不断涌现,更新速度令人眼花燎乱雾里看花;但万变不离其宗,编程理论与编程思想
的变化却很慢。掌握了编程理论与编程思想你就会有拨云见日之感。面向对象的思想在
目前来讲是相当关键的,是强势技术之一,在上面需要多投入时间,给你的回报也会让
你惊喜。 

2).对于数据库来说是独立学习的,这个时机就由你来决定吧。 

3).编程语言作为学习软件开发的主线,而其余的作为辅线。 

4).软件工程师着重于B、C、E、D;软件设计师着重于B、C、E、D、F;架构设计师着
重于C、F、H。 

3.如何学习Java? 

3.1 Java学习路线 

3.1.1 基础语法及Java原理 

基础语法和Java原理是地基,地基不牢靠,犹如沙地上建摩天大厦,是相当危险的。学
习Java也是如此,必须要有扎实的基础,你才能在J2EE、J2ME领域游刃有余。参加SCJP
(SUN公司认证的Java程序员)考试不失为一个好方法,原因之一是为了对得起你交的
1200大洋考试费,你会更努力学习,原因之二是SCJP考试能够让你把基础打得很牢靠,
它要求你跟JDK一样熟悉Java基础知识;但是你千万不要认为考过了SCJP就有多了不起,
就能够获得软件公司的青睐,就能够获取高薪,这样的想法也是很危险的。获得"真
正"的SCJP只能证明你的基础还过得去,但离实际开发还有很长的一段路要走

.1.2 OO思想的领悟 

掌握了基础语法和Java程序运行原理后,我们就可以用Java语言实现面向对象的思想
了。面向对象,是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基
础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候,你会感到特别
的熟悉亲切,学起来像喝凉水这么简单。 

使用面向对象的思想进行开发的基本过程是: 

●调查收集需求。 

●建立用例模型。 

●从用例模型中识别分析类及类与类之间的静态动态关系,从而建立分析模型。 

●细化分析模型到设计模型。 

●用具体的技术去实现。 

●测试、部署、总结。 

3.1.3 基本API的学习 

进行软件开发的时候,并不是什么功能都需要我们去实现,也就是经典名言所说的"不需
要重新发明轮子"。我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司
编写好了众多类实现一些底层功能,以及我们下载过来的JAR文件中包含的类,我们可以
调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使
用?方法的参数个数及类型是?类的构造器需不需要参数?总不可能SUN公司的工程师打
国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查
看,Java DOC文档(参考文献4.4)就是这样的文档,它可以说是程序员与程序员交流的
文档。 

基本API指的是实现了一些底层功能的类,通用性较强的API,如字符串处理/输入输出等
等。我们又把它成为类库。熟悉API的方法一是多查Java DOC文档(参考文献4.4),二
是使用JBuilder/Eclipse等IDE的代码提示功能。 

3.1.4 特定API的学习 

Java介入的领域很广泛,不同的领域有不同的API,没有人熟悉所有的API,对一般人而
言只是熟悉工作中要用到的API。如果你做界面开发,那么你需要学习Swing/AWT/SWT等
API;如果你进行网络游戏开发,你需要深入了解网络API/多媒体API/2D3D等;如果你做
WEB开发,就需要熟悉Servlet等API啦。总之,需要根据工作的需要或你的兴趣发展方向
去选择学习特定的API。 

3.1.5 开发工具的用法 

在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程度的角度考虑,我们推荐
使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开
发环境,以免过于关注IDE的强大功能而分散对Java技术本身的注意力。过了这一阶段你
就可以开始熟悉IDE了。 

程序员日常工作包括很多活动,编辑、编译及构建、调试、单元测试、版本控制、维持
模型与代码同步、文档的更新等等,几乎每一项活动都有专门的工具,如果独立使用这
些工具的话,你将会很痛苦,你需要在堆满工具的任务栏上不断的切换,效率很低下,
也很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、
单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等,
甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的
开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。 

从开发效率的角度考虑,使用IDE是必经之路,也是从一个学生到一个职业程序员转变的
里程碑。 

Java开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而
Eclipse、JBuilder占有的市场份额是最大的。JBuilder在近几年来一直是Java集成开发
环境中的霸主,它是由备受程序员尊敬的Borland公司开发,在硝烟弥漫的Java IDE大战
中,以其快速的版本更新击败IBM的Visual Age for Java等而成就一番伟业。IBM在
Visual Age for Java上已经无利可图之下,干脆将之贡献给开源社区,成为Eclipse的
前身,真所谓"柳暗花明又一村"。浴火重生的Eclipse以其开放式的插件扩展机制、免费
开源获得广大程序员(包括几乎所有的骨灰级程序员)的青睐,极具发展潜力。 

3.1.6 学习软件工程 

对小型项目而言,你可能认为软件工程没太大的必要。随着项目的复杂性越来越高,软
件工程的必要性才会体现出来。参见"软件开发学习路线"小节。 

3.2学习要点 

确立的学习路线之后,我们还需要总结一下Java的学习要点,这些要点在前文多多少少
提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总,不要嫌我婆婆妈妈啊。 

当程序员编写好某些类,觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使
用"Javadoc"工具(包含在JDK中)生成标准的Java DOC文档,供同行使用。
J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份,除了菜鸟之
外。J2SE DOC文档官方下载地址:http://Java.sun.com/j2se/1.5.0/download.jsp,你
可以到google搜索CHM版本下载。也可以在线查看:
http://Java.sun.com/j2se/1.5.0/docs/api/index.html。

对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍。 

当需要某项功能的时候,你应该先查相应的DOC文档看看有没有现成的实现,有的话就不
必劳神费心了直接用就可以了,找不到的时候才考虑自己实现。使用步骤一般如下: 

●找特定的包,包一般根据功能组织。 

●找需要使用类,类命名规范的话我们由类的名字可猜出一二。 

●选择构造器,大多数使用类的方式是创建对象。 

●选择你需要的方法。 

3.2.2 查书/google->写代码测试->查看源代码->请教别人 

当我们遇到问题的时候该如何解决? 

这时候不要急着问别人,太简单的问题,没经过思考的问题,别人会因此而瞧不起你。
可以先找找书,到google中搜一下看看,绝大部分问题基本就解决了。而像"某些类/方
法如何使用的问题",DOC文档就是答案。对某些知识点有疑惑是,写代码测试一下,会
给你留下深刻的印象。而有的问题,你可能需要直接看API的源代码验证你的想法。万不
得已才去请教别人。 

3.2.3学习开源软件的设计思想 

Java领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、
Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝
呀。入宝山而空手归,你心甘吗?对这些工具、框架进行分析,领会其中的设计思想,
有朝一日说不定你也能写一个XXX框架什么的,风光一把。分析开源软件其实是你提高技
术、提高实战能力的便捷方法。 

3.2.4 规范的重要性 

没有规矩,不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到
http://www.jcp.org下载JSRXXX规范,多读规范,这是最权威准确最新的教材。第二层
含义是编程规范,如果你使用了大量的独特算法,富有个性的变量及方法的命名方式;
同时,没给程序作注释,以显示你的编程功底是多么的深厚。这样的代码别人看起来像
天书,要理解谈何容易,更不用说维护了,必然会被无情地扫入垃圾堆。Java编码规范
到此查看或下载http://Java.sun.com/docs/codeconv/,中文的也有,啊,还要问我在
哪,请参考3.2.2节。 

3.2.5 不局限于Java 

很不幸,很幸运,要学习的东西还有很多。不幸的是因为要学的东西太多且多变,没时
间陪老婆家人或女朋友,导致身心疲惫,严重者甚至导致抑郁症。幸运的是别人要抢你
饭碗绝非易事,他们或她们需要付出很多才能达成心愿。 

Java不要孤立地去学习,需要综合学习数据结构、OOP、软件工程、UML、网络编程、数
据库技术等知识,用横向纵向的比较联想的方式去学习会更有效。如学习Java集合的时
候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是"需要的时候再
学"的原则。 

4.结束语 

需要强调的是,学习软件开发确实有一定的难度,也很辛苦,需要付出很多努力,但千
万不要半途而废。本文如果能对一直徘徊在Java神殿之外的朋友有所帮助的话,笔者也
欣慰了。哈哈,怎么听起来老气横秋呀?没办法,在电脑的长期辐射之下,都快变成小
老头了。最后奉劝各位程序员尤其是MM程序员,完成工作后赶快远离电脑,据《胡播乱
报》报道,电脑辐射会在白皙的皮肤上面点缀一些小黑点,看起来鲜艳无比…… 

(T117) 


  
评论: 0 | 发表时间:2006-1-10 | 点击数:204  | 阅读全文  


 一位高级程序员给学弟学妹的建议
摘要:
一位高级程序员给学弟学妹的建议1   
2004-6-8 星期二(Tuesday) 晴   
  我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有
能力去追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 
这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的
讨论C#里面可以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风
来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大
学生都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶
这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。 

几个误区   
初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一
些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者
几种: 
认为计算机技术等于编程技术: 
有些人即使没有这个想法,在潜意识中也有这样的冲动。让我奇怪的是,许多信息
学院的学生也有这样的念头。认为计算机专业就是编程专业,与编程无关的,或者不太
相关的课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。 

其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最
底层的人是程序员(CODER)。计算机技术包括了多媒体,计算机网络,人工智能,模式
识别,管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程
实践的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一
个有趣的现象是,不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中
良好的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白,自己这些东
西,学的时候并不比其它专业难,所以自然也不会高档到哪里去。 

咬文嚼字的孔已己作风: 

我见过一本女生的《计算机网络原理》教材,这个女生像小学生一样在书上划满了
横杠杠,笔记做得满满的,打印出来一定比教材还厚。我不明白的是,像计算机网络原
理这样的课程有必要做笔记?我们的应试教育的确害了不少学生,在上《原理》这一类
课程的时候许多学生像学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行
为。所谓《原理》,即是需要掌握它为什么这样做,学习why,而不是how(怎样做)。
极端认真的学生背下以太网的网线最大长度,数据帧的长度,每个字段的意义,IP报头
的格式等等,但是忘了路由的原则,忘了TCP/IP协议设计的宗旨。总之许多人花了大量
的时间把书背得滚瓜烂熟却等于什么也没学。 

在学习编程的时候这些学生也是这样,他们确切的记得C++语法的各个细节。看完了
C++教程后看《Thinking in C++》(确实是好书),《Inside C++》,《C++ 
reference》,this C++, that C++……,然后是网上各种各样的关于C++语法的奇闻逸
事,然后发现自己又忘了C++的一些语法,最后回头继续恶补…。有个师弟就跟我说:
“C++ 太难了,学了这里忘了那里,学了继承忘了模板。”我的回答道:“你不去学就
容易了”。我并没有教坏他,只是告诉他,死抠C++的语法就和孔已己炫耀茴香豆的茴字
有几种写法一样毫无意义。你根本不需要对的C++语法太关心,动手编程就是了,有不记
得的地方一查MSDN就立马搞定。我有个结论就是,实际的开发过程中对程序语法的了解
是最微不足道的知识。这是为什么我在为同学用Basic(我以前从没有学过它)写一个小
程序的时候,只花了半个小时看了看语法,然后再用半个小时完成了程序,而一个小时
后我又完全忘记了Basic 的所有关键字。 

不顾基础,盲目追赶时髦技术: 

终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来,变成钱。这
种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的,而且IT技术进步
是如此的快,不跟进就是失业。但是对于初学者来说(尤其是时间充裕的大中专在校
生),这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是
他有足够的时间沉下心来学习基础性的东西,学习why 而不是how。时髦的技术往往容易
掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成
本。但在IT领域内的现实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越
快。每一次新的技术出来,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使
得自己在跟进的过程中花费大量的时间,而等他学会了,这种技术也快淘汰了。基础的
课程,比方数据结构,操作系统原理等等虽然不能让你立马就实现一个linux(这是许多
人嘲笑理论课程无用的原因),但它们能够显著的减少你在学习新技术时学习曲线的坡
度。而且对于许多关键的技术(比方Win32 SDK 程序的设计,DDK的编程)来说甚至是不
可或缺的。 

一个活生生的例子是我和我的一个同学,在大一时我还找不到开机按纽,他已经会
写些简单的汇编程序了。我把大二的所有时间花在了汇编,计算机体系结构,数据结
构,操作系统原理等等这些课程的学习上,而他则开始学习HTML和VB,并追赶ASP的潮
流。大三的时候我开始学习Windows 操作系统原理,学习SDK编程,时间是漫长的,这时
我才能够用VC开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自
己还在学习如何创建对话框而懊恼不已,但临到毕业才发现自己的选择是何等的正确。
和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方:假设学习VB
编程需要4个月,学习基础课程和VC的程序设计需要1年。那么如果你先学VB,再来学习
后者,时间不会减少,还是1年,而反过来,如果先学习后者,再来学VB,也许你只需要
1个星期就能学得非常熟练。 
几个重要的基础课程 
  
如果你是学生,或者如果你有充足的时间。我建议你仔细的掌握下面的知识。我的
建议是针对那些希望在IT技术上有所成就的初学者。同时我还列出了一些书目,这些书
应该都还可以在书店买到。说实在的,我在读其他人的文章时最大的心愿就是希望作者
列出一个书单。 

大学英语-不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是
不可想象的。中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把E
文印刷上去。学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。
吃得苦下得狠心绝对是任何行业都需要的品质。 

计算机体系结构和汇编语言-关于体系结构的书遍地都是,而且也大同小异,倒是
汇编有一本非常好的书《80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,
杨季文著)。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底
层的一些东西的时候会觉得是在看天书。 

计算机操作系统原理-我们的开发总是在特定的操作系统上进行,如果不是,只有
一种可能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我
们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,
我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看
《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 
2000 技术内幕之类吧)。关于学习它的必要性,ZDNET上的另一篇文章已经有过论述。 

数据结构和算法-这门课程能够决定一个人程序设计水平的高低,是一门核心课
程。我首选的是清华版的(朱战立,刘天时)。很多人喜欢买C++版的,但我觉得没有必
要。C++的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法
变得更复杂。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的。 

软件工程-这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一
样不知所云。我的建议是看《实用软件工程》(黄色,清华)。不要花太多的时间去记
条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工
作)以后再来回顾回顾,每次都会有收获。 

Windows 程序设计-《北京大学出版社,Petzold著》我建议任何企图设计Windows 
程序的人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好
放到这本书的后面读。在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原
始的C语言来完成Windows 程序设计。在学完了它以后,你才会发现VC其实是很容易学
的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。我知道的许多名
校甚至都已经用它作为教材进行授课。可见其重要。 

上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)。 

对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专
业基础课。如果不是,请参照计算机系的课程表。如果你发现自己看一本书时无法看下
去了,请翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。
如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以
一天至少50页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。 

你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的
书                           转载出处Java学习技术论坛

2004-6-8 星期二(Tuesday) 晴   
  日三省乎己     
每天读的书太多,容易让人迷失方向。一定要在每天晚上想想自己学了些什么,还
有些什么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不
够等等。同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流
而是引领技术潮流。同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的
东西。坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER。 

把最多的时间花在学习上 
这是对初学者最后的忠告。把每个星期玩CS或者CS的时间压缩到最少,不玩它们是
最好的。同时,如果你的ASP技术已经能够来钱,甚至有公司请你兼职的话,这就证明你
的天分能够保证你在努力的学习之后取得更好的收益,你应该去做更复杂的东西。眼光
放长远一些,这无论是对谁都是适用的