日期:2013-08-25  浏览次数:20403 次

 

自序

       这是一本有自已特色的书。       这是一本于讲技术之外,更讲学习方法的书       这是一本从首至尾贯彻“授人与鱼,不如授人与渔”的书       2003年暑假我在CSDN程序人生论坛发表的个人自传——《一个普通IT人的十年回顾》(已收入本书配套光盘),一石激起千层浪,被许多网站转载,我个人也收到了海内外近千封电子邮件。       我是一个在没有明师指导情况下,几乎完全靠自己在黑暗中摸索,在自学之路上艰难跋涉过来的软件开发者。我不敢自称为“职业程序员”,只敢自称为“软件开发爱好者”。我知道自己的技术水平有限,远远达不到“高手”与“专家”的水平,但我花了十年时间去学习计算机技术,其中酸甜苦辣,冷暖自知。我愿意把这期间的所思与所悟与广大读者分享,期望能帮助更多的初学者不走或少走我所走过的弯路,迅速地迈入软件开发技术的大门,最终成为一名远远超过本人水平的软件高手。       若能达此目的,则我在这本书中所花的心血也就有所值了。

一、我为什么写这本书?

       我是在大学毕业后23岁才开始半路出家学电脑的,走了一条艰难曲折的自学之路,在写作本书的时候,刚好满十年。十年以来,我几乎就没离开过计算机,而编程更是从未间断,写过的代码到底有多少?恐怕无法统计了(估计加起来可能有几十万行)。出于对软件技术的强烈兴趣,我从对计算机一无所知开始起步,到后来考上了计算机专业的研究生,毕业之后又走上高校计算机教学岗位,感触颇多。       在有了十年自学计算机技术的经历和近几年在高校讲授程序设计系列课程的经验之后,我一直在思索以下几个问题:l       软件开发到底是件什么事?l       到底应该怎样学习计算机技术?l       用什么方式才能让许多学生很快地学会特定的计算机技术,而不用重复我和其他人所走过的“弯路”?l       …………思索的结果就是大家所看到的这本书。       在我自己亲身的学习与开发实践中,逐渐形成了这么一个观点:       编程其实并不难!       要编程并不需要到大学计算机系里去学很多艰深的理论,经过适当的指导与训练,一个高中生就可以写出很好的程序!       那为什么会有那么多的人把编程视为很高深的东西?       那为什么我国的那么多的软件企业深感合格的程序员是如此地难找?       与此同时,每年毕业的大批计算机专业学生,找工作又成了一件非常困难的事情。一边是真正合格的程序员人数很少,一边是大量的学生毕业找不着工作,这个怪圈为何会形成?       我想,造成这个怪圈的一个重要的原因就是计算机教育问题。目前高校中的计算机教育并不能大批量地培养出合格的软件开发者,学生在四年本科期间计算机理论学了不少,却对培养编程能力重视不够,缺乏实践的结果是理论也掌握不好,学习成了“夹生饭”。       除了在校的大学生,社会上还有大批的软件开发爱好者,他们由于没有机会系统地学习软件开发技术,就采用自学和自我实践的方式,结合自己的工作来应用学到的计算机技术,虽然他们没有在校生的优越条件,但其中优秀的人物其真实开发能力远胜正规高校计算机专业“科班”出身的本科生甚至是硕士生。这种例子已经很多了。       “职业选手”不如“业余选手” !       我自已是走“野路子”出来的,走的是实践为主导的自学之路,从亲身实践中深切感受到计算机科学本质上是一门实践性非常强的科学,不管是在校学生还是社会上的软件开发爱好者,实践就是最好的老师!       我是从2002年开始接触.NET技术的,并一直研究使用至今,我前前后后看了近百本国内外的.NET编程书籍,写了几万行的.NET代码,在对.NET有了一定的了解之后,我认为.NET技术是初学者学习软件技术非常好的切入点,学习者可以一步到位,直接学习目前主流的面向对象软件开发技术,而不用按部就班,按传统的先结构化编程再面向对象编程的顺序去学习。       接着我思考的问题是:这本书该怎么写?       著名的物理学家爱因斯坦曾经表达过这样的思想:学习时只需要掌握那些能让思维导向深入的东西,而将其它无关的知识全部抛弃。       软件技术本身就是一个庞大而复杂的体系结构,不分巨细地样样都想掌握,只能是疲于奔命而无所得。       为此,基于我自己的理解,在书中将我认为最重要最基础的东西突显出来,这些东西是必须掌握的,一旦理解并掌握之后,读者就掌握了“捕鱼”之“渔”,自己就可以进一步探索某一领域内的其它技术点了,在书中不须对每个技术领域的每个技术点都“面面俱到”。       编程是有规律的,读者能不能迅速成为一名具备相当水平的程序员,关键在于对编程规律与必备知识基础的把握程度。       读者在阅读时,最重要的是要掌握原理,在开发过程的所进行各项具体活动与工作步骤中,其背后都是有道理的,理解清楚了这些道理,在整个软件开发过程中该做什么,不该做什么,先做什么,后做什么,也就心中有数了。       编了这么些年的程序,我意识到其实学习软件开发技术的过程就是一个学会做事的方法的过程。例如,在开发软件时,要“分而治之”,“步步为营”,“先局部后整体”,“合理安排开发次序”,“养成良好编码习惯”等,这不仅仅是程序设计的技巧,也是做好编程之外许多其他类型的工作所需要的基本素质。       在学习与掌握软件技术这一过程中,可以锻炼一个人许多基本素质,如思维周密、意志坚强、学习能力、创新精神等。如果一个人能在竞争空前激烈的IT业凭借着其高的素质站住脚跟,那么,可以很有把握地说,如果他转向其他行业,也会是一个优秀的人才,会创出自己的一番天地!       在本书中,结合我个人的开发经验,精心安排了学习次序,循序渐进地引导读者迈入软件开发的大门。       在许多计算机技术书籍中,出现了大量的技术术语,对于不熟悉这些术语的读者而言,这无疑加大了阅读的难度。对于这些计算机术语的表述,如果强调其在理论上的科学性与严谨性,则往往不易于理解,很大程度上限制了这些知识的传播、普及和应用,因此,本书对这些术语大都采用了一些通俗易懂的文字来表达,甚至使用了不少比喻手法来阐明其内涵,这种表达方式虽易于理解,但不免在科学性和严谨性上有所不足,读者如果需要科学而精确的定义,请自行阅读相关的科技文献。强调一下,本书是一本志在普及软件开发技术的专业书籍,与传统的工程技术专著和计算机科学理论教材是不同的,阅读时不要象中学学习数学一样,每个字都不放过,而重点放在形成对软件开发过程的一种直观理解和感性认识上。              对于一个具体的软件开发者而言,只有被理解了的知识才是真正有用的知识,无法理解的知识是毫无用处的。笔者写书的主要目的是让读者能迅速地汲取书中所提供的知识,应该尽量做到“用大白话讲述复杂的技术”,因此笔者在文字上追求深入浅出,但是否真的做到了这一点,还得由读者来作出评价。     &