虽然我也是菜鸟,不过我想向你推荐一篇我看到的文章。> * 贴子主题: 程序员的成功之路  
>   
>  
>  
>   蓉儿 
>   

> --------------------------------------------------------------------------------
>    
> 以前写过类似的文章,但是,找不到地方了。当有朋友重复问我如何开始学习编程时,我总是不知道用什么来回答。今天,在这里认真的整理一下思路,然后,写一系列的文章,这样,我可以在别人问我如何学习编程时,我给出这个文章的超链接就可以了。如果各位对于本文或捧,或杀,或无声都可以,但是,我希望班竹手下留情,不要将其删除掉,因为我不想再写一次了。
>    上面这些无用的话,算是序吧。
>   
>    时至今日,软件开发技术更新速度飞快,很多朋友在开始学习编程时,一则摸不着头绪,二则有害怕的情绪。当然还有一些朋友因为学习了一两种比较容易的开发工具如Delphi.VB就说软件开发原来如此简单。
>    其实这些都是误会,那如何做一个成功的程序员呢?下面是我和一些朋友谈过之后的小结,希望对于各位有所帮助。
>    1。培养对软件开发的兴趣,这个是因人而异的。如果你没有兴趣,就是你还没有做好入行的准备。软件开发一般而言,在年轻时,会有一份诱人的薪水,于是,有很多人冲着将来可能的高收入工作而想入这一行,于是,开始了一段痛苦的路程。因为不喜欢,所以,很难有大的发展,因为一直没有大的进步,所以,更加不喜欢。如此恶性循环。
>    而正确的应该是,先做到对于软件开发感兴趣,如何做呢?首先你要产生对于软件本身的好奇心,因为好奇心是我们探索未知的基础。有了好奇,就可以有一种持续的让自己坚持下去的动力。
>    就我个人而言,我在迷了一年的游戏之后,终于想知道游戏背后的秘密,然后。(我不认为每个人都通过游戏入行,而且,我更希望大家不要太迷游戏。我现在基本不玩游戏了)
>    2。第二步,其实更简单,给自己进入软件行业一个理由,然后,写下来,放在一个适当的地方,不要随便看到,但是,永远不要忘掉。
>    为什么需要这个理由?原因很简单。当我听一些朋友聊他的苦闷时,总觉得对于自己选择软件行业是一个错误,如何如何的不好。我就问他,你当初为什么选择软件这一行?想了半天,他才回答我。我说,你在犹豫,就证明你已经淡忘了当初你为什么决定入行了。现在还来得及,记下你的理由,说服自己。然后,以后,如果再出现问题,再想这些理由!记住,你的决定不是错误的,但是,你一后悔,任何决定都是错误的。
>    如果你一直记得入行的理由,那么,在做软件开发这份寂寞的路上,你永远不会被寂寞击倒。成功就在你坚持的那一刻来临。

>    3。一切从dos开始。也许你觉得奇怪,为什么要从dos开始,因为这里我是说你要成为一个成功的软件程序员,而不是仅仅是一个程序员,既然你要成功,所以,你要厚积薄发,所以,从dos开始是有道理的。
>    因为从dos开始,你就知道,要想删除一个文件不是右键点一下,然后,选择删除菜单,可能还要点一个确定,就一切OK的,你可以要执行一下del指令,然后,还要输入一些参数如文件名,呃,可能还需要路径,知道这两个区别有什么用呢?当然有用,你不会被漂亮的窗口界面所迷惑。我不认为所有的程序员在日常使用过程中,都要放弃图形界面的好处而去用字符界面去显示自己的能力,因为这没有必要,但是,当你现在才开始学习的时候,挡住窗口界面的引诱,或许你会更容易成功。
>    但是,知道删除一个文件需要这些参数有什么好处呢?多试试这些指令的不同参数,多试试不同的指令,其实在将来你虽然没有机会去了解到这些指令的内容,但是,你却可以猜测出它们大概处理的过程是什么。记住,好奇心可以让你去想这些事。或许有时,以带着玩文字mud的心情去玩dos,感觉也是不错的。不过,dos是单人游戏,对手是一个机器,而mud是多人游戏罢了。
>    4。现在轮到开发工具出场了,一开始你会选择什么开发工具呢?我固执的以为,开始你选择的工具决定了你将来的发展水平。现在一般人总会选择Delphi或vb,其实我不反对。如果你只想做一个可以写一些小程序的程序员的话,你完全有理由这样做,但是,本文是写给想做一个成功的程序员的人的,所以,我不建议你这样做,或者说,我认为这样做是错误的。因为现在的RAD开发工具掩盖了很多编译器真正做的工作。
>    从Turbo C2.0或Turbo Pascal开始怎么样?这两个都是一个好主意。不过,如果你选择了其中的一个,那么,你的将来就会受到这两个影响。如果你选择了TC,那么,将来可能你更喜欢VC,但是,如果你选择TP,那么,Delphi对你来说,在将来你会觉得更可爱一些。但事实上,选择TC或TP都不会对你的将来产生太大的影响。
>    比如选择TC吧,运行于Dos环境下,现在你找一本书如何?我记得谭浩强写过很好的介绍TC的书,当然他也写过很好的关于TP的书,照着书上,写一些小程序吧,别忘了,当写好第一个可运行的程序时,记下日期,看一下你离你决定开始学习编程多久了。这个时间间隔不要太长,也不要太短哦,太短了,你将来的发展可能受到限制。太长了,可能你不是太用心。不过,具体太长,各人自己把握吧。

> 5。接下来,编译原理。这时候,你已经有了编译工具的底子,如果你有足够的好奇的话,你现在应该想知道编译工具背后的故事。从源代码到可执行程序分为几步呢?各步做什么的?一二三,开始吧。这方面的书不太多,不过,还好,应该可以找到几本,我手边有一本是英文原版的(不过是打折买的),还有一本是中文的,清华大学出版社的,大约有300页,还有一本非常薄,大约只有一百多页。当你看完了这些资料后,一般会有一个做一个编译器的冲动,呵呵,努力哦,其实做一个编译器是很难,但是,做一个解释器,呃,还是挺容易的
>    学习编译原理的好处在将来你学习其它开发工具时,就会体现出来了。特别是学习不同底层语言的开发工具时,我个人现在常使用的是Delphi,但是,我并不认为我的VC及VB很差。虽然它们的底层语言相关非常大,但是,除去这些语言的外衣,用编译原理层面来看它们,原来它们是如此相似。
>    6。现在操作系统原理了,你要知道,任何你做出来的软件都是运行在操作系统环境中的,操作系统为你的作品提供了什么样的环境呢?这很重要。如果是DOS,它是以软中断的方式提供的,而Windows则是以一系列的API提供的。然后,你还可以知道,如何判断系统当前路径,及文件系统的文件格式等内容,如果有机会,你还可以看一下dos三个主要文件的源代码或者是反汇编代码(如果你有幸买到相应的资料的话:P),然后,你会了解到文件系统中的数据结构,内存管理部分的代码,还有消息通讯机制,及在操作系统中如何处理死锁的(推荐看MINIX源代码及相关书,这在书店里应该有售,有英文原版,也有清华大学的翻译版本)。
>    到了这里,你没有发现你在和别人聊软件开发时,别人对你的态度有变化呢?现在你不再是一个菜鸟了,相信自己。继续走

>    在开始下面的步骤之前,我还是要恭喜你,因为如果你真的走到了这一步并且决定走下面的步骤,证明前面的一些乏味的步骤没有将你击退,你的耐心已经证明了你会是一个优秀的程序员,因为下面的几个步骤是相对而言比较有吸引力,其实也是一些新手想急于去做的,而你与他们不同,你还有前面几步。你成功的经过了蛹这一别人可能没有经历的阶段,那么,当你变成蝴蝶时,你一定更美丽。
>    我上面的一段话是不是在浪费您的时候呢?如果是的话,我要说对不起,让我们一起看看下面要做些什么。
>    7。现在让我们进入windows时代,选择一个在windows时代你将主要用的开发工具吧。与前面相关的,如果你原来选择的是TC,那么,现在选择VC或许不错,但是,如果你选择TP,那现在选择Delphi更容易一些。不要认为这两个开发工具在能力上会有差异。就我的经验而言,两者都是万能的(在一般意义上是的),何况,如果你努力的话,最后,你应该都熟悉这些开发工具的。所以,不要在选择什么开发工具上浪费太多的时间。
>    我记得我的路上还有VFP,还有BCB,后来才是Delphi及VC,不过,作为建议,忘掉VFP吧,Delphi容易入手,而VC其实也很容易。不过,无论是哪个,在最初的时候,都会让你觉得怎么与你用过的TC或TP有太大的不同。
>    呵呵,对了,是不同,因为在TC或TP中,软件开发模式与软件运行模式都是以过程驱动的,你是上帝,你控制着一切,而现在,你将控制权交给了你的上帝……您软件的使用者。现在您需要理由什么是事件控制程序,然后,理解事件编程模式,这是现在流行的开发工具VC,Delphi,VB都差不多的东西(当然与此相关的,还是属性,消息,事件,类,对象等),不过,你如果知道,你只要掌握一次,然后,可以在多个开发工具之间使用这些概念时,你会不会多一些努力的耐心呢。
>    前面每一小节都说两点,这一小节只说一点,因为这一节比较重要。所以,我补充说两点:
>    1)类与对象的区别
>    2)开发工具与语言的区别
>   
>    1)类与对象,其实是经常被混用的两个词,但是,从严格意义上说,它们还是应该分开的。我这里的类,对应于英文里的class,对象对应于英文里的Object。
>    一个简单的比喻:类就是建筑图纸及建筑模型,而对象就是实际的房子。我们在建房子之前,要先画出图纸,做出模型,这就是定义类的过程,而根据这个图纸我们可以建一个甚至多个一样的房子,每一个这样的房子就是一个对象。
>    希望这个比喻只会让你对于类与对象的概念的理解有所帮助,而不会使你更误会了他们的意思。
>    
>    2)开发工具与语言。这两个也是经常被混掉的概念,其实这个可能放在编译原理学习完之后讲它们的区别比较好,不过,我放在这里是因为,如果你只是一个初级的程序员,弄清楚这两者的区别意义不大,而现在不一样了,你应该搞清楚才行。
>    TP,Delphi底层的语言都是Pascal,虽然delphi底层的语言严格意义上说是Object Pascal,而TC与VC.BCB它们的底层语言都是C,虽然在严格意义上说,VC的底层语言是C++,BCB的底层语言也是C++,不过,VC与BCB的C++还有一些区别。
>    在这方面,有一个不太好的比喻:比如一个土豆,用刀可以切成丝,用刨子也可以将其切成丝,不过,用刀慢一些,而用后面的工具快一点。这里的土豆就是语言,而其它工具就类似于开发工具,而成丝的土豆就是我们的软件产品。

> 不知道你学习第一个windows下的开发工具用了多久,不过,相信自己,你用的时间一定比没有打过前面的基础的人学习的时间短,而且效果好。我的经验是如此。
>    现在假设你已经掌握了Delphi或是VC,记住不是精通,呵呵,因为精通往往会有更多的含义,这里你只要掌握delphi或是vc本身,而不是去掌握如何用delphi实现corba编程或是用vc实现tcp/ip编程。就像前面掌握tc的原则一样,你只要掌握语言本身就可以了,知道如何设置对象的属性,如何编写自定义消息,如何编译,如何写代码,并且确信可以写出helloworld这样的程序。OK,现在我们继续。
>    8。数据库原理。现在做软件一个最基本的应用类型就是数据库编程,这是可能使你可以胜任很大一部分工作了。也就是说,如果你掌握了数据库之后,你就可以出去找工作了。当然,并不是所有的工作都与数据库有关。既然要掌握数据库编程,我的原则还是先从原理开始,不要急,这一阶段用不了多久。
>    随便找一本很薄的书就可以了,因为你是程序员,不是做数据加管理员,所以,你不需要知道太高深的数据库方面的知识,你或许只要知道什么是dml或什么是sqL以及它们的使用方法就OK了,当然,还要有一个关系型数据库原理方面的知识,比如第三范式是什么等等。了解了之后,就OK了。
>    对了,作为原理的补充,你需要知道什么是ODBC,呵呵,事实上,如果你是学习Delphi的话,你一定已经知道BDE了,现在你只要认为BDE与ODBC是一样的功能就可以了,虽然它们遵守不同的技术标准。
>    9。好,现在开始数据库编程。用SQL server作为起点吧,因为这东西使用起来挺方便的。
>    根据它的帮助,创建第一个数据库吧,如果你是用Delphi,可以直接看一下它的示例程序,了解一下它自带的paradox数据库,然后,创建一个数据库也是可以的。不过,还是推荐你用sql server。
>    然后,写一个简单的单表输入程序,简单一点容易掌握。
>    比如写一个客户资料录入程序。
>    这一切应该很快,不过,从现在开始,你要注意和别人交流了,因为从现在开始的很多东西,都是别人一指点就可以,而你自己看需要很久的。可以经常去一些论坛,如www.csdn.net或是www.vchelp.net,或者干脆去微软的讨论组,都是很不错的。当然,作为广告,欢迎你到OICQ聊天室中的“网络社团“服务器里的程序员驿站里去坐坐




> ------------------------
> 不奢侈所有,但求点滴 
>   
>  

> --------------------------------------------------------------------------------
>  发贴时间: 2001-9-3 21:33:00  
>  
>