关于编程能力的反思

我认为编程上有几种类型的问题

  1. 第一种是本源性的问题,比如 算法 ,明确性问题,有专业的科研从业者。
  2. 第二种是现实生活中的,输入的条件是不稳定的,外部因素也一直在变化。
  3. 第三类是技能无关的技能,比如团队的调节,团队目标的确定等。

技能精细化

这个也很像是在FP的编程代码里面,有一些东西它的输入是稳定的,得到的结果也是完全的自包含的被称之为 PURE 的,但是在我们生活的世界不是 PURE 的。

人类因为自己的寿命和思维的限制,人类的发展强依赖于分工,在 <国富论> 里面也是有类似的理念

人们天赋才能的差异,实际上并不象我们所成觉的那么大。人们壮年时在不同职业上表现出来的极不相同的才能,在多数场合,与其说是分工的原因,倒不如说是分工的结果。

所以在职业发展的后期,如果依然依靠的是 技能 作为自己的生活手段,那我们这个时候所能够做的事情,就会变成精细化。比如

  • KV内存数据设计
  • Oracle数据库运维优化
  • 保险业务模型分拆

这个时候,我们每个人的技能会变成一方面专精,其他方面会至少及格,但是一个人没有办法可以解决所有类型的问题,所有你必须要在不同的问题解决之道之间要有选择。所以你需要不断的解决更难的问题的时候,你就必然会导致你的解决问题的范围是 窄化。但是这种 窄化 也不是一个缺点,我们在生活的时时刻刻都是在不断的进行 取舍

关于不同的问题

核心的本质上,作为一个被别人需要(有帮助的)的人,解决问题的能力 才是核心,因为我们每个人都依赖于上下游。
上游可能是我们依赖的开源项目,亦或者是一个内部组件,下游是我们构建的产品,我们就是一个关键的连接点。

针对不一样的问题,我们的手段也是不一样的,

  • 比如我们针对 稳定的算法 问题,我们所能做的事情就是学习现在已经最成熟的方法,明白每一个算法的优点和缺点。
  • 又比如针对 稳定的技术 问题,我们所能做的就是选择正确的技术框架,选择被实践过的成功范式。
    而对于 不稳定输入 的现实问题,我们能做的是在将问题分解,获得尽可能稳定的输入,针对稳定的部分我们就像是知道一道有解的题目(当然也需要广阔的阅历),而其他不稳定部分,我们依然需要控制复杂度,使用恰当的方式和精力投入解决这部分的问题。

技能高贱之分

在以前我们就听说过,卖原子弹的不如卖茶叶蛋的,这个算是一个经济导向的一种高贱之分,但是现在的技术圈依然有这样的分别,比如后端觉得前端不高级,后端搞大数据的看不起搞业务的,搞AI又看不起大数据。这个的诞生的原因是因为,我之前说的我们大部分评价一个工种的高端与否一来依靠一些简单的社会价值划定(比如工资)二来就看这个行业的入门的门槛。入门的门槛往往就是在第一类的问题,而我们往往忽略了第二类,鄙视第三类的问题。我们在毕业入职公司的都喜欢考算法题,而第二类的问题我们在工作之后才能慢慢的发现这个技能的重要性,而对于第三类的问题,我们甚至会觉得技术管理人是编程无能的,实际从我的观察看来,技术管理人往往会编程更为的复杂,时时刻刻需要面对的是一直处于变化之中的世界。

有价值的程序员

并不是说写不出一个操作系统的程序员就是毫无价值的,拿一个餐饮行业打个比方,外面千千万万的苍蝇馆,虽然味道不怎么样,但是这些才是正常人填饱肚子的第一选择,程序员的价值也是如此,在一个学习的过程中,我们首先要贡献出自己的价值出来,在既有的技能条件下,将自己手上的事情做好,然后然后不断的提高自己才是正途,实际上往往会有一些不切实地的幻觉,比如想成为这件事情只有我能做,而别人不能做,这样的人很少,大部分的时候,我们都选择效能最高的方式,可能是最为熟悉这方面的事情,而并非是只有你能做,保持学徒的心态,谦卑前行。


最终最为重要的事情是保护好自己的身体,编程技能会过时,唯一不变的,你需要的是依靠的是自己强健的体魄和坚忍的毅力去完成你所想的一切,多锻炼,健康饮食,毕竟能够笑到最后的才是赢家。

于 厦门 ● 观音山