编程何以才算是编程?[转]

来源:互联网 发布:能读书的软件 编辑:程序博客网 时间:2024/06/02 12:29

编程何以才算是编程?

                          ——huangbeyond

这个问题算是困扰我自己许多年了。长久以来,我自己在学习编写程序的
同时,也在无数次地问自己,编程何以才算是编程?那么,答案应该是什么呢,
我不敢自言正宗,但有点心得而已,就算是抛砖引玉也罢,以博众人一议。
我把我对真正意义上的编写程序的理解,归纳为三点,这三点应该是成为
一个程序员在技术上的充要条件。我详细阐明如下。

第一是“系统相关的知识”。如何理解呢?很简单,就是自己使用的操作
系统的相关知识。这个概念很简单,而牵涉面却很广。这一个“相关”,就应
该是包含了一个操作系统的各个方面:内存管理,进程调度,界面特性,操作
方法,文件系统和编程接口等等。谁要是认为,学习如此的一个讲究“广”的
系列知识,是没有必要的,那么,此人就一世编不出能和系统紧密结合的程序,
甚至根本就写不出程序。离开了系统相关的知识,所有的编程知识和理论都是
纸上谈兵,没有丝毫的意义;离开了系统相关的知识,编出的程序也是一些放
之四海而皆准的垃圾东西。那种以为自己应该学习能以“不变应万变”的知识
的认识,是错误的。别的不说,就目前这个Internet网络的现状,是Win NT和
UNIX并存的局面,Win NT上能实现的,UNIX上并不买账,反之亦然。那么,你
说,分别学习这两个操作系统的相关知识,有没有必要?这样的阐明,是从广
度上来说的,而从深度来说的话,那么,我们都知道,VB写的程序绝对比同功
能的VC程序慢。这恰好是因为VB编程时所需要牵涉的系统相关知识面窄的原因。
从底层开始开发的VC程序,就相反,其编程的复杂程度,牵涉的系统原理和知
识,全都是VB所不能比较的。再一个,没有比较全面的系统相关知识,也是不
能写出适应性强的程序的。我问:没有掌握Windows系统所特有的WinSocket的
知识相关,你能编写出适应Windows系统,使用TCP/IP的协议平台专用网络程
序吗?有一个专门测试网络是否连接的小程序,叫Ping.exe,它可是Dos模式
的,那么,你即使是掌握了标准的TCP/IP知识,在没有掌握Windows系统特有
的编程方式前,也是肯定不能把它改写为Windows版本的。因为,没有“系统
相关的知识”嘛。许多的爱好编写程序的人,都停留在编写一些傻里巴矶程序
上,没有及时地更新自己掌握的系统知识,使知识愈来愈陈旧,自然,就写不
出好东西,最终也打击了自己的热情。

第二是“编程思想的养成”。这个概念,简单来说,就是指,“在应该循
环的时候知道去循环,在需要去判断的时候知道去判断”。这种认识,对于绝
大多数计算机系科班出身的同学来说,自我感觉是掌握了的,其实不然!这种
情况,只是“编程思想的养成”的三层意义里最简单一层而已:第一层,将复
杂的现实生活里的具体事物关系抽象为数学描绘和逻辑结构;第二层,是将数
学描绘和逻辑结构描绘转化为类计算机程序代码的描绘;而第三层,才是将类
计算机程序代码的描绘编写为实际的计算机程序。这个“思想”的养成,需要
常年累月编写代码的经验,也需要比较扎实的数学和逻辑思维的功底。如果是
能将所有层次全掌握,那么,就是能作需求分析的高级程序员;如果只能掌握
较浅层次,就是一般性程序员。

所有的程序代码,都应该来自于对客观世界和自然环境的反映,经由抽象,
变成机器代码。没有养成这种思想,就会在实际编写程序时,感到下笔困难,
感到自己仿佛根本没有东西可写,而,即使有明确目的去写程序,也会无从下
手,拼凑都是难为自己;而养成这种思想后,就会经常性地揣摩别人的程序,
即使是在打电脑游戏时亦是如此。因为这种练习,其实就是自己的编程度思想
的表现和再提高的必由阶段。

第三是“排未知错误的能力”。在一些介绍编程的书上,喜欢把这点称为“
排错能力”,而没有强调为“未知”!换而言之,容易使人认为,排错就是排
明显的错,比如:语法错误什么的。这些错误都是静态的,是有形的,甚至就
像秃子头上的虱子一样明显,而不是动态的,无形的,那才是真正的难。有些
编程经验的人,都知道一点:排错,排的就是自己事先不知道的错误,而无论
这错误是知识性的,还是逻辑性的。

我也反对这样的一种编程习惯:事前充分地准备,编写中万分地小心推敲,
以求编程过程的顺利。这样一来,编程的过程就是一个“步步为营”的过程,
这样就容易被小处迷惑了,会导致“观大略”观念的淡薄。在细节上精雕细刻
的能力固然重要,但是在程序编写中,对全局的架构的安排,亦是十分的重要。
一个变量,是作全局方便,还是作局部合理?一个函数,究竟应不应该封闭这
块代码的功能,并使之具备共用功能?这些都是对程序本身全局的安排。至于
去敲凿一个循环还能化简,还能降低2%的时间复杂度,就是细节的问题了。把
两者结合来编写程序,才能是一个流畅而顺利的过程。

原创粉丝点击