程序员的迷思——上手就干

整齐的缩进,雕琢的命名,完美的设计,代码如诗,让我们陶醉。

1 引子

从“Hello World”入门,到数据结构、算法里体味抽象,到开发应用落地。

手中无剑,心中有剑;心中无剑,Google有剑。

我们在写诗,GitHub诗友互粉;我们在违建,一天一高楼。

精力枯竭,Commit之后略带倦笑;if-else,一周过后代码只剩传说。

A: “没问题,这个功能不复杂,今天上线。”

B: “赞”

C: “棒棒哒”

D: [表情]

...

我们都已习惯了,上手就是干。

2 上手就干?

“上手就干”是一个褒贬不一的词,同样是上手就干,有的人被称作敏捷,有的人则被认为欠思考。

读研那会儿,做了个找房子的APP(找新窝)。后台部分真的是上手就干,用能想到的技术拼凑出来,抓取+页面解析+关键词提取+检索。

值得庆幸的是,竟靠这个产品找到工作。在检索部分完全靠数据库模糊匹配的设计之下,也被归到了“敏捷”那一拨里。讲道理,这个设计很low,不是吗?

工作之后,面临各种需求,同样采用A+B+C的方式,快速实现功能,自以为这很敏捷。

然而,只有体力被认可,上手就干一度被贴上欠思考的标签。

2.1 敏捷与欠思考的来源

如果找新窝是在工作后开发的,会不会还被认为敏捷?可能不会了。

如果是以实习的身份快速实现功能,会不会还被认为欠思考?可能也不会了。

所以,敏捷、欠思考与周围环境及自身资源相关。

在上手就干的时候,如果没有考虑周围的环境,只从需求角度,从个人角度出发,很有可能跳入欠思考的陷阱。

此刻的你我经历了白昼与黑夜,只剩酸痛的肩膀,紧张的腰间盘。

2.2 跳出陷阱

道法自然,最终也不过是人的社会。

敏捷与欠思考最根本的判断者是人,而人的判断标准在于“预期”。

所谓预期,是对不同人的不同要求,有的人需要承担更多的事情,要有广度;有的人需要钻研特定的技术,要有深度。

我们往往会跳入到“做事多等于超出预期”的陷阱里,如果没有达到核心的预期,却创造了意外的惊喜,这惊喜很有可能变成惊雷。

2.3 超出预期

经历了各种考试的洗礼,知识点成为了指引方向的指南针。

我们很想知道“对我的预期是什么”。

这就像是在追求女孩子,去问,“我做什么你才能喜欢我?”

她说,“我喜欢优秀的人。”

最终,我成为了更好的自己,她找了一个更龊的他。

所以,既要理解环境的预期,又要设立自己的预期,对预期保持敬畏之心,这样才有可能逼近“真预期”。

3 程序员的能力要求

我们往往会把程序员的工作等同于写代码,老祖宗告诉我们,术业专攻。

但是,从来都没有人规定,专攻术业。

一个手艺人,从小工到高工,再到专家,只靠手艺显然是不够。

认识到这一点,可能会激发我们对“上手就干”产生新的理解。

公司对于程序员的要求,也不是单点的,都会从学习能力、领域知识、方法论、影响力、项目管理、人才培养等多个维度做要求。从对人的要求,延展到对事的要求。

招最牛的人是为了做更牛的事,不是吗?

从这个角度来看,预期约等于把某一件事情做成。

而一件事情通常是多人协作的,所以,预期是对多个人的整体预期。

这样来看,对个人的预期几乎是个伪命题。一件事情相关的人,一荣俱荣。

因此,我们除了要对技术保持热度,还要思考如何把事情做成,把对有限集的专注扩展到对无限可能的思考中去。

4 上手就干!

“把事情做成”的关键是“成”,这意味着我们的态度是结果导向。

因此,我们除了关心“怎么做”,更加在意“为什么做”、“能做成啥样”。

4.1 为什么做

按照做事的逻辑,一上来聊技术实现很可能是荒唐的。我们会更加关注到问题的分析、目标的设定、步骤的拆解、实现的方案、效果的预估。

为了提升事情做成的概率,我们除了要对实现负责,还要参与整个过程,与大家一同承担预期,最大化实现的价值。

相较而言,只是接需求实现需求,则面临较大的风险,甚至陷入代码繁琐、逻辑奇葩、架构畸形、产出无效的死循环。

现实情况是,我们很有可能会陷进去,“为什么做”是我们的一道逃生锦囊。

4.2 怎么做

我们可以问自己几个问题,“最简单的方案是什么”,“倾向的方案是什么”,“这样做有哪些代价(折中)“,”抛开现在的束缚,理想的方案是什么“等等。

通过diss自己,可以防止自己过拟合到最熟悉的解法而忽略了问题的最优解法。考虑到现实的排期压力,即便保持最初的方案,也可以使自己较早意识到潜在的问题。

朝着更优的方法前行,除了靠程序员的初心,公司的激励也很重要。所以,一些公司通过考核员工的技术水平来判定能否晋升。

为了快速上线的“抗住式”方案,很多是经不起推敲的。有个段子,APP的crash率降低了20%,看起来很牛逼的效果提升其实是靠try catch解决的。

4.3 能做成啥样

在分析完“为什么做”、“怎么做”以后,事情能不能做成就看执行了。

同样的思路,为了提升事情做成的可能性,不能拘泥于设定的执行方案,拥抱变化,动态执行。

动态执行除了包括既定的做,还包括第N+1轮的分析,对事情的不断“拷问”。

这样是现实的,因为我们很难在一开始面面俱到,甚至一开始就是摸着石头过河。

这样是痛苦的,因为这要求我们不断超越自己,克服舒适区。

互联网推崇的敏捷,与此也是殊途同归,速度重要,加速度更加重要,适时冲刺,适时缓行。

当然,这并不能给我们一粒定心丸。能做成啥样,依然充满了未知。

现实情况是,即使我们走向彼岸,依然面临严峻的挑战

——我们能说成啥样?

4.4 能说成啥样

大众的意识里,程序员是家居实用型,格子加牛仔、拖鞋配手环。

这是自然界珍贵的物种,不争不显,安心Coding,相信公道自在人间。

质朴的语言,

读研那会儿,做了个找房子的APP,用能想到的技术拼凑出来,抓取+页面解析+关键词提取+检索。

清新的PPT,

  • XXX技术方案
  • 遇到的问题
  • 解决方案
  • 第一步
  • 第二步
  • 第三步
  • 效果可以,满足需求
  • 全剧终

打脸的反馈,

  • 深度不够
  • 欠思考
  • 没有技术难度

不知不觉blabla了这么多,暂且停笔,一首小诗来结束,

我们用惯了编程语言 / 慢慢忽略了表达与情感

记叙文都十几年的事了 / 起承转折已然随风飘散

别人期许一则寓言 / 我们直接给出答案

太心急了 / 前戏太短

草草了事 / 深度太浅