程序是什么?

大师们曾给过这样的诠释:
   
    程序 = 数据 + 指令
    程序 = 数据结构 + 算法

对此我也表示十分认同。但感觉这些观点更多是从机器运行模型或逻辑抽象的角度看待程序的,是左脑的产物。我的右脑告诉我:程序是程序员的avatar(化身)。这个隐喻式的诠释会让“程序”更有温度,并有些许人性的色彩。

计算机(CPU、主板、内存、磁盘、网络)为程序提供了一个拥有有限资源的的电子世界。在这个电子世界中,生存着不同程序员的avatar,他们 可能彼此相知,也可能从未谋面,他们各负其责,辛勤的工作着,为的是让这个电子世界运行的更加高效、稳定和长久。在这个电子世界里,avatar 也有角色与轻重之分:有负责资源调度的总管 – OS kernel avatar,也有专门从事某种服务的service avatar,当然数量最多的还属各种application avatar。和人类世界一样,有正义的avatar,也有“邪恶”的avatar,入侵者avatar(病毒、木马)和保护者avatar(杀毒软件、 防火墙)进行着旷日持久的“战争”。

这些avatar的背后其实是数以千万计的程序员们。与其说程序员在考虑程序的设计和实现,不如说他们在考虑其avatar的设计和实现,是他们 设计并实现了这些avatar。思维一旦转变,很多事情将发生变化。当我们认同的这种说法时,摆在我们面前的问题就从如何设计一个优秀的程序,变 成了如何给自己设计一个avatar了。这种认知上的改变首先会给你带来不一样的动力和热情。抱着30斤石头站30分钟和抱着自己30斤重的孩子 站30分钟,整个过程的感受是截然不同的。同样,与设计和实现冰冷的程序相比,给自己设计avatar显然更能提升程序员的动力和热情。想象一下 自己的avatar在电子世界扮演的重要角色吧!你的avatar应该长成什么样子,具备什么样的能力,如何与其他avatar交流等等。

此外,你的avatar不止一份。你编写出了代码,这些代码被放在N个主机上启动,你的avatar就会有N个实例。这就好比程序只有一个,而从 该程序启动的进程可以有很多。你的avatar好似被复制了若干份,运行在不同的电子世界中,做着相同的工作。与电影《阿凡达》中的魁梧高大可视 的avatar不同,你的avatar不那么形象,看不到,摸不着,仅存在于你的想象当中。或者更像是《黑客帝国》中的概念,世界是程序与程序间 的交互,是程序员们avatar之间的交互所构成的,是程序员灵魂、意识的存在与延续。

你肯定不希望你的avatar是一只青蛙,因此我们在设计我们的avatar时是有考量的。

【构成】

    * 骨骼硬朗精奇
       即程序代码脉络清晰,结构健壮。

    * 外表清新雅致
       即程序代码风格优美,维护性好。

【行为】
    考虑到电子世界是一个资源有限的世界,且其中存在各种陷阱以及恶意的avatar,我们的avatar应该具备以下行为特征:

    * 正确地做事
       avatar应该将份内的事情做好做正确,这是对avatar最基本的行为要求。

    * 自我保护能力
       在电子世界中充满风险,avatar应该对其收到的来自其他avatar的信息进行识别和校验,对于非法和恶意的输入予以拒绝和抛弃。对于来自OS kernel avatar反馈的任意异常信息都能予以正确的应对和处理。

    * 不作恶
       在电子世界里,也要遵循电子世界的规矩:不贪婪(肆意占用内存和CPU)、不制造混乱(恶意删除文件数据等)、留在在自己的地盘内,不乱跑乱窜(尝试突破访问权限)、不乱扔垃圾(不及时清理自己创建的文件等)等。

    * 工作有效率
       在不贪婪的前提下,avatar利用有限资源更高效的工作,应形成更多的产出。

一旦程序员站在设计avatar的高度去设计程序,就会将自己的思维融入程序,做到“见avatar如见程序员其人”。在程序设计过程中,考虑到人性的特质,至少不会那么冰冷,不是吗^_^

© 2013, bigwhite. 版权所有.

Related posts:

  1. 也谈Commit log
  2. 一场关于“何时发布版本”的论战
  3. 制定绩效目标的几个重要因素
  4. 谈谈如何写好Mail
  5. 关于绩效面谈的一些拙见