您的位置:首页 > 编程语言

编程的至高境界是什么?

2005-06-05 20:22 260 查看
  我十六岁才开始编程,这在国内已不算晚.我对编程的兴趣也起源于那时.虽然当时只是使用BASIC编写非常简单的统计程序.这种兴趣,就像初恋中少男少女的爱情那样,真诚且执着,纯洁且热烈!
  带着这样的兴趣,我中专毕业后就去了一家小的软件公司,使用DEPHI和VB做简单的软件开发,后来又接触了驱动程序.工作一年多后,发现我所做的程序,无非是把一套硬生生的流程,用编程语言来实现.这令我很失望,所以决定再不做MIS程序,也不再接触数据库.另一方面,驱动程序的难度倒是激起了我的兴趣,让我觉得真正的编程是编写操作系统和驱动程序. 
  揣着这样的想法,我离开了这家公司,没有再找工作,而是专心学习.期间我接触到了比较重要的一本书:<Think in c++>,它消除了我关于C++一切抽象概念的迷茫与迷信.在此之前,我觉得C++似乎是非常高深的事物,普通人无法理解无法想像(国内的教材总会给我这样的感觉).读了这本书之后,我才慌然大悟,原来这些大师级的人物创作出的经典作品,使用的仍然是实实在在的,普通的技术.与其说它使我对C++的理解有重大影响,还不如说它使我的认识论上升了一个台阶.在此期间,我做的另外一个更有意义的事情就是阅读MINIX的源程序,从此,我不再把操作系统只是当作一个黑盒子.
  真正地理解了C++之后(当然,还远没有完全理解),我进入了第二家公司.原本是准备做LINUX下的开发,因为我想进一步了解LINUX内核.实际的工作却是做一个DCOM程序.还好,我对C++的理解正好可以用实践检验一下.于是我就认真地做了一段时间,感觉还不错,只是我的OO设计能力确实一般.后来,做本科毕设的时候,我阅读了WINCVS的源程序,更进一步巩固了我对C++抽象机制的理解与运用.
  在第二家公司呆了一年,我就决定离开了.因为我更喜欢编程,不喜欢把自己的青春年华浪费在无聊的琐事上面.当时我决定去考研,虽然考研有很多弊端,但是这毕竟可以为我换来两年的学习时间.倒霉的是,我花钱没有计划,最后不得已又开始工作.只是,不再是在一个小城市,而是上海.
  来到上海之后,我就在一家研究所上班.这家公司从事的是嵌入式开发,硬件软件都有--上海有太多这样的中小型公司了.
  我首先做的工作是u-boot的移植与编写LINUX设备驱动程序.我觉得这正是我多年以来的夙望,所以期望值很高,并且去买了不少内核相关的书来看.可惜,我并没有做太长时间,就分配了一个没有任何技术价值的程序,也就打断了我原来准备研究内核的计划.另一个问题是,当我真正的去了解内核,带着发现宝藏的眼神走近它时,我有些失望了.编写驱动程序,与编写MIS程序似乎没有区别,只不过这里的门槛高些,需要了解硬件的特性.当然,我接触的设备驱动都是很简单的,没有像显卡,声卡那样的.
  我对内核失去兴趣让我自己很吃惊,似乎我对什么都没有兴趣了.我也明白,这并非偶然,就像是一个人的价值体系崩溃一样.我对内核的兴趣,更多的不是来自于我对它的了解,而是来自于道听途说,来自于大家对它的敬畏.这样的兴趣,迟早是要消失的.
  工作这么多年,我一直是一个人生活,没有几个朋友.突然之间失去精神支柱,令我的生活也很难受.好在是将近春节,稀里糊涂地过去了.春节过后,我便有些无法忍受手上这些没有意义的小程序了.按照<Pragmatic Programmer>的建议,我开始接触新的编程语言,perl.刚一上手,就突然觉得它太爽了,编程竟然可以这样,就好像说话一样.使用C++编程,感觉就像是生活在原始森林,什么都没有;而使用PERL,就好像生活在现代,有各种各样的先进技术和工具.原先禁锢于头脑中的C语言编程模式,第一次遭受了严重的冲击.
  再后来,我又接触到的Function Language,LISP.我并没有认真地学习如何去使用它,这样的语方,只是看一眼,就会被深深吸引--它的核心数据结构是LIST!我当时似乎有些恐慌了,那怎么来表示结构?类?继承?多态?噢,它根本不需要区别这些,它甚至不需要考虑存储空间的分配.在这里,所做的一切只是把功能表述出来,就好像数学中的函数一样.例如,(我对LISP理解并不深,只记得这个例子)目前实现了两个函数,f(x),g(x),现在要实现f(g(x)),使用过程性语言是无法实现的,而LISP可以.至于这个例子的意义,我还没有能力做进一步分析.
  再就是前两天,在测试GCC交叉编译器时,我接触到了EXPECT(TCL的一个超集),它在用来使交互式的过程变为自动化方面非常有用,不论是文本界面还是图形界面.就比如说,你要测试你的程序,有若干种输入与输出.有了EXPECT,你只需要指明输入与输出即可,它就可以自动做这些测试.它可以远端执行--通过SSH,FTP这样的工具.比起手工操作来,这不知要方便多少倍!更令我惊奇的是,EXPECT的发明是因为它的作者发现搭建测试环境涉及大量的手工操作,这些操作的重复性非常高,于是就有了EXPECT.
  之所以要着重介绍上面这两种语言,我是想表达这样一个思想:所有的语言只是工具,来源于生活,服务于生活.我们不应该被这些工具牵着鼻子走,而是要善于使用各种工具.存在我头脑中的编程高手的概念,已经越来越模糊.编写出复杂的算法,或者说编写出复杂的程序,都不能说是编程高手,也不能说是编程的至高境界.因为编程,它的本质就是代替人类来完成一些工作.无论它是如何实现的,它的性质是一样的.生活中不存在最高尚的事情,编程也不存在至高境界.
  对于生活在一个社会主义国家的人来说,得出这样一个结论,还真的是不容易,:-)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐