一个程序员给初学编程人的建议!

时间:2022-06-20 04:03:19
一个程序员给初学编程人的建议!

本篇文章是作者多年来的一些感受,主要写给那些想学习程序设计而又很迷惘的朋友,希望可以带来一点帮助。 
我第一次接触电脑是在小学二年级的时候。那时纯粹是因为喜欢打电子游戏,听别人说电脑上的游戏十分好玩,于是就漫漫开始与之接触了。在三年级时父母出于我对计算机浓厚的兴趣送我去了一个BASIC编程学习班,从那时起我才真正开始走上编程这条不归之路。虽然说现在程序设计这门专业在社会上很热,竞争十分激烈,但是这只是学习编程的人比较多而已。真正能够掌握以至于精通的人实际上很少,毕竟中国的软件业才刚刚起步不久。现在社会对优秀的程序设计人员的需求量还是相当大的,但是前提是必须要优秀。我自己虽然也谈不上优秀,但多少还是有些感触。在这里想讲述自己对于一般程序员和优秀程序员之间在技术上的一些认识(什么敬业精神生活态度我就不多说了): 

首先作为一个优秀的程序员,数学是十分重要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。数学主要能让人懂得一种分析问题的方法,然后再通过编程去实现它。计算机内部的许多原理也都牵涉到比较复杂的数学知识。它是我们用来解决现实问题的最高效的工具。很多学习编程的朋友对数学觉得不屑一顾,觉得对于编程没有什么关系。实际上优秀程序员和一般程序员拉开档次很大一个程度上就是取决于对数学的能力。一些项目有时需要很复杂的数学建模和利用数学对于系统效率进行分析,而这些项目对于一般的程序员是很困难的。正确应用数学知识有时候能使你的程序的效率产生质的飞跃。现在的程序员在数学上普遍是薄弱环节,这点是大家应该引起足够重视的。当别人对于这些项目感到无从下手,而你却能够完成,这个时候你的价值也就表现出来了。真正优秀的程序员是能够最基本的一点就是要能够通过自己的知识来解决一般程序员所无法完成的问题。而数学能力就是一个很重要的环节。 

其次就是要对数据结构引起足够的重视。如果说计算机专业的学生与非计算机专业的最根本的差别绝对是数据结构(数学大家都一样学了,主要看你自己学得好坏)。对数据结构的掌握与运用能力是衡量你编程能力的一个很重要的指标。有的人对于看了链表,栈,树,广义表这些东西就头痛。然而这些东西往往能使你的程序的效率比别人高出百倍。由于一直搞信息学竞赛,到了大学又搞ACM,所以我对数学和数据结构都掌握得相对较好。这使我在应聘与工作中明显感到胜人一酬。记得自己大学时去一家公司应聘的经历,当时去应凭的还有3个人,有2个大学毕业,有个也工作了一段时间了。他们几个都在大讲自己的能力如何之强,会使用的语言及编程工具如何之多,经验如何之丰富。按理说我应该是资质最浅的。当时也是初生牛X不怕虎,也就硬着头皮去了。当时面试的题目是一个公司的资金管理项目的一个问题,要求每个人都在思考后给出自己的设计方案。其中比较核心的一个问题就是要计算一个资金最小波动值的问题,给出的数据量相当大,对效率要求很高。对于整个程序的面向对象化的分析我们几个都是差不多的,毕竟这些东西在学校里是很重视的,而且不是真正的难点。然而到了最关键的问题时其余的人都卡壳了,有两个是用简单的双重循环,时间复杂度(N^2),惨不忍睹。还有一个在冥思苦想了好一阵以后说用树,具体技术细节又讲不清楚,效率分析也很马虎。只有我当时很快就给出了采取AVL树的方案,并且利用高等数学推导作出了很详细的效率分析和时空换算,并提出了引入汇编的方法。很自然的我得到了这分工作。在这里大家显然可以看到数学和数据结构对于一个优秀程序员是多么重要,它们是和一般的程序员打开档次的最关键的地方。这样向“枣子”碰到的那种情况应该很轻松的就可以想到。 

如果你是一位想学习编程的朋友,我经过多年的学习总结出来了一个学习的线路希望对你有所帮助。要学习编程是要有很大恒心和毅力的,首先你要明确自己的目标,想好自己编程是为了干什么。如果你学习仅仅只是一时想编出QUAKE和成为比尔盖次的冲动,那么我劝你还是应该还是不要开始学习,应为这样的目标很难支持你日后大量的学习。而且你的年龄不能太大(最好是中学或者大学生)。如果你想好目标并决定开始奋斗,那就让我们开始吧。如果你一开始对电脑一无所知,那么你应该先熟悉一些电脑的一些最基本的原理和操作,这个不需要特别细致的学习,只要大概知道二进制和一些基本操作就可以了。接下来你应该先学习BASIC语言,这个语言并不会耽误你太多的时间,学习它完全是为了入门,让你对电脑编程有一个比较初步的认识。这时候你应该多编一些小的程序,知道一些最基本每条语句的功能,搞清楚一些基本的数据结构(尤其是数组)对于一些其余用途的函数最好不要做任何学习,因为这样只会分散你的注意力。当你能够可以熟练的运用BASIC编出猴子选大王,以及电脑出题考试之类的程序时,你就可以开始后面的学习了。接下来如果觉得自己接受能力强的话就可以开始学C了(注意不是C++),如果感觉有困难也可以先学Pascal过度一下。还有很重要的一点就是千万不要一开始就学VB,DELPHI,VC之类的东西,这些东西在一开始学会对你造成很坏的影响。有可能会把你引入另外一个错误的学习方向而忽略了真正应该掌握的东西。学C主要是学过程话的程序设计,学会把自己的程序分成许多的函数(或过程),养成良好的编程习惯。这时可以多看一下高人的程序,不一定要懂意思,主要是学会别人程序的格式(比如变量如何起名,怎么划分函数)。除开掌握基本的控制流语句外,应该学习一些很简单的I/O函数和数学函数。C的学习主要是你舍弃原来BASIC程序那种把所有语句积成一大堆的风格,要学会使用函数,提高代码重用性。对于指针之类的东西如果实在看不懂可以先不去管,到后面会有办法。当你能够比较自如的用C编写一些小的计算程序时,你就可以开始你的数据结构的学习了(数学的学习主要是在学校,自己要多用心)。数据结构你可以一点一点漫漫看,并不需要专门空出一段时间来专门研究,这样的目的是让你能够很好的掌握它,要学会用数据结构的知识来规范自己的程序设计和提高程序的效率。学完C我认为接着最好学习汇编。这个或许有许多人都会反对,然而我个人认为这样是很好的。从最基本的DOS汇编开始,买本《IBM PC汇编程序设计》(清华黄皮)一定要一点一点吃透,实在看不懂就跳,反复的严读是一定可以看懂的。汇编是一定要掌握的,因为它涉及到很多最基本的知识。掌握了汇编和对I/O有了个很彻底的认识后,应该去学编译原理。这个东西并不要精通,但是一定要知道,在大脑里要有一个这样的概念,这对你对程序语言的控制能力都有很大的帮助。这样最基本的学习就算完成了。一般智力正常的人前一段东西应该都是可以掌握的。接着后面的学习就要看你自身的造化了。这个时候你应该研究一下数据结构,不要分散自己学习的注意力,要知道数据结构是异常重要的(相信我,绝对没错)如果你觉得自己已经对于树,连表,堆栈之类的东西和排序,递归之类的算法已经十分清楚,就可以开始学习C++了。学习前一定要有个正确的认识,那就是C和C++是两个不同的东西。学习C++是为了学习面向对象的程序设计,这个时候你对于指针应该也能够掌握了(有汇编的基础),主要抓住C++和C相比的一些新特性,对于多态之类的特性要注意理解掌握,如果没有搞懂就坚决不要往下学习。一些基本的概念掌握以后可以看一些别人设计的程序,学习别人怎么利用面向对象的方法来设计程序的。这个东西也是人之间拉开档次的一个环节,可以和数据结构放在同等重要的地位。我就见过有的人都大学毕业了还搞不懂virtual到底是怎么一回事情。其实我认为学到这里你已经为你成为一个优秀的程序员打下了很好的基础,你已经能够应用C++,懂得面向对象程序设计,对数据结构掌握很好,掌握汇编和编译原理。接下来的学习就是基于操作平台的了,一般是先学windows(Microsoft毕竟是老大),先学win32 api,搞请windows基本消息机制和原理,有汇编基础基本上不会碰到什么困难。其实只要会了API,其余什么MFC,VCL都是囊中之物了,都不过是对于API的封装而已。VC,C++Builder都可轻松拿下,这只是开发工具的问题。以后的OLE(ActiveX),.NET,数据库就要看自己的发展方向而定了。我在这里强调的是前面的基本能力的学习,后面操作平台虽然知识体系庞大,然而毕竟比较死,更好掌握。最后编程能力的高低主要还是有以下几点决定:1。编程的习惯 2。数学能力(包括逻辑思维,分析问题的能力) 3。对数据结构的认识能力 4。经验的多少(包括多使用语言的掌握能力) 
以上只是本人一些愚见,希望大家指出不正确的地方并与我多多交流: 
QQ:48803963 


摘自:http://hb.cnhacker.com/bbs/read.php?tid=3173&fpage=1&toread=&page=1

18 个解决方案

#1


欢迎评论!

#2


0分?

#3


我是非计算机专业的

数据结构我看了四年,好像自学计算机,就对数据结构印象特别深,还有就是编译原理,都是可以改变一个人看问题角度的玩意,才能从真正的程序员角度看问题。

反正,看数据结构一开始就看懂了文字,有一天在图书馆炒冷饭,突然有了顿悟的感觉,然后一通百通了。

编译原理也给我顿悟的感觉,只是没有数据结构那样强烈。

#4


我还记得产生顿悟那句话,好像是说,程序是数据和操作的集合,设计程序首先从设计程序的数据结构上入手。

数据结构的定义也很有意思,数据结构首先是逻辑结构,然后内存映像结构,最后才有了基于这些结构上的操作,就是程序,所以,程序的基础是数据结构。

#5


拿下win32API可不一定能够轻松拿下MFC、STL之类的哦。

我看了一本经典的C++入门书籍,17天学会XXX,win32常用GDI的API都熟了,然后,嫌VC++太罗嗦,就转向delphi。

然后至今,我用VC++写程序,仍然只会用最原始的办法,直接构造消息循环和使用API,MFC一窍不通,加上C++没完没了的includ和#Define,要精通MFC谈何容易。相比之下Delphi的VCL就容易多了,不是结构简单,纯粹是语言优势,C的程序看着就头疼,罗嗦的不行,一个过程调用,要找出这个过程的原始程序段,难度不是一点点地。加上Defiine套Define,绝对让你昏倒。

拿下C++builder也不简单啊,VCL都是Delphi写的,你看不到源代码,里面究竟怎么样的除非你用Delphi看Pascal否则没法精通的。

#6


BlueTrees(蜗牛)

VCL都是Delphi写的,你看不到源代码

不会你用的是个人版吗,download一个企业版就可以了.

楼主文章的确让初学者找到了学习的方向.
我的旅程与这也差不多,越是学到高处就越想知道底层的实现细节.

#7


mark

#8


编程思想很重要,也要熟悉数据结构分析等才能编出好程序,做出的系统才是好系统

可以给使用者方便和快感,也可以给维护带来方便!

我做过的一些系统,就觉得很有感触!

#9


学习

#10


我说在C++Builder中看不到VCL的源代码,昏死,我的表达能力这么差?

用C++Builder学习VCL要走不少弯路的。

#11


我原来是搞PB的,后来感到PB在报表设计(Datawindow虽然功能强,但无法让软件的最终用户定义报表)和界面设计能力不行,转向了C++Builder,再后来觉得C++Builder前途未卜,又不能深入VCL才改学delphi,说老实话,我一直想转VC,但看了那一堆奇怪的宏就想吐,现在我很庆幸找到了一种无所不能的工具DELPHI。

#12


多谢楼主!

#13


我觉得编程就是为了开发东西用的,所以,我觉得学习《软件工程》也是十分必要的。因为无论你做什么程序,你首先都会习惯不习惯的做需求分析,然后逐步细化。直到后来能用自己的程序语言实现。

#14


软件工程最难了,不是你看书就能学会的,实践性很强。

需要找一个好师傅才能把你带出来。

纯理论,是不行的。

我写了这么多年的程序,一直想找个软件工程的师傅好好学学,一直没有成功。

不过,程序写多了,经常想想,再看看书也能悟出一些道理来。

现在的软件工程太抽象了,UML图的定义都不精确,说得好听点就是要增加灵活性,说得难听点无非就是增加学习难度,提高入门门槛。

我极度B4 UML的创始人。他们根本不配用计算机,他们要用就应该让诺依曼从坟地里面爬出来问他们要专利使用费。

#15


如果是从小学起还好些。。。

但是如果现在已经参加工作再学好像。。。。何年何月噢,赫赫

#16


mark

#17


其实只要会了API,其余什么MFC,VCL都是囊中之物了,都不过是对于API的封装而已
------------------------------------------------------------------------------
楼主还没明白oo啊。oo明白了,不妨去看看GP。

我极度B4 UML的创始人。他们根本不配用计算机,他们要用就应该让诺依曼从坟地里面爬出来问他们要专利使用费。
------------------------------------------------------------------------
oo明白了,uml也就明白了。只去用uml,是不会懂oo的。就象delphi的rad,让人容易堆砌控件一样。

#18


呵呵,开来用Delphi的人还是很多的。

#1


欢迎评论!

#2


0分?

#3


我是非计算机专业的

数据结构我看了四年,好像自学计算机,就对数据结构印象特别深,还有就是编译原理,都是可以改变一个人看问题角度的玩意,才能从真正的程序员角度看问题。

反正,看数据结构一开始就看懂了文字,有一天在图书馆炒冷饭,突然有了顿悟的感觉,然后一通百通了。

编译原理也给我顿悟的感觉,只是没有数据结构那样强烈。

#4


我还记得产生顿悟那句话,好像是说,程序是数据和操作的集合,设计程序首先从设计程序的数据结构上入手。

数据结构的定义也很有意思,数据结构首先是逻辑结构,然后内存映像结构,最后才有了基于这些结构上的操作,就是程序,所以,程序的基础是数据结构。

#5


拿下win32API可不一定能够轻松拿下MFC、STL之类的哦。

我看了一本经典的C++入门书籍,17天学会XXX,win32常用GDI的API都熟了,然后,嫌VC++太罗嗦,就转向delphi。

然后至今,我用VC++写程序,仍然只会用最原始的办法,直接构造消息循环和使用API,MFC一窍不通,加上C++没完没了的includ和#Define,要精通MFC谈何容易。相比之下Delphi的VCL就容易多了,不是结构简单,纯粹是语言优势,C的程序看着就头疼,罗嗦的不行,一个过程调用,要找出这个过程的原始程序段,难度不是一点点地。加上Defiine套Define,绝对让你昏倒。

拿下C++builder也不简单啊,VCL都是Delphi写的,你看不到源代码,里面究竟怎么样的除非你用Delphi看Pascal否则没法精通的。

#6


BlueTrees(蜗牛)

VCL都是Delphi写的,你看不到源代码

不会你用的是个人版吗,download一个企业版就可以了.

楼主文章的确让初学者找到了学习的方向.
我的旅程与这也差不多,越是学到高处就越想知道底层的实现细节.

#7


mark

#8


编程思想很重要,也要熟悉数据结构分析等才能编出好程序,做出的系统才是好系统

可以给使用者方便和快感,也可以给维护带来方便!

我做过的一些系统,就觉得很有感触!

#9


学习

#10


我说在C++Builder中看不到VCL的源代码,昏死,我的表达能力这么差?

用C++Builder学习VCL要走不少弯路的。

#11


我原来是搞PB的,后来感到PB在报表设计(Datawindow虽然功能强,但无法让软件的最终用户定义报表)和界面设计能力不行,转向了C++Builder,再后来觉得C++Builder前途未卜,又不能深入VCL才改学delphi,说老实话,我一直想转VC,但看了那一堆奇怪的宏就想吐,现在我很庆幸找到了一种无所不能的工具DELPHI。

#12


多谢楼主!

#13


我觉得编程就是为了开发东西用的,所以,我觉得学习《软件工程》也是十分必要的。因为无论你做什么程序,你首先都会习惯不习惯的做需求分析,然后逐步细化。直到后来能用自己的程序语言实现。

#14


软件工程最难了,不是你看书就能学会的,实践性很强。

需要找一个好师傅才能把你带出来。

纯理论,是不行的。

我写了这么多年的程序,一直想找个软件工程的师傅好好学学,一直没有成功。

不过,程序写多了,经常想想,再看看书也能悟出一些道理来。

现在的软件工程太抽象了,UML图的定义都不精确,说得好听点就是要增加灵活性,说得难听点无非就是增加学习难度,提高入门门槛。

我极度B4 UML的创始人。他们根本不配用计算机,他们要用就应该让诺依曼从坟地里面爬出来问他们要专利使用费。

#15


如果是从小学起还好些。。。

但是如果现在已经参加工作再学好像。。。。何年何月噢,赫赫

#16


mark

#17


其实只要会了API,其余什么MFC,VCL都是囊中之物了,都不过是对于API的封装而已
------------------------------------------------------------------------------
楼主还没明白oo啊。oo明白了,不妨去看看GP。

我极度B4 UML的创始人。他们根本不配用计算机,他们要用就应该让诺依曼从坟地里面爬出来问他们要专利使用费。
------------------------------------------------------------------------
oo明白了,uml也就明白了。只去用uml,是不会懂oo的。就象delphi的rad,让人容易堆砌控件一样。

#18


呵呵,开来用Delphi的人还是很多的。