上周团队技术选型会,我们邀请一家低代码平台厂商来做产品演示。对方打开后台,熟练地拖了几个组件,配置了两张表,又在流程画布上连了几条线,前后不到十五分钟,一个带审批流的管理页面就“蹭”地活在了浏览器里。会议室里安静了几秒,随后产品经理率先鼓掌,说“效率确实高”。而我身边几个写后端的老哥,一脸“你别逗我”的表情,有人低头玩手机,有人开始在代码评审群里发滑稽表情包。这种场景,我猜在很多公司都发生过。
“为什么很多程序员讨厌低代码”这件事,隔三差五就会被拎出来吵一轮。在大部分舆论场里,程序员群体被描绘成一群面目模糊的保守主义者:生怕低代码砸了饭碗,所以拼命找理由唱衰。说实话,这个解释太偷懒了。你要真在研发一线待过几年就会明白,程序员对低代码的敌意,本质上不是对“工具”的敌意,而是对“抽象错位”和“承诺与交付之间的落差”的本能反感。这背后有不小一部分技术判断是理性的:低代码的很多设计,确实站在了复杂软件系统的基础规律对立面。
这篇文章不打算给低代码做最终裁决,也不准备把程序员描述成受害者或者守旧派。我就是想站在从业者的角度,把技术层面的真实矛盾、工程协作层面的摩擦、以及组织决策里说不出口的利益博弈,一层层掰开说清楚。你会发现,讨厌低代码的程序员,很多时候并不是在害怕工作被替代,而是被低代码背后那套“降低技术含量”的思维真正冒犯到了。
1. 低代码不是新鲜事,它是我们这一行的“回锅肉”
聊低代码之前,先把概念拉直。低代码(Low-Code)的定义其实很宽泛,大致可以理解为:通过可视化界面、预置组件、配置化逻辑和少量脚本,让开发者用比传统编码更少的代码量去交付软件。更极端的叫零代码(No-Code),目标是连会打字的人都能拖出一个系统来。
注意,这里的关键词已经暴露了第一层矛盾:低代码并没有摆脱“代码”二字,它只是把代码换了一种更隐蔽的形态。后面我展开说为什么这个问题无解。但先不急,回到正题。
1.1 低代码不过是四十年老故事的“高清重置版”
很多年轻人以为低代码是2015年之后的什么颠覆性创新,其实你去翻计算机史,会发现低代码就是可视化编程的老故事套了件新马甲。二十世纪八十年代,市面上就流行过一批所谓“第四代编程语言(4GL)”和计算机辅助软件工程工具(CASE),口号跟今天一模一样:业务人员不用写代码,直接拖拖拽拽、画画流程图,系统就出来了。
再往后,九十年代有一波快速应用开发(RAD)浪潮的代表作,那就是Visual Basic和Delphi。这些工具把窗体和控件扔到设计器里拖放,事件双击一写,窗口程序就出来了。年轻一代可能不信,当年VB绝对算得上某种意义上的“低代码平台”,它在把表单和界面组装这件事上的效率,照样让当时的程序员又爱又恨。后来PowerBuilder这类产品更是直接服务企业信息管理系统(MIS)开发,就是当年大家嘴里的“拖控件也能卖钱”。
如果你把目光放到21世纪第二个十年,低代码代表的OutSystems、Mendix以及国内各类低代码平台,它们的基本逻辑依然没有跳出“表单、流程、报表、权限”这套企业应用骨架。就算今天有人把AI又焊进了低代码里,底层仍然是一块画布、一堆业务对象和一排自动化节点。
1.2 每一个低代码平台最终都会死于“长尾诅咒”
如果每代工具都声称自己高效,为什么每代工具都没有真正终结传统编码?核心原因在于,任何固定化的产品设计,都只能完整服务行业内大概80%的通用需求,剩下的20%,要求极其刁钻、业务个性极强、性能要求诡异、交互体验也有各种独特讲究。传统代码在这种场景里可以靠人的抽象能力做无限延展,而低代码只能在平台预设的框架里做有限填空。
这20%的“例外需求”,看起来是不是比例不大?但在真实业务里,压倒骆驼的往往是这一小块。审批流要跟组织架构的多汇报线耦合、导出报表要求匹配某种会计凭证格式、权限除了角色还要叠加数据范围矩阵……每一条都是平台的“标准功能”覆盖不了的。于是项目组只能硬着头皮去翻低代码平台扩展脚本的API文档,或者等厂商排期开发插件。刚开始还能忍,等定制需求越堆越多,这种平台底层模型会变成一座纸牌屋,任何一次升级都可能让业务逻辑在配置层土崩瓦解。
所以你会发现一个很有趣的现象:一些当初因为“不想写代码”而选择低代码的项目,最后都陷入了一种“写扩展代码写得比传统项目还痛苦”的诡异状态。这不是我信口开河,业内大量文章标题都叫《半年后,我们终于放弃了低代码》或者《低代码从入门到跑路》,里面记录的心路历程,高度一致。
2. 抽象层次的错位:程序员真正炸毛的技术根源
看很多站队吵架的帖子,大家喜欢把程序员对低代码的抗拒归为情绪化、格局小、害怕改变。这种归因属于只看到了表面。你要是把低代码平台拿过来认真分析,会承认它有很多设计,在纯技术维度上就是粗糙的。程序员天天跟这些东西打交道,你说他们能不炸毛吗?
2.1 “拖拖拽拽就能开发”这句话,本身就是一句骂人的话
低代码们最爱强调“拖拽生成”。但拖拽的价值边界特别清晰:它只能搞定“界面形状”层面的问题。你把一个输入框拖到页面上,指定它的字段名、是否必填,这确实比手写HTML快,因为它本质上是一个可视化表单编辑器。
可问题是,真实的软件难点根本不在界面摆几个控件,而在“状态流转”。举例来说,一套订单系统里,订单状态在“待支付、已支付、待发货、已发货、已完成、已取消”之间迁移,每个状态变更前要校验什么、变更后要触发什么外部回调、由谁有权限触发——这才是程序复杂度的核心。优秀的程序员脑子里对这团状态的建模是门儿清,代码写出来清晰、稳定、可测试。低代码平台给你的是什么?是一张可视化的流程图,你把状态节点连来连去就算逻辑完成了。看似直观,但一遇到环状状态机、超时自动流转、并发状态冲突这些稍微复杂的场景,流程图马上变成一碗意大利面,比代码还难维护。
我在实际项目里还见过更离谱的:某个低代码平台的多级审批,它的“条件分支”居然只能配置纯静态比较,你想实现“如果金额超过五万并且部门属于华东区,则走副总裁审批”,你得去它的表达式编辑器里写一大段没人维护的脚本字符串。那一刻你就明白了,拖拽根本省不了事,它只是把复杂度从“写代码的地方”搬到了“配置的缝隙里”。
2.2 图灵完备的老话题:低代码玩到最后,还是得发明一门“更烂的语言”
计算机科学有个浅显的常识:如果想表达足够复杂的业务逻辑,你的表达系统必须达到图灵完备,也就是说,它能表达任何一种可计算的问题。可一旦你为了满足“拖拽轻松”的需求,先去掉了循环、递归、异常处理、并发控制,那么当真正遇到那些需要这些能力的场景时,平台就兜不住了。
于是几乎每个低代码平台的演进路线都是一样的:第一版吹“零代码”,后来发现满足不了核心需求,第二版开始加各种“规则引擎”。这个“规则引擎”长什么模样呢?往往是平台自创的一套脚本语法,语法简陋、类型松散、报错信息奇奇怪怪,更没有第三方库生态支撑。程序员被逼无奈,只好在这套自定义语言里实现那些用Java三五行就能写完的逻辑。这就好比为了不学开车,买了一匹骆驼,结果到高速公路上发现骆驼跑不动,只能下来扛着它走。
有人说那不还有“低代码”嘛,低代码不是零代码,允许有少量代码的。可任何一种试图藏起来的第二语言,都会成为项目里最大的技术债。你招人时很难招到愿意精通这个平台私货语言的人,文档稀少,社区没有,问题排查全靠猜。长期来看,这种“平台私有语言”比公开技术栈的维护成本贵得多。
2.3 调试体验是一场灾难,这是劝退资深开发者的关键
程序员日常工作的一半时间,其实不是在写代码,而是在查代码为什么不对。这时候,调试工具链就是生命线。写传统代码,你在IDE里下断点,看调用栈,观察变量在某一步之前还是对的怎么到下一步就错了;跑分布式服务,有全链路追踪帮你把请求完整串起来,轻轻一点就能看到是哪个环节耗时长。这些能力经过几十年工具链建设,已经非常成熟可靠。
再看低代码平台,很多从第一天起就没想过开发者需要调试,因为它的用户画像是不懂代码的业务人员。遇到逻辑不对,你只能在界面上盯着一个干巴巴的字段,系统既不告诉你“这条规则什么时候被触发过”,也不给你留下变量快照。我印象最深的一次,团队用某低代码平台做一个合同审批应用,其中某个回调逻辑只在上游接口返回特定结构时才触发,出问题时页面白屏,日志系统里干干净净。我们花了整整一个晚上,用各种数据反复试,才隐约猜出可能是某个字段值大小写不一致。用传统后端我十分钟就能定位的事,在低代码平台上硬是熬到了凌晨三点。
这种经历,对一个写代码超过五年的人来说,其实是巨大折磨。我们不是不能受累,是无法接受“低效的受累”。做技术的人如果失去了对系统运行过程的可观测性和控制权,就像医生做手术时戴着一副手套不但没有触感,还时刻担心它是否会破裂。你让他怎么喜欢这个东西?
2.4 演进能力:代码是资产,低代码是负债
稍微有点规模的传统软件项目,代码库是团队最大的资产。好的代码经过多年重构,会形成一个适应性很强的内部结构,可以随着业务变化稳定演进。你可以用版本管理工具查看每一行代码的变迁历史,用代码评审机制保证质量,用单元测试约束回归风险——这套工程体系,就是所谓的“软件工程”,它让软件长期可维护。
低代码平台的软肋恰恰就在这里。你在可视化编辑器里拖出来的东西,本质上是一堆存在平台数据库里的“配置JSON”。它们的差异(diff)基本不可读,没法做真正意义上的同行评审,也没法做细致的单元测试。打个比方:代码仓库就像一本印好的书,你可以逐字审阅、修订、再版;而低代码项目的配置库就像一团橡皮泥,你永远说不出上一个版本的精确模样,只能大概齐地捏一捏。等配置量上了规模,加上多个项目共用父级配置、业务人员随手在生产环境改来改去,基线早已支离破碎。这时候无论当初平台方怎么承诺“零维护成本”,实际维护成本都会抛物线式上涨。
更致命的是供应商锁定。你用Java写一套系统,说换人维护就换人;换底层的数据库,最多改改适配。但你把业务逻辑全托付给某家平台的私有模型后,你连把数据完整导出的可逆方案都拿不到。它不是简单锁住你的数据,而是锁住了你对业务的所有表达方式。很多公司在低代码项目上踩过的最大坑,就是过了几年发现平台的商业策略变了——要么产品线砍掉,要么涨价到离谱,要么底层框架大改导致老应用全得重建——你却走不了,因为你的业务已经“焊死”在里面了。
3. 工程协作撕裂:低代码打破了程序员赖以生存的协作默契
如果说上面聊的是纯技术层面的龃龉,那接下来这些,就是当低代码进入团队协作和组织管理时会引发的一系列摩擦。程序员每天最头疼的往往不是代码语法,而是“代码之外的人怎么工作”。低代码的出现,在很多场景下让这种摩擦更突出了。
3.1 代码评审、测试覆盖、灰度发布,低代码统统接不住
一个合格的研发团队,默认是有几条铁律的:所有变更必须经过评审,重要功能必须具备自动化测试,发布讲究灰度发布和快速回滚。这些铁律建立在代码这个载体之上。代码是文本,天然适合做差异对比,它能让评审者清晰看到这次改动的意图和影响范围,也能被版本控制系统精确记录,有任意问题可以随时切换到上一个可用版本。
低代码平台的配置型开发是怎么干的?开发者在可视化界面里拖一下,生成的可能是平台底层某个实体的一系列变化,它们以平台自定义的格式存下来。这里的“Diff”体验极差:你可能调整了一个按钮的位置,平台给你展示的差异却是一大段无法解读的XML或者JSON串,评审者根本无从判断这段改动会不会引发别的问题。自动化测试就更无从谈起了——你总不能为鼠标拖拽操作写单元测试吧。
我曾参与过一个混合模式的项目:核心网关是Java编写,内部若干流程环节却用了一个低代码引擎来编排。每次版本上线,网关部分的代码走完整CI/CD流水线,有几百个用例跑着;低代码部分呢?没有测试,没有校验,只有流程设计器上的“保存”和“发布”按钮。运营同学一旦在系统里误点了发布,没人有任何办法在事前发现,只能祈祷线上别炸。这种手感,对每个有工程洁癖的人来说都是在走钢丝。
3.2 “下水道一样的插件代码”:绕不过去的平台,最终要靠代码来补
大多数成熟一点的团队用低代码,都会遇到这样一个临界点:平台标准功能走到头,业务还要往前走,于是不约而同走上第二条路——开发平台插件。低代码平台的插件机制,允许你写一些代码来扩展预制组件或流程节点的能力。听起来很体面是唯一的出路,但做起来完全不是那么回事。
平台SDK是“这个平台”定义的,不是通用的技术规范。开发者为了在一个低代码平台里做扩展,得先花一周去理解它那个别别扭扭的对象模型和生命周期钩子,然后小心翼翼地写,代码还要被硬塞到平台的容器里运行。这些代码既不能享受平台拖拽配置的“省事”,又丧失了全代码项目的自由度,夹在中间,两头不讨好。多年下来,这类代码往往成了项目里维护率最高、最让人痛苦的部分。
换个你更好理解的说法:这有点像买了一套精装房,开发商宣称拎包入住,结果你住进去发现每个房间的布局都跟你生活习惯拧着来。你想拆一面非承重墙,物业说可以,但必须用他们指定的施工队和砖块,价格贵一倍先不说,砖与砖之间的缝隙处理得怎么样,还得看物业心情。住久了你想跑,又发现这套房子当初连地基都是开发商浇的,你想拆墙换格局还得看他们脸色。低代码平台的插件开发,就是被关在这样一间“可以摸鱼但出不去”的样板间里。
3.3 “人人都能开发”的组织幻觉:需求复杂度不会消失,只会换人承担
低代码平台最爱讲的一句话是“让人人都是开发者”,听起来确实无限美好,仿佛业务部门从此可以自助提需求,IT部门终于可以彻底解脱。但做过几年研发的都知道,需求真正难的地方从来不是“把字段放上去”,而是“梳理清楚业务规则”和“定义好数据边界”。低代码并没有降低这些认知成本,它只是把成本从程序员身上转移到了业务人员身上。
很多企业推低代码,确实让业务部门的同事“自己做出了一个应用”,可仔细一看,那个应用往往是孤立的、错漏百出的、数据质量一塌糊涂的。等到它开始承接核心业务时,坑就来了。真正面对用户投诉、负责兜底的是研发部门;数据在自助开发的应用里弄脏了,最后要清洗、要救火的仍然是技术团队。于是程序员的愤怒就变得非常真实了:我们并没有因为低代码而少干活,反而要额外给非专业开发者的产出“擦屁股”,这简直就是双倍的工作量和双倍的痛苦。
3.4 环境差异与发布同步的噩梦
低代码平台的开发环境和生产环境,通常都是一套账密就能登录同一个平台,开发与上线只隔着一个“发布”按钮。听起来很快,但认真的团队立刻会问:“怎么保证开发环境验证过的配置能实现一致地部署到生产?”很多低代码平台的环境隔离能力非常弱,应用包在不同环境间迁移时,要么漏字段,要么自动带出测试数据,要么把配置跟某个特定环境的连接串硬绑定。传统CI/CD里那套成熟的“构建产物不可变”思路,在低代码世界里往往是奢侈品。
有人统计过,低代码项目的线上故障,相当大比例不是代码逻辑导致的,而是“配置没同步”“在测试环境改了忘了重新发布”“生产环境被业务人员无意间改动”。这类事故会消耗大量沟通成本,因为责任边界极不清晰,IT怪业务乱点,业务怪平台设计太容易误触。没有一个工程师愿意长期活在这种“薛定谔的发布”状态里,技术的确定性和可预测性一旦消失,大家时刻都悬着一颗心。
4. 身份焦虑与行业博弈:程序员到底在怕什么
聊完纯工程问题,我们得面对现实:技术争论背后,永远掺着利益和身份认同。程序员群体对低代码的抵触,除了上面那些理性质疑之外,还有一些潜意识的、属于行业自我保护的反应。这些反应未必全对,但非常真实。
4.1 程序员不是怕被替代,而是怕被“低代码思维”替代
我观察到一个有意思的现象:很多程序员吐槽低代码,并不是因为现在用的低代码平台真的把他手头的活儿抢了,相反,越是在核心系统不断演进的项目里,程序员越能感受到传统编码在那20%长尾需求里的不可替代性。他们真正恐惧的是,低代码作为一种“决策叙事”,会慢慢污染组织对软件开发这件事的理解。
这个故事大多长这样:公司高层看到低代码厂商的演示,被“三天上线一套管理系统”的效率振奋了,决定成立数字化小组大力推广低代码。第二年复盘时,高层发现自己花了不比传统开发少多少钱,却没有沉淀出真正的技术资产,还把好不容易招来的资深研发逼走了。但故事里没有任何人承担责任,取而代之的是新一轮口号:“要加强数据治理,要以业务价值为中心。”
程序员害怕的正是这种“用口号代替工程判断”的氛围。一个行业一旦习惯了把一个复杂的专业领域简化成几句好听的话,那么最终买单的仍是底下干活的人。就像医生也会害怕医院管理层轻信“AI问诊三分钟取代门诊大夫”一样,这倒不是说他们离不开那套工作流程,而是担心外行指挥内行会把医疗安全搞得一团糟。
4.2 降本增效的暗面:隐性成本没有人统计
管理者爱算账,爱算显性成本。低代码平台一年license几十万,几个外包初级开发也能搭系统,看起来确实便宜。传统研发一年要养五个资深后端,光是工资就是几百万,怎么算都是低代码划算。
但没有哪个管理者在推广低代码之前,认真核算过这些账:因低代码平台技术天花板导致的重新开发成本、插件私有语法导致的高昂培训成本、缺少版本管理和自动化测试导致的一系列线上事故、供应商绑定带来的谈判被动、以及最可怕的——因平台本身不可扩展性而错过的业务窗口期。这些隐性成本分散在不同的部门预算里,很难被有效统计在一起。
更有意思的是,等到项目后期发现低代码撑不住了,团队需要重构到传统技术栈时,这笔数额惊人的“迁移税”往往不会记到当初力推低代码的决策者头上,而是变成研发团队新一轮加班的由头。程序员最无奈的时刻,就是在深夜重构被低代码平台搞得面目全非的逻辑时,还得听管理层问一句:“当初为什么不用那个很快的工具?”。
4.3 “人人都能写代码”这句话,本质上是在解构专业主义
程序员这个职业,经过几十年发展,形成了一套相对完整的专业门槛:数据结构、算法、操作系统、网络协议、数据库原理、分布式系统,加上大量实操经验。这套体系的价值不在于背下多少API,而在于一个受过完整训练的程序员能够系统性地预判问题、设计演进、控制风险。
低代码流行的叙事,则把复杂度描述成“多余的、靠堆人力去磨的部分”。它暗示一套小工具就能把专业开发者的复杂工作削平。这在游戏规则上对开发者是双重冒犯:一方面否定了专业知识积累的长期价值;另一方面,很多说这句大话的人根本就没有亲手写过真正复杂、真正要求无懈可击的系统。
好在这个问题解决得很快。低代码平台一旦被真正投入到那些流程简单、需求清晰的场景中,业务人员很快会发现,自己搞定的应用一旦接近核心业务,照样要面对那20%的例外。他们没法绕开那个复杂度,最终不得不回来求助程序员。这种轮回,我见过太多次了。
4.4 为什么程序员拥抱AI,却讨厌低代码
很多人觉得这逻辑很矛盾,一边怕被工具替代,一边又狂热拥抱以GitHub Copilot、GPT为代表的一众AI编程工具。说穿了,程序员对代码生成式AI的理解极为一致:AI是给我当助手的,它能帮我生成我明确知道应该如何生成的代码,能补全、能提取、能重构。AI生成的代码,它在生成的时候永远给你留着一个“我”的决策位置,终审者永远是人类程序员。
低代码则完全不同。它把决策权从抽象层面打包走了,试图把设计方案隐藏在拖拽背后,让人只在“按钮摆哪个位置”这种程度做出选择。程序员本质上是极度渴望掌控感的群体,AI编程工具把这种掌控感放大,让你更有能力搞定各种复杂任务;低代码则试图把掌控感连根拔掉,让每个人都变成装配流水线上的操作工。对比之下,程序员拥抱哪个就更不言而喻了。
5. 低代码确实有适合自己的位置:关键是“什么场景”和“怎么用”
说了这么多理论上的不满,如果认为我是一个无脑低代码黑,那其实又误解了我。真实的一线工程师对工具的态度一向是现实主义的:只要能解决实际问题,不存在什么立场洁癖。低代码在不少场景里也确实好使,关键是要把它放进正确的问题框架里。如果我们把一个工具的适用范围框错了,那再好的工具最后也会背上骂名。
5.1 哪些场景我会真心推荐低代码
个人经验里,有四种场景用低代码是理性的,是利大于弊的。第一种是纯管理类的后台,比如简单的进销存、会议室预定、工单流转。这些系统本质上是“表单加关系表加简单状态”,业务流程相对固定,定制空间有限,用现成低代码搭建非常划算。
第二种是内部工具和运营后台。对许多互联网公司而言,运营后台数量庞大、逻辑简单、迭代很快,用低代码可以把运营需求交付周期压缩到极致,省去后端接口开发,对团队来说性价比相当高。
第三种是产品原型和概念验证。设计一个复杂产品之前,用低代码快速把核心流程跑通,让用户和市场来验证方案,先解决有没有的问题,再谈做得好不好,这是低代码很有价值的使用方式。
第四种是那些数据模型不大可能长期演进的临时性场景。比如疫情期间的居民信息登记、展会现场的客户管理、一次性活动报名系统。反正这些系统用完就扔,不会积累技术债,使用低代码反而是节约资源的最好选择。
5.2 怎样判断一个低代码平台是否值得信任
不是所有低代码平台都不值得用,真正需要警惕的是那些在关键能力上全部缺失的平台。我评估一家低代码产品,有几条很现实的硬性标准,这是写代码的人选型时必须坚持的底线。
- 能不能导出完整的源码或数据模型?如果能,意味着万一平台不维护了,你至少留了一条逃生的路;如果不能,无论平台现在吹得再好,风险都很高。
- 有没有开放的API和事件钩子?这决定了它能不能嵌入你现有技术体系,跟已有系统打通,而不是形成一个新孤岛。
- 模型层是否够自由?如果你的数据约束只能在平台预设的几种字段类型里选,一遇到复杂关系就抓瞎,这平台就不值得长期依赖。
- 版本管理能力和权限控制是否完整?必须确保每个配置变更是可追踪、可回滚的,并且不能人人都能在生产环境改配置。
5.3 如果你所在团队要全公司推低代码,你能做点什么
当一个自上而下的低代码计划落到你头上时,纯粹的抵制通常没有什么用。更有操作性的做法是主动介入,至少去努力影响它的落地范围和节奏。我会建议你像做技术调研一样,去给低代码的使用圈定一个清晰边界,把它锁在那些“即使翻车,代价也可控”的场景里。
另一个很关键的动作是明确约定“逃生通道”:凡是进入低代码平台的数据模型、业务流程,定期要有全量导出和备份;凡是需要复杂算法、高并发、强一致性的模块,直接跟管理层说清楚底线,坚持用传统编码方式实现。在边界内,低代码怎么折腾都随它去;边界外,必须按工程标准来。合理的平衡,总比非黑即白的高地争夺战要实用得多。
5.4 低代码与AI叠加后的新处境
顺着程序员拥抱AI这个话题再往前看一步,低代码行业这两年被生成式AI注入之后,确实又活泛了不少。现在有些平台开始尝试用自然语言生成页面、生成数据模型,AI先帮你把一个基础版本拖出来,再让人去微调。这跟传统低代码的操作形态完全不同,它不再是纯粹的拖拽配置,而是“用对话写需求,AI来搭骨架,人来修正”。
但这也恰恰让它变得更危险:以前低代码平台至少还要用户亲自拖一拖,心里对系统结构组织还有一点数;现在AI一通生成,很多配置是怎么来的,连肉眼都很难追踪了。平台原有的可解释性和版本回溯问题不仅没有解决,反而被AI放大到一个更深的黑箱里。在核心系统上做这样的尝试,一旦出错,你连拆解的可能都找不到。
不过我依然相信AI辅助编程和低代码之间是有可能弥合的:当平台能根据人的意图生成出标准、可读、可导出的代码,而不仅仅是生成平台内部的私密配置时,低代码和传统开发之间的鸿沟才会真正被填平。到那时候,程序员反感的很多理由,或许都会自然消散。
6. 给正在纠结的你和团队,整理的几条经验
这篇文章写到现在,已经比较长了。最后不打算再来什么宏大总结,只想把这几年在多个团队里跟低代码打交道攒下的几条经验,朴素地列一列,希望对你遇到类似场景时有点参考。
6.1 选型之前,先让研发做一次不客气的POC
低代码平台选型最忌讳的一步,就是直接听厂商的销售忽悠。你在合同上签字之前,一定让研发团队挑一个最真实的、带着公司特有复杂规则的业务场景,扔给平台去做一个试验性开发。团队必须尝试用它做完包括复杂权限、外部接口对接、异常处理在内的完整流程,最后再集体评估一下“爽感”和“痛苦感”分别有多强。
这个POC不用太关注页面好不好看,关键是验证平台的底线能力。如果连平台自己的工程师在POC期间都经常需要绕过文档、靠猜和翻社区解决问题,那真到了大范围使用的时候,问题只会更多。一次高质量的POC,能帮你提前发现无数销售不会告诉你的隐藏门槛,节省的后续成本不可估量。
6.2 别让一个低代码平台承载所有类型的应用
每次看到有人想用一套低代码平台把公司的官网、商城、ERP、数据中台全做了,我都头皮发麻。低代码的技术底座决定了它更适合做业务流比较标准、交互不太复杂、并发放量不高的应用。凡是那些关系到公司核心竞争力、用户体验要求高、需要长期打磨数字资产的核心系统,都值得用传统代码认真对待。
聪明的企业通常采取混合架构:核心业务系统严格用工程化方式建设,周边长尾应用大胆用低代码快速覆盖,中间通过API网关衔接。这种架构既保证了主航道的稳定与安全,也让低代码在它能发挥优势的地方真正发挥优势,而不是让它在不适合的场景里成为新的定时炸弹。
6.3 低代码做外包交付时要格外当心
如果你是做外包服务或者要接一个客户的项目,客户点名要用低代码完成,你要尤其冷静地评估长期责任。当年交付完项目,看起来皆大欢喜;等客户第二年要加新功能了,他大概率不会去找平台方,而是会找到你,让你在那个低代码环境里继续给他改。这时候你可能连当年建的系统结构都不一定能完整回忆起来,去翻平台文档又要重新学一遍,难受得很。
靠谱的解决办法是在项目启动前,把低代码带来的“技术债归属”说透,写在合同里也没问题。你要明确说明哪些部分用低代码,哪些部分风险较高,后续维护成本大概是什么量级。契约清晰了,到后期才不会闹得很难看。
6.4 无论在哪个平台,数据模型的正规化是一切的底线
即使你已经决定用低代码了,也别想着“反正是拖出来的,脑子可以放松了”。你动手搭建第一个应用前,数据模型该规范化还是要规范化。字段命名要专业、类型要准确、表间关系要真实反映业务,别图省事全都塞进一个JSON字段里。无数悲剧的根源都来自低代码项目里垃圾数据模型的沉淀,它们会在业务规模膨胀后反噬一切。
就算低代码平台允许你不懂数据库也能建表,你仍然要用专业标准约束自己的设计。一个好的数据模型可以带给应用的长期可演进性,与是否使用低代码关系不大,它更取决于人的严谨程度。
6.5 程序员最该保持的态度:警惕的是叙事,而不是工具
如果让我用一句话总结对低代码的全部感受,那就是:工具是中性的,但围绕工具的商业叙事常常是有毒的。程序员真正该做的,不是逢低代码必反,而是在眼花撩乱的宣传语中辨别风险,给团队提出能落地的边界建议。我对低代码的“不喜欢”,大部分建立在技术细节的不可控和对隐性成本的担忧上,而不是某些人脑补的“饭碗焦虑”。
也许未来几年,AI会继续改变我们编写软件的方式,很多今天看起来贵得要命的工程方法会变成更适合机器辅助的形态。到那个时候,谁还在用低代码、谁在用AI生成完整应用,边界会不会被彻底打乱,没人说得准。但有两样东西的优先级不会变——对人性的尊重和对工程确定性的追求。一个工具如果能保住这两样,自然会慢慢赢得程序员的心。
最后分享一个真实的瞬间吧。去年年底清理收藏夹时,翻到一篇2019年的博客,标题就是《所有人都在吹低代码,我却用它搭了个翻不了身的项目》。评论区战况激烈,有人说“你们团队没用好”,有人回“我们这里半年后重写了”。一个2021年的留言顶在最上面:“这个帖子完美验证了低代码的本质:它的用户从头到尾不是程序员,而是没被复杂系统毒打过的人。”我倒不觉得这话全对,但显然,这种观点的碰撞还会持续很久。但愿读完这篇文章的你,能在这件事上形成自己的独立判断。