带过几个转行学编程的朋友之后,我发现一个非常反直觉的现象:让一个人放弃编程的原因,通常不是数学太差,也不是熬夜受不了,而是他接受不了“昨天刚写好的代码,今天就要推翻重来”。有不少人误以为编程是精确的、稳定的、只要逻辑清楚就不会变。但现实恰恰相反,编程是今天所有职业里变化密度最高的行当之一。需求在变、框架在变、运行环境在变,连你昨天用来偷懒的小脚本,可能过了个周末就打不开了。这篇文章想聊聊,为什么我越来越认同“不愿接受变化的人不适合编程”这句话,也想给那些正在犹豫自己适不适合编程的人一些判断依据。
1. 为什么编程本质上是一门“拥抱变化”的手艺
1.1 代码不是雕塑,而是随时可以修改的活物
很多人第一次学编程时,会把它想象成盖房子:先有图纸,再搭地基,最后装修,完事之后就不该动了。但真实项目里,代码更像城市规划,永远在改扩建。今天这里加一条地铁,明天那里拆一片老城区,后天又要为新的商业区修改路网。
我早期给一家小公司做库存系统时,需求文档写得很简单:能录入商品,能修改数量,能查库存。我按这个目标写完第一版,客户试用一周后提了一堆新要求:要按供应商维度汇总,要导出Excel报表,要加操作日志,最好还能用扫码枪快速出入库。每一句话听起来都很简单,但对代码来说就是实打实的变化。如果抱着“方案签字了就不能动”的心态,这个项目从第二天起就会让人崩溃。
编程的世界里,需求永远是流动的。哪怕你接的是一个看起来非常成熟的领域,比如大数据分析,数据格式、字段含义、分区规则也会在不经意间变动。写过MapReduce程序的人都知道,最怕的不是算法复杂,而是上游数据源突然多了一个字段或改了一种编码。那种“前面已经写死了,现在所有节点都要跟着调”的感觉,基本上就是程序员的家常便饭。所以真正决定一个程序员能走多远的,不是他第一次把方案写得多漂亮,而是他面对“要改”这两个字时的第一反应。
1.2 技术栈的更新速度,会淘汰每一个拒绝变化的人
再往大了说,编程这个行业本身就活得特别快。十年前你可能会觉得精通某一门语言就能吃一辈子,但现在的情况显然不是这样。新语言、新框架、新编程范式层出不穷,很多旧工具还在生产环境里跑着,新工具已经又迭代了几个版本。
举几个很具体的例子。早期做Web开发,用jQuery操作DOM就能应付很多页面;后来Vue和React这类框架成了主流,如果你拒绝学组件化开发,接手新项目时连代码都看不懂。再说后端,Java服务从传统的同步阻塞模型,走向异步、响应式编程,Spring WebFlux这类东西已经写进很多新项目的脚手架里。再比如Python,从写脚本到做数据分析,再到机器学习和AI应用开发,工具链已经换了好几轮。说“Python编程从入门到实践”那本书里教的够用一辈子,显然不现实。
传统工控领域也一样。以前很多人玩PLC编程,觉得会用梯形图、会写几个基本指令就够了。可现在西门子S7-1200的编程环境下,很多东西都在往高级语言和标准化通信协议靠拢。你在Windows下做C++的OPC UA客户端编程,如果还坚持只会用老串口那套通信思路,遇到现代化工厂的数据对接需求就会特别吃力。单片机开发也类似,从纯寄存器操作到HAL库,再到各种自动生成代码的配置工具,愿意拥抱变化的人可以一天写完以前一周的初始化代码,不愿意的人只能抱怨工具太复杂。
所以我经常说,技术选型没有永恒的正确答案,只有“在当前约束下更合适的方案”。你今天信誓旦旦选定的技术栈,三五年后可能就变成历史包袱。这不可怕,可怕的是你假装看不见变化。
1.3 重构和调试,就是变着法子与“变化”共处
很多人以为写代码最花时间
