冬Blog

醉心技术、醉心生活
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

程序员指北

Posted on 2006-02-01 11:20  冬冬  阅读(1481)  评论(4编辑  收藏  举报

全文下载

程序员指北

                         ——如何成为一名合格的程序员

  要:本文主要阐述的是如何成为一个合格的程序员的必经的道路,如果你一直想学但是一直找不到“北”的话,那么这篇“指北”文章,或许正好适合你。我将以.Net开发为主要路线,或许以后会写一篇Java的,但是其实你真的学成了一项之后,我觉得你自己也就知道以后的路要怎么走了。欢迎你和我就各种问题交流:学习方法、技术问题、业务开发、吹牛扯蛋。

关键字:程序 开发 学习方法

 

一,引言

看到这句话,起码说明你是个想要学习程序的人,那么恭喜你,这已经是成功的一半了。因为在自学这条道路上,特别是在自学计算机开发这条道路上,兴趣,是最好的老师。

我不要求你有什么计算机开发基础,甚至说你连鼠标和老鼠的区别都不知道的话,也没有关系。我们一步一步的来,只要你把我下面说的都做到了,那么,你就是一个合格的程序员了。

在学习程序的道路上,你要吃很多的苦,受很多的累,其中很多是身体上的,更多的是精神上的。因为在你达到一定水平之前,外行人是欣赏不了你的,这和美工不同。美工也许做了一个很好的东西,别人马上就可以说:“酷”,很用成就感。而程序,别人只会说三个字:“看不懂”,更不幸的是你的水平越高,说这三个字的人越多,呵呵。不知道你现在是不是已经觉得很郁闷了。但是注意我说的话:在你达到一定水平之前。为什么这么说?因为如果你接了一个工程,人家给你20万,利润过半,傻子也知道你是什么水平了。至于美工能不能接到20万的项目……呵呵,个人的看法是可能性不大。

总的来说,学程序,或者说得大一点,学系统开发,是一件很有比较孤单的事情。要求你耐得住寂寞。而且必须要有吃苦的精神,因为程序,并不好学。请做好心理准备。

本文主要阐述的是如何成为一个合格的程序员的必经的道路,如果你一直想学但是一直找不到“北”的话,那么这篇“指北”文章,或许正好适合你。我将以.Net开发为主要路线,或许以后会写一篇Java的,但是其实你真的学成了一项之后,我觉得你自己也就知道以后的路要怎么走了。欢迎你和我就各种问题交流:学习方法、技术问题、业务开发、吹牛扯蛋。

二,什么是合格的程序员

什么是合格的程序员?那我们应该先问:什么是程序员?程序员,顾名思义就是写程序的人。那什么是合格的程序员呢?就是写出合格的程序的人。那什么是合格的程序呢?这个问题,就很难回答了。合格的程序,首先要是可以运行的程序,其次还牵扯效率、安全性、可扩展性、可移植性、可读性……等等很多很多东西。所以什么是合格的程序员?我觉得,还是把眼光放得低一点,能写出可以实现所有功能的、可以正常地运行的程序的人吧。

这个问题看似很简单,其实,事情不像想象的样子。

这里指的能实现所有的功能,可以正常地运行的程序并不是说仅仅写出一个“Hello World。”你就可以说自己是程序员了。那程序员早就满天飞了,你也不用看我废话了。

这里所说的实现所有的功能,起码是解决一个具体的问题,比如说一个信息发布系统、一个学生管理系统、一个办公系统或者是某些通用的平台等。但也不要被吓倒,其实也不像想象的那么难。只要肯吃苦,合格的水平还是人人都可以达到的,而且应该是很快就可以达到的。但成为一个合格的程序员之后的路,更长、更艰苦,那就不是我们这篇文章讨论的问题了。

废话不表,我们进入正题。

三,成为程序员的阶段:

我将成为一个合格的程序员的过程分为以下几个阶段:

(一)   熟悉电脑的基本操作

(二)   熟悉一门编程语言

(三)   掌握一门DotNet语言

(四)   掌握针对数据的编程

(五)   掌握网络编程

下面我一个阶段一个阶段的讲解:

(一)   熟悉电脑的基本操作

如果你已经能够独立的重装操作系统了,那么这个阶段你就可以跳过了。

其实这个阶段没有什么实质性的东西,就是对电脑的熟悉。电脑,总该在学习开发之前熟练的应用吧?

说具体点,要会用Office2003,会用IE浏览器上网,能找到并且正确安装自己需要的应用程序,再进一步,要能够自己把自己的系统搞崩溃,再自己重装。这段时间兴趣是最重要的,因为没有什么明确的目标,所以你对什么感兴趣就学什么。而且千万不要对电脑有恐惧感,如果你真的能把你的电脑搞坏了(指的是物理损坏,排除暴力因素),那也算是一件了不起的事情了。呵呵,所以不要怕,使劲用它就是了,只要能把电脑的基本操作熟悉了,起码你买电脑的钱,已经赚回一半来了。

这段时期如果能够对服务器系统(主要是WindowsServer2003IIS),有一定的了解,就更好不过了,然后你就可以给人家很自豪地说,我会假设服务器了。还有就是用Server系统,需要花点功夫研究一下权限系统,很有必要。建议如果对自己的英文有信心的话,使用英文版的操作系统。

还有一个很重要的方面,就是对网络的应用要熟悉,比如GoogleP2P下载。这些都是宝贵的资源,善加利用,事半功倍。

另外如果你身边有一个高手,那么你简直就是买彩票中奖了,不要浪费,一定要不厌其烦地问,问得越多,学得越快。

总的来说,这段时间是一个很有乐趣的时间,大概经历一到两个月,你就可以摆脱电脑盲的帽子了。不过真正的熟练掌握电脑,还需要在学习开发的同时,不断的实践。

(二)   掌握一门编程语言

从这个阶段开始,就正式进入我们的学习阶段了,学习是枯燥的,学习程序的初期尤其如此,所以如果有的时候你受够了,就调剂一下,继续做你第一阶段做的事情,继续漫无目的的捣鼓一下你的电脑,是一种一箭双雕的好办法。

我们应该从什么语言学起呢?C,种种迹象表明,学C,是初学者最好的途径,可以让你有一个很坚实的基础,虽然我们以后几乎不会用C来做实际的开发,但是在C中学到的东西,足以使我们在整个职业生涯中受益,甚至可以把话说得大一点,不论是程序、美工、服务器管理员,只要是从事电脑开发工作的相关人员,都应该学C

C语言是大学计算机二级的标准课程,也是国家计算机等级考试二级的考试科目,还是计算机专业很基础的专业课。所以学C不是一件很难的事情,采用的教材也很统一,谭浩强老先生的《C语言教程》,一般用的是第二版,第三版也出了,我没看过,我以第二版为主。这本书是清华大学出版社出的,几乎是所有高校的标准教材,所以好不好就不用我多说了。

这本书我觉得也不用所有的都看,比如位操作、文件读写等,我们就很少用,我指的是实际开发,走算法优化或者竞赛路线的,不在此类考虑范围内。

具体地说一下这本书的阅读方法:

第一章到第十章:精读,所有的课后题全部都要做,而且最好是全部要上机调试通过。其中条件语句(第五章:if语句)、循环(第六章:for语句、while语句)、函数(第八章:形参和实参),指针(第十章)都是重点中的重点。必须要掌握。

第十五章:面向对象的开发,了解概念。这个概念很重要,所有我单独拿出来说,因为以后我们的开发,基本就是面向对象的了,所以面向对象的概念,必须非常透彻的理解(其实很容易理解,但容易不代表不重要)。其中类、对象、继承、派生、多态等概念,在以后的开发中是基础的基础。

这个阶段其实比较好渡过,因为学习的模式和我们接受了十几年的应试教育的模式基本一致,就是看书,做题。而且如果你肯下功夫,这个阶段也很短暂。我的一个学生,用了十天的时间,从没接触过编成,到把C基本学成。很惊人的速度。当然,这十天他过得很艰苦,每天看十几个小时的书,基本上除了睡觉其它时间都在看,无论是吃饭、坐车、上课、上厕所……

不过按照我的看法,仅仅是《C语言教程》这本书所带的习题是远远不够的,还应该有些深度,建议把南开一百道题全部做完,上机调试通过,再适当的做一些ACM/ICPC的预赛题,效果会更好。当然搞实际开发的,没必要把算法优化到变态的地步。主要是锻炼自己的数学建模能力。

(三)   掌握一门Dotnet语言

当你走到这一个阶段的时候,也许在某种意义上说,你已经是一个程序员了,因为你已经写了很多程序了。但是你可以问一下自己,你写的程序有什么用处吗?判断闰年还是找出100以内的素数?难道这就是你学习的最终目的?当然不是,这只是开始。

当我们开始学习DotNet的开发时,我们可以说,我们开始学习一些实际的,而且是与世界前沿的计算机技术接轨的东西了。

我在这里并不想给出DotNet的任何描述,那不是这篇文章的内容。我想说的是怎样学。其实方法很简单,看书+写程序。和学C没有什么差别,只是没有了习题,大概学起来就会有一种找不到北的感觉。习惯了就好了,以后我们要学的东西,都不会有习题。

我推荐两本书:

1,《C#高级编程》(《Professional C#》)清华大学出版社翻译出版,Wrox公司原著,128.00RMB。网上有电子版,评价不一。我的启蒙书。

2,《C#编成思想》(《Thinking in C#》)机械工业出版社出版,Larry O’Brien & Bruce Eckel著。网上有电子版的,评价很高。

以上这两本书都很好,都很值得看,其中Wrox的书是一整套,很方便后续的学习。这也是我推荐这本书的很重要的原因。至于《Thinking in C#》这本书,网上的评价是很高的。而且和他一套的还有《Thinking in C++》、《Thinking in Java》等,都是难得的好书。建议这两本书中至少要买一本。两本书都有英文版的,仍然建议E文好的优先选择英文版。

说一下读书的方法。这两本书都很有分量。比如说《Professional C#》,一千多页,还是大本的,很有震撼力。不用说全部看懂吃透,只是逐字逐句地读一遍,也要不少功夫。但是谁让咱要学呢?忍了。

顺便说一下我对Wrox这一套书的一些看法。Wrox,中文翻译叫乐思。他们出的书很全,基本上涵盖开发的所有方面,从AspAsp.net,从C#Java,从关系数据库到XML。而且大部分的内容分为“入门经典(Beginning)”和“高级编程(Professional)”两类。我觉得入门经典没有必要看,因为讲的太过基础,给人一种唠唠叨叨的感觉。所以我建议直接看高级编程,特别是如果你认识高手的话。虽然已开始看高级编程会觉得比较吃力,但是一旦入门,进步的速度会很快。

我讲一下《Professional C#》这本书的阅读方法,因为我一直拿这本书当教材。其实这本书的章节的划分我认为不是很合理,我认为好的阅读顺序如下:

1,第一章:描述性的东西。了解就可以了,开始肯定不明白。

2,第二章到第五章:必须看,重点。也很基础,有C的基础很容易搞定。

3,第九章、第十一章、第十二章、第十九章:这些算是新的内容了,也是很重要的。

4,二十一章、二十二章:数据访问。我们以后和数据打交道是最普通的,数据库是必须要掌握的,书上这两章讲的很基础,必须要深入理解。

5,二十五章、二十七章:网络开发的基础。个人认为网络开发是趋势,学程序不学网络开发部完整。

以上我说的是第一遍要看的东西。剩下的我没有提到的,可以以后慢慢看,像是委托和事件(第六章)、反射(第十章)、程序集(第十三章)、线程(第十五章)等都是有重要、也是很有用的技术,但是对于初学者比较困难。

第一遍读的时候肯定会很迷糊,没关系,很正常。耐着头皮看,一定要挺住。第一遍看到一半的时候,应该就有点感觉了,如果第一遍确实看不完,也不用勉强,看个十几二十章的,开始第二遍。第二遍看得时候,收获就会很大,很多东西很自然的就明白了,特别是面向对象的概念。然后这一遍看到看不下去的时候,你已经入门了。然后是第三遍,建议第三遍仔仔细细得看,尽量多懂一些。

只是死读书很容易导致读书死的,所以我们要注重实践,那么实践的内容是什么?下面我列举一下,也算是一些不太高明的习题。

1,  安装编译环境。不要以为很容易,装个TC也许你可以一下子搞定,但是能装好VS.Net,绝不是一件容易的事情。这里我推荐VS.net 2005,刚刚发布的,确实很好用。

2,  Hello World”。没错,学习所有的开发语言、开发环境,先写一个“Hello World”是很有必要的。这代表是一个完整的开发过程。

3,  书上的示例。也许你在看的时候,觉得示例很容易,但真正的把它写成一个可以执行的文件,还是有很多不同之处的。从理论到实践是很有差距的。不过“高级编程”这个系列的书有个算不上缺点的缺点,就是它给出的都是代码的片断,很少给出完整的代码。所以如果你写不出来的话可以把源代码找来看。示例代码也不用都写,主要是实际的用C#写点东西,避免眼高手低。

4,  MSDN演练。我们主要还是用VS.net开发(不要给我说你用NotePad写程序,这不是王道)。微软的看家东西,功能自然不必多说。掌握这个IDE(集成开发环境)是必须的事情。方法就是做MSDN所带的演练。做得越多越好,其实全加起来也没有几个。演练讲的很细,只要你按照他说的做,或许无法最后实现功能,但是肯定可以把开发环境熟悉了,这样我们的目的就达到了。

5,  写一个计算器。主要目的是掌握一个实际的程序的开发。了解.net的主要类,习惯面向对象的系统开发。这个计算器写得越复杂越好,呵呵。

当你成功的运行了自己写的计算器的时候,你对开发,已经有一个全新的认识了。不过很显然,这些还远远不够,那么,我们还应该掌握什么呢?

(四)   掌握针对数据的编程

数据,可是说是我们开发的最基础的东西了,没有数据,那我们在处理什么?

我这里所说的数据,可以分为如下几类:

1,  基础的数据结构

2,  DotNet中的主要数据类型,特别是集合类型

3,  关系型数据库

4,  XML

对于传统的数据结构,要求不是很高,主要看自己的兴趣,不想看的话,掠过也可以,想学的话。清华大学的那本《数据结构》(C语言版)就够了。也是大部分高效的标准教材。

对于DotNet中的数据类型,就要很熟悉了,其实很基础,所以在平时练习中就潜移默化的掌握了。只是像HashTable这种很有用的集合类型(其实就已是一个类),要好好研究一下。

关系型数据库才是真正的重点。主要是M$ SQL ServerM$ AccessMySQLOracle等比较程序的数据库系统,不要被这么多不同的种类的数据库吓倒,其实就是掌握SQL语言,和连接、访问数据库的方法。

千万不要把SQLM$ SQL Server混了,后者是微软的一种产品,而SQLStructured Query Language,结构化查询语言)是一种类似CC#的语言,只是不时程序设计语言,而是一种用于操作数据库的语言,是一种大家都支持的标准。所以我们只要掌握了这种语言,对任何数据库都是通用的。

学习SQL语言,推荐一本书:《数据库系统概论》(第三版),高等教育出版社,萨师煊、王珊,25.10RMB,是计算机国家三级考试的教程,也是很多计算机专业大四的专业课。这本书不用都看,主要是第三章,其他的随意。另外M$ SQL Server自带的联机丛书也是很好的参考资料。另外市面上还有一些专门讲数据访问的书,例如Wrox的《.NET数据服务 C#高级编程》(《Data-Centric .NET Programming with C#》)之类的,如果自己觉得有必要,也可以买来看一下,有益无害。

对数据库的了解,不应只限于访问,数据库系统的安装、备份、故障恢复、权限设置、安全性设置等一系列的操作都应该很熟悉。特别是AccessM$ SQL Server这两个系统,用得比较多。Oracle就比较专业了,只用得比较大型的项目中。

.NET中,对数据库的访问主要是System.Data命名空间。DataSet类,核心,重点掌握,还有DataAdapterCommandConnection这几个类,说白了,也就这点儿东西了。这也就是我们所谓的ADO.NETActive Data Object.Net)。

至于XML,是一个很重要的,很基本的东西。注意是很基本,不是很基础。基本的意思是它有些属于系统底层,但不基础,因为也许并不是很好学。

这里我仍然推荐Wrox的《C# XML 高级编程》(《Professional C# XML》),看完一遍应该就明白什么是XML了,当然你也可以买专门讲XML的书来看。

等到数据的访问比较熟悉了,可一个自己写一个通讯录,功能自己定,只要能把你学到的都用上,就是个很完美的程序。这个小东西基本涵盖了数据访问到数据操作的所有东西。

(五)   掌握网络编程

我认为学习开发,但不学习网络开发是不完整的,毕竟网络是一个趋势,这也就是为什么会有DotNet的原因了。

DotNet下的网络开发其实和基于WinForm看起来没什么差别,当然,学到一定的程度就知道了,其实根本不是一回事儿。

对于DotNet中基于网络的开发,说白了,就是ASP.NETActive Server Page.Net)。基本上看一本书就可以了:Wrox的《ASP.NET 1.1 高级编程》(《Professional ASP.Net 1.1》)。也是一本厚度惊人的书。1K多页吧。

这本书有些部分可以先不看:Web服务(第十九章、第二十章)、移动控件(第二十一章)。其他的尽量看,同样,第一遍不可能全部看懂,每看一遍都会有新的收获。

掌握ASP.Net大概也就是半年的时间,当然,辛苦不用我再说了。

不过网络开发的面,不能只限于ASP.Net,还有很多很多相关的东西:

1,  HTML(超文本标记语言)。也是网页的官方语言,必须掌握。当然,我不建议你每个标签的每个属性都滚瓜烂熟,也不可能。只要你知道怎么用就可以了。其实标记语言(ML)都是很简单的。

2,  CSS样式。其实是和HTML算是一类的,都输入网页设计的范畴,有些和美工交叉。但是没办法,大部分的整合工作还是有程序原来做的,所以这些东西必须会。

3,  JavaScript。不要和Java语言混了,根本不是一个东西。它是一种小型的网页互动的脚本,功能很弱(相对而言)。其实也应该属于美工的范畴。

4,  一定的服务器假设和维护的知识。我们要调试网站,必须在服务器操作系统上,现在也就是Windows Server 2003。所有相关的知识必须会,比如怎么用IIS,如何分配权限、如何配置防火墙等。这有些和系统维护的范围交叉。

当你大抵熟悉了以上的内容时,那么恭喜你,你可以开始着手开发你的第一个系统了,这个系统,我建议是一个信息发布系统,说白了就是一个文章系统。让用户可以查看、发表、修改、删除文章就可以了,复杂得还可以实现文章分类、用户分类、文件上传等。你可以自由发挥。如果你认识做美工的,给你做套页面最好不过,不过没有也没关系,主要是实现所有功能。

这个系统,如果你真的开发出来了,那么,我就可以以程序员称呼你了。J其实从什么都不会,到现在战胜最终的BOSS,也就一年的时间吧。

四,今后的路

当你真正的成为了一个程序员,那么以后的路,不确定地方,就会多很多,我说一下我的一些看法吧,并不成熟,因为我也在探索。

在可以开发出一个合格的程序之后,我们的着眼点就变成了如何开发出一个优秀的程序,这牵扯到更多的东西,所以我们要进行更多的学习。一下我列举一些比较重要的东西:

1,    MSDNM$开发资料的大本营,不论是网站还是Library,都是第一手的和最权威的资料。其实大部分的内容都是由MSDN转化而来的,但是MSDN的逻辑性太差了,它是以类似字典的结构整理的,所有用来查询最好不过。不过有的时候随手翻翻也会受益匪浅。

2,    Duwamish:这是MSDN一直自带的一个示例,现在有DotNet版本的了,这个示例是官方版本的,好不好不说,但是规范程度绝对是最一流的!网上有一种说法,如果你把Duwamish全看懂了,你就是高手了。

3,    Design Patterns》:关于设计模式的一种经典书,必看。

4,    Wrox的一些书:Wrox的一系列的书清华引进了很多,网上也可以找到很多。有一些很有难度的,比如那本《ASP.NET 电子商务高级编程 提出问题-设计方案-解决方案》(《ASP.NET E-Commerce Programming Problem-Design-Solution》)就很好。自己去书店翻翻,看不懂的就买几本回来仔细看,呵呵。

5,    CSDN:大概算是中国的MSDN了吧,如果你缺乏帮助,缺乏交流,那就不用犹豫了。上CSDN吧。

6,    TeahNet:同样是微软的网站,它的教学中心,里面的WebCast有很多很好的,类似面对面的讲座,可以学到很多最新的技术。而且微软的网站,下载速度非常快。微软有一些讲师,特别是一些有金牌讲师称号的,水平确实很高(无论是技术水平还是讲解的水平)。网站更新很快,应该经常看。

7,    ASP:虽然说我们已经掌握了ASP.NET,而ASP已经是昨日的黄花,但是这黄花的数量实在太大,我们不能回避这个庞大的资源。其实如果已经学会了ASP.NET,再看ASP应该是小菜一碟,随便找一个系统的源代码看一下就OK了。

8,    动易文章系统&动网论坛:算是民族软件中不可多得的东西了吧,也许是我见识太短,但我认为这两个软件的水平,绝对算得上是高的。更可贵的是两个软件都有免费办的,值得好好研究一下。有能力的话,可以写一个和功能类似的系统,自己用。不过这两个系统都是ASP的,要求有ASP的一定基础。另外,这两个系统对模版的支持相当强大,可以说是二次开发的必备之物,美工尤甚。

9,    项目管理(版本控制):这里的项目管理,更多的是指的对微型项目,也就是一个程序员加一个美工,甚至说一个程序员就可以搞定的项目。主要的内容也就使版本的控制和项目资料的整理。经验问题,需要多实践。

10,文档的书写:不要说你做一个项目一个文档也不写,这样你永远做不了好的项目,所以文档是一个程序的必须的组成部分。学会写一个格式良好、叙述清晰的文档,势必学的技能。

11,Google & VeryCD:我们的资源库,要找东西去这两个网站就对了。没有去VeryCD看看也很好,上面有你一辈子都看不完的教材和资料,也有你或许听都没听说过的软件,更重要的是,全部都可以下。

终于把要写得都写完了。本人水平有限,不自量的发表一些自己的看法,如果能对你有些益处,也算是我没有浪费你的时间。在学习开发的这条道路上,肯吃苦是最重要的,只要肯学,我相信每个人都能成为程序员,这一令人羡慕的职业。