为什么中国的程序员总被称为「码农」?

编程活动和机械电子一样可以视为一种工艺(craftsmanship),从事此类工艺活动的人可以叫做工匠或者工程师。经历过工业革命的欧美国家,有深厚的工程根底,从机械到电子再到软件,都是国家产业的支柱,滋养着社会中坚力量的中产阶级。工程师的社会地位普遍比较高,他们有工艺的传承,有文化圈,有产业的历史。

而国内目前的软件工业和制造业非常相似,以来料加工式的低水平重复劳动为主。就好像农民仰赖着老天提供种子、土壤、阳光和水,中国程序员仰赖着洋人提供设备、技术和理念,从微处理器、操作系统、编程语言、编译器、IDE、编程框架到应用程序,除了做晶圆的沙子是本地产的,几乎没有什么属于自己,每天的工作内容主要就是把别人已有的东西按照自己的——甚至不是自己的——的需求装配一下,没有什么创造性,也很少有业界的技术积累和传承出现,即便有也流传不开,毕竟程序员文化水平普遍不高——「有知识,没文化」,就是说这样的状况。记得劣质盗版 VCD 满天飞的时代有个程序员做出一款丑陋但是解码容错能力很好的播放器,贴合国情,一炮成名,结果好容易写本书,没有几个句子能写通顺的。这种技术书籍的拙劣状况一直保持到现在,而且拙劣的方式更加多样化了。没有技术传承,没有文化圈,不乏有人上大学之前对编程一窍不通,学计算机只是因为计算机「热门」而已。如同包办的婚姻,没有一丝爱情,最后以编程为业,只是因为也不会做别的什么了。

另一方面,国内程序员不论薪水如何,的确很苦。许多人长期被迫加班,最后甚至会成为一种自愿的习惯。可生产率和产品质量并未因此而提高,就像千百年来用惯锄头和镰刀的农夫,很少有人会想要去学习、改进自己使用的工具和习惯,甚至对于新兴的思潮和方法抱有非理性的抵触情绪。生活如此悲惨,却又如此不思进取,和农民的问题很相似。再加上,就好像城里人眼中的乡下人一样,程序员们木讷、邋遢、缺乏情调、土。可偏偏又自负而且互相看不起。

总而言之,在中国做一个程序员,很少有什么事情能让人觉得自己从事的工作很体面。那么,在整个社会以自嘲为风尚、许多行业都喜欢好勇斗狠地自轻自贱的状况中,使劲贬低自己的职业,自嘲和群吵时,就不会有什么心理包袱。不过,就好像黑人可以自称或者互称「黑鬼」,但是白人如果敢讲立刻会惹祸一样,喜欢以此自称的程序员并不见得能容忍其他人这样称呼自己。

最后,英语有类似的说法,将带有隔断的办公室叫做 cube farm,常见于传统的软件公司。以讽刺(但不限于)软件公司日常生活为主题的漫画 Dilbert 就有不少格子办公室里的场景。不过 cube farm 说的并不是程序员们像农民,而是说他们像地里的庄稼或者果树,产出成果,等待收割。毕竟,欧美发达国家的农民生活往往比程序员更好。高收入,农机劳作,大片的私有土地,宁静的田园生活。农民的生活在那里,如果不是令人向往,至少也并无贬义。

补充:本版同文所说的 code monkey 在英语中的语用,与「码农」在中文里的用法并不一样。参见[1]里面的问题与答案(粗体是我加的):
Q:
A Code monkey is a computer programmer or other person who writes computer code for a living. This term may be slightly derogatory, meaning that this developer can write some code but is unable to (or not supposed to) perform the more complex tasks of software architecture, analysis, and design. It is usually applied to junior programmers. en.wikipedia.org/wiki/C
If a code monkey has dedicated his efforts to improve his knowledge and skill, what should we call him after at the next level/rank?
A:
IMO, "code monkey" is much more than just "slightly" derogatory. It's also very difficult to actually have hierarchy of nomenclature, as many really skilled developers call themselves coders or programmers (because they still do write code). But if you'd attempt to create such, I'd say it would be something like:
  • coder
  • programmer
  • software engineer
  • software analyst
  • software architect
These might be prefixed with "junior", "senior", "lead" etc. These titles have more to do with pay grade, rather being reflection of skills.
Note, that it only can determine hierarchy within very limited context of one company or maybe even one department. Thus to be "programmer" in company A, might require much more skill, than being "senior software architect" in company B.
而实际上也很少会有人在比如 Twitter bio 里面像中国程序员注明说自己是「码农」一样写「code monkey」。Coder 倒是比较接近「码农」的用法,不过 coder 在行外人读来并没有「码农」这样明显的贬义。Code monkey 更多地强调程序员的生涩或者无能,码农一词则是在强调程序员的地位低下、枯燥和劳累。

[1] english.stackexchange.com
原发布于 https://www.zhihu.com/question/20448124/answer/15298521