关于软件和软件工程师

     前不久在淮海路的三联书店,随便翻起一本介绍全球著名建筑设计的书,书中讲述了每个建筑的创意背景和设计灵感,配有一些主要的设计草图以及建成后的照片。让我想起前不久看到的一本讨论软件模式的书,也是一个个系统设计的案例,也有一些UML框图,一些用户界面的截屏。

     拿软件架构跟建筑架构进行类比,是如此的陈词滥调,然而每当这些图纸活生生地呈现在眼前的时候,又是如此的亲切,并且令人感叹。

     一个是描述现实世界中走廊和窗台结构的设计;一个是对讲述的是虚拟世界里信息传输和显示的逻辑。一个要遵守基于原子和分子的材料和力学定律;一个的基础是CPU,内存,磁盘这些电子设备的运行法则。一个承载着人类文明和不同文化的特质,容纳着人们的体育活动或者家居生活;一个构建着人类的虚拟生活和数字化时代各行各业的流行时尚。

     然而在很一段长时间里,每当人们提起一位建筑师,大概会想到他是个衣着得体,谈吐优雅而且带有艺术家特质的绅士。如果是一位软件工程师,大概会想到他是不修边幅,语无伦次的怪人,而且如果他在为某个小公司工作,他可能常常是眼睛通红,身形消瘦,而且没有任何的储蓄。

     大家都说职业没有高地贵贱之分,但事实上医生就是比邮递员更受人尊敬,哪怕后者常常要终日穿梭于风雨之中,其辛苦程度和获得的报酬与前者不能同日而语。

     程序大师温博格在讲述医生的故事的时候,引用了一个典型的传播学案例。西方的医生自古以来就借助希腊文中的生僻词汇来营造文化壁垒,从而可以用“专业人士”和“业余爱好者”来把他们跟老百姓中略有医学常识的人区分开,以达到与众不同和高人一等的目的。

     由此推论,至少从传播学的角度,当软件工程师过多地使用建筑行业的术语,尽管促进了公众对软件和软件行业的理解,以及对软件工程自身的一些反思,却会在潜意识里淡化了自己的职业认同。如今IT界也充满了各种以字母简称为特征专业词汇,可这些缩略字母都太容易记了,以至于每个高中生都知道里面的含义。

     事实上软件工程师还是有太多与建筑师不同的地方,而且有些地方是如此的激动人心。之前在电视上看到纽约为新的世贸大厦征集的设计方案,一位华人建筑师的云雾状设计获得最佳创意奖,同时也是大家公认的几乎不可能实现的创意。基本的物理常识就告诉我们,要在风雨中支撑如此不规则形状的摩天大楼,需要怎样机械强度的建筑材料。

     软件行业一直盛行的虚拟化(或者称为抽象)潮流,已经让程序员越来越远离物理定律的束缚。最早的虚拟化应该是发生在CPU和指令集上,近年来的JAVA2和.NET把程序员抛得更远,对象或流完全代替了内存区域,磁盘存储,或者网络数据包。于是更多的程序员就只需要专注于业务和模式,进而讨论重用,这个在其他工程领域都梦寐以求却难以效仿话题。

     再加上各种面向领域的framework和platform,大多数程序员的工作几乎就像作家或者画家一样,只是把现实生活中需要的信息流和逻辑,用代码来代替传统的铅笔来做个素描而已。组成这些素描的点和线条也都是虚拟的逻辑,程序员于是比建筑师更接近艺术,更可以天马行空了。

     虚拟化同时也给软件带来了一些困惑和苦恼,一方面还是来自物理定律的约束,这也是软件之所以还是一门工程而不是艺术的原因,也使得那些叫嚣只有想不到,没有做不到的理想主义者受到打击;一方面也是来自软件工程师的职业认同,当他们每天做的都是高中生就可以完成的工作,当他们看着印度软件创造的金字塔模式铺天盖地的袭来的时候,尤其在发展中国家的软件工程师们开始面临各种非常现实的问题。

     值得庆幸的是,就算只在技术层面,虚拟化的魔力并不总是像听起来的那么神奇。一个叫Joe的美国人在他的一本软件工程的小品文集中提到一个“漏洞抽象定律”:“尽管有如此众多的高级的开发工具可以帮助你以难以置信的速度完成很多复杂工作,但突然有一天,你还是必须重新学习一大堆底层的运行机制,从而找到这个高级开发工具在虚拟化的工作中漏掉的一些问题,再花上两个星期以上的时间设计一个绕过这个虚拟层的机制来修补它”。这样的情形在VB,MFC和COM的时代比比皆是,可能.NET会好点,但是要写出高质量的代码,一个初级程序员还是要花大力气来搞清楚什么是装箱和拆箱。这些漏洞终于还是制造了一些门槛,把声势浩大的IT民工拒之门外,让那些有经验的程序员得到一定的尊敬。

     如今多核和并发计算的时代已经到来,软件技术又将面临一场深刻的变化。前不久程序员杂志翻译转载了一篇美国计算机学会学报上的文章,文中指出“并发将要求程序员以人类难以适应的方式思维”。相对于这个行业技术的快速变化带来的挑战,虚拟化漏洞制造的门槛已经显得有点微不足道,而机会只是留给那些对人类的未来充满激情,并且能够快速学习的人。其实几年来遇到过不少程序员,这个说来简单的学习能力,并非每个人都可以做得足够好的。学习能力这个门槛,还是成为这个职业不至于沦为码头搬运工的重要基石。

     看来还是印证了那句话,上帝在一个地方关上了一扇门,就一定会在另一个地方打开一扇窗。唯一不变的大概就是不断的学习,好奇和追问成为在这个行业生存下去的终极法则。

     更加幸运的是,如今的软件早已做手工作坊变成一个产业,可以选择的学习内容也变得更加丰富,如果你对哲学和新技术充满热情,可以做一个技术专家;如果你对人际关系和新的方法论有兴趣,就可以做一个管理者;如果你对市场的变化极度敏感,并且深信好技术不一定能卖好价钱,也可以做一个商务人士。

     而且无论你是什么角色,只要打上了软件的烙印,你将会是与众不同的。不妨去看看IPMP的项目案例,你就知道为什么一个职业的项目经理,可以把一个大坝建设或者汽车生产线管理得妥妥当当,一旦接手软件项目,他却可能会完全摸不着方向。

     去年我到无锡玩了一趟,一个大学同学在那里的一家医疗设备公司做电子工程师。在太湖边上,我们聊起自己的工作,聊起他做的硬件和我做的软件。我告诉他,世界上最顶级的软件工程师,应该是头冒金光,思考问题的时候甚至会从头发丛中冒出火花的人。软件工程师必须很有想法,因为软件本身就是一堆想法的堆砌。除了想法,一无所有,这大概就是最纯粹的软件。

     为了证明我的观点,我还让他有空去做一个试验,在百度或google上用“XX工程 思想”作为关键字去搜索,当你把XX换成“电子,建筑,或者机械”的时候,可能会一无所获,但换成“软件”的时候,搜索的结果将会成千上万。

     时间再往前推一点,引发我设计这个试验的,其实是刚刚读完的一本叫做“逻辑的引擎(Engines of Logic)”的书,主要介绍计算机科学的起源。书中讲到哥德尔,是他第一次用数字来代替逻辑数学的符号,在草稿纸上把一个逻辑运算式翻译成世界上第一行程序代码。所以我在想,最早的程序应该起源于这些逻辑学家,而不是那位名叫Ada的优雅女性,她的程序大概只是最早在机器上运行的代码而已。

     一些与哥德尔同时代或者更早一点的数学家和工程师,都在梦想着让机器代替人类进行推理,比如我们只需要输入一些事实,机器就像公平的法官或者聪明的侦探一样告诉我们,谁是杀手谁是平民。这个理想其实来源于工业革命时期西方人对机器的一种崇拜,然后一不小心就成为了如今信息化革命的最早根源。

     尽管至今为止他们的梦想并未最终实现,在如今我们叫做人工智能的领域中,各种乐观和悲观的争论也仍在继续,类似这些的争论往往近乎哲学,不着边际;然而他们催生出来的,不管是科幻电影和小说,还是整个软件产业都在疯狂地发展着。

     这似乎也是长尾理论的另外一个视图,不管尾巴多长,在现实中创造的价值多大,他们依旧被高端的思想牢牢牵引着。

     我们这些工作在一线的草根一族,想要在麻木的加班和浮躁的进度表背后,真正看清楚自己正在干的是什么,就不能忘记这些推动和支撑整个行业的终极力量。在这种力量面前,商业和利润也只是变成了一种工具,成为对自身价值的一种证明。

     而且对技术的认同,对于我们这些发展中国家的软件从业者尤为重要,不合理的房价和远不够成熟的社会制度,把我们不断往现实利益的一端驱赶,把握核心技术的发达国家却在这场正反馈游戏中越来越强,我们如今还只是为他们不断提供利润的长长的尾巴。

     程序大师温老先生在他的书里也提到了未来世界中的程序员,那会是什么样子呢,让我们拭目以待吧。

 

阅读更多
个人分类: 软件开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭