<?xml version="1.0" encoding="UTF-8" ?>
  <rss version="2.0">
    <channel>

<title>葵花向阳。</title>
      <link>http://zy1982.ycool.com/</link>
      <description><![CDATA[]]></description>
      <pubDate>Sat, 27 Jun 2009 17:06:51 GMT</pubDate>
      <lastBuildDate>Sat, 27 Jun 2009 17:06:51 GMT</lastBuildDate>
      <image>
        <url>http://sta.yculblog.com/images/logo/general-88x31.gif</url>
        <title>葵花向阳。</title>
        <link>http://zy1982.ycool.com/</link>
      </image>
<item>
        <title>唉</title>
        <link>http://zy1982.ycool.com/post.3297245.html</link>
        <description><![CDATA[今天老子又开始在杭州找房子<br />
老子的公交卡，手机卡都还要重新办<br />
他妈的杭州的东西就是比武汉的贵上一倍<br />
<br />
老子现在觉得&nbsp; 在一个地方开始生活以后 再去到另外一个地方&nbsp;&nbsp; 真的是需要浪费很多&nbsp; 适应很多<br />
我是不是太折腾<br />
<br />
踏踏实实在这里干吧&nbsp; 这个地方真的是个很容易让人神经错乱不知所措的城市&nbsp; 处处都要用钱 你稍不留心&nbsp; 钱就没了<br />
<br />
先找个安乐窝&nbsp; 然后就开始踏实做事了&nbsp; 安乐窝很重要&nbsp; 同事之间的人际关系也很重要&nbsp; 每天要面对很多事情 大脑不能乱 不能着急 <br />
<br />...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3297245.html</guid>
        <pubDate>Sat, 27 Jun 2009 16:06:17 GMT</pubDate>

      </item>

      <item>
        <title>启程在即。</title>
        <link>http://zy1982.ycool.com/post.3282576.html</link>
        <description><![CDATA[5年前的夏天，我狼狈的本科毕业。怀着百分百的无知与茫然去了杭州。<br />
5年后的现在，我又一次即将前往杭州工作，上班的地点，与5年前相比，只是隔了一条并不宽的马路。<br />
表面上看来，似乎变化不大。<br />
<br />
我的外表也似乎看上去没有多大的变化。<br />
<br />
然而这期间的过程，却远不止隔了一条马路的差别。<br />
<br />
<br />
<br />
<br />...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3282576.html</guid>
        <pubDate>Fri, 19 Jun 2009 14:06:49 GMT</pubDate>

      </item>

      <item>
        <title>一切顺其自然。</title>
        <link>http://zy1982.ycool.com/post.3270735.html</link>
        <description><![CDATA[别紧张。<br />
让一切顺其自然。<br />
你很清楚自己缺少的是什么，这比以前已经强很多了，难道不是吗？<br />
然后你就去把那些你所缺少的东西都补上，这并不是实现不了的事情。<br />
<br />
要持之以恒。<br />
但是，不要期望完美。...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3270735.html</guid>
        <pubDate>Mon, 15 Jun 2009 17:06:43 GMT</pubDate>

      </item>

      <item>
        <title>要冷静。</title>
        <link>http://zy1982.ycool.com/post.3265851.html</link>
        <description><![CDATA[不能患得患失。<br />
要冷静。<br />
人家被选上而你没有，你肯定有不如人家的地方，所以没有什么好愤怒的。<br />
不能就此心理失衡，应该找到自己的缺点，脚踏实地去做事情。<br />
<br />
你目前的打算是在巩固基础，然后开始实践经验的积累。<br />
一步步的来，不能头脑发热，不能看见别人有你没有就心理失衡。然后冲动的去寻找心理平衡点，这个是非常要不得的。<br />
<br />
好好的，打牢基础，让一切来得自然。...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3265851.html</guid>
        <pubDate>Fri, 12 Jun 2009 16:06:00 GMT</pubDate>

      </item>

      <item>
        <title>突然想到的</title>
        <link>http://zy1982.ycool.com/post.3216091.html</link>
        <description><![CDATA[<p><br />
<br />
12很勤奋&nbsp; 要强&nbsp; 同时12会嫉恨所有比她强的人 12从不同情弱者 12担心的只是自己被划为弱者<br />
12每天早上6点半准时起床 骑自行车上学 爬一个长坡 爬坡的时候会在心里数：星期一，星期二，星期三，星期四，星期五。。。然后明确一下今天是星期几，想想还有几天到周末，心理生起浅浅的压抑感和紧迫感<br />
12愿意去征服所有自己不擅长的事物，比如英语，比如物理，比如50米短跑，<br />
12也有必须承认不行的地方，比如跳远，双杠，但是为此12会哭上一整夜。然后加入学校的体育训练队，每天早上5点起来到学校去训练。<br />
12写日记。日记写的很极端，有时候通篇都是重复出现的两个字。<br />
12那个时候意识到了自己的虚荣心，12不断鞭策自己要战胜自己，超越自己。<br />
<br />
12的意思是：12岁的我。<br />
<br />
</p>...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3216091.html</guid>
        <pubDate>Sat, 16 May 2009 06:05:13 GMT</pubDate>

      </item>

      <item>
        <title>片段集合</title>
        <link>http://zy1982.ycool.com/post.3210819.html</link>
        <description><![CDATA[<p><font face="Arial">以前我在一直尝试找回自己，现在我已经可以完全回忆起年少时候我的内心世界。<br />
那是一颗极为敏感的心，同时也是谦卑的，而且会嫉恨人。<br />
压力很大的时候，我会不自觉的哭出来。<br />
那时我记忆力很好。</font></p>
<p><font face="Arial">这个世界太浮躁。</font></p>
<p><font face="Arial">1997年迷失以后，现在对于那个问题已经内心释然，现在需要做的是获得外界认同。这是很难的事情。</font></p>
<p><font face="Arial">初中最喜欢的是物理，高中物理却一直学不好，大学以后才恍然大悟，原来是不懂微积分。</font></p>
<p><font face="Arial">我总是太注意一些细节，我总想让自己心安理得懂得所有的东西。这个毛病也始于1997年，是当年的中考强迫症的后遗症。</font></p>
<p><font face="Arial">难道我是个适合做研究的人？可是事实证明我的理解能力要比常人慢，是的，我很小时候就意识到。但是，等我理解以后，我会比常人理解的深刻。</font></p>
<p><font face="Arial">所以我的内心有一种潜在的自卑。<br />
但是我外在有时候却很张扬。</font></p>
<p><font face="Arial">其实我的语言表达能力相当发达，比同龄人发达得早。<br />
长大的我却越来越沉默。</font></p>
<p><font face="Arial">我究竟是在哪一步走错了，还是我本身就是这样的发展趋势？</font></p>...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3210819.html</guid>
        <pubDate>Wed, 13 May 2009 15:05:47 GMT</pubDate>

      </item>

      <item>
        <title>无光驱，在XP上装双系统：redhat LINUX</title>
        <link>http://zy1982.ycool.com/post.3206023.html</link>
        <description><![CDATA[<font face="Arial">
<p dir="ltr" style="MARGIN-RIGHT: 0px" align="left"><font face="Arial">无光驱，在XP上装双系统：redhat LINUX <br />
<br />
1.利用硬盘分区工具软件PowerQuest PartionMagic 8.0调整XP的硬盘分区 <br />
<br />
（1）我们需要给LINUX分配至少7G的硬盘自由空间，也可以自行调整，主要是要考虑到根据机器物理内存大小设置LINUX的虚拟内存 的时候，前者的2倍等于后者（笔者的机器上是：2G物理内存），再加上其他程序，大概在3G左右，故4+3=7G。 <br />
（2）注意这个自由空间，是完全的自由空间，而不是从属于XP操作系统的硬盘分区.这里有一个小技巧:在从XP的一个盘上释放出7G 的空间以后，虽然该空间还没有格式化，但是需要手工调整XP的硬盘分区大小，因为此时该分区仍然属于XP的逻辑分区。将XP逻辑分区手工调整为（当前逻辑分区大小-自由空间大小），这时会发现，被我们释放出来的自由空间已经不再属于XP逻辑分区的颜色方框 的包围之中，这样的空间就实现了我们需要的完全的自由空间了。不需要格式化这个空间为EXT3格式，因为LINUX安装的时候会自动格式化。 <br />
（3）既然是无光驱安装，我们必须把redhat linux9的三个iso文件拷贝到电脑硬盘上。注意LINUX安装程序是不能读取NTFS格式分区中的文件的，所以我们需要将redhat linux9的三个iso文件置于电脑的FAT32分区之下。如果你的电脑没有FAT32分区，这个时候需要利用硬盘分区工具软件PowerQuest PartionMagic 8.0建立一个fat32格式的分区。 <br />
<br />
2.用winrar软件把redhat linux9的第一个iso文件中的dosutils目录提取出来,放在一个你的fat32格式的分区上,比如说放在d 盘的INSTALL目录下,把三个iso文件也放在同一目录下. <br />
<br />
3.如果你会无光驱下安装XP操作系统，那么就该知道，实际上我们是在DOS下直接调用的XP安装程序中安装运行文件，从而进入XP的安装程序的。所以，这个时候，我们也需要一个在启动系统的时候，可以进入DOS的引导程序。我用的矮人DOS工具软件。 <br />
<br />
4.准备工作的最后一步是，你还要知道你的基本的硬件型号,这个可以在xp下的设备管理器中查看,网卡,声卡,显卡,modem,显示器,就 这些了,如有其他的,都可以查到. 记下来,以便在安装linux时正确选择.不过一般情况下安装系统会正确检测到这些硬件,如果你有一些特别的设备,就只能手动安装了. <br />
<br />
5.下面开始安装。 <br />
（1）重起操作系统,选择菜单,进入dos.在dos下进入D盘的install目录,进入dosutils目录,执行autoboot,自动引导,开始安装linux.建议初次安装者选择图形模式(回车默认选择图形模式),当然text模式会快一些,不过要阅读更多的english. <br />
（2）我们得清楚linux下的硬盘分区.在windows xp下,分区按照c,d,e等来标识,一般c为主分区,d为逻辑分区的第一个扩展分区.对应在linux下,c为/dev/hda1(假定我们的硬盘是 ide的),d为/dev/hda5,e为/dev/hda6.在linux下,一块硬盘可以有4个主分区,扩展分区从hda5(或者sda5,其中a表 示第一块ide或scsi硬盘,b表示第二块)开始.比如你目前的xp分区为c,d,e,f,其中c为主分区,d,e,f为扩展分区,那么在linux下 对应为hda1,hda5,hda6,hda7. <br />
我们刚才把iso文件放在了d盘,在进入 linux安装界面后,会要求我们选择安装文件所在位置,你需要选择/dev/hda5,然后在下面的条形区域输入install,告诉安装程序我们的安 装文件在/dev/hda5/install目录下,然后安装程序就自己搜索这个目录,找到第一个iso文件,开始安装. <br />
（3）接下来就和从光盘安装一模一样了.一路next,到选择分区时,建议选择用手动分区。 <br />
一般来说建立LINUX 需要三个分区。一个挂载点是/BOOT ，引导分区格式为EXT2 或者EXT3 ，大小在150-200MB 为合适。太大了只是浪费 。一个是格式SWAP，类似WINDOWS下的虚拟内存建议是比实际内存大2倍为合适，最后一个是挂载点 / ，是LINUX 主分区，格式EXT3，这个装东西的话主要就在这个区了。顺序是先建立 /BOOT ，然后 SWAP， 最后 / 。/BOOT是可以不建立的。 <br />
这里还有一个问题，LINUX下有四个主分区，但是XP已经占据了两个：XP的系统分区，XP的逻辑分区。所以，这个时候真正我们可以创建的主分区就只剩下两个了。一个给SWAP，一个给/。至于/BOOT可以先不建立。 <br />
（4）选择bootloader,系统默认grub,就用grub好了.系统会自动列出两个菜单,dos和red hat linux,把dos改为windows xp,然后回车就可以了. <br />
（5）接下来就是一些选择了,和光盘安装一样了.可以在网上查找相关资料,这类资料多如牛毛,简单易懂.照着做就成了. <br />
<br />
<br />
安装完毕后,你就可以享受linux之旅了.</font></p>
</font>...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3206023.html</guid>
        <pubDate>Sat, 09 May 2009 17:05:59 GMT</pubDate>
<category>xp</category>

        <category>双系统</category>

        <category>无光驱</category>

        <category>redhat linux</category>

        <category>powerquest partionmagic 8.0</category>
      </item>

      <item>
        <title>知识结构</title>
        <link>http://zy1982.ycool.com/post.3203983.html</link>
        <description><![CDATA[1：J2SE <br />
&nbsp;面向对象－封装、继承、多态<br />
&nbsp;内存的分析<br />
&nbsp;递归<br />
&nbsp;集合类、泛型、自动打包与解包、Annotation <br />
&nbsp;IO <br />
&nbsp;多线程、线程同步 <br />
&nbsp;TCP/UDP <br />
&nbsp;AWT、事件模型、匿名类 <br />
&nbsp;正则表达式<br />
&nbsp;反射机制<br />
&nbsp;<br />
&nbsp;2：数据库（Oracle或者MySQL）<br />
&nbsp;SQL语句<br />
&nbsp;多表连接，内外连接， 子查询等<br />
&nbsp;管理表、视图、索引、序列、约束等 <br />
&nbsp;树状结构存储<br />
&nbsp;存储过程、触发器 <br />
&nbsp;数据库设计三范式、<br />
&nbsp;<br />
&nbsp;3：JDBC<br />
&nbsp;JDBC基础<br />
&nbsp;连接池 <br />
&nbsp;树状结构存储与展现 <br />
&nbsp;DataSource &amp; RowSet <br />
&nbsp;JDBC连接Oracle及MySQL<br />
&nbsp;<br />
&nbsp;4：HTML_CSS_JAVASCRIPT<br />
&nbsp;html、css、javascript基础语法<br />
&nbsp;JavaScript Form判断 <br />
&nbsp;Dom编程基础（事件处理等） <br />
&nbsp;JS常用效果如TreeView、下拉联动等 <br />
&nbsp;JS学习方法 <br />
&nbsp;JS调试方法 <br />
&nbsp;DreamWeaver初步（建立HTML、Table、Form、CSS）等<br />
&nbsp;<br />
&nbsp;5：Servlet &amp; JSP<br />
&nbsp;<br />
&nbsp;tomcat基础 <br />
&nbsp;servlet基础 <br />
&nbsp;web.xml配置基础 <br />
&nbsp;web application的结构 <br />
&nbsp;servlet生命周期 <br />
&nbsp;request response等常用方法 <br />
&nbsp;ServletContext类 <br />
&nbsp;HTTP协议基础（GET POST） <br />
&nbsp;Cookie <br />
&nbsp;Session <br />
&nbsp;Application <br />
&nbsp;<br />
&nbsp;JSP的几种语法（包括JSTL等）注意在项目中练习，不要拘泥于语法细节而裹步不前。<br />
&nbsp;<br />
&nbsp;6：Struts<br />
&nbsp;多层架构理论 <br />
&nbsp;Model 1 and Model 2 <br />
&nbsp;Struts基本概念 <br />
&nbsp;MVC<br />
&nbsp;Action与业务逻辑类的关系 <br />
&nbsp;在Struts与JSP之间传递数据 <br />
&nbsp;Struts处理流程（控制流） <br />
&nbsp;Struts TagLib（了解常用的） <br />
&nbsp;JSTL<br />
&nbsp;ActionForm <br />
&nbsp;字段收集 <br />
&nbsp;上传文件 <br />
&nbsp;类型转换 <br />
&nbsp;DTO <br />
&nbsp;动态Action Form <br />
&nbsp;验证框架<br />
&nbsp;ActionForward 转发与重定向 <br />
&nbsp;动态生成ActionForward <br />
&nbsp;全局与局部的ActionForward <br />
&nbsp;Action Forward Scope<br />
&nbsp;UnknownActionMapping <br />
&nbsp;Action的线程安全 <br />
&nbsp;I18N <br />
&nbsp;如何切换语言环境 <br />
&nbsp;Struts异常处理机制 程序处理 自动处理 自定义异常处理器 <br />
&nbsp;Struts的多模块配置<br />
&nbsp;<br />
&nbsp;7：XML<br />
&nbsp;（XML/XSL、XSLT/DTD、SCHEMA等基础的概念、关于Java的编程可以暂时扔在一边）<br />
&nbsp;<br />
&nbsp;8：Hibernate<br />
&nbsp;OR Mapping原理 <br />
&nbsp;Hibernate基础开发步骤 <br />
&nbsp;Hibernate基本接口（重点Session） <br />
&nbsp;普通属性映射 <br />
&nbsp;关联关系映射 <br />
&nbsp;Native SQL <br />
&nbsp;inverse lazy cascade <br />
&nbsp;继承关系映射 <br />
&nbsp;HQL <br />
&nbsp;性能优化 一级缓存 二级缓存 查询缓存 <br />
&nbsp;事务与并发 悲观锁、乐观锁 <br />
&nbsp;OpenSessionInView <br />
&nbsp;CurrentSession <br />
&nbsp;（至于JTA、联合主键、自然主键、动态主键、Any类型 Creteria Queries Intercepter and Event 自定义类型等，可以暂时扔在一边）<br />
&nbsp;<br />
&nbsp;9：Spring<br />
&nbsp;IOC/DI <br />
&nbsp;Spring配置<br />
&nbsp;Spring架构 <br />
&nbsp;AOP及Spring AOP <br />
&nbsp;声明式事务（AOP） <br />
&nbsp;Spring + Hibernate Spring支持Web <br />
&nbsp;Scope <br />
&nbsp;（其他的Spring模块对于自学来说可以暂时扔在一边）<br />
&nbsp;<br />
&nbsp;10：EJB3.0<br />
&nbsp;J2EE架构基础（JTA JMS等） <br />
&nbsp;EJB基础（地位及基本理论、分类等） <br />
&nbsp;Annotation <br />
&nbsp;Ant编译与部署EJB <br />
&nbsp;Session Bean <br />
&nbsp;EJB的依赖注入 <br />
&nbsp;Persistence API <br />
&nbsp;（可以用JBoss学习EJB3.0）<br />
&nbsp;<br />
&nbsp;11:至于SOA，对于自学的同学来说，暂时不用特别关注。<br />...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3203983.html</guid>
        <pubDate>Fri, 08 May 2009 08:05:59 GMT</pubDate>

      </item>

      <item>
        <title>要有计划。</title>
        <link>http://zy1982.ycool.com/post.3201690.html</link>
        <description><![CDATA[1.清楚未来的发展城市，职业定位<br />
2.清楚自己现在的技术水平<br />
3.在做一个选择的时候，要清楚自己从中是否能获得技术提升<br />
4.选择一个在未来可以获得稳定的，较高的，自己完全能胜任并能有所突破的职业定位...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3201690.html</guid>
        <pubDate>Wed, 06 May 2009 02:05:22 GMT</pubDate>

      </item>

      <item>
        <title>转载 Java学习之路 --The Road Of Java Study</title>
        <link>http://zy1982.ycool.com/post.3191668.html</link>
        <description><![CDATA[http://news.csdn.net/n/20070416/102870.html<br />
<font size="2">JAVA是一种平台，也是一种程序设计语言，如何学好程序设计不仅仅适用于JAVA，对C++等其他程序设计语言也一样管用。有编程高手认为，JAVA也好C也好没什么分别，拿来就用。为什么他们能达到如此境界？我想是因为编程语言之间有共通之处，领会了编程的精髓，自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。 <br />
<br />
　　1.1　培养兴趣 <br />
<br />
　　兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话，你会活的很累，也太对不起自己了。多关心一些行业趣事，多想想盖茨。不是提倡天天做白日梦，但人要是没有了梦想，你觉得有味道吗？可能像许多深圳本地农民一样，打打麻将，喝喝功夫茶，拜拜财神爷；每个月就有几万十几万甚至更多的进帐，凭空多出个&quot;食利阶层&quot;。你认为，这样有味道吗？有空多到一些程序员论坛转转，你会发现，他们其实很乐观幽默，时不时会冒出智慧的火花。 <br />
<br />
　　1.2　慎选程序设计语言 <br />
<br />
　　男怕入错行，女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事，它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域，而是已经渗透到了各行各业几乎每一个角落。 <br />
<br />
　　如果你对硬件比较感兴趣，你可以学习C语言/汇编语言，进入硬件开发领域。如果你对电信的行业知识及网络比较熟悉，你可以在C/C++等之上多花时间，以期进入电信软件开发领域。如果你对操作系统比较熟悉，你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。如果你想介入到应用范围最广泛的应用软件开发（包括电子商务电子政务系统）的话，你可以选择J2EE或.NET，甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉。总之，你需要根据自己的特点来选择合适你的编程语言。 <br />
<br />
　　1.3　要脚踏实地,快餐式的学习不可取 <br />
<br />
　　先分享一个故事。 <br />
<br />
　　有一个小朋友，他很喜欢研究生物学，很想知道那些蝴蝶如何从蛹壳里出来，变成蝴蝶便会飞。 有一次，他走到草原上面看见一个蛹，便取了回家，然后看着，过了几天以后，这个蛹出了一条裂痕，看见里面的蝴蝶开始挣扎，想抓破蛹壳飞出来。 这个过程达数小时之久，蝴蝶在蛹里面很辛苦地拼命挣扎，怎么也没法子走出来。这个小孩看着看着不忍心，就想不如让我帮帮它吧，便随手拿起剪刀在蛹上剪开，使蝴蝶破蛹而出。 但蝴蝶出来以后，因为翅膀不够力，变得很臃肿，飞不起来。 <br />
<br />
　　这个故事给我们的启示是：欲速则不达。 <br />
<br />
　　浮躁是现代人最普遍的心态，能怪谁？也许是贫穷落后了这么多年的缘故，就像当年的大跃进一样，都想大步跨入共产主义社会。现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。就拿笔者比较熟悉的深圳IT培训行业来说吧，居然有的打广告宣称&quot;参加培训，100%就业&quot;，居然报名的学生不少，简直是藐视天下程序员。社会环境如是，我们不能改变，只能改变自己,闹市中的安宁，弥足珍贵。许多初学者C++/JAVA没开始学，立马使用VC/JBuilder,会使用VC/JBuilder开发一个Hello World程序，就忙不迭的向世界宣告，&quot;我会软件开发了&quot;，简历上也大言不惭地写上&quot;精通VC/JAVA&quot;。结果到软件公司面试时要么被三两下打发走了，要么被驳的体无完肤，无地自容。到处碰壁之后才知道捧起《<a href="http://fifid.com/search/C%2B%2B%E7%BC%96%E7%A8%8B%E6%80%9D%E6%83%B3?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">C++编程思想</a>》《<a href="http://fifid.com/search/JAVA%E7%BC%96%E7%A8%8B%E6%80%9D%E6%83%B3?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">JAVA编程思想</a>》仔细钻研，早知如此何必当初呀。 <br />
<br />
　　&quot;你现在讲究简单方便，你以后的路就长了&quot;，好象也是佛经中的劝戒。 <br />
<br />
　　1.4　多实践,快实践 <br />
<br />
　　彭端淑的《<a href="http://fifid.com/search/%E4%B8%BA%E5%AD%A6%E4%B8%80%E9%A6%96%E7%A4%BA%E5%AD%90%E4%BE%84?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">为学一首示子侄</a>》中有穷和尚与富和尚的故事。 <br />
<br />
　　从前，四川边境有两个和尚，一个贫穷，一个有钱。一天，穷和尚对富和尚说：&quot;我打算去南海朝圣，你看怎么样？&quot;富和尚说：&quot;这里离南海有几千里远，你靠什么去呢？&quot;穷和尚说：&quot;我只要一个水钵，一个饭碗就够了。&quot;富和尚为难地说：&quot;几年前我就打算买条船去南海，可至今没去成，你还是别去吧！&quot; 一年以后，富和尚还在为租赁船只筹钱，穷和尚却已经从南海朝圣回来了。 <br />
<br />
　　这个故事可解读为：任何事情，一旦考虑好了，就要马上上路，不要等到准备周全之后，再去干事情。假如事情准备考虑周全了再上路的话，别人恐怕捷足先登了。软件开发是一门工程学科，注重的就是实践，&quot;君子动口不动手&quot;对软件开发人员来讲根本就是错误的，他们提倡&quot;动手至上&quot;，但别害怕，他们大多温文尔雅，没有暴力倾向，虽然有时候蓬头垢面的一副&quot;比尔盖茨&quot;样。有前辈高人认为，学习编程的秘诀是：编程、编程、再编程，笔者深表赞同。不仅要多实践，而且要快实践。我们在看书的时候，不要等到你完全理解了才动手敲代码，而是应该在看书的同时敲代码，程序运行的各种情况可以让你更快更牢固的掌握知识点。 <br />
<br />
　　1.5　多参考程序代码 <br />
<br />
　　程序代码是软件开发最重要的成果之一，其中渗透了程序员的思想与灵魂。许多人被《<a href="http://fifid.com/search/%E4%BB%99%E5%89%91%E5%A5%87%E4%BE%A0%E4%BC%A0?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">仙剑奇侠传</a>》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。为什么要以悲剧结尾？据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局，他把自己的感觉融入到游戏中，却让众多的仙剑迷扼腕叹息。 <br />
<br />
　　多多参考代码例子，对JAVA而言有参考文献[4.3],有API类的源代码(JDK安装目录下的src.zip文件)，也可以研究一些开源的软件或框架。 <br />
<br />
　　1.6　加强英文阅读能力 <br />
<br />
　　对学习编程来说，不要求英语, 但不能一点不会,。最起码像JAVA API文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以；旁边再开启一个&quot;金山词霸&quot;。看多了就会越来越熟练。在学JAVA的同时学习英文，一箭双雕多好。另外好多软件需要到英文网站下载，你要能够找到它们，这些是最基本的要求。英语好对你学习有很大的帮助。口语好的话更有机会进入管理层，进而可以成为剥削程序员的&quot;周扒皮&quot;。 <br />
<br />
　　1.7　万不得已才请教别人 <br />
<br />
　　笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现，大部分的问题学生稍做思考就可以解决。请教别人之前，你应该先回答如下几个问题。 <br />
<br />
　　你是否在google中搜索了问题的解决办法？ <br />
<br />
　　你是否查看了JAVA API文档？ <br />
<br />
　　你是否查找过相关书籍？ <br />
<br />
　　你是否写代码测试过？ <br />
<br />
　　如果回答都是&quot;是&quot;的话，而且还没有找到解决办法，再问别人不迟。要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。 <br />
<br />
　　1.8　多读好书 <br />
<br />
　　书中自有颜如玉。比尔?盖茨是一个饱读群书的人。虽然没有读完大学，但九岁的时候比尔?盖茨就已经读完了所有的百科全书，所以他精通天文、历史、地理等等各类学科，可以说比尔?盖茨不仅是当今世界上金钱的首富，而且也可以称得上是知识的巨富。 <br />
<br />
　　笔者在给学生上课的时候经常会给他们推荐书籍，到后来学生实在忍无可忍开始抱怨，&quot;天呐，这么多书到什么时候才能看完了&quot;，&quot;学软件开发，感觉上了贼船&quot;。这时候，我的回答一般是，&quot;别着急，什么时候带你们去看看我的书房，到现在每月花在技术书籍上的钱400元，这在软件开发人员之中还只能够算是中等的&quot;，学生当场晕倒。（注：这一部分学生是刚学软件开发的） <br />
<br />
　　对于在JAVA开发领域的好书在笔者另外一篇文章中会专门点评。该文章可作为本文的姊妹篇。 <br />
<br />
　　1.9　使用合适的工具 <br />
<br />
　　工欲善其事必先利其器。软件开发包含各种各样的活动，需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等，没有工具帮忙可以说是寸步难行。工具可以提高开发效率，使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境界就很高了，无招胜有招，手中无剑心中有剑这样的境界几乎不可企及。在笔者另外一篇文章中会专门阐述如何选择合适的工具（该文章也可作为本文的姊妹篇）。 <br />
<br />
　　2．软件开发学习路线<br />
<br />
　　两千多年的儒家思想孔孟之道，中庸的思想透入骨髓，既不冒进也不保守并非中庸之道，而是找寻学习软件开发的正确路线与规律。 <br />
<br />
　　从软件开发人员的生涯规划来讲，我们可以大致分为三个阶段，软件工程师&rarr;软件设计师&rarr;架构设计师或项目管理师。不想当元帅的士兵不是好士兵，不想当架构设计师或项目管理师的程序员也不是好的程序员。我们应该努力往上走。让我们先整理一下开发应用软件需要学习的主要技术。 <br />
<br />
　　A．基础理论知识，如操作系统、编译原理、数据结构与算法、计算机原理等，它们并非不重要。如不想成为计算机科学家的话，可以采取&quot;用到的时候再来学&quot;的原则。 <br />
<br />
　　B．一门编程语言，现在基本上都是面向对象的语言，JAVA/C++/C#等等。如果做WEB开发的话还要学习HTML/JavaScript等等。 <br />
<br />
　　C．一种方法学或者说思想，现在基本都是面向对象思想（OOA/OOD/设计模式）。由此而衍生的基于组件开发CBD/面向方面编程AOP等等。 <br />
<br />
　　D．一种关系型数据库，ORACLE/SqlServer/DB2/MySQL等等 <br />
<br />
　　E．一种提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET等。 <br />
<br />
　　F．一种UML建模工具，用ROSE/VISIO/钢笔进行建模。 <br />
<br />
　　G．一种软件过程，RUP/XP/CMM等等，通过软件过程来组织软件开发的众多活动，使开发流程专业化规范化。当然还有其他的一些软件工程知识。 <br />
<br />
　　H．项目管理、体系结构、框架知识。 <br />
<br />
　　正确的路线应该是：B&rarr;C&rarr;E&rarr;F&rarr;G&rarr;H。 <br />
<br />
　　还需要补充几点： <br />
<br />
　　1）．对于A与C要补充的是，我们应该在实践中逐步领悟编程理论与编程思想。新技术虽然不断涌现，更新速度令人眼花燎乱雾里看花；但万变不离其宗，编程理论与编程思想的变化却很慢。掌握了编程理论与编程思想你就会有拨云见日之感。面向对象的思想在目前来讲是相当关键的，是强势技术之一，在上面需要多投入时间，给你的回报也会让你惊喜。 <br />
<br />
　　2）．对于数据库来说是独立学习的，这个时机就由你来决定吧。 <br />
<br />
　　3）．编程语言作为学习软件开发的主线，而其余的作为辅线。 <br />
<br />
　　4）．软件工程师着重于B、C、E、 D；软件设计师着重于B、C、E、 D、F；架构设计师着重于C、F、H。 <br />
<br />
　　3．如何学习JAVA?<br />
<br />
　　3.1 JAVA学习路线 <br />
<br />
　　3.1.1 基础语法及JAVA原理 <br />
<br />
　　基础语法和JAVA原理是地基，地基不牢靠，犹如沙地上建摩天大厦，是相当危险的。学习JAVA也是如此，必须要有扎实的基础，你才能在J2EE、J2ME领域游刃有余。参加SCJP（SUN公司认证的JAVA程序员）考试不失为一个好方法，原因之一是为了对得起你交的1200大洋考试费，你会更努力学习，原因之二是SCJP考试能够让你把基础打得很牢靠，它要求你跟JDK一样熟悉JAVA基础知识；但是你千万不要认为考过了SCJP就有多了不起，就能够获得软件公司的青睐，就能够获取高薪，这样的想法也是很危险的。获得&quot;真正&quot;的SCJP只能证明你的基础还过得去，但离实际开发还有很长的一段路要走。 <br />
<br />
　　3.1.2 OO思想的领悟 <br />
<br />
　　掌握了基础语法和JAVA程序运行原理后，我们就可以用JAVA语言实现面向对象的思想了。面向对象，是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候，你会感到特别的熟悉亲切，学起来像喝凉水这么简单。 <br />
<br />
　　使用面向对象的思想进行开发的基本过程是： <br />
<br />
　　●调查收集需求。 <br />
<br />
　　●建立用例模型。 <br />
<br />
　　●从用例模型中识别分析类及类与类之间的静态动态关系，从而建立分析模型。 <br />
<br />
　　●细化分析模型到设计模型。 <br />
<br />
　　●用具体的技术去实现。 <br />
<br />
　　●测试、部署、总结。 <br />
<br />
　　3.1.3 基本API的学习 <br />
<br />
　　进行软件开发的时候，并不是什么功能都需要我们去实现，也就是经典名言所说的&quot;不需要重新发明轮子&quot;。我们可以利用现成的类、组件、框架来搭建我们的应用，如SUN公司编写好了众多类实现一些底层功能，以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用？方法的参数个数及类型是？类的构造器需不需要参数？总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他编写的类该如何使用吧。他们只能提供文档给我们查看，JAVA DOC文档（参考文献4.4）就是这样的文档，它可以说是程序员与程序员交流的文档。 <br />
<br />
　　基本API指的是实现了一些底层功能的类，通用性较强的API，如字符串处理/输入输出等等。我们又把它成为类库。熟悉API的方法一是多查JAVA DOC文档（参考文献4.4），二是使用JBuilder/Eclipse等IDE的代码提示功能。 <br />
<br />
　　3.1.4 特定API的学习 <br />
<br />
　　JAVA介入的领域很广泛，不同的领域有不同的API，没有人熟悉所有的API，对一般人而言只是熟悉工作中要用到的API。如果你做界面开发，那么你需要学习Swing/AWT/SWT等API；如果你进行网络游戏开发，你需要深入了解网络API/多媒体API/2D3D等；如果你做WEB开发，就需要熟悉Servlet等API啦。总之，需要根据工作的需要或你的兴趣发展方向去选择学习特定的API。 <br />
<br />
　　3.1.5 开发工具的用法 <br />
<br />
　　在学习基础语法与基本的面向对象概念时，从锻炼语言熟练程度的角度考虑，我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境，以免过于关注IDE的强大功能而分散对JAVA技术本身的注意力。过了这一阶段你就可以开始熟悉IDE了。 <br />
<br />
　　程序员日常工作包括很多活动，编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、文档的更新等等，几乎每一项活动都有专门的工具，如果独立使用这些工具的话，你将会很痛苦，你需要在堆满工具的任务栏上不断的切换，效率很低下，也很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等等，甚至可以把UML建模工具也集成进去，又提供了丰富的向导帮助生成框架代码，让我们的开发变得更轻松。应该说IDE发展的趋势就是集成软件开发中要用到的几乎所有工具。 <br />
<br />
　　从开发效率的角度考虑，使用IDE是必经之路，也是从一个学生到一个职业程序员转变的里程碑。 <br />
<br />
　　JAVA开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种；而Eclipse、JBuilder占有的市场份额是最大的。JBuilder在近几年来一直是JAVA集成开发环境中的霸主，它是由备受程序员尊敬的Borland公司开发，在硝烟弥漫的JAVA IDE大战中,以其快速的版本更新击败IBM的Visual Age for JAVA等而成就一番伟业。IBM在Visual Age for JAVA上已经无利可图之下，干脆将之贡献给开源社区，成为Eclipse的前身，真所谓&quot;柳暗花明又一村&quot;。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员（包括几乎所有的骨灰级程序员）的青睐，极具发展潜力。 <br />
<br />
　　3.1.6 学习软件工程 <br />
<br />
　　对小型项目而言，你可能认为软件工程没太大的必要。随着项目的复杂性越来越高，软件工程的必要性才会体现出来。参见&quot;软件开发学习路线&quot;小节。 <br />
<br />
　　3.2学习要点 <br />
<br />
　　确立的学习路线之后，我们还需要总结一下JAVA的学习要点，这些要点在前文多多少少提到过，只是笔者觉得这些地方特别要注意才对它们进行汇总，不要嫌我婆婆妈妈啊。 <br />
<br />
　　3.2.1勤查API文档 <br />
<br />
　　当程序员编写好某些类，觉得很有成就感,想把它贡献给各位苦难的同行。这时候你要使用&quot;javadoc&quot;工具（包含在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。 <br />
<br />
　　对待DOC文档要像毛主席语录，早上起床念一遍，吃饭睡觉前念一遍。 <br />
<br />
　　当需要某项功能的时候，你应该先查相应的DOC文档看看有没有现成的实现，有的话就不必劳神费心了直接用就可以了，找不到的时候才考虑自己实现。使用步骤一般如下： <br />
<br />
　　●找特定的包，包一般根据功能组织。 <br />
<br />
　　●找需要使用类，类命名规范的话我们由类的名字可猜出一二。 <br />
<br />
　　●选择构造器，大多数使用类的方式是创建对象。 <br />
<br />
　　●选择你需要的方法。 <br />
<br />
　　3.2.2 查书/google-&gt;写代码测试-&gt;查看源代码-&gt;请教别人 <br />
<br />
　　当我们遇到问题的时候该如何解决？ <br />
<br />
　　这时候不要急着问别人，太简单的问题，没经过思考的问题，别人会因此而瞧不起你。可以先找找书，到google中搜一下看看，绝大部分问题基本就解决了。而像&quot;某些类/方法如何使用的问题&quot;，DOC文档就是答案。对某些知识点有疑惑是，写代码测试一下，会给你留下深刻的印象。而有的问题，你可能需要直接看API的源代码验证你的想法。万不得已才去请教别人。 <br />
<br />
　　3.2.3学习开源软件的设计思想 <br />
<br />
　　JAVA领域有许多源代码开放的工具、组件、框架，JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归，你心甘吗？对这些工具、框架进行分析，领会其中的设计思想，有朝一日说不定你也能写一个XXX框架什么的，风光一把。分析开源软件其实是你提高技术、提高实战能力的便捷方法。 <br />
<br />
　　3.2.4 规范的重要性 <br />
<br />
　　没有规矩，不成方圆。这里的规范有两层含义。第一层含义是技术规范，多到http://www.jcp.org下载JSRXXX规范，多读规范，这是最权威准确最新的教材。第二层含义是编程规范，如果你使用了大量的独特算法，富有个性的变量及方法的命名方式；同时，没给程序作注释，以显示你的编程功底是多么的深厚。这样的代码别人看起来像天书，要理解谈何容易，更不用说维护了，必然会被无情地扫入垃圾堆。JAVA编码规范到此查看或下载http://java.sun.com/docs/codeconv/，中文的也有，啊，还要问我在哪，请参考3.2.2节。 <br />
<br />
　　3.2.5 不局限于JAVA <br />
<br />
　　很不幸，很幸运，要学习的东西还有很多。不幸的是因为要学的东西太多且多变，没时间陪老婆家人或女朋友，导致身心疲惫，严重者甚至导致抑郁症。幸运的是别人要抢你饭碗绝非易事，他们或她们需要付出很多才能达成心愿。 <br />
<br />
　　JAVA不要孤立地去学习，需要综合学习数据结构、OOP、软件工程、UML、网络编程、数据库技术等知识，用横向纵向的比较联想的方式去学习会更有效。如学习JAVA集合的时候找数据结构的书看看；学JDBC的时候复习数据库技术；采取的依然是&quot;需要的时候再学&quot;的原则。 <br />
</font>...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3191668.html</guid>
        <pubDate>Sun, 26 Apr 2009 02:04:11 GMT</pubDate>

      </item>

      <item>
        <title>[转载]程序员的十层楼（2-10）</title>
        <link>http://zy1982.ycool.com/post.3182267.html</link>
        <description><![CDATA[第6层 学者 <br />
<br />
当&quot;专家&quot;们想继续往上一层楼爬时，他们几乎一眼就可以看到楼梯的入口，不过令他们吃惊的是，楼梯入口处竖了一道高高的门槛，上面写着&quot;创新&quot;二字。不幸的是，大多数人在爬到第5层楼时已经体能消耗过度，无力翻过这道门槛。 <br />
<br />
有少数体能充足者，可以轻易翻越这道门槛，但是并不意味着体力消耗过度者就无法翻越，因为你只是暂时还没有掌握恢复体能的方法而已，当掌握了恢复体能的方法，将体能恢复后，你就可以轻易地翻越这道门槛了。 <br />
<br />
怎么才能将体能恢复呢？我们的老祖宗&quot;孔子&quot;早就教导过我们&quot;温故而知新&quot;，在英文里，研究的单词是&quot;research&quot;，其前缀&quot;re&quot; 和&quot;search&quot;分别是什么意思不用我解释吧。或许有些人觉得&quot;温故而知新&quot;和&quot;research&quot;有些抽象，不好理解，我再给打个简单的比方，比如你在爬一座高山，爬了半天，中途体力不支，怎么恢复体力呢？自然是休息一下，重新进食一些食物，体力很快就可以得到恢复。 <br />
<br />
由此可知，对体能消耗过度者，休息＋重新进食通常是恢复体能的最佳选择。可惜的是，国内的老板们并不懂得这点，他们的公司里不仅连正常国家规定的休息时间都不给足，有些公司甚至有员工&quot;过劳死&quot;出现。所以国内能翻越&quot;创新&quot;这道门槛的人是&quot;少之又少&quot;，和西方比起来估计是数量级的差别。 <br />
<br />
再说说重新进食的问题，这个重新进食是有讲究的，需要进食一些基础性易消化的简单食物，不能进食山珍海味级的复杂食物，否则很难快速吸收。以查找为例，并不是去天天盯着那些复杂的查找结构和算法进行研究，你需要做的是将二分查找、哈希查找、普通二叉树查找等基础性的知识好好地复习几遍。 <br />
<br />
以哈希查找为例，首先你需要去将各种冲突解决方法如链式结构、二次哈希等编写一遍，再试试不同种类的哈希函数，然后还需要试试在硬盘中如何实现哈希查找，并考虑数据从硬盘读到内存后，如何组织硬盘中的数据才能快速地在内存中构建出哈希表来，...，这样你可能需要将一个哈希表写上十几个不同的版本，并比较各个版本的性能、功能方面的区别和适用范围。 <br />
<br />
总之，对任何一种简单的东西，你需要考虑各种各样的需求，以需求来驱动研究。最后你将各种最基础性的查找结构和算法都了然于胸后，或许某天你再看其他更复杂的查找算法，或者你在散步时，脑袋里灵光一现，突然间就发现了更好的方法，也就从专家晋升为&quot;学者&quot;了。 <br />
<br />
学者所做的事情，通常都是在前人的基础上，进行一些小的优化和改进，例如别人发明了链式基数排序的方法，你第1个发现使用一定的方法，可以用数组替代链表进行基数排序，性能还能得到进一步提高。 <br />
<br />
由于学者需要的只是一些小的优化改进，因此中国还是有一定数量的学者。不过和国外的数量比起来，估计少了一个数量级而已。 <br />
<br />
也许有人会觉得现在中国许多公司申请专利的数量达到甚至超过西方发达国家了，我们的学者数量应该不会比他们少多少。因此，有必要把专利和这里说的创新的区别解释一下。 <br />
<br />
所谓专利者，只要是以前没有的，新的东西，都可以申请专利；甚至是以前有的东西，你把他用到了一个新的领域的产品里去，也可以申请专利。比如你在房子里造一个水泥柱子，只要以前没有人就这件事申请专利，那么你就可以申请专利，并且下次你把水泥柱子挪一个位置，又可以申请一个新的专利；或者你在一个柜子上打上几个孔，下次又把孔的位置改一改，...，均可申请专利。 <br />
<br />
这层楼里所说的创新，是指学术层面的创新，是基础研究方面的创新，和专利的概念是完全不同的，难度也是完全不同的。你即使申请了一万个象那种打孔一类的专利，加起来也够不到这层楼里的一个创新。 <br />
<br />
当你爬到第6层楼时，你也许会有一种突破极限的快感，因为你终于把那道高高的写着&quot;创新&quot;二字的门槛给翻过去了，实现了&quot;0&quot;的突破。这时，你也许有一种&quot;独上高楼，欲望尽天涯路&quot;的感觉，但是很快你会发现看到的都是比较近的路，远处的路根本看不清楚。如果你还有足够的体力的话，你会想爬到更高一层的楼层去。 <br />
<br />
第7层 大师 <br />
<br />
从第6层楼爬到第7层楼，并没有多少捷径可走，主要看你有没有足够的能量。你如果能象Hoare一样设计出一个快速排序的算法；或者象Eugene W. Myers一样设计出了一个用编辑图的最短路径模型来解决diff问题的算法；或者象M.J.D. Powell一样提出了一个能够处理非线性规划问题的SQP方法；或者你发现基于比较的排序算法，它的复杂度下界为O(NLogN)；或者你发现用栈可以将递归的算法变成非递归的；或者你设计出一个红黑树或者AVL树之类的查找结构；或者你设计出一个象C++或Java一样的语言；或者你发明了 UML；...，你就爬到了第7层，晋升为&quot;大师&quot;了。 <br />
<br />
上面举的这些例子中，其中有些人站的楼层比这层高，这里只是为了形象说明而举例他们的某个成就。从上面列出的一些大师的贡献可以看出，成为大师必须要有较大的贡献。首先解决问题必须是比较重要的，其次你要比前辈们在某方面有一个较大的提高，或者你解决的是一个全新的以前没有解决过的问题；最重要的是，主要的思路和方法必须是你自己提供的，不再是在别人的思路基础上进行的优化和改进。 <br />
<br />
看了上面这些要求，如果能量不够的话，你也许会觉得有些困难，所以不是每个人都能成为&quot;大师&quot;的。中国软件业里能称得上是&quot;大师&quot;的人，用屈指可数来形容，估计是绰绰有余。值得一提得是，国外的&quot;大师&quot;就象我们的&quot;大牛&quot;一样满天飞的多。 <br />
<br />
我把我猜测本国有可能进到这层楼的大师列一下，以起个抛砖引玉的作用。汉王的&quot;手写识别&quot;技术由于是完全保密的，不知道它里面用了什么思想，原创思想占的比重有多少，因此不知道该把它划到这层楼还是更高一层楼去。原山东大学王小云教授破解DES和MD5算法时，用到的方法不知道是不是完全原创的，如果是的话也可进到这层楼来。 <br />
<br />
陈景润虽然没有彻底解决哥德巴赫猜想，但他在解决问题时所用的方法是创新的，因此也可以进到这层楼来。当然，如果能彻底解决哥德巴赫猜想，那么可以算到更高的楼层去。 <br />
<br />
求伯君和王志东等大牛们，他们在做WPS和表格处理之类的软件时，不知是否有较大的原创算法在里面，如果有的话就算我错把他们划到了大牛层。由于所学有限，不知道国内还有那些人能够得上&quot;大师&quot;的级别，或许有少量做研究的教授、院士们，可以达到这个级别，有知道的不妨回个帖子晾一晾。 <br />
<br />
鉴于&quot;大师&quot;这个称号的光环效应，相信有不少人梦想着成为&quot;大师&quot;。或许你看了前面举的一些大师的例子，你会觉得要成为大师非常困难。不妨说一下，现在有一条通往&quot;大师&quot;之路的捷径打开了，那就是多核计算领域，有大量的处女地等待大家去挖掘。 <br />
<br />
以前在单核时代开发的各种算法，现在都需要改写成并行的。数据结构与算法、图像处理、数值计算、操作系统、编译器、测试调试等各个领域，都存在大量的机会，可以让你进到这层楼来，甚至有可能让你进到更高一层楼去。 <br />
<br />
第8层 科学家 <br />
<br />
科学家向来都是一个神圣的称号，因此我把他放在了&ldquo;大师&rdquo;之上。要成为科学家，你的贡献必须超越大师，不妨随便举一些例子。 <br />
<br />
如果你象Dijkstra一样设计了ALGOL语言，提出了程序设计的三种基本结构：顺序、选择、循环，那么你可以爬到第8层楼来。顺便说一下，即使抛开这个成果，Dijkstra凭他的PV操作和信号量概念的提出，同样可以进到这层楼。 <br />
<br />
如果你象Don Knuth一样，是数据结构与算法这门学科的重要奠基者，你也可以进到这层楼来。当然，数据结构和算法这门学科不是某个人开创的，是许多大师和科学家集体开创的。 <br />
<br />
如果你象巴科斯一样发明了Fortran语言，并提出了巴科斯范式，对高级程序语言的发展起了重要作用，你也可以进到这层楼来。 <br />
<br />
或者你象Ken Thompson、Dennis Ritchie一样发明了Unix操作系统和功能强大、高效、灵活、表达力强的C语言，对操作系统理论和高级编程语言均作出重大贡献，那么你也可以进到这层楼来。 <br />
<br />
或者你有Frederick P. Brooks一样机会，可以去领导开发IBM的大型计算机System/360和OS/360操作系统，并在失败后反思总结，写出《<a href="http://fifid.com/search/%E4%BA%BA%E6%9C%88%E7%A5%9E%E8%AF%9D?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">人月神话</a>》，对软件工程作出里程碑式的贡献，你也可以进到这层来。 <br />
<br />
或者你提出了面向对象设计的基本思想，或者你设计了互联网的TCP/IP协议，或者你象Steven A.Cook一样奠定NP完全性的理论基础，或者你象Frances Allen一样专注于并行计算来实现编译技术，在编译优化理论和技术取得基础性的成就，&hellip;，均可进入这层。 <br />
<br />
当然，如果你发明了C++语言或者Java语言，你进不到这层来，因为你用到的主要思想都是这层楼中的科学家提出的，你自己并没有没有多少原创思想在里面。 <br />
<br />
看了上面列出的科学家的成就，你会发现，要成为&ldquo;科学家&rdquo;，通常要开创一门分支学科，或者是这个分支学科的奠基者，或者在某个分支学科里作出里程碑式的重大贡献。如果做不到这些的话，那么你能象Andrew C. Yao（姚期智）一样在对计算理论的多个方向如伪随机数生成，密码学与通信复杂度等各个方向上作出重要贡献，成为集大成者，也可以进入这层楼。 <br />
<br />
成为&ldquo;科学家&rdquo;后，如果你有幸象Dijkstra一样，出现在一个非常重视科学的国度。当你去世时，你家乡满城的人都会自动地去为你送葬。不过如果不幸生错地方的话，能不挨&ldquo;板砖&rdquo;估计就算万幸了。 <br />
<br />
从上面随便举的一些例子中，你可能能猜到，西方科学家的数量是非常多的，于是你会想中国应该也有少量的科学家吧？我可以很负责任地告诉你一个不幸的结果，中国本土产生的科学家的数量为0。目前在国内，软件领域的唯一的科学家就是上面提过的姚期智，还是国外请回来的，并不是本土产生的。 <br />
<br />
可能你不同意我说的本土科学家数量为0的结论，因为你经常看到有许多公司里都有所谓&ldquo;首席XX科学家&rdquo;的头衔。我想说的是，这些所谓的&ldquo;首席XX科学家&rdquo;都是远远够不到这层楼的级别的，有些人的水平估计也就是一个&ldquo;牛人&rdquo;或&ldquo;大牛&rdquo;的级别，好一点的最多也就一个&ldquo;学者&rdquo;的级别。尤其是那些被称作&ldquo;首席经X学家&rdquo;的，基本上可以把称号改为&ldquo;首席坑大家&rdquo;。 <br />
<br />
虽然我国没有人能爬到这层楼上来，但是西方国家仍然有许多人爬到了比这层更高的楼上。如果要问我们比西方落后多少？那么可以简单地回答为：&ldquo;落后了三层楼&rdquo;。下面就来看看我们做梦都没有到过的更高一层楼的秘密。 <br />
<br />
第9层 大科学家 <br />
<br />
进入这层楼的门槛通常需要一些运气，比如某天有个苹果砸到你头上时，你碰巧发现了万有引力，那么你可以进到这层楼来。当然，万有引力几百年前就被人发现了，如果你现在到处嚷嚷着说你发现了万有引力，恐怕马上会有人打110，然后警察会把你送到不正常人类的聚集地去。因此，这里举万有引力的例子，只是说你要有类似的成就才能进到这层楼来。 <br />
<br />
牛顿发现万有引力定律开创了经典物理运动力学这门学科，如果你也能开创一门大的学科，那么你就从科学家晋升为&ldquo;大科学家&rdquo;。比如爱因斯坦创建了相对论，从一个小职员变成了大科学家。当然大科学家可远不止这两人，数学界里比物理学界更是多得多，如欧几里得创建了平面几何，笛卡尔开创解析几何，还有欧拉、高斯、莱布尼茨等数不清的人物，跟计算相关的大科学家则有图灵等人。 <br />
<br />
从上面列出的一些大科学家可以发现，他们的成就不仅是开创了一个大的学科，更重要的是他们的成就上升到了&ldquo;公理&rdquo;的层面。发现公理通常是需要一点运气的，如果你的运气不够好的话，另外还有一个笨办法也可以进到这层楼来，那就是成为集大成者。例如冯&middot;诺伊曼，对数学的所有分支都非常了解，许多领域都有较大的贡献，即使撇开他对计算机的开创贡献，成为大科学家照样绰绰有余。 <br />
<br />
当然，程序员们最关心的是自己有没有机会变成大科学家。既然计算机这门大学科的开创性成果早就被冯&middot;诺伊曼、图灵等人摘走了，那么程序员们是不是没有机会变成大科学家了呢？我们的古人说得好：&ldquo;江山代有才人出，各领风骚数百年&rdquo;，现在在计算机这门学科下面诞生了许多非常重要的大的分支，所以你还是有足够的机会进到这层楼的。 <br />
<br />
如果你能够彻底解决自然语言理解（机器翻译）这门学科中的核心问题， 或者你在人工智能或者机器视觉（图像识别）方面有突破性的发现，那么你同样可以轻易地晋升为&ldquo;大科学家&rdquo;。这样当某天你老了去世时，或许那天国人已经觉醒，你也能享受到如Dijkstra一样的待遇，有满城甚至全国的人去为你送葬。 <br />
<br />
现在还剩下另外一个大家感兴趣的问题没有讨论，那就是这层中已经出现了牛顿、爱因斯坦、高斯等我们平常人都认为是顶级的科学家，是不是这层已经是楼顶了呢？相信还记得本文标题的人应该知道现在仅仅是第9层，还有第10层没有到达呢。可能不少人现在要感到困惑了，难道还有人站在比牛顿、爱因斯坦、高斯等人更高的楼层上？ <br />
<br />
这个世界上确实存在可以用一只手的手指数得清的那么几个人，他们爬到了第10层楼上。因此，第10层楼不是虚构的，而是确实存在的。如果对此有疑惑或者认为我在胡诌一番的话，那么不妨继续往下看下去，窥一下第10层楼的秘密。<br />
<br />
第10层 大哲 <br />
看了这层楼的名字&ldquo;大哲&rdquo;，可能不少人已经猜到了这层楼的秘密，那就是你的成果必须要上升到哲学的高度，你才有机会能进到这层来。 <br />
<br />
当然，上升到哲学高度只是一个必要条件，牛顿的万有引力似乎也上升到了哲学的高度，因为不知道引力到底是怎么来的，但是牛顿没有被划到这一层，因为进到这层还有另外的条件，那就是你的成果必须引起了哲学上的深度思考，并能让人们的世界观向前跨进一大步。窃以为牛顿、爱因斯坦等人的成就还达不到让人们世界观向前跨进一大步的程度。 <br />
<br />
所以，这层楼中的人的成就对我们普通人认识世界非常重要，你可以不学相对论，但是你不可以不对这层楼的人所作出的成就不了解，否则你的世界观就是极其不完整的，会犯许多认识上的错误。不幸的是，中国的科普知识普及还不够到位，知道这层楼成就的人好像并不多，程序员中恐怕更少。下面就来看看这些用一只手的手指数得清的大哲们，到底有什么成就，能比万有引力定律和相对论还重要。 <br />
<br />
1、希尔伯特 (1862～1943) <br />
<br />
第1位进到此楼层是一位名叫&ldquo;希尔伯特&rdquo;的大数学家，如果你学过《<a href="http://fifid.com/search/%E6%B3%9B%E5%87%BD%E5%88%86%E6%9E%90?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">泛函分析</a>》，那么你在学习希尔伯特空间时可能已经对这位大数学家有所了解；如果你不是学数学出身的，又对数学史不感兴趣的话，恐怕你从来没有听说过这个名字。不过如果我问一下，知不知道二次世界大战前世界数学中心在那里，你肯定会有兴趣想知道。 <br />
<br />
不妨说一下，二战前整个世界的数学中心就在德国的哥廷根，而我们这位大数学家希尔伯特便是它的统帅和灵魂人物。即使在二战期间，希特勒和丘吉尔也有协定，德国不轰炸牛津和剑桥，作为回报，英国不轰炸海德堡和哥廷根。 <br />
<br />
整个二十世纪上半期的超一流数学家，几乎都出自其门下。这里不妨举几个我们熟悉的人物，例如冯&middot;诺伊曼就曾受到他和他的学生施密特和外尔的思想影响，还到哥廷根大学任过希尔伯特的助手，钱学森的老师冯&middot;卡门是在哥廷根取得博士学位的。顺便提一下，这位大数学家发现当时物理学上出了很多大的成果如相对论和量子力学，但是这些物理学家的数学功力明显不足，因此有一段时间带领他的学生们研究过物理学，并独立发现了广义相对论，只是不好意思和物理学家争功劳，将广义相对论的功劳全部让给了爱因斯坦。 <br />
<br />
广义相对论相对于这位大数学家在数学上的贡献，其实是算不了什么的，只是由此可看出这位大数学家品格的高尚之处。如果再去看看牛顿之流的人物的品行，整天和莱布尼茨、虎克等人争功劳，利用自己的优势地位打压他人，甚至闹得上法庭，和这位希尔伯特先生比起来，简直就是个小丑。 <br />
<br />
说到这里，你可能对这位大数学家&ldquo;希尔伯特&rdquo;有了一些初步映象，感觉到了他的重要性，不过他在数学上的主要成就可不是几句话说得清楚的。首先，他是一位集大成者，精通当时数学所有分支领域，在数学的各个领域都有较大的贡献，当然这些成就只能让他成为一个大科学家，不能带他进入这层楼。事实上这位&ldquo; 希尔伯特&rdquo;解决的任何一个数学问题都够不到这层楼的高度，那么他怎么混到这层楼来了呢？ <br />
<br />
话得从1900年说起，当时还很年轻的希尔伯特在当时的世界数学大会上做了一个报告，高屋建瓯地提出了著名的23个未解决的数学问题，然后整个二十世纪上半期，全世界的数学家们都在这23个问题的指导下展开研究，直到现在仍然有许多数学家受这23个问题的指导在进行研究。例如我们熟知的哥德巴赫猜想，就属于其中第8个问题素数分布的一个子问题。 <br />
<br />
如果用&ldquo;高瞻远瞩&rdquo;来形容这位大数学家的话，那么这个世界上恐怕没有第二个人再配得上&ldquo;高瞻远瞩&rdquo;这四个字，不论是欧拉、高斯、牛顿、爱因斯坦还是被誉为最有才华的数学家伽罗华，概不例外。 <br />
<br />
虽然那23个问题是归纳总结出来的，并不全是原创，但是其中有不少问题是可以上升到哲学的高度，引起深度思考的。可能大多数人都会觉得希尔伯特是进不到这层楼的，我们知道提出问题的人和解决问题的人是一样伟大的，何况他提出的问题是如此之多，基于这点，个人觉得应该让希尔伯特跨进这层楼的门槛里。 <br />
<br />
<br />
看完这位希尔伯特的成就，你可能会觉得对你的世界观并没有产生任何影响。确实如此，他提出的问题不是用来影响你的，而是用来影响其他大科学家和大哲的，下面再来说说另一位对他提出的23个问题中的第2个问题有杰出贡献的大哲，你就会感觉到大哲们的成果的威力了。 <br />
<br />
2、哥德尔 (1906~1978) <br />
<br />
这位大哲的名字叫&ldquo;哥德尔 (G&ouml;del) &rdquo;，你可能从来也没有听说过这个名字，即使你读了一个数学系的博士学位，如果你的研究方向不和这位大哲对口的话，你也不一定了解这位大哲的成就，更不知道他的成果对我们这个世界有何意义。 <br />
<br />
简单地说，这位大哲20多岁时就证明了两个定理，一个叫做&ldquo;哥德尔完全性定理&rdquo;，另一个更重要的叫做&ldquo;哥德尔不完全性定理&rdquo;。你也许会觉得奇怪，第9层楼的成就就已经上升到了公理的高度，这种证明定理的事情不是学者和大师们做的事情吗？怎么能比第9层楼的成就还高呢？下面就来简单说一下这两个定理的含义，你就会明白这属于系统级的定理，绝不是普通的定理和公理所能比拟的。 <br />
<br />
&ldquo;哥德尔完全性定理&rdquo;证明了逻辑学的几条公理是完备的，即任何一个由这些公理所产生出的问题，在这个公理系统内可以判定它是真的还是假的，这个结论表明了我们人类所拥有的逻辑思维能力是完备的。这条定理并不能将其带入这层楼来，带其进入这层楼的是另一条定理。 <br />
<br />
&ldquo;哥德尔不完全性定理&rdquo;是在1930年证明的，它证明了现有数学的几条公理（ZF公理系统）是不完备的，即由这些公理产生出的问题，无法由这几条公理判断它是真的还是假的。例如希尔伯特23个问题中的第1个问题，也就是著名的康托尔连续统假设，哥德尔在1938年证明了现有公理系统中不能证明它是 &ldquo;假&rdquo;的，科恩（Cohen，或许也可以称得上是&ldquo;半&rdquo;个大哲）在1963年证明了现有公理系统不能证明它是&ldquo;真&rdquo;的。最有趣的是，即使你将某个不可判定的问题，作为一条新的公理加入进去，所组成的新的公理系统仍然是不完备的，即你无法构造一个有限条公理的系统，让这个公理系统是完备的。 <br />
<br />
也许你仍然无法理解上面这段话的含义，不妨先说一下它对我们现实世界的影响。你可能知道1936年出现的图灵机是现代计算机的理论模型，如果没有哥德尔不完全性定理的思想，图灵机什么时候能出来是很难说的，所以这位哥德尔可以算作计算机理论的奠基者的奠基者。计算机对我们这个世界产生的影响比原子弹大了多少，我想不用我说大家也都清楚。当然，对现实世界的影响只能把哥德尔同图灵等人一样划到大科学家那一层去，能进入这层乃是另有原因。 <br />
<br />
可能你看过《<a href="http://fifid.com/search/%E6%9C%AA%E6%9D%A5%E6%88%98%E5%A3%AB?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">未来战士</a>》、《<a href="http://fifid.com/search/%E9%BB%91%E5%AE%A2%E5%B8%9D%E5%9B%BD?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">黑客帝国</a>》、《<a href="http://fifid.com/search/I%EF%BC%8CRobot?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">I，Robot</a>》之类的科幻电影，于是你产生制造一个和人一样或者比人更高一级的智能机器人的想法，这就引入了一个达到哲学高度的问题，&ldquo;人到底能不能制造出具有和人一样的思维能力的机器来？&rdquo;。 <br />
<br />
我只能告诉你，&ldquo;你的愿望是良好的，但现实是残酷的&rdquo;。如果你仔细思考一下不完全性定理的含义，并结合现代计算机所具有的能力分析一下，你会发现这个问题的答案暂时是否定的。如果你想造出和人一样思维能力的机器，那么你需要去好好学习这位大哲及其后续研究者的成果，并在他们的基础上有新的突破才行。 <br />
<br />
为了说明这位大哲所研究领域的重要性，这里顺便再讨论一个我们日常争议不休的问题，那就是孔夫子的&ldquo;人之初、性本善&rdquo;以及西方认为&ldquo;人之初、性本恶&rdquo;的观点孰优孰劣的问题。可能有许多人发现西方社会现在领先我们，于是就认为&ldquo;性本恶&rdquo;是对的，&ldquo;性本善&rdquo;是错的，中国应该抛弃以前的旧思想，改用西方的思想。当然也有一些老学究们，认为中国的人文思想是领先于西方的，自然而然地认为&ldquo;性本善&rdquo;是对的，&ldquo;性本恶&rdquo;是错的。 <br />
<br />
如果你学过大哲用过的公理化的分析方法，你就知道一套系统的多条公理间只要不会推导出矛盾的地方，即可以自圆其说，那么它可以看作是对的。这样你可以很轻易地给这个问题下一个结论，即&ldquo;性本善&rdquo;和&ldquo;性本恶&rdquo;是对等的，不存在孰优孰劣的问题，更不存在谁对谁错的问题。只要你不同时将&ldquo;性本善&rdquo;和&ldquo;性本恶&rdquo;放入一个系统内，那么是不会有问题的，甚至你也可以认为&ldquo;人之初、既无善、亦无恶&rdquo;，或者认为&ldquo;人之初、部分善、部分恶&rdquo;，都是可以自圆其说的，所以我们的老祖宗提出的思想并没有问题，之所以落后乃是其他原因造成的。这个问题其实在高斯所处的时代就有了结论，那时有人提出了非欧几何，即平行线公理问题，有人认为过一点可以作多条平行线，还有人认为平行线在无穷远点是相交的，和欧氏几何关于过一点只能作一条平行线的公理都是矛盾的，但是他们各自的系统内推导出的结论都是正确的。 <br />
<br />
上面说的只是对哥德尔不完全性定理的一些粗浅解析，实际上如果深入思考一下它的含义的话，你会发现它对物理学等许多学科有重大影响，包含的道理实在是深刻，远非一般的思想所能比拟，有兴趣者不妨&ldquo;google&rdquo;或&ldquo;百度&rdquo;一下&ldquo;哥德尔&rdquo;。或许只有我们的老祖宗&ldquo;老子&rdquo;提出的哲学思想，深度可以有得一比。 <br />
<br />
哥德尔不完全性定理也给那些认为科学是严谨的人当头一棒，原来连数学这样的纯理论学科都是不严谨的，其他学科就更不用说了。 <br />
<br />
至此，已经说完数学上的大哲，下面不妨再看看物理学上的大哲，物理学上好像只出过一位叫&ldquo;海森堡&rdquo;的大哲（注：由于本人对物理学不甚了解，不知道&ldquo;霍金&rdquo;够不够得上大哲的称号）。<br />
<br />
<font color="#ff0000">精彩回复<br />
<br />
<font color="#000000">我觉得这种文章写的很好，但是读的人理解不当，就会害了不少人，也让我们的行业太浮躁，人人都想当牛人＋，不想当菜鸟，导致公司对技术的认识浅薄，人员流失严重。 <br />
<br />
所以就有了这样的情况：中国就是喜欢论资排辈，什么都排个号。在软件行业里，写代码的，难道都叫菜鸟？写个论文挂个名字的才叫专家？天大的笑话！一群只知道搞政治的人，才是国家骨干？而无论做任何事情，需要的是做事的方法和钻研精神，把代码写好了，一样可以为社会公司产生巨大效益。也不是不能排个档次，关键是以什么做标准，在标准不明确前，排了比不排坏。目前，舆论导向是30岁后做什么管理or系统工程师or软件架构师等等，岂不知很多知名软件公司的骨干都是写代码的，就算做了什么什么师，也时常会亲历亲为。去年ADI被MTK收购，某个部门统计了一下，一线研发员工的平均工作年限（在ADI的）是12年。难道他们都是菜鸟？每个领域分工不同，卖拉链的公司也能申请几千个专利，垄断全球拉链市场。 <br />
前年，某个称为密码学方面的专家，说某个程序，要什么什么计算机算上百年才能算出密码，还给我们看了一下公式。我同事把他的程序要过来，反汇编了一下，修改了一个跳转指令，一切解决问题（估计专家是不写代码的）。 <br />
<br />
下面来两段文言文，我觉得这个才是&ldquo;少林禅房&rdquo;的最后一房： <br />
孔子曰：&ldquo;三人行，必有我师。&rdquo;是故弟子不必不如师，师不必贤於弟子。闻道有先后，术业有专攻，如是而已。 <br />
<br />
君子曰：学不可以已。青、取之于蓝，而青于蓝；冰、水为之，而寒于水。木直中绳，輮以为轮，其曲中规，虽有槁曝，不复挺者，輮使之然也。故木受绳则直，金就砺则利；君子博学而日参省乎己，则知明而行无过矣。故不登高山，不知天之高也；不临深溪，不知地之厚也；不闻先王之遗言，不知学问之大也。干越夷貉之子，生而同声，长而异俗，教使之然。 <br />
<br />
吾尝终日而思矣，不如须臾之所学也。吾尝跂而望矣，不知登高之博见也。登高而招，臂非加长也，而见者远；顺风而呼，声非加疾也，而闻者彰。假舆马者，非利足也，而致千里；假舟戢者，非能水也，而绝江河。君子生非异也，善假于物也。</font> </font>...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3182267.html</guid>
        <pubDate>Sat, 18 Apr 2009 06:04:14 GMT</pubDate>

      </item>

      <item>
        <title>[转载]程序员的十层楼（1-5）</title>
        <link>http://zy1982.ycool.com/post.3182250.html</link>
        <description><![CDATA[<span style="COLOR: #ff0000">转帖</span> <br />
<br />
自西方文艺复兴以来，中国在自然科学方面落后西方很多，软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见，有些人认为中国的程序员水平远落后于西方，有些则认为中国的程序员个人能力并不比西方的程序员差，只是整个软件产业落后而已。 <br />
<br />
那么，到底中国的程序员水平比西方程序员水平差，还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢？要解决这个问题，必须先知道程序员有多少种技术层级，每个层级需要什么样的技术水平，然后再比较中国和西方在各个技术层级的人数，就可以知道到底有没有差距，差距有多大。 <br />
<br />
当然，对于如何划分程序员的技术层级，不同公司或不同人会有不同的划分标准，下面的划分仅代表个人的观点，如有不当之处，还请砸板砖予以纠正。 <br />
<br />
第1层&nbsp; 菜鸟 <br />
<br />
第1层楼属于地板层，迈进这层楼的门槛是很低的。基本上懂计算机的基本操作，了解计算机专业的一些基础知识，掌握一门基本的编程语言如C/C++，或者Java，或者JavaScript，...，均可入门迈进这层。 <br />
<br />
在这层上，中国有着绝对的优势，除了从计算机专业毕业的众多人数外，还有大量的通信、自动化、数学等相关专业的人士进入这一行，此外还有众多的其他专业转行的人士，人数绝对比西方多出甚多。并且还有一个优势就是我们这层人员的平均智商比西方肯定高。 <br />
<br />
没有多少人愿意一辈子做菜鸟，因为做&quot;菜鸟&quot;的滋味实在是不咋的，整天被老大们吆喝着去装装机器，搭建一下测试环境，或者对照着别人写好的测试用例做一些黑盒测试，好一点的可以被安排去写一点测试代码。当然如果运气&quot;好&quot;的话，碰到了国内的一些作坊式的公司，也有机会去写一些正式的代码。 <br />
<br />
所以，菜鸟们总是在努力学习，希望爬更高的一层楼去。 <br />
<br />
第2层 大虾 <br />
<br />
从第1层爬到第2层相对容易一些，以C/C++程序员为例，只要熟练掌握C/C++编程语言，掌握C标准库和常用的各种数据结构算法，掌握STL的基本实现和使用方法，掌握多线程编程基础知识，掌握一种开发环境，再对各种操作系统的API都去使用一下，搞网络编程的当然对socket编程要好好掌握一下，然后再学习一些面向对象的设计知识和设计模式等，学习一些测试、软件工程和质量控制的基本知识，大部分人经过2～3年的努力，都可以爬到第2层，晋升为&quot;大虾&quot;。 <br />
<br />
中国的&quot;大虾&quot;数量和&quot;菜鸟&quot;数量估计不会少多少，所以这层上仍然远领先于西方。 <br />
<br />
大虾们通常还是有些自知之明，知道自己只能实现一些简单的功能，做不了大的东西，有时候还会遇到一些疑难问题给卡住，所以他们对那些大牛级的人物通常是非常崇拜的，国外的如Robert C. Martin、Linus Torvalds，国内的如求伯君、王志东等通常是他们崇拜的对象。其中的有些人希望有一天也能达到这些大牛级人物的水平，所以他们继续往楼上爬去。 <br />
<br />
第3层 牛人 <br />
<br />
由于&quot;大虾&quot;们经常被一些疑难问题给卡住，所以有了&quot;大虾&quot;们只好继续学习，他们需要将原来所学的知识进一步熟练掌握，比如以熟练掌握C++编程语言为例，除了学一些基础性的C++书籍如《<a href="http://fifid.com/search/C%2B%2B+Primer?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">C++ Primer</a>》，《<a href="http://fifid.com/search/Effective+C%2B%2B?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">Effective C++</a>》，《<a href="http://fifid.com/search/Think+in+C%2B%2B?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">Think in C++</a>》，《<a href="http://fifid.com/search/Exception+C%2B%2B?src=yb_qsal&utm_source=yb_qsal&utm_medium=link&utm_content=rsspost" target="_blank">Exception C++</a>》等之外，更重要的是需要了解C++编译器的原理和实现机制，了解操作系统中的内部机制如内存管理、进程和线程的管理机制，了解处理器的基础知识和代码优化的方法，此外还需要更深入地学习更多的数据结构与算法，掌握更深入的测试和调试知识以及质量管理和控制方法，对各种设计方法有更好的理解等。 <br />
<br />
学习上面说的这些知识不是一挥而就的，不看个三五十本书并掌握它是做不到的。以数据结构算法来说，至少要看个5～10本这方面的著作；以软件设计来说，光懂结构化设计、面向对象设计和一些设计模式是不够的，还要了解软件架构设计、交互设计、面向方面的设计、面向使用的设计、面向数据结构算法的设计、情感化设计等，否则是很难进到这个楼层的。 <br />
<br />
当然除了上面说的知识外，大虾们还需要去学习各种经验和技巧。当然这点难不倒他们，现在出版的书籍众多，网络上的技术文章更是不胜数，然后再去各种专业论坛里泡一泡，把这些书籍和文章中的各种经验、技能、技巧掌握下来，再去学习一些知名的开源项目如Apache或Linux操作系统的源代码实现等。此时对付一般的疑难问题通常都不在话下，菜鸟和大虾们会觉得你很&quot;牛&quot;，你也就爬到了第3层，晋升为&quot;牛人&quot;了。 <br />
<br />
看了上面所讲的要求，可能有些大虾要晕过去了，成为牛人要学这么多东西啊！要求是不是太高了？其实要求一点也不高，这么点东西都掌握不了的话，怎么能让别人觉得你&quot;牛&quot;呢？ <br />
<br />
需要提一下的是，进入多核时代后，从第2层爬到第3层增加了一道多核编程的门槛。当然要迈过这道门槛并不难，已经有很多前辈高人迈进了这道门槛，只要循着他们的足迹前进就可以了。想迈进这道门槛者不妨去学习一下TBB开源项目的源代码(链接：http://www.threadingbuildingblocks.org/)，然后上Intel的博客（http://softwareblogs-zho.intel.com/）和多核论坛（http://forum.csdn.net/Intel/IntelMulti-core/）去看看相关文章，再买上几本相关的书籍学习一下。 <br />
<br />
在国内，一旦成为&quot;牛人&quot;，通常可以到许多知名的公司里去，运气好者可以挂上一个架构师的头衔，甚至挂上一个&quot;首席架构师&quot;或者&quot;首席xx学家&quot;的头衔也不足为奇。有不少爬到这层的人就以为到了楼顶了，可以眼睛往天上看了，开始目空一切起来，以为自己什么都可以做了，什么都懂了，经常在网络上乱砸板砖是这个群体的最好写照。由此也看出，国内的牛人数量仍然众多，远多于西方的牛人数量，在这层上仍然是领先的。 <br />
<br />
也有不少谦虚的&quot;牛人&quot;，知道自己现在还不到半桶水阶段。他们深知爬楼的游戏就像猴子上树一样，往下看是笑脸，往上看是屁股。为了多看笑脸，少看屁股，他们并没有在此停步不前，而是继续寻找到更上一层的楼梯，以便继续往上爬。 <br />
<br />
第4层 大牛 <br />
<br />
从第3层爬到第4层可不像上面说过的那几层一样容易，要成为大牛的话，你必须要能做牛人们做不了的事情，解决牛人们解决不了问题。比如牛人们通常都不懂写操作系统，不会写编译器，不懂得TCP/IP协议的底层实现，如果你有能力将其中的任何一个实现得象模象样的话，那么你就从牛人升级为&quot;大牛&quot;了。 <br />
<br />
当然，由于各个专业领域的差别，这里举操作系统、编译器、TCP/IP协议只是作为例子，并不代表成为&quot;大牛&quot;一定需要掌握这些知识，以时下热门的多核编程来说，如果你能比牛人们更深入地掌握其中的各种思想原理，能更加自如的运用，并有能力去实现一个象开源项目TBB库一样的东西，也可以成为&quot;大牛&quot;，又或者你能写出一个类似Apache一样的服务器，或者写出一个数据库，都可以成为&quot;大牛&quot;。 <br />
<br />
要成为&quot;大牛&quot;并不是一件简单的事情，需要付出比牛人们多得多的努力，一般来说，至少要看过200~400本左右的专业书籍并好好掌握它，除此之外，还得经常关注网络和期刊杂志上的各种最新信息。 <br />
<br />
当&quot;牛人&quot;晋升为&quot;大牛&quot;，让&quot;牛人们&quot;发现有比他们更牛的人时，对&quot;牛人&quot;们的心灵的震撼是可想而知的。由于牛人们的数量庞大，并且牛人对大虾和菜鸟阶层有言传身教的影响，所以大牛们通常能获得非常高的社会知名度，几乎可以用&quot;引无数菜鸟、大虾、牛人竞折腰&quot;来形容，看看前面提过的Linus Torvalds等大牛，应该知道此言不虚。 <br />
<br />
虽然成为&quot;大牛&quot;的条件看起来似乎很高似的，但是这层楼并不是很难爬的一层，只要通过一定的努力，素质不是很差，还是有许多&quot;牛人&quot;可以爬到这一层的。由此可知，&quot;大牛&quot;这个楼层的人数其实并不像想像的那么少，例如比尔&middot;盖茨之类的人好像也是属于这一层的。 <br />
<br />
由于&quot;大牛&quot;这层的人数不少，所以也很难统计除到底是中国的&quot;大牛&quot;数量多还是西方的大牛数量多？我估计应该是个旗鼓相当的数量，或者中国的&quot;大牛&quot;们会更多一些。 <br />
<br />
看到这里，可能会有很多人会以为我在这里说瞎话，Linus Torvalds写出了著名的Linux操作系统，我国并没有人写出过类似的东西啊，我国的&quot;大牛&quot;怎么能和西方的比呢? 不知大家注意到没有，Linus Torvalds只是写出了一个&quot;象模象样&quot;的操作系统雏形，Linux后来真正发展成闻名全球的开源操作系统期间，完全是因为许多支持开源的商业公司如 IBM等，派出了许多比Linus Torvalds更高楼层的幕后英雄在里面把它开发出来的。 <br />
<br />
可能有些菜鸟认为Linus Torvalds是程序员中的上帝，不妨说个小故事： <br />
<br />
Linus，Richard Stallman和Don Knuth（高德纳）一同参加一个会议。 <br />
<br />
Linus 说：&quot;上帝说我创造了世界上最优秀的操作系统。&quot; <br />
<br />
Richard Stallman自然不甘示弱地说：&quot;上帝说我创造了世界上最好用的编译器。&quot; <br />
<br />
Don Knuth一脸疑惑的说：&quot;等等，等等，我什么时候说过这些话？&quot; <br />
<br />
由此可以看出，Linus Torvalds的技术水平并不像想像中那么高，只是&quot;牛人&quot;和&quot;大虾&quot;觉得&quot;大牛&quot;比他们更牛吧了。在我国，有一些当时还处于&quot;大虾&quot;层的人物，也能写出介绍如何写操作系统的书，并且书写得非常出色，而且写出了一个有那么一点点象模象样的操作系统来。我想中国的&quot;大牛&quot;们是不会比西方差的，之所以没有人写出类似的商业产品来，完全是社会环境的原因，并不是技术能力达不到的原因。 <br />
<br />
&quot;大牛&quot;们之所以成为大牛，主要的原因是因为把&quot;牛人&quot;给盖了下去，并不是他们自己觉得如何牛。也许有很多菜鸟、大虾甚至牛人觉得&quot;大牛&quot;这层已经到顶了，但大多数&quot;大牛&quot;估计应该是有自知之明的，他们知道自己现在还没有爬到半山腰，也就勉强能算个半桶水的水平，其中有些爬到这层没有累趴下，仍然能量充沛，并且又有志者，还是会继续往更上一层楼爬的。 <br />
<br />
看到这里，也许有些菜鸟、大虾、牛人想不明白了，还有比&quot;大牛&quot;们更高的楼层，那会是什么样的楼层？下面就来看看第5层楼的奥妙。 <br />
<br />
第5层 专家 <br />
<br />
当大牛们真正动手做一个操作系统或者类似的其他软件时，他们就会发现自己的基本功仍然有很多的不足。以内存管理为例，如果直接抄袭Linux或者其他开源操作系统的内存管理算法，会被人看不起的，如果自动动手实现一个内存管理算法，他会发现现在有关内存管理方法的算法数量众多，自己并没有全部学过和实践过，不知道到底该用那种内存管理算法。 <br />
<br />
看到这里，可能有些人已经明白第5层楼的奥妙了，那就是需要做基础研究，当然在计算机里，最重要的就是&quot;计算&quot;二字，程序员要做基础研究，主要的内容就是研究非数值&quot;计算&quot;。 <br />
<br />
非数值计算可是一个非常庞大的领域，不仅时下热门的&quot;多核计算&quot;与&quot;云计算&quot;属于非数值计算范畴，就是软件需求、设计、测试、调试、评估、质量控制、软件工程等本质上也属于非数值计算的范畴，甚至芯片硬件设计也同样牵涉到非数值计算。如果你还没有真正领悟&quot;计算&quot;二字的含义，那么你就没有机会进到这层楼来。 <br />
<br />
可能有人仍然没有明白为什么比尔&middot;盖茨被划在了大牛层，没有进到这层来。虽然比尔&middot;盖茨大学未毕业，学历不够，但是家有藏书2万余册，进入软件这个行业比绝大部分人都早，撇开他的商业才能不谈，即使只看他的技术水平，也可以算得上是学富五车，顶上几个普通的计算机软件博士之和是没有问题的，比起 Linus Torvalds之类的&quot;大牛&quot;们应该技高一筹才对，怎么还进不了这层楼呢？ <br />
<br />
非常遗憾的是，从Windows操作系统的实现来看，其对计算的理解是很肤浅的，如果把Google对计算方面的理解比做大学生，比尔&middot;盖茨只能算做一个初中生，所以比尔&middot;盖茨永远只能做个大牛人，成不了&quot;专家&quot;。 <br />
<br />
看到这里，也许国内的大牛们要高兴起来了，原来比尔&middot;盖茨也只和我等在同一个层次，只要再升一层就可以超越比尔&middot;盖茨了。不过爬到这层可没有从&quot;牛人&quot;升为&quot;大牛&quot;那么简单，人家比尔&middot;盖茨都家有2万多册书，让你看个500~1000本以上的专业书籍并掌握好它应该要求不高吧。当然，这并不是主要的条件，更重要的是，需要到专业的学术站点去学习了，到ACM，IEEE，Elsevier，SpringerLink，SIAM等地方去下载论文应该成为你的定期功课，使用Google搜索引擎中的学术搜索更是应该成为你的日常必修课。此外，你还得经常关注是否有与你研究相关的开源项目冒出来，例如当听到有TBB这样针对多核的开源项目时，你应该第一时间到Google里输入&quot;TBB&quot;搜索一下，将其源代码下载下来好好研究一番，这样也许你的一只脚已经快迈进了这层楼的门槛。 <br />
<br />
当你象我上面说的那样去做了以后，随着时间的推移，总会有某天，你发现，在很多小的领域里，你已经学不到什么新东西了，所有最新出来的研究成果你几乎都知道。此时你会发现你比在做&quot;牛人&quot;和&quot;大牛&quot;时的水平不知高出了多少，但是你一点也&quot;牛&quot;不起来，因为你学的知识和思想都是别人提出来的，你自己并没有多少自己的知识和思想分享给别人，所以你还得继续往楼上爬才行。 <br />
<br />
我不知道国内的&quot;专家&quot;到底有多少，不过有一点可以肯定的是，如果把那些专门蒙大家的&quot;砖家&quot;也算上的话，我们的砖家比西方的要多得多。<br />
<br />...
]]></description>
        <guid isPermaLink="true">http://zy1982.ycool.com/post.3182250.html</guid>
        <pubDate>Sat, 18 Apr 2009 06:04:05 GMT</pubDate>

      </item>
    </channel>
  </rss>
