跳至主要内容

递归(三)


项目的进行比预想中还要更糟糕。项目开始了,可是T公司迟迟不能提供数据。这个供应链软件是以T公司的生产数据为基础的,如果压根不知道T公司的供应链设计,开发软件纯属空中楼阁。拖了一个多月才收到数据,可是数据错漏百出,前后矛盾。像T公司这种非IT公司,数据管理的水平往往非常低,数据库设计混乱,还有许多数据只存在于人工记录的excel里。每次收到T公司的数据,都要耗费许多时间清理。而且每次数据的格式都不一样,不能自动化处理。直到项目开始后第三个月,开发才正式展开。

在2026年初的今天,AI是IT行业最热门的议题。一个避不开的问题是:程序员会被AI取代吗?起码就目前来看,这还不太现实。

根据我的经验,实际动手写代码只占程序员工作的一小部分。大量的时间其实花在前期沟通上。无论是面对客户还是项目经理,程序员都需要把那些模糊、带有歧义的商业需求,转化为精确的、可执行的技术需求。

处理客户数据就很难完全依靠AI。举个简单的例子,客户数据经常存在缺失。比如一份产品全年的日销售额报告,偏偏缺了几天的记录。这几天的数据是直接忽略,还是用某个数值(比如当周的平均值)来填补?如果只是简单地要求AI「做一个统计按钮」,而不明确这些细节处理方案,背后隐藏的成百上千个类似的小问题累积起来,就会导致最终结果完全错误。

即便具体的代码逻辑可以由AI生成,但每一个处理细节的审核与决策,始终需要人工参与。除非客户完全不在乎软件的可靠性,否则这种逻辑上的「把关人」角色,目前依然无法被取代。

K在多年工作中认识到了一个真理:客户永远不知道自己到底要什么。在理想条件下,一个软件开发项目在一开始就定义好所有功能需求,然后就不发生变化了,程序员只需要按照合同手册写代码。可是现实中客户的需求总在变。每周和T公司开会时,T公司总是提出新的想法,好像改变功能只要用橡皮把旧代码擦掉,随便改改就行了。因为开发时间极其紧迫,K和L只能用非常急功近利的方式写低质量的代码,只要代码能正确运行就行,没有任何优化,也缺少灵活度,修改起来非常困难。这样不停的修修改改,进一步拖延了开发进度。

T公司的项目负责人员不是一个人,而是一组人,这些人之间还存在着办公室政治斗争。T公司这样的国际企业,每年都会给各个部分分配资金。一个经理P主导了xtech的外包项目,他尽力说这个项目的好话。T公司内部的IT经理Q想要让内部人员开发这个项目,就一直挑刺。P为了在T公司内部推进这个项目,跟xtech提出要求,每个月都要提供demo,好让P向上级展示。可是在产品开发中途制作可以展示的demo,往往意味着要分心开发一次性的半成品。比如说功能1还没开发完,但是非要展示,就只能做一个半成品workaround出来,demo之后就作废了。这种任务完全是讨上级开心的面子工程,同样延误开发进度。

AI之所以还无法取代程序员,是因为开发软件不单是跟机器打交道,更像是一场没完没了的人际拉锯战。AI确实能高效地执行清晰的指令,但它无法像人类一样,从客户那些含糊不清、甚至前后矛盾的表述中,梳理出真实的业务逻辑。程序员更像是一个经验丰富的翻译官,得先把那些混乱的念头理顺,才能动笔写下第一行代码。更现实的一点是,程序员还得在复杂的「人情世故」里寻找生存空间。在T公司的项目中,开发进度往往不仅仅决于技术难度,还取决于甲方内部的权力斗争。说到底,只要软件还是给人用的,只要背后还牵扯到人的利益与算计,中间就会充满沟通的错位和临时的变卦。只要这种「人的混乱」还存在,程序员作为桥梁的作用就不可替代。

在多重问题的作用下,在截止日期前完成任务几乎不可能。可是总裁根本不想听这些,他只想让下属找到一个方法可以完成合同。总裁反复说,xtech正处于生死存亡的危机时刻,如果年底的收购方案不成功,xtech就会有倒闭的风险。

一个似乎显而易见的方案是加班。但是法国有严格的劳动法,加班必须额外支付加班费,会让项目成本超标。K和L即使同意加班,公司会计也不会同意。这几乎成了一个僵局。xtech需要的是一个奇迹,在不延长工时的情况下,怎么能以双倍、三倍效率完成项目。所以这个会开了很久,一直讨论不出一个结果来。

最后总裁拍板作出了决定:雇佣一名自由职业程序员加入项目。对他来说,这不仅是为了增加人手,更是一笔完美的财务账。自由职业者的费用可以计入一次性外包支出,而不会像正式员工那样增加长期的薪酬负担。这样一来,公司的账目在投资者眼中依然保持着盈利的假象。至于新人的加入是否真的能缩短进度,已经不在他的考虑范围之内了。

在法国,严格的劳动法让老板无法随意压榨员工。作为一家外包公司,我们却在继续把任务转包给下一级的自由职业者。我曾当面询问部门经理,为什么不聘用本地程序员,而是招募东欧的自由职业者。他的回答非常直接:「因为可以随时让他们走人。」

人事迅速地展开了招聘。因为时间紧张,xtech开出的待遇又很一般,应聘的都是在职场上弱势的程序员:外国人和女性。他们在职场上的弱势不是因为职业能力差,而是因为受到职场歧视。外国人通常来自贫穷的国家,需要工作签证;女性则是因为性别歧视,科技行业的男女比例失调。

K负责技术面试。程序员面试非常古怪。面试中的问题是从来不会在现实中遇到的。比如说青蛙跳台阶,每次可以跳一阶,也可以跳两阶,问跳上N阶一共有多少中跳法,要在半小时内写出代码。还有更莫名其妙的智力题,比如烧绳子测时间。这些问题脱离实际,如果没有提前准备,很难现场想出答案。实际写代码时通常可以在网络上搜索解答,用不着冥思苦想。如果一个问题是有价值的,肯定有人已经解决过了,不需要重新造轮子。这种白板面试最终只是检测一个人有没有时间提前准备,记住答案。能回答这种问题的人不一定是好程序员。好程序员需要思维清晰,善于沟通,这些软能力是难以在一个小时的时间里测试出来的。因为美国的大公司喜欢搞这种面试,xtech就跟风做同样的面试。尽管K完全不相信这一套,还是只能硬着头皮准备这种题目,但是他在面试中不会刁难面试者,只要对方的思路清晰,看得出来确实有编程经验,就算回答不完全正确也算通过面试了。

这种「跳台阶」的问题,我曾在面试中亲身经历过,而且还是难度更高的变体:每次跳跃的阶数不再设限,可以从一阶,两阶,三阶一直跨到N阶。我无法理解这种题目有什么现实意义。在多年的职业生涯中,我极少需要亲手编写复杂的算法。作为一家应用开发公司,我们的工作重点是解决业务问题而非科学研究。实际上,如果一个技术难题足够重要,市面上一定已经有了成熟的方案。比起自己去写几千行代码,直接调用经过验证的开源函数库,反而是更稳定、更负责的做法。

最后xtech招聘了一个来自塞内加的女程序员N。N态度很认真负责,但是她要学的东西太多了,无法立即帮上忙。无论什么项目,在最后一刻增加人手只会帮倒忙。即便是技术水平高超的老手,加入一个新项目也需要培训。而培训必然占用了其他程序员的开发时间。新人一开始的贡献是负的,加入的新人越多,付出的额外时间成本就越大。

这个项目对于新人的难度在于xtech有一套自己的开发套件xdev studio,开发者必须熟悉这套私房工具。这套工具和xtech几乎同时诞生,xtech一开始想要把xdev studio商业化,但是一直没卖出去,最后只好自己用。一套私房开发工具,先不谈质量好坏,首先就提高了员工的培训成本。xdev studio的一开始的设计思路并不差,甚至可以说很有创意。但是随着十年来xtech的发展,xdev studio不断地变换组件和平台,一开始支持windows系统,后来又只支持linux;一开始有一套云平台的接口,后来又全换成本地部署。有些部件的选择本来无伤大雅,怎么选都行,比如说内置的数据库,居然也换了好几种。很多时候选择架构不是出于技术评估,而是为了市场宣传,比如说号称支持人工智能。在不断地追逐潮流的过程中,这套工具根本没有变得成熟,而是越来越四不像。产品代码里堆满了屎山。很多代码服务于于已经不存在的功能,可是xtech公司从来都没有时间优化代码,只是留在那里发臭。经常有些功能出现莫名其妙的错误,费了好大力气才查明原因,但是往往没有时间修复,因为那意味着把一大坨代码推倒重来。最后只能搞些治标不治本的应急方案。而这些本应该只存在一时的应急方案最后都变成了永久方案。

软件工程界有一条堪称金科玉律的布鲁克斯法则:向进度落后的项目增加人手,只会使进度更加落后。程序员的工作不是搬砖,它需要极高的默契和对复杂规则的深度理解。当新人N来到项目组时,她就像是一个刚踏入原始森林的探险者,而负责带她的老手们,必须停下手里砍树开路的工作,回过头来一点点教她如何辨认方向。这种培训不仅耗费精力,更打断了原本就紧绷的开发节奏。在赶进度的紧要关头,这种「磨合」带来的损耗,往往比新人产出的那点贡献要大得多,结果反而是越帮越忙。

最让人心累的,还是公司那套自造的开发工具。我总觉得这是在自讨苦吃,不仅培训难、维护难,想往外移植更是难上加难。曾经有客户直截了当地跟我反馈过:能不能直接用C++开发?因为对他们来说,标准工具更好维护。他们担心万一哪天我们公司垮了,这套只有我们自己会用的工具也就跟着断了气,那用它开发出来的项目也就彻底死掉了。

小公司的员工来来去去很频繁。过去十年里很多程序员离开了xtech,每次离开都带走了宝贵的知识。公司不在乎员工的个人成长。好像每个程序员都是可以随便替代的。而实际上程序员的经验很宝贵,很难招聘到恰好符合要求的程序员。就拿xdev studio来说,现在xtech公司内部几乎没有人对这个工具的所有方面都有深入的理解。一个资深程序员跳槽,要招聘两个程序员来顶替。法国的工资涨幅很低,每年不过是百分之二三,要涨工资就得靠跳槽。人事不愿意给老员工涨工资,反而愿意花大价钱招聘新人。而且程序员的工资有上限,事业心强的人都想转去管理岗。本来只是分工不同,可是管理岗却高人一等,尽管程序员才是真正生产产品的人。进一步地说,这个世界上没有著名程序员。尽管程序员是高薪群体,社会对程序员的认知并不高。

至于薪酬倒挂、管理岗高人一等,或者是外行领导内行,这些圈子里的常态也就不多提了。在法国,程序员确实也算高薪,但远没有美国和中国那么夸张,薪水的涨幅更是慢得惊人。虽然跳槽是涨工资的捷径,但跳上几次也就撞到天花板了。除非你技术过人,能一路做到CTO或首席架构师,可这种职位一家公司也就一两个坑,根本算不上是大多数程序员的出路。


评论

此博客中的热门博文

罗马宫廷秘史:读罗伯特·格雷夫斯的《我,克劳狄乌斯》及其续集

  第一次听说《我,克劳狄乌斯》是因为美国现代图书公司评选的「20世纪百大英文小说」,这本书排名第十四位。文无第一,武无第二,这种排名不好太当真。不过,既然能在知名出版社众多编辑的评选中超过《到灯塔去》《心是孤独的猎手》《我弥留之际》《蝇王》《太阳照常升起》等名作而排到这么高的位置,必有其独到之处。后来我又看到乔治·R·R·马丁的推荐,他盛赞这本小说以及BBC七十年代改编的电视剧版。我起了好奇心,连着把《我,克劳狄乌斯》和续集《克劳狄乌斯神》都读完了。 克劳狄乌斯是罗马帝国第四任皇帝。这两本书假托成克劳狄乌斯的回忆录,讲述了罗马帝国第一个王朝——朱里亚·克劳狄王朝——的历史。我的历史知识不足,无法鉴别书中哪些情节是史实,哪些是虚构。不过我可以保证这是套精彩的小说。 作者最成功的策略是选取了巧妙的叙事视角。整套书都是用第一人称写的,天然地拉近了读者与书中人物的距离;再加上作者自然晓畅的文字风格,仿佛真的是克劳狄乌斯向读者娓娓道来。第一人称也有缺点,不过都被作者有技巧地避过了。第一个缺点是叙事效率低,为了纠正这一缺点,作者有时让克劳狄乌斯成了全知全能的叙事者:既然克劳狄乌斯是在晚年写回忆录,知道所有事件的前因后果也就不足为奇了。第二个缺点则是客观性差,说到叙事者自己身上的事难免感觉有些虚假,要么像是假意自谦,要么成了自吹自擂。而《我,克劳狄乌斯》的高明之处在于,克劳狄乌斯并非真正的主角,他是一个(涉身其中的)旁观者。这种一只脚在故事里,一只脚在故事外的第一人称叙事,不由得让我联想到毛姆的小说。(续集里克劳狄乌斯成了主角,导致故事趣味下降,这个后面再细说。) 如果要为《我,克劳狄乌斯》寻找一个主题,不妨说这本书「揭露了君主制的丑恶」。绝对的权力是世上最大的诱惑,这诱惑可以轻易地毁灭人性,把人变成怪物。 这本书的头号角色是克劳狄乌斯的祖母莉薇娅,她是天生的野心家,擅长阴谋诡计,无恶不做。来欣赏一下她在这场权力游戏中的赫赫战功吧!她的第一任丈夫是克劳狄乌斯的祖父,她怂恿他自立为帝,被拒绝之后就开始勾引奥古斯都。她陷害奥古斯都的妻子,成功嫁给了奥古斯都,之后又毒死自己的前夫。在一场内战之后,奥古斯都成了罗马帝国的统治者,而莉薇娅则统治着奥古斯都。为了稳固自己的政治地位,她选定自己的儿子提贝里乌斯作为下一任皇帝,为此她接连毒杀、流放了奥古斯都的子女,甚至将她自己的小儿子德...

黑暗的宇宙:读刘慈欣的《三体全集》

第一次读《三体》已经是十年前的事了。那时《三体》在科幻圈子里已经非常出名了,不过还没有进入大众视野。我读完第一本后印象一般,就没继续读下去。转眼十年过去,《三体》的影响力持续提升,俨然成为新世纪头二十年里最成功的中文通俗小说。不仅国内互联网总提到《三体》,身边的外国朋友中也不乏《三体》书迷,搞得没读完全书的我似乎成了异类。为了搞懂「黑暗森林」「降维打击」,我终于花了一个星期,把三部曲从头到尾看完了。 三体 简单来说,三体系列讲的是地球与外星之间的星际战争。这题材算得上复古,《三体》的内容与风格都让人联想到上世纪四五十年代的经典科幻小说。 书中的外星人来自太阳系四光年之外的三体世界,这里有三个「太阳」。三个天体在万有引力作用下的运动规律是著名的三体问题,也正是这套书标题的由来。现在已知三体问题是无法精确求解的,三个太阳的运行轨迹没有规律,这给三体人所在的行星造成极其严酷的生存环境。过于靠近或过于远离太阳都是致命的,三体文明被毁灭了无数次,还有彻底坠入太阳的潜在危险。小说中借由电子游戏的形式,模拟了三体文明反复诞生与毁灭的过程。虽然听上去很复杂,其实不过是在说:外星人处于水深火热中,有强烈的移民外星的意愿。把三体问题换成其它危机,比如太阳衰败,这个故事同样成立。直到有一天,三体星接收到了地球发来的信号,发现地球是宜居星球,决定侵略地球。 考虑到三体人处于生死存亡之际,而且拥有远超地球文明的太空科技,我很奇怪为什么他们不主动寻找移民星球,而是被动地监听信号。能不能收到外星信号纯属偶然,而且按照书中的宇宙观,这信号很可能具有欺骗性,回复信号要冒非常大的风险。太阳系是距离三体世界最近的恒星系统,没理由不主动勘测。对比一下,离太阳系最近的半人马座阿尔发星,也就是小说中三体世界的原型,已经在科幻作品中被觊觎无数次了,三体人没理由从未关心过自己的邻居。 以三体人的科技水平,需要450年才能抵达地球。经过漫长的450年,没准到时候地球科技已经超过三体人了。为了解决这一问题,三体人制造了「智子」来封锁地球科技发展。 智子是小说第一部中最重要、也是最精彩的科幻设定,也为后来两部埋下伏笔。智子是一颗高维空间的质子,在二维空间展开后雕刻成智能计算机。按照书中的说法,从高维降到低维会「变大」(不妨想象一瓶墨水,变成二维——涂在纸上——会拥有庞大的面积)。一颗质子从九维降到二维,其面积足以包覆整...

豆瓣阅读:理想很丰满,现实很骨感

  写作网站中的清流 在青春年少、懵懂无知的时候,我怀揣着纯真的文学梦想,打算为自己的文字寻找一个理想的归宿。不矫情了,简单说来就是攒了几篇伤春悲秋的文章,想要找个地方发文。身为计算机专业人士,第一反应当然是搭建个人网站。不过博客早就退流行了,连大公司的博客平台都撑不下去,个人网站更没有流量,所以我还是想要发到大网站去。大陆热门的写作网站主要分成两类: 一是起点、晋江这类网络小说网站,主流题材是修仙、穿越,要把读者当大爷伺候,爆肝日更才有人气,停更还要跟读者写请假条; 二是微信公众号、今日头条这类自媒体平台,热门文章基本都是「震惊!XX居然是XX!?」「你不知道的十大XX!!」「十个看完,九个都哭了的XXX」。 不用想也知道我与这些网站水土不服。正当我灰心丧气的时候,突然发现了豆瓣阅读,立马眼前一亮! 豆瓣阅读是一个电子阅读平台,作者可以出版自己的原创电子书。不要担心不懂电子书制作,作者只要投稿就好,网站有专门的编辑负责审稿,还有美工帮忙做封面。作者还可以开专栏,付费订阅制,连载完结后可以直接作为电子书出版。 豆瓣阅读一开始主要推广两三万字的中篇小说,包括幻想、悬疑、文艺、历史等类型,同时也有不少散文专栏。豆瓣阅读定期举办征文大赛,不仅有奖金拿,还有机会出版纸质书和售卖影视版权。 要知道,大陆盗版非常猖獗,读者根本没有电子阅读付费的习惯。豆瓣阅读逆潮流而行,我相信他们一开始时是真心想要开拓市场,挖掘作者。在浮躁的大环境下,当年的豆瓣阅读真算的上是一股清流了。 我当机立断开了专栏,感觉自己就要出书成名了,想想还有些小兴奋呢! 埋葬文字的坟墓 可惜好景不长,我很快就发现了问题:咦?我的专栏怎么没人看? 何止我的专栏没人看,是整个网站都没几个读者啊!豆瓣阅读是一个典型的作者比读者多的网站。现在打开豆瓣阅读首页,还用大字标着「XX位作者正在豆瓣阅读写作」。当年好像两三万人,现在作者已经超过十二万了。请问,这么多人都忙着写作,做着赚钱成名的美梦,读者又在哪里? 表面上看,豆瓣阅读背靠着豆瓣这座大山,应该不愁没用户。然而豆瓣用户群体是割裂开的,记录书影音的,混豆瓣小组的,在豆瓣阅读码字的,根本不是同一群人。而且豆瓣不知脑子搭错了哪根筋,好像还嫌用户不够分裂,连APP都分成了好几个。 总而言之,豆瓣阅读超级冷清,连首页热推的作品都没几个人看。在豆瓣阅读出电子书,只有在新书...