1. “Code was never the hard part” is an insult to all programmers (blog.senko.net)
摘要:“代码从未是难点”是对程序员的侮辱
本文反驳了当前软件行业中流行的一种观点,即“编码很容易,难的是确定要写什么”。作者认为这种说法贬低了编程工作的复杂性,并忽视了软件开发中多维度的挑战。
核心论点反驳
1. 编码并非易事 作者通过以下事实反驳了“编码很简单”的说法:
- 职业价值:程序员长期以来保持着高需求和高薪资,且面临着极高的工作压力和职业倦怠。
- 知识深度:编程领域存在大量深奥的经典著作(如《计算机程序设计艺术》、《SICP》),需要长期的专业学习。
- 技术难度:编程天才的存在、复杂算法的需求以及软件中持续存在的漏洞(Bugs),都证明了编码是一项高难度的技术活动。
2. 需求定义并非唯一的难点 作者也质疑了“确定构建什么才是难点”的单一逻辑:
- 角色地位:如果需求定义是核心难点,那么产品经理、市场研究员和业务分析师在薪资和行业地位上应比开发人员更高,但事实并非如此。
- 开发冲突:如果实现过程是简单的,那么当销售为了达成交易而承诺新功能时,程序员的抵触情绪也难以解释。
软件开发的双重本质
作者主张,成功的软件开发必须兼顾两个维度:
- 理解“为什么”:深入理解用户体验、解决客户问题,并确保所有利益相关者的目标一致。
- 理解“如何做”:将编写高质量代码视为一种需要技巧、耐心、经验和智慧的“工艺”(Craft)。
行业变革中的恒定与变化
- 不变的因素:软件复杂性的增加、维护的需求(熵增与位衰减)、用户无法准确表达需求的能力,以及业务需求与客户需求之间的张力。
- 变化的因素:编程语言、硬件、工具和抽象层不断演进。开发者需要意识到,过去在底层技术(如 C 语言内存管理)上的经验可能会随技术更迭(如 Rust 的出现)而贬值。
职业发展建议
为了在技术变革(尤其是 AI 时代)中生存并发展,作者提出了不同阶段开发者的应对策略:
- 通用原则:保持好奇心与批判性思维,区分技术热潮与实际效用,并接受职责的转变。
- 资深开发者:不应仅局限于深化技术专业知识,还应学习用户体验(UX)、客户访谈和商业策略,以从全局理解软件的价值。
- 初级开发者:应通过深入理解底层原理(如指针、递归、内存层级、网络协议)来构建坚实的基础,无论使用何种高级语言。
- 核心警示:切勿将个人的判断力、同理心、审美和专业责任外包给 AI。 开发者必须承担起对代码质量和系统决策的最终责任。