作为程序员,我真的有时候特别想 debug 这个世界。看看这个世界究竟是怎么运行的。因为经常会遇到她的输出跟我断言的不一样,或者我觉得正常的输入,却被她判定为非法。
先分享两件事吧。
第一件事,记得去年考驾照的时候,应该是在练科目三。教练带着我练车,当开到一个地方时,让我停车。然后跟我说:『这里是一个考点,看到前面那棵树没?考试的时候,你把车开到离那棵树大概这么长的距离,停一下车』。我顿时懵逼了,我发现我对『大概这么长』完全没有个概念。我就问教练『大概这么长是多长?』,这下就轮到教练懵逼了,然后,就听到后座早就等的不耐烦排队练车的三个同学跟教练异口同声的对我说『大概这么长就是这么长呀』,同时给我一个看着智障一样的眼神。大概这么长就是这么长,那到底是多长,我彻底凌乱了。那一刻我才发现我和世界不一样。
好在后来教练没有放弃对我的治疗,但我能明显感觉出来,她教我的方式跟其它人不太一样。后面跟我说话的画风都是这样的。『看到前面那棵树没?考试的时候,你把车开到离那棵树半米的距离,停一下车。看到那个花台没?车轮与花台平行,并且保持20公分的距离。看到前面那个电线杆没?车头与它的夹角成60度的时候,方向盘及时回正』,半米、平行、20公分、60度,这些词让我觉得这才是正确的描述。但我还是不明白别人是怎么明白『大概这么长』是多长的。
第二件事,我发现我怎么都学不会做菜。究其原因是什么呢?因为我发现自己完全看不懂菜谱。每次看到里面充斥着类似盐少许、醋若干、酱油适量等这样的描述我都气不打一处来。我如果自己明白适量是多少,我还去看菜谱干什么。我一直觉得写这种菜谱的人,心里一点 B 数都没有。但是呢?跟上面练车的例子一样,别人就是可以通过这些少许、若干、适量的字眼学会做菜,还做的不错。这样看来我可能才是那个没有 B 数的那个。
说到 B 数,我其实觉得这是一个比较粗俗的词汇。但是,我一时又想不到有什么词可以去替换它。如果非要找个词的话,我就想起以前上学打『英雄联盟』的时候,各种坑队友。队友总是能预判出哪个草丛可能有人,哪个地方会有谁来 gank 你,什么时候该到哪里去。他们之间的沟通,一个眼神、一个信号就够了。而我啥也 get 不到,总是送人头,打单机。后来我就问他们是怎么感觉出来,简直像开挂一样,我怎么什么也感觉不到。他们给我的评价是『因为你没有意识』。对,就是『意识』这个词。
为什么我没有意识。可能意识这个东西比较偏感性思维,而我偏理性思维,也可能我天生就是一个意识薄弱的人。但是毫无疑问的是,当我选了理科,当我进入社会成了一名程序员,都一直在弱化意识这个东西。
就拿代码来说,代码里面写的最多的是什么,应该是方法。每个系统是由 N 个类组成,每个类又是由 N 个方法组成。而方法又叫函数,取自数学上的概念。wiki 上是这样描述它的,『函数就像机器或黑箱,给予输入值便产生唯一输出值』。注意唯一这个词,理论上函数的外部输入值一样,最终得到的结果也是一样。我们写代码的时候大部分情况下也是这样,少部分情况下不一致很可能是因为 BUG。这就跟意识没有半毛钱关系了,通常在你输入的时候,就能知道他应该有什么样的输出,用程序员的话说就是断言。而如何知道输出断言,不是靠感觉出来的,是你通过逻辑一步一步推导出来的,容不得半点感性思维在里面。
另外一个场景,大家就很熟悉了。就是跟产品经理日常吵架。吵的原因如下,比如加需求了、比如改需求了、再比如需求不明确了。。。无外乎都是围绕着需求的。而其中最伤脑筋的就是需求不明确。
最近几年 AI 非常火,每种职业都有一种,以后会不会被 AI 取代的焦虑,程序员也不例外。以前就看到过这样的帖子,作者表达出类似的担忧。帖子的大概内容就是觉得 AI 发展十分迅速,假以时日,可能以后就没有什么程序员了,只有产品经理。以后开发系统的场景可能是这样的,产品经理登录一个 AI 系统,在系统界面劈哩叭啦把需求输入进去,然后 AI 系统根据输入的需求瞬间生成了一堆代码,组成一个新的系统。看到这个帖子,我瞬间就感受到了那种焦虑,然后我就往下拉,看帖子的回复,当我看到回复里面点赞最高的那一条时,我立刻就释然了。点赞最高的那一条回复是这样说的『这种场景永远也不可能出现,除非有一天,产品经理能把他们的需求说清楚』。?
需求是程序员与产品经理之间永恒的话题。每次产品提需求,你都是先抛一个 5W2H 的灵魂拷问。做什么、为什么做、谁来做、什么时候做、在哪里做、怎么做、做多少。有一点不清楚都要找产品经理倒腾清楚,说不清楚大家都别下班。记得,以前我在网上查项目经理与产品经理的区别。知乎上有一个答案让我印象深刻,他说『产品经理着眼于做正确的事情,项目经理着眼于正确的做事情』。项目经理其实代表了程序员这一类群体。这个回答其实很好的阐述两者的关系。产品经理其实更多的是设计出一张正确的图纸,而我们程序员做的是拿着这张图纸正确的去实施。其实,经常我们会自嘲是搬砖的,但是如果从这方面看,还真是这个样子。
产品经理会去想做什么,为什么这么做等问题。而我们可能只是被动去想怎么做。这是现在企业工作高度分工的原因导致的。这本身无可厚非,但是如果长此以往,可能会剥夺我们的思考能力。因为很大一部分思考,产品经理帮你做了,你不清楚的就找产品经理问清楚,缺乏思考的过程,久而久之很容易变成了一个没有感情的代码机器。
上面说的是工作上,生活中更是这样,虽然有本书叫作《人人都是产品经理》,但是现实世界中肯定不是这样。教练跟我说的时候,我抛个 5W2H 问题给她,她可能转身一脚就把我踹下车了。生活中太多不准确、不明确、不科学、不幂等的事情了。只能学的去接受,生活中没有产品经理,先什么都理好了,然后告诉你怎么做,也没有测试同学,帮你一遍遍调试定位问题。我们不能因为工作的分工原因,养成了依赖别人思考的习惯。要学着适当的跳出程序员的思维去看这个世界。