程序员比较好的素养,这个“好”,其实不太明确。最近看到了各大互联网场的不断裁员,又欣赏到了阿里云崩溃、滴滴崩溃、腾讯视频崩溃的盛状。浏览脉脉的时候,看到一个帖子说,要提升自己的不可替代性,否则就要公司付出对应代价。这个不可替代性,不单单指的是技术很牛,没有其他人可以去解决这样的问题,还有一种情况是,自己写的代码,可维护性差,从而离开了自己,其他人就很难进行修改。简而言之,写出屎山代码,从而让其他人无法替代自己。

除了上述的辩证的“好”,还是要整理一下真正优质程序员应该有的素养与能力。

基本素养

  1. 会不会做需求分析?怎么理解问题的?
  2. 解决问题的思路是什么?想法如何?
  3. 会不会对基础的算法和数据结构灵活运用?
  4. 逐步理解业务,能够掌握业务。例如,查看平台数据产出情况时,发现上有数据出故障,那么就去了解上游任务因何失败。还有,有时间关注当前业务的上下游,串通整个业务。
  5. 深入了解业务,也可以通过这几个问题。项目当时的业务场景?个人负责的部门?为什么要这么做?做完后数据上有什么变化?项目中遇到了什么困难?整条链路是什么样的?
  6. 警惕关注点的退化,这会影响到学习的主观能动性。学生时代,可能还会学习从整体框架看待问题,但是工作几年后就不再关注整体性。
  7. 对项目额外的贡献/思考/积极性/归属感,让领导知道。怀才不遇才是最丢人的。

工程构建上

  1. 项目框架的设计能否满足需求,并且可以应对可能出现的需求变化。
  2. 程序是否易读,易维护。例如,必要的代码注释,合适的函数划分、目录划分等。(不过我发现我 leader 的代码也确实不写注释,当然也可能是代码能力好,一遍过,自己理解也容易)
  3. 重构代码的能力如何?
  4. 主动去测试自己的程序,无论是单元测试还是整体测试。相对来说,更推荐单元测试,debug 更方便。
  5. 有工程的概念,有发布流程的概念,敬畏生产环境。
  6. 代码最重要,紧接着文档,代码和文档保持一致性。

审视需求的能力

  1. 需求的背景是什么?
  2. 需求想要解决的问题是什么?
  3. 能不能换一种需求来实现这个问题?
  4. 能否简化一下需求?

审视需求,或许可以节约时间、简化开发。

想到了榜单评审中核对指标时,时不时会和产品讨论指标是否合理,来避免后续发现不合适更改需求与重新开发。

Reference:252

特殊场景需要培养的能力

  1. 对于互联网可能存在的开会多问题。养成做会议纪要的习惯,通过记录的方式来提高开会的效率。同时,也可以将开会当作一次讲座等,通过提炼重要的事项,保持自己的专注力。当然,如果工作过多导致精力不够,可以在开会时稍微摸鱼休息下。

一些通用的处理

  1. 学会拒绝 or 推迟任务。最近一段时间的工作,让我真的认识到工作是永远做不完的。几个方向的工作要同时进行,自己的时间和精力实在是不够用哇。

当前自己了解到的方法

  1. 能拒绝去做的任务,直接拒绝。
  2. 合理预估多任务并行时,多个任务总共的时间,将这个时间作为提供给对方的 DDL 时间。
  3. 同一类的任务一起处理,而不是有个任务来了就进行切换。来来回回切换任务体感不舒服。
  4. 判断各个任务的轻重缓急,也就是常说的四象限任务。

Thinking First:

  • 如何将复杂的东西解藕、简化
  • 如何写出更优雅的代码
  • 思考未来可能的需求变化
  • 思考未来可能的代码测试
  • 思考未来可能的系统运维

除此之外,感觉有时候写代码的时候,需要将逻辑理顺+写下来,否则很容易写着写着就懵了。

上述这个非常正确!最近还是很容易没有思考全,导致改来改去的情况。