跳至主要内容

递归(三)


项目的进行比预想中还要更糟糕。项目开始了,可是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或首席架构师,可这种职位一家公司也就一两个坑,根本算不上是大多数程序员的出路。


评论

此博客中的热门博文

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

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

【小说】决心(五)(全文完)

  莉亚沉吟了一会儿,随后开始讲她过去和安托万的事。玲知道莉亚完全没必要趟这趟浑水,莉亚这么做是出于对玲的同情,大概是同病相怜吧。 莉亚和安托万是大学同学,他们在学生时代谈恋爱,大学毕业后就同居了。同居大半年后,有一天安托万突然不见了,好久没回家。莉亚跟安托万的母亲通电话,才知道自己被抛弃了,安托万和别的女孩在一起了。莉亚一开始最主要感觉还不是伤心或者愤怒,而是迷惑不解。他们谈了几年恋爱,关系一直很稳定,安托万走之前也没跟莉亚争吵过。他这次出走肯定酝酿很久了,他当初是以什么样的心态和莉亚一起生活的呢?过了三个月,安托万和另外那个女孩分手了,又想要跟莉亚复合。莉亚挣扎一段时间后同意了。 如果人生可以重新来过,莉亚不会跟安托万复合。但当年莉亚太年轻,这是她的第一段长期恋爱,她太缺乏经验。即便被伤害了,她依然留恋这段感情,所以才轻易原谅了安托万。她相信了安托万的说辞,相信他只是年轻不懂事,没准备好面对成熟的恋情,太早同居让他不知所措,所以他一时冲动犯下了错误。 后来他们结婚了,有了斯万。安托万是个尽责的父亲,把斯万照顾的很好。在莉亚看来,当初被抛弃只是爱情路上的一段小挫折,他们会永远在一起。没想到在斯万五岁时,莉亚发现安托万出轨了,他在出差时跟年轻女同事发生了关系。之后是漫长又折磨人的哭闹、争吵、婚姻咨询、离婚、财产分割、抚养协议,莉亚现在回想起来都觉得心累。 这么多年过去,莉亚已经放下了过往的恩怨。她很高兴安托万和玲在一起,她一度以为安托万终于成熟了。可惜很显然,他并没有。 听了莉亚的故事,玲受了沉重的一击。原来安托万是个惯犯。 莉亚和玲一起探讨安托万的性格。对莉亚来说,要抨击安托万是很容易的,但她不想将他简单地归类为坏人。莉亚曾经花了很长时间思考安托万的动机,因为安托万给不出一个合理的理由来。他当初并不想离婚,他说依然爱莉亚,但终究还是出轨了。他背叛玲,同样也只是给出一些泛泛的理由。莉亚觉得,说到底,一个人出轨的理由有两个:他想这么做,他允许自己这么做。 他想这么做,因为他追求即时的满足、短暂的快感。他的心里有一个洞,这个洞永远都填不满。莉亚相信他当初并不想离婚,他现在也不想跟玲分手。一夜情、网络交友、色情网站提供的都是肤浅的性刺激,他不是要寻找一个新情人来取代旧伴侣。他是一个聪明的人,当他理性思考时,他知道合理、有利的选择是维持一段持久的关系。但他并不总是理...

半部武侠佳作:读冰临神下的《死人经》

武侠小说衰落已久,老一辈武侠名家「金古梁温黄」中四位已经作古,硕果仅存的温瑞安也好多年没出过新书了。名噪一时的「大陆新武侠」同样归于平淡,成了明日黄花。在一片萧条的环境下,每当在网上聊起武侠,我总能看到有人提起《死人经》,称赞其为近年来罕有的武侠佳作。我起了好奇心,花大概一周的时间读完了《死人经》的第一卷《杀手少年》,聊聊想法。 这本书开头部分写的一般,主角惨遭灭门报仇雪恨这种故事实在太老套了。而且文字很平淡,人物对话写的尤其不好。写对话很考验作者的笔力,说什么话、怎么说话是塑造人物的重要手段之一。《死人经》里人物讲话差不多都是一个调调,而且偏书面语,给人感觉有点不自然。戏剧性强烈的地方、角色们互撂狠话时还成,日常对话就有些别扭。 很快地,这本书出色的情节就挽回文字上的那些小缺点了。主角被强盗掳走、卖到仇家金鹏堡里当奴隶,这时好戏才正式上演。主角在石堡里命悬一线,时刻处于危机之中,又处心积虑报仇,这段无论情节、风格、手法,明显是借鉴古龙的《白玉老虎》,专门培养杀手的金鹏堡几乎就是唐门的翻版。如同《白玉老虎》一样,《死人经》成功地渲染出压抑紧张的氛围,让读者时刻为着主角的将来提心吊胆。复仇故事讲究先抑后扬,主角前期越惨,后期复仇才越痛快。主角每天扛死尸,受虐待,自身无比弱小,处在石堡最底层,在绝望中拼命挣扎。主角陷害遥奴走火入魔、暗杀认识自己真实身份的杀手,随后被雪娘挟持,被设下三年内走火入魔的死亡期限,这一系列情节环环相扣,悬念迭起,写的特别好。读到这里,很惊讶于作者情节编排的老练,逐日连载的网络小说能维持这样稳定的质量真的很难得。雪娘教主角武功,让他和石堡千金上官如比武,这段明显是化用自《鹿鼎记》。主角落悬崖、奇遇大鹏鸟获得武功秘籍这段勉强算是俗而有力吧,武侠小说的主人公总是难逃落悬崖的命运。之后盗宝这段把之前的种种戏剧冲突一起引爆,处理的干净利落。 主角当上杀手学徒之后,故事陡然一变。虽说主角仍处在危机之中,却由被动转向主动。之前是受命运摆布,想放弃复仇也逃不掉,这时却开始主动出击了。主角从当初只有一腔愤恨的少年彻底转变成了冷静、聪明、阴狠毒辣的杀手。杀手学徒乱战这段写的很好,一群十余岁的少年间的血腥杀戮让人想到了《蝇王》。同时荷女这个角色开始登上前台,从配角变为两大女主角之一。荷女冷静沉着,办事滴水不漏,对主角衷心耿耿,几乎就是主角的女版化身。两人合练死人经...