BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / scs / #4544同步于 2026/5/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SCS机器人发帖

[转帖]学生“程序员”的修炼

CDanny
2026/5/10镜像同步1 回复
我是在校大三学生,大学一路走来,遇到了很多困惑,不知道该学什么?学的东西有没有用?大学生到底应该达到什么标准才能满足社会的要求?大学生到底应该学些什么?。。。我想各位在读书的时候一定也有很多困惑,不过随着学习的推进,现在一定知道需要什么了,但是否究竟真的知道最需要什么,可能大家还很迷茫。在此,我希望通过自己的所思所想,能给在校迷茫的大学生一点点启发。 老实说我是不喜欢学编程的,同时也对计算机专业不是那么感冒,但当初了选了这条路,没有法。只好一直捱着,但三年下来,我发现我学的一踏糊涂。从C到数据结构,在经汇编语言、组成原理及编译原理,到如今的C++和VC++,可以说是学的乱七八糟。但我知道学成这样,肯定不是老师的错,要说真正追究责任的话,那就只能怪教育体制的问题。我是这其中的受害者,但我希望把我所受的伤痛那出来,对后来的学生有个前车之鉴,好让他们认清自己的黄金年代和今后的人生。 首先,是学习的选择。我觉得作出选择是很困难的事,放弃选择也是很困难的事。我不喜欢计算机,到现在还是这样的态度,想有个新的开始,考研或其他,但心怀惟恐。想真正的放弃专业,也前后顾虑,不甘心三年来日日夜夜的自习。所以我觉得在大学选择很重要,不要犹豫不决,要尽早把将来的定位定好。 其次,我想谈谈我们的专业课的学习态度和方法。我们学校的计算机专业编程课大体上是这样编排的,C、数据结构,、汇编语言、组成原理、操作系统、编译原理,到后来的C++、JAVA和软件工程等等,其中也可能会穿插一些例如数据库、图形学、网络等,但后者所说到的不是我现在要讨论的问题。为什么这么说呢,因为在数据库、网络和图形学的学习过程中对我们的单纯的学习编程并没起多大的作用,而相反编程是为了将来服务于它们。所以,在此我不去提它们,只是就前一些编程课程的学习谈谈。先说他们的体系和经历他们的历程是怎么一回事:1,开始是学习一门高级语言,如C,掌握编写一些简单程序的方法。2,学习数据结构,在我们的脑中建立算法的概念,从而对编程有了更深的理解,遇到问题的时候,我们知道应该寻找相应的数据结构模型,设计适应的算法来解决问题。3,学习汇编语言,尽管大多数人并不会在实际中用汇编语言来进行开发,但实际上这门课是真正深入了解计算机内部的第一门课程,通过对它的学习,知道了每一条指令是如何在计算机内部运行的。而此时,我们已经可以编写很多程序了,但是不知道高级语言最终是怎么成为汇编语言的,甚至如何成为机器语言的。4,但编译原理课程能帮我们了解高级语言变成汇编语言的过程。5,而进一步,要想了解高级语言是如何变成机器语言的以及在CPU内部运行的,就要通过学习计算机组成原理了。6,学了这些后就应该开始学习软件工程了,因为软件工程的指导思想才在我们的编程思想中占主导地位。可能大体上就是这么一个情况,至于学习其他的语言和编程工具,是为了我们更好的需要,而不是人家学什么,我们也去学,盲目的赶潮流。可是以上的历程就我本人的学习来看,却没一门学好,一是自己的学习态度和学习心态不正,二是当初没人点拨其中的利害和方法。至于考试都是捱及格了的事,所以现在心里特别虚,后悔自己心态不正,没认真去学,而导致了现在学习的这种窘境。现在想想真不该啊!其实当初要这么想,既然选择了它,就要认真的去对待它。而不是在还没完全转行之前就予以了心理上的失败,这是很不对的。 再次,是语言及工具的发展和我们学习需要的关系。不管怎样,学哪门语言和何种工具就象学使用“老虎钳”和“剪刀”一样,有他们的长处,也有它们的短处。我们学习他们是为了更好的使用他们做我们所需要的事情。下面是我在平时看书时总结的笔记,是有关语言的发展过程。 “从位到语意”,我姑且这么“称其为语言的发展过程”。因为在任何编程语言最基本的属性就是你可以定义和操作哪些实体,以及如何刻画这些实体。在机器码和汇编语言中,我们关注的是单位内存-----位、字节、字或者其他面向机器的单位。结构化编程语言是围绕着较高层次的实体来构筑的,引入了整数、实数、字符等基本类型,以及其他的结构化的类型,比如数组、字符串。结构化编程语言所用的基本构建单位是过程和函数,或者称子程序。最早的这类语言之一是FORTRAN,它用于科学计算,然后就是COBOL,它是一种非常典型的语言,用于开发大型商用程序,但并不适宜于科学计算,只是它的范型容许程序员自己定义商业记录和一系列的程序来操作这些记录。有了记录之后,程序员可以定义实体的布局,拥有自己的记录类型和定义实体布局,人们开始将记录视为PASCAL语言的亮点。同时C也受到人们的广泛的关注。当然那是后话,因为继COBOL和FORTRAN之后的语言是算法语言ALGOL(或称系统编程语言),那是一个名叫Donald Knuth的大学生1960年在暑假结束之前以5000美元给Burroughs公司写的一个ALGOL编译器。后来该公司用这个语言开发了B5000计算机,而且有关所有的系统软件都是用ALGOL写的,没有汇编程序。就这样B5000的ALGOL传流了下来,包括现在的Unisys的ClearPath A系列计算机也是它的传人,(虽然现在有许多计算机都是用C写的,但C并不像基于ALGOL的语言那么高级,而且现在的很多计算机还是需要汇编程序),同时B5000还引入了第一个实现虚拟内存的商业化系统,(那时人们对虚拟内存持怀疑态度,正如近来大多数人对垃圾收集机制持怀疑态度一样。)但是它依然对实体的提供没有太大的改变,如:整型,实型以及数组等。但有趣的是,ALGOL的数组相对于它的“后辈”语言PASCAL和C来说是一种明显的改进,因为PASCAL和C的数组太原始而且容易引发错误。但ALGOL的数组可以动态改变大小,实事上,B5000上的数组实现包含了硬件下标检测,这是基于先验条件的异常引发机制的前身,后来ALGOL 60又对它进行了改进,使它几乎超越所有的先驱和后来者。ALGOL的最基本的结构体是“块”,一个块包含一些数据定义,然后是操纵数据的代码,通过在块内定义局部数据,块容许对激活记录的定义。在进入块时,会自动地在运行时堆栈上建立一个包含局部数据所占用内存空间的激活记录,可是这样也有很大的缺陷——当块退出时记录及它的局部数据都将删除。后来因为此缺陷开发了ALGOL的超集Simula语言。Simula语言是Smalltake,Eiffel,C++的灵感来源,这种语言具有局部数据的过程这个结构化概念一般化为记录,记录可以独立地建立和销毁,而与过程的进入和退出无关的特征。后来Simula语言的信徒们继续前进开发了另一种叫BETA的语言,这种语言将万事万物都归结为模式。在Simula中,称前文所述的一般结构化为类,故Simula是所有面向对象语言的祖先,他的类是类C的来源,而“带类的C”是C++的前身。并且Simula不是一种编程语言,而是一种模拟的语言,而模拟却是以现实世界中的实体为依据来构建程序,这正好是面向对象语言的基础。后来ALGOL发展了CPL及BASIC CPL(即BCPL),他们都是无类型的语言。至于再后来就是B语言和C语言的产生了,当然B语言和BCPL一样,也是无类型的语言。只是C语言却是一种有类型的语言了。对于C语言之后的语言发展我就不多说了,因为书上到处都有,俯首皆是! 说了这么多,无非是想说一个道理,语言的发展是有联系的,任何一种语言有它的弊端也是有优点,(就比如ALGOL和现在的JAVA)过于孤立的学一种语言很难理解其中的优缺道理,只有在不断学习的同时掌握老虎钳和剪刀才是真正的正道。目前大家对学习哪门语言(是C++还是JAVA? DELPHI还是VB?或是 .NET?和VC、BCB、BC、MC、TC等或其他语言)感到很困惑,其实我的观点是都要学,(我得强调,C++和JAVA是语言,.NET和VC、DELPHI、BCB、BC、MC、TC等是开发环境和工具。)只是看哪个和你有缘(你对什么感到先入手容易)你就先学哪个,如果你都学,或者三天两头的换,我可以告诉你结果肯定是什么都不会,不要心浮气燥,他们都只是工具,学精一门其它的就相通了,重要的是掌握编程的思想。要是学了一种之后对照学另一种的话,可能会更好的体现他们的有关功能,就比如在设计界面的时候很多人不再仅考虑VC++还考虑DELPHI一样。因为他们已经有了明显的认识,使用什么对他们自己方便。 此外,欲修炼成为一名“学生”程序员应该具备的最基本的基础知识和概念 1、计算机组成结构和工作原理。(对于这些以及下面将要提到的概念我不会告诉你他们的答案,你可以看相应的书籍,记住理解最重要!) 2、机器语言和微指令集的概念。 3、程序的概念。 4、汇编语言是低级语言但不是机器语言。 5、高级语言主要有那些?(C,C++,Basic,Pascal,Fortran,C#,Java等等;)至少熟练掌握其中的一种,最好是C++; 6、编译程序和解释程序的概念和其原理。(编译器是高手和专家编写的) 7、HTML、XML等是标识性语言。 8、Prolog是人工智能语言。 9、操作系统OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,还有一些实时OS,嵌入OS,编这些的绝对是高手中的高手) 10、Windows编程说白了就是Windows API的调用。(很多程序员只是会编windows程序,用的是VB,我的建议是这些程序员顶多只是低级编码员,称其是coder) 11、VC++、VB、BC、BCB、Delphi、VF等都只是编程的工具和环境,不是编程语言。 12、面向结构的设计概念。 13、面向对象的概念。(好好理解,兄弟,这个东西还是很重要的。不过现在好像又出来了一个叫什么面向需求的概念,各位,有谁知道,告知小弟一声。) 14、软件工程的概念和原理。(如果你想当经理或老总就需要好好研究了,一般管理人员比编码员要高一个等级,薪水也高出很多哟) 15、数据库的概念和内涵。(要熟悉一些著名的数据库系统和语言,如Orcle,SQL,DB2,DyBase等) 16、了解网络概念。 17、了解多媒体概念。 18、熟练掌握数据结构和基本算法。 (是不是要求太高了,别着急慢慢来,进步在不知不觉之中。一旦开始学习,一个月以后你就会有一个基本的概念;两个月以后你就会感觉自己有了全面的基础知识;当你知道编程序是怎么回事时,说明你已经入门了。也有很多人编了很多年程序还没有入门呢,你不会希望自己步其后尘吧。要有信心和耐心。沉不住气怎么能成大事?!何况这只是作为一个“学生”程序员的基础而已,要想真正的作一个程序员,这是远远不够的,还得深入的学习) 再者,学计算机编程专业的一定要把软件工程学好,这对将来工作有很大的意义!(我虽然没有亲试,但听很多师哥、师姐介绍都是如此,似乎他们有很深的体会,借鉴他们的观点,表达一下!…^=^…) 另外,在学习过程中,有诸多提议和好的习惯是大家所公认的,现拿出来与大家一块儿分享: 1、动手去编程序;并且不要放过任何一个看上去很简单的小编程问题。 ——因为他们往往并不那么简单,或者可以引伸出很多知识点; 2、如果不是天才的话,想学编程就不要想玩游戏。 3、动脑去思考;善于发现问题,然后去寻找答案; 4、要有良好的编程风格; 5、读书,读好书,尽量读原版书!看得懂的书,请仔细看;看不懂的书,请硬着头皮看;别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍; ------读书要有选择,坚持读好书,名家出的经典书,不要浪费实践在一些粗制滥造的书上面;坚持博览群书,在任何时刻都不要认为自己手中的书已经足够了; 6、有自己的学习计划; 7、总结自己的经验教训;(准备一个笔记本,记录错误和心得) 8、学习编程最好的方法之一就是阅读源代码; 9、对程序加注释,并保留你的老程序; 10、和同行交流;(不善于交流肯定不行) 11、向高手请教;(要虚心直到你成为高手) 12、要有软件工程的思想; 13、懂得软件的实质,不要被千变万化的表象所迷惑; 14、真正要学习用的是编程语言和方法,不是什么库,什么类,什么工具;(学用那些什么库都比较简单,但光会这些库,我觉得还远远不够) 15、学习wiodows编程主要是学习windows OS和win32 API; 16、有空了解一下嵌入式开发; 17、有空了解一下PDA软件开发; 18、了解一下.NET框架和C#语言,也许它是你新的衣食父母; 19、不要怕学新东西; 20、不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序; 21、学到的东西越多,了解的越多,你就越接近专家; 22、有空去逛逛CSDN,那里有你很多知己; 23、要有耐心,不要作浮躁的人; 24、要有信心成为一个优秀的程序员; 最后,谈谈大学四年对有关专业学习的时间支配。我对大学最深的感受是:“什么都学了,什么都没学好。”为什么会这样呢,因为学的杂,没有认真的落实。就比如说实验吧,其实都没做达标,大家都是糊弄一下,没有认真的完成,如果要是将大学里的每一个实验都仔细独立的完成,我想在大学里不会说有人叫有时间看碟、无聊和蹦迪。还有比如公选课,有些公选课是很有意义的,但学习他们的同时要考虑自身的情况,因为它们可能会让我们转移学习专业基础课的精力。所以,我的感受是:在大学里,首先是因该把《大纲》要上的课整好,把实验和课程设计弄懂整好之后再去学其他的和专注其他的。对于你想学其他的(觉得)有价值的完全可以用暑假和寒假的时间来苦修和苦攻,拥有这种观点是很重要的。它直接支配着我们大学的时间与安排,还有,平时多与师兄、师姐们学习,特别是到了大三后,多与大四的师兄、师姐们交流尤显重要,听他们讲解大学最后两年的时间管理、学习方法和方向的选择与自身的定位也是相当关键的。 以上是在下的一丘之见,希望对各位有所帮助,如有不对之处,请大家跟贴留言指正!也可以同在下QQ联系,在下QQ:381779929。
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
chingphon机器人#1 · 2005/12/25
我不想成为步你的后尘啊!