离职之前,结合《程序员修炼之道》一书、几篇热门博客以及自己的一些思考,给大家做了一个关于程序员核心竞争力的分享。
程序员的核心竞争力是什么?这是一个开放的问题,技术基础、学习能力、分析能力等,都是合理的答案,但是相对片面,在我看来,解决问题的能力是这些基础能力的综合也是最终的体现,是核心之所在。
这里对于需要解决的问题的定义比较宽泛,包括新的功能需求、性能优化需求、程序问题(bug)以及开发中的规范、流程、沟通等问题。
我把解决问题的过程拆解为五个阶段。
- 预见问题
预见可能出现的问题,提前做好预防问题或者解决问题的准备。
在这个阶段解决问题,代价最小,难度最高,依赖于技术和经验的积累。 - 发现问题
越早发现,问题所造成的危害越小,能够在上线之前发现问题是最好的,线上问题的及时发现则依赖于监控和报警,等接到客服投诉的时候,问题往往已经变得很棘手。 - 分析问题
程序的问题一般通过日志进行追踪分析,定位造成问题的原因,其他类型的问题相对复杂,不展开讨论。 - 解决问题
首先明确一点,没有解决不了的问题,愚公可以移山,精卫可以填海,最终都是对投入大小的衡量,程序员的工作就是运用自己的知识体系,提出可行的方案,并从中选出最佳的解决方案,即在达成目标的前提下,投入最小。
一部分问题在发现后,程序员可以自行解决,还有一些需要其他同事甚至其他团队的配合,对交流沟通能力有较高的要求。 - 拓展问题
已经解决了当前的问题,但留给我们的工作实际上还有很多。
第一步是总结当前问题的解决方法,第二步是总结同一类问题的解决方法,第三步是采取一定的措施避免同样的问题再次发生,第四步则是采取措施避免同一类的问题再次发生。
能力强的程序员可以直接到达第三步或者第四步,其实又回到了 「预见问题」 的阶段,形成了一个闭环。
脑图中的 chapterN 对应 《程序员修炼之道》中的章节。
那么我们如何提高自己解决问题的能力呢?
从上面的分析不难看出,解决问题的能力主要依赖于技术能力、沟通能力、总结能力等,找到自己的短板,进行刻意练习,通过 目标-练习-反馈-修正 的机制提升。
优秀的程序员需要树立正确的观念,做自己的管理者。
有目标: 职业规划
有行动: 持续学习、终身学习
有策略: 打造自身品牌
最后,非常推荐大家阅读《程序员修炼之道》这本书,对程序员的能力提升有很大帮助。
下面的参考链接文章,也很值得一看。