事情的起因是我在几天前发表了一段推文,原文如下:
一直很不喜欢「程序员」这个描述。
以「员」为后缀的职业,如收银员、驾驶员等,多为一种机械地反复做同一件事情的工作,这个标准对 coding 来说太低、太无趣了。
「软件工程师」则好的多,既表明了专业性,也包含了 coding 所具备的艺术和创造的可能。
这段话一时引起了波澜,有人表示赞同,有人觉得我在贬低其他职业,有人觉得这是对「员」字的偏见,有人觉得是文字的隐含义造成了冒犯,有人觉得程序员并不比其他职业更需要创造性,有人觉得这是矫情没必要扣字眼。一时间夹着各种观点的评论风起云涌。
说实话,这句话更多只是一个「吐槽」,所得到的结论也只是「我不喜欢」,并非严肃讨论,我在发推时也没有特别的去斟酌每句话的词语和表达方式,完全没想到会引发这么多的争议。但是既然已经打开了这个社会话题,那就不妨就把这个问题说个清楚讲个明白。
「程序员」的称谓为什么会造成不适感?
我会给出不喜欢「程序员」这个说法的观点,源自于我对被称为「程序员」时内心所产生的不适感。(这个不适感并不是我一个人的独家偏见,有不少的人表示了赞同)所以我会想要去纠结,这个不适感从何而生。
一种解释是说程序员和收营员、驾驶员等社会地位不高的「员」职业混在了一起。所以产生了一定的贬低义,引起了不适感。
但是这个解释是有明显的问题的,运动员、演员、公务员、飞行员,存在着大量社会地位不低的「员」后缀职业。我没有理由会因为社会地位高低问题而产生不适感。
(注:上述职业的社会地位高低问题是客观存在的事实,不是我的观点。)
所以经过思索,我给出了一种可能的解释,「员」所代表的职业多为偏重重复、轻创造性。而如果评价一个软件开发人员是在进行重复、非创造性的工作,可能会构成一种误解甚至冒犯,导致了不适。(关于软件开发和创造性的关系在后文中讨论)
一个类比,如果你把一个作家说成是打字员或写字员,当然是一种冒犯。如果你说一个设计师是美工也是一个冒犯。这个冒犯的本质是因为这个词语未能准确的描述我们所从事的工作,忽略了其核心:创造性。
因为我们对作家的工作足够了解,使得我们明白什么时候该称呼作家,什么该称呼为写字员。但是对于软件开发人员这一职业,社会上统称为了程序员,这是不合适的。就和把作家称为写字员是不合适一个道理。
这个解释建立在对「员」后缀职业偏重重复、轻创造性这一特征的归纳上,并不与「员」字本身所表述的本意以及其他含义冲突。有一种意见是「员」是「人员」的缩写只是表一群人的概念,还有一种意见是「员」的字本意是通过工作换取钱财,这些说法本身无疑是正确的,但是我们讨论的范围是职业称呼中的「员」后缀问题,如果按照上述意见,那无疑所有职业都可以用「员」去作为后缀,然而职业称呼里还存在「师」、「家」、「匠」、「工」、「人」等等后缀,我们所探讨的是职业称呼里这些后缀的区别。
具体来说,常见的一些「员」职业有:服务员、收银员、驾驶员、飞行员、图书管理员、快递员、运动员、演员、公务员、打字员、制图员、文员、清洁员、研究员。
创造性可构成关键因素的职业有:设计师、建筑师、摄影师、作家、设计师、插画师、漫设计师、工程师、发型师、科学家。
虽然如研究员、演员等个别「员」职业,同样很需要创造性,但是整体上来看,「员」后缀确实较少包含「创造性」因素。而「家」、「师」等后缀则大量包含了「创造性」。(至于什么才是创造性,在后文中讨论)
关于这个问题的纠结也不是一个新鲜事,比如我们会将一些杰出的歌员或演员尊称为歌唱家、表演家、艺术家,那么这个从「员」到「家」的背后表明了什么?具体怎样的标准才能称为「家」?这个答案可能会很主观且复杂,我认为和创造性密不可分,且不论这个判断是否正确,但至少表明,后缀的不同真的有不一样的表意。
历史上看,程序员最早的工作,是辅助数学家进行运算,只是把别人的逻辑转写为机器代码,对于这个工作内容,程序员一词是非常合适的,这也是程序员一词的由来。但是现在软件开发人员的工作内容早已超越于此,这也是为什么我们要重新审视程序员一词的原因。
创造性和软件开发这一职业的关系是什么?
首先应准确的去理解创造性这个词汇,一个标准释义是「一般认为创造性是指个体产生新奇独特的、有社会价值的产品的能力或特性,故也称为创造力。新奇独特意味着能别出心裁地做出前人未曾做过的事,有社会价值意味着创造的结果或产品具有实用价值或学术价值、道德价值、审美价值等。」
所以创造性和重复性这两者其实说的是一件事,如果是在不断重复某个行为,那自然不会有创造性。不同的职业对创造性的需求是截然不同的,举例说明:
- 我们不会要求一个驾驶员拥有创造性。
- 一个作家如果不具备创造性那么不可能被称之为作家。
那么软件开发与创造性的关系是什么?这点上我之前的一些观点确实有些片面,对于目前「程序员」这一词语所描述的职业,创造性可能确实并非必要。只靠照搬现成逻辑和代码,也能应对很多工作。
但是就如打字员与作家、美工与设计师的区别,创造性的融入使得职业的本质发生了区别,在最近几十年中,软件开发者们靠着这种创造力给整个世界带来了翻天覆地的变化,软件世界能够发展至今,和软件开发者们自身的创造力是密切相关的,而并不是像房屋建设那样,由建筑师先进行设计,再由建设工人去施工,软件开发者自己完成了从思考到编码的整个创造过程。
一个伟大的创造能改变世界。如大家熟知 zip 压缩算法,其算法实现存在于所有主流操作系统中,这个创造最终流入到现代几乎每个人的指尖上。而这些伟大的创造,最初也只是软件开发人员为了解决自己所遇到的一个问题所创造的。现代人生活赖以为生的复杂软件系统,建立在这些无数的「小」创造之上。
为此,我们应当将具有创造性和不具有创造性的编程职业区分开来,给具有创造性的编程人员一个独立的职业称谓。有两个替代称谓可能合适,一个是「软件工程师」,另一个是「软件开发者」,简称「开发者」,由于工程师的后缀多与职业认证相关,且一般是进行某些庞大的工作,甚至在某些国家,没有 license 的情况下自称为 engineer 是违法的,我认为「开发者」是一个最合适的词语。
这里我们纠结的是语言准确性问题,至于为什么要纠结这个称谓的准确性,将在最后一段中进行叙述。
当明确了词意后,我们再来看,相对于开发者,程序员所表述的工作是否为低标准的。同样拿出已经反复使用过的例子,美工的工作技能就是平面设计师的基本功,程序员的工作技能也是开发者的基本功,我们不用去考究两者是否是严格的包含关系、一个设计师是否一定能做好一个美工的工作,至少以美工的标准去考量一个设计师,以程序员的标准去考量一个开发者,这就是低标准的。
对事实的叙述可否构成冒犯?
这里引用这一段评论:
「原文 Tweet 建立了一個矛盾衝突,將程序員與收銀員、駕駛員等對立起來,而這個矛盾衝突是比較激烈的,如果沒有「這個標準對 coding 來說太低、太無趣了」一句,則衝突會低很多。分析此句,「這個標準」即是指「收銀員、駕駛員等」的標準,不異於指桑罵槐:你們收銀員、駕駛員等的工作標準太低、太無趣了。」
这段评论是从文学的角度在分析我文字所表现出的衍生意,说的是正确的,我确实隐约表达了收银员和驾驶员这两个职业要求低且无趣这个观点。但是指桑骂槐的「骂」却是不妥的。
收银员和驾驶员的工作要求就是很低。收银员和驾驶员的工作就是很无趣。
如果要在这两个事实上来和我争论,我会觉得你极度缺乏常识。
那么,如果我所表述的内容,是一个公认的事实,是否能构成「骂」呢?骂的词典义是:用粗野或带恶意的话侮辱人,侮辱的词典义是:使对方人格或名誉受到损害。对事实的叙述无法符合这个定义。
当然这有些在对「骂」咬文嚼字,更应该讨论的问题是:对事实的叙述可否构成冒犯?我觉得是可以的,即使一个人公认长得很丑,但是如果说出「你真丑」这样的言论依然是一种冒犯,类似于揭开伤疤的行为。从这个角度说,我原文确实无意间产生了冒犯,在此表示歉意并反思。
为什么会有原文是在贬低其他职业的误解产生?
贬低一定是一种冒犯,但是冒犯却不能直接构成贬低,贬低一定是一种基于价值观的判断。在另一篇文章中我已经对为什么原文会让人觉得是贬低进行了详细的剖析与批判。可总结为:
只有当批评者持有「脑力劳动者优越于体力劳动者」这样的价值观,才能从原文归纳出我有贬低其他职业结论,而这种价值观绝非我的表述,是读者自己价值观的反射。
具体详见:https://link.medium.com/nVhkAMH8Ybb
为什么应该去平等的看待各种职业?
我们必须先在客观上承认,职业间是有无聊和有趣的差距的,是有创意性和非创意性的区别的,是有门槛高低之分的。
在承认这些差异的基础上,我们才能去谈职业平等的问题,拒不承认职业间的差距,是站着说话不腰疼,得了便宜还卖乖,这才是对其他职业的不尊重。
在社会主义价值观中,要求我们对各职业应该不分高低贵贱,是因为每个职业对于这个社会的运转都是必须的,是社会分工的不同。有些职业就是无趣、苦闷、低报酬的,从公平的角度,社会应该以某种形式去更多的补偿和关怀这些职业。
而在另一种价值观中,因为创造是人类进步的源动力,往往给予和创造性相关的职业更高的社会评价。得到更高评价的职业令人向往,以此促进更多人往这种职业去发展。
更高的社会评价值对应的是赞许等具体行为,对于社会评价没那么高的职业,也不应该去贬低和歧视,应对所有正当职业的从业者抱有尊重。
1949 年后的中国人自小接受的是社会主义价值观教育,但事实上人人都明白,现在社会中科学家、公务员比保安、收银员享有更高的社会评价和地位。这种价值观上的割裂是我们不愿意去正视的问题,所以当原推文可能触及到这个问题的时候,部分读者会变得格外敏感。这里不去评价各种价值观的对错与高低,我自己也没能清晰的想清楚这件事,但至少我们应该要求一个理性的成年人抱有统一的价值观,而不是根据自己的感情需要在各种价值观里跳来跳去。
是否应该对这种称谓「咬文嚼字」?
一个方面关于语言,我们对语言的反思和修正,本身就是语言的发展过程,我们应当尽量去纠正语言中可能包含的错误观念,使之与事实更为符合。这是对语言准确性的追求,关于语言准确性的重要有很多大家都进行过论述,我就不再去重复了。
但是这种对语言「咬文嚼字」的行为,应该严以律己,宽以待人,大众并不是很了解软件开发人员的工作到底是怎样的,所以一概以「程序员」描述,这个行为没有什么不对,我也不会为此而感到生气,只有靠开发者们自己去进行解释,才能让一般人了解到创造性所带来的区别,从而可能产生主流语言的变化。
本文就是一个开发者在尝试对开发者工作内容进行澄清,不去进行澄清,那么这个误解——开发者的工作只是机器语言翻译员,就很难被消除。
英语中也有 coder、programmer、developer、software engineer 等对软件开发这一职业的不同称谓,就简单以这几个词去搜索,就能找到大量分析和比对这些词语差异的严肃讨论。而我在中文互联网上去搜索,鲜有对程序员、软件工程师、开发者等词语的区别的讨论,能找到的少量结果中,基本都是在讨论工程师和程序员在工程性这一问题上的区别。
而另一个方面,则是通过这种咬文嚼字,对我们自己的职业进行反思,我们需要意识到创造性对这份职业有多重要,重要到可以因为有无创造性而直接划分为两个不同职业。
现在有些程序员,不主动去思考与创造,只负责把产品经理的命令翻译为机器语言,甘当「代码猴子」。虽然这样可能也能完成程序员这个职位的工作要求,但请问一下你们是否心甘情愿。
有些职业上的跨越,在客观上会有很多障碍,比如一个司机要想成为一个赛车手,客观上经济条件的限制就使得这个转变极为困难。而创造性不存在客观上的门槛,当有了编程的基本技能,即可以通过创造性去解决问题,经常能看到很多初学者活跃在开源项目中,有很多初高中生编写的开源项目被广为使用,所以是否要从程序员「晋升」为开发者,完全是一个主观上的事情,主要看你越不愿意。
所以如果通过这一咬文嚼字的讨论,能使一些「程序员」开始有意识的往「开发者」发展,那我相信这一咬文嚼字的讨论就有其意义了。
一个题外话,我在写这篇长文前,有和一些朋友进行讨论,这个问题的严肃讨论是否有必要,他们大都抱以悲观的态度,认为是在对支持这一观点的人重复解释,对于持反对意见的人鸡同鸭讲。这里我想进行一个匿名小调查,算是一个社会实验,只有一个问题,请参与支持一下。
https://forms.gle/JCk6HpigFZFvQcic9