一些关于程序设计的想法

     看到这个标题,你的想法是什么呢?我们学习程序设计到底学的是什么?一种语言的运用?还是设计思想?为什么会有那么多不同的程序设计及语言呢?掌握一门语言容易吗?

     这些问题确实比较难于回答,但是或许值得思考思考。

     说说自己吧,我接触的第一门程序设计语言,当然,当时很天真选了C++,认为C++是最好的,或者说是最先进的。很显然我错了,自己的C++(C++实际就是带类的C语言,“类”的概念与面向对象的程序设计概念有关。)知识,最终变成了入门级的C语言知识,关于那个“++” 一点也没学到,也基本没用C++写出些有意义的程序。

     而 Basic 呢,很早就出现的一种语言,但是现在的发展使其大大改变。《大学计算机基础》上有关于Basic的简介。我是在高三暑假接触Basic的,确切地说是 Visual Studio Basic 2008 (微软的Basic集成开发环境 ), 其中 .Net 的引入,使很多功能相当于系统 API 的函数成为 Basic 可以直接调用的。而方便的编辑器,带自动补全和函数提示,错误提示,语法提示(一大堆提示),也使 Basic 变得相当简单。所以呢,就用 Basic 做了一些自己用的上的而目前没有的一些程序,比如U盘上ObjectDock的配置更新程序一类的,其实很简单。

     这些说明了什么呢?C++并不是最好的程序设计语言,或者说没有那个程序设计语言是最好的。Basic 甚至能比 C++ 更快更好的完成一些程序。有人问了:为什么大家还用C++?答案是效率和面向对象(可能这个答案有争议) -- 用C++写出的程序执行效率要高些,还有一点就是C++的面向对象概念。

     但是,就像Bjarne Stroustrup说的,显然,C++太复杂;显然,人们有些恐惧它而放弃它。但是“人们也需要相对复杂的语言来处理绝对复杂的问题”。

     注意下划线,到这里说明了什么呢?不同的问题,不同的语言。多种程序设计语言的出现的原因之一就是为了解决不同的问题,面对不同的问题,选择最好的语言。而学习这些语言就是学习如何利用他们解决问题,去最有效的达到自己的目的。

     那么,那么多语言,如果学习,需要多长时间呢?3天还是10年?

     走进任何一家书店,你会看见《Teach Yourself XXX in 7 Days》,旁边是一长排看不到尽头的类似的书,它们要教会你C++ Java Basic Windows Linux.. 等等,只需要几天甚至几小时。而 Peter Norvig 的一篇文章 Teach Yourself Programming in Ten Years 却谈了“10年学会程序设计”。引用其中的一些话:

     在3天时间里你可以学会Pascal的语法(如果你已经会一门类似的语言),但你无法学到多少如何运用这些语法。简而言之,如果你 是,比如说一个Basic程序员,你可以学会用Pascal语法写出Basic风格的程序,但你学不到Pascal真正的优点(和缺点)。那关键在哪里?Alan Perlis(ACM第一任主席,图灵奖得主,1922-1990)曾经说过:“如果一门语言不能影响你对编程的想法,那它就不值得去学”。另一种观点是,有时候你 不得不学一点Pascal(更可能是Visual Basic和JavaScript之类)的皮毛,因为你需要接触现有的工具,用来完成特定的任务。但此 时你不是在学习如何编程,你是在学习如何完成任务。

     在许多领域,都需要大约10 年时间才能培养出专业技能。因此呢,大学的4年或许远远不够你去成为一名优秀的程序员。你需要更多的理论,实践,或是经验。

     在任何情况下,单从书本上学习都是不够的。 “计算机科学的教育不会让任何人成为内行的程序员,正如研究画笔和颜料不会让任何人成为内行的画家(摘自《The New Hacker's Dictionary》)”。

     编程, 最好的学习是从实践中学习。当然理论同样十分重要,他限制着你的发展。但是实践可以让学习更有效,设想一下,如果程序设计课程整天都在教那些枯燥的语法,不给任何实践的机会,这样的课程可以接受吗?原因何在?有人之所以认为那些语法代码枯燥无味,就是因为体会不到通过不断的实践,靠自己去完成一个程序的成就感。

     如果你曾经有过程序设计经验,那么你一定还记得(至少我还记得)第一次写的那个"hello world"程序,看到眼前的Hello World你是不是很开心呢,同时你也有了继续下去的兴趣和动力。 如果没有做过任何程序,那么,设想你在学习完第一节程序设计课后,可以自己写出一个计算从1加到n的程序时,会不会也是这种心情?没有了实践,没有了成就感,学习效率会大打折扣。同样,如果不是亲身去做,可能也永远不知道什么是困难...

     夜深了,先写这么多,如果你觉以上这些无聊枯燥没意义,就当本人没事了瞎扯~~~

Go Back



Comment