提问题=从外往里想 ;写代码=从里往外冲


现在想想真是离谱,我一个学化学的居然干起了程序员!整天跟试管烧杯打交道的我,哪能想到最后会靠敲代码吃饭?你们能想象一个满脑子都是化学方程式的人,突然要跟电脑对话是什么画面吗?

刚开始那会儿我可怂了,整整一年都不敢多写代码。天天就跟在别人屁股后面做测试,活像个软件界的"监考老师"。但神奇的是,正是这段当"找茬专员"的经历,让我意外get到了编程的真谛——没错,我花了三年才明白,写代码根本不是重点,重要的是你得知道为什么要这么写!

举个栗子:测试登录页面时,正常人可能就试试正确密码能不能登录。但我们测试员偏要搞事情!输错密码怎么办?乱敲键盘呢?要是直接按回车?甚至往用户名里塞一万个字符会怎样?数据库突然罢工了咋整?这就像玩解谜游戏,我们要把每个犄角旮旯都摸透。

这种思维方式叫"从外往里想"(从上下文Context外部向内部Content思考),跟大多数程序员"从里往外冲"正好相反。

比如要群发通知,菜鸟可能上来就写for循环。但老司机一定会先灵魂拷问:有多少客户?必须秒发吗?万一发送失败能自动重试吗?问着问着,解决方案就从简单循环升级成了消息队列+自动重试的高端配置!

不过就算明白这些道理,我还是经常翻车。有次我用JavaScript写功能,结果被同事吐槽:"你这不就是在用Java的套路写JS吗?" 尴尬得我脚趾抠出三室一厅!后来看了《思考,快与慢》才明白,我们大脑有两个系统:

  • - 系统1是快思考,凭直觉办事(比如觉得500行的代码该重构了)
  • - 系统2是慢思考,要深度分析(比如设计架构时要反复权衡)

程序员最容易栽跟头的就是总用系统1写代码。毕竟 deadline追着跑、咖啡因超标、周末约会要迟到...这些都会让大脑自动选择最熟悉的套路。就像我当年号称要当"编程语言八国联军",结果每种语言都带着浓浓的Java口音,活像个代码界的"塑料普通话"选手。

后来我发现了对抗系统1的神器——测试驱动开发(TDD)。这玩意儿强迫你先写测试再写代码,就像老师逼着你先列提纲再写作文。虽然刚开始觉得慢得要死,但后来真香了!以前我的测试代码都是应付差事,现在反而成了最棒的说明书。更神奇的是,用TDD写的程序就像乐高积木,随便拼拼凑凑就能适配新需求。

不过要说最刺激的,还得是结对编程——相当于当着别人面现场写代码!刚开始我紧张得手指头都在抖,别人问个问题就跟考试似的。后来才发现,这玩意儿要成功得先搞"职场社交牛逼症":得和搭档混成饭搭子,建立革命友谊,这样他问你"为啥这么写"时才不会觉得是在找茬。说白了就是要创造敢说"我也不会"的安全感。

现在回头看,从化学转行编程教会我最重要的事就是——会提问比会答题更重要!做实验时要问"加错试剂会炸吗",写代码时要问"服务器崩溃怎么办"。这些灵魂拷问就像防沉迷系统,专门治我们程序员容易上头就猛敲代码的毛病。

最后说句掏心窝子的:别管你学啥专业的,怕不怕被人笑话。只要保持"十万个为什么"的好奇心,在IT圈绝对能混出名堂!我们既然能设计出应对各种崩溃的系统,为啥不能把团队也打造成允许犯错、欢迎提问的"程序员友好型"环境呢?