“程序员文化”之正名
(本文首发于《中华读书报》8月6日号)
熊节
我总是很愿意把“程序员”和“文化”这两个词组合在一起使用。不独是我,我相信每个程序员都希望有一种属于自己的文化。上至帝王将相,下至贩夫走卒,多年传统的职业分工和社会地位划分使这些人群都有属于自己的文化。但程序员(或者说,软件开发者),这个信息浪潮催生的新兴人群,却无意间变成了文化的荒原——至少在中国是如此。一个证据?在最大的华语软件开发专业网站CSDN.net的论坛上,你可以毫不费力地找到诸如“程序员=民工”或者这样的帖子,而且响应者众。抛开结论不谈,这样的讨论本身已经足以证明“程序员文化”的失位——你能想象建筑师们展开一场“建筑师是否等于民工”的讨论吗?究竟什么是“文化”?在媒体研究名著《消失的地域》一书中,约书亚·梅罗维茨认为,自电子媒介时代以降,文化是一个小群体独占性接触的知识,以及知识外化形成的语词。用更通俗一点的话来说,文化就是用话语营造的藩篱,是维护一个小圈子神秘感的屏障。或者可以说得更直白一些:大多数时候,“文化”这个词并不像它所表现的那么高尚,它是一个小圈子得以区分于其他人群、得以成为稀缺资源、得以获得更高待遇的武器。
有位老朋友曾经说过一句精彩的话:“软件与软件之间的差异,不会比软件与大白菜之间的差异来得小。”是的,按照我们的设想,在信息化时代的末期,软件将无处不在。一个逻辑常识:外延越宽,内涵越窄。当软件的外延宽泛到无所不包的时候,如何期望两个“软件开发者”能够有共同的语词,如何期望他们用这些共同的语词来营造一种文化?
这时,一本书出现在我的脑海中:Gerald Weinberg的《程序开发心理学》(清华大学出版社即出)。在阅读这本书时,我注意到一个有趣的现象:Weinberg老先生不断地强调“专业程序员”与“业余程序员”之间的分野。在他看来,尽管都是用C或者Fortran(这本书有些年头了,现在我们或许应该说“C++或者Java”)编写程序,但业余的编程爱好者与专业的软件开发者有着天壤之别。例如,校园里的“编程高手”或者计算机系的高材生,如果没有在软件企业中做过项目开发,他就只能是一个业余程序员。因为软件开发最重要的,并不是一时一地的技术,而是——套用老先生的话——心理因素。尽管PC的普及极大地模糊了“业余”与“专业”的界限,但“业余程序员……就程序开发的理论与实践侃侃而谈”仍然是“最令专业程序员们反感的”。“毋庸讳言,二者之间的差别也是客观存在的。”
这就是了。试图从技术、从应用的角度找到程序员之间的共同话语,这本身就是一次错误的尝试。专业程序员之间必定有某种共通之处,但那必定不是他们掌握的技术或者他们面对的应用领域,而是他们作为专业程序员所具备的那种心理素质,以及他们从事专业软件开发时求解问题的方式。举个最常见的例子:业余程序员总爱讨论“Java与C++哪个好”这样的话题,甚至常常可以把问题上升到计算理论、哲学思辨一类的高层次;但在专业程序员的眼里,这根本是一个伪问题——专业程序员考虑的是在用户允许的成本条件下按时交付用户需要的软件产品,而当范围、应用域、时间、成本等诸元确定之后,几乎从来不会出现语言抉择的问题。毕竟Java与C++适宜的应用域交集极小。
作出“业余”和“专业”的划分,我们已经在厘清“程序员文化”的道路上迈出了可喜的第一步。另一位成名多年的软件开发者、技术顾问Pete McBreen则走得更远。在他的《软件工艺》(即将由人民邮电出版社出版)一书中,McBreen借用工艺学的传统,提出了“学徒——技师——工匠”(apprentice-journeyman-craftsman)的三级划分。在他看来,大学文凭早已不能作为鉴别毕业生水平的标准,SCJP一类的认证考试代表了“six-pack”式的廉价货(six-pack指美国常见的一种廉价批发滞销啤酒的方式),外面的培训班根本教不出真正有用的东西。惟有软件开发者本身的声望——reputation,如果阅读这本《软件工艺》,你会不断地看到这个词——能够证明他的实力。软件开发者要想获得更高层次的认可,也只有靠自己在低层次的打拼,获得足够的声望。
不知道你是否喜欢这种论调?在计算机系里混了四年的学生、自己写过几个小程序考了一张MCSD或者SCJP的“编程高手”、参加了三个月“软件工程师班”培训的学员……当他们毫无顾虑地把自己称为“程序员”或者“软件工程师”时,当他们与从业多年的程序员(至少在表面上)无法区分时,我相信这是对整个行业的损害,也是对他们自身的损害。《中华读书报》的读者,如果你恰好不是IT业内人士,请想想你对于程序员这个人群的整体印象,相信你的观点能够证明我的结论。
所以,在我看来,这才是“程序员文化”的正道:划分人群的标准不是Java、C++、.NET……,而是“专业”与“业余”、是“学徒——技师——工匠”。惟其如此,同一人群才能真正拥有共同的话语;惟其如此,希望进入这个文化群体的人才能找到正确的方向——看看现在的初学者们吧,“Java与C#,我应该学哪一个?”,难道你认为他们这样真的能一窥程序员文化的堂奥吗?