若论工作中最重要的能力,莫过于甩锅了。我这么说并不是教人推卸责任,而是团队协作中因果都是交织的,没有孤立的过错。所以实际很难切割清楚,出现问题,完全就看谁能占据说理的上风,把责任推给别人。毕竟背锅的人有很大概率要丢工作的。所以,千万要小心。吹水、甩锅、摸鱼都是非常核心的能力,缺一不可, 只会老老实实写代码得累死。
言归正传,程序员,最重要的技能就是
会思考
不论在做需求前,还是写代码中,或是完成了代码开发,思考始终贯穿整个过程:
- 做需求前,需要思考为什么要做这个需求,做了有哪些收益?
- 写代码前,需要思考代码对上下游的任务能否很好的衔接、怎么设计架构才能更简洁和可维护、是否可以利用已有的代码逻辑去复用?
- 完成代码开发后,需要思考代码有哪些潜在风险?若是遇到问题,也要思考是什么原因导致的,今后如何避免?
总之,作为程序员要想精进自己的技术,除了实践就是多思考,不断的积累经验,提升编程之术,这是看家本领。
会多种编程语言?
当你能够熟练运用某种编程语言开发项目时,学会其它编程语言是很容易的。因为编程语言的设计和实现有很多相似之处。理解这些思想和设计,就掌握了编程语言的"命脉”。
相比只会一种编程语言的人,会多种编程语言算得上是一种优势,但这种优势不牢靠,很容易抹平。
会某种技术?
技术是有时效的。过了这个时效,你再怎么精通,也不得不"扔到故纸堆里”。不过,会某种特定技术,在三种情况下有利:
- 别人会的,你先会。这是先发优势。能吃到早期红利。比如移动互联网兴起的时候,当很多人比较懵的时候,你掌握了IOS开发技术,活该你能吃到第一桶金。这要看"眼力",学会审时度势
- 别人会的,你更深入。比如,别人能用redis写一个简单的分布式锁只实现,但是你能写一个高可靠的分布式锁实现。别人能够写业务代码,你能写库代码和框架代码。这种属于技术专家型
- 别人不会的,你会。比如掌握某种机密算法或技术专利。这就是程序员梦寐以求的技术壁垒啊!
工程管理能力和产品能力?
虽然程席员主要以写代码为生,但是要让代码产生实际经济价值,需要通过项目管理做出好用的产品和服务发布给用户才行。
有时,公司不一定能招到合适的项目管理和产品经理。这时候,程序员是可以代而为之的。毕竟,人的潜力是很大的。能搞得定那些复杂的逻辑,这些项目和产品上的基本事情还是能胜任的。
培养自己多方面的非技术能力Q,也是能够培养竞争力的。
架构设计?
具备系统全局的视角,有一定的技术深度,同时关注广泛的技术,能够做架构设计。
架构的实质是低成本高质量高效率完成系统。因此,要做架构,除了技术层面,还要培养强烈的成本意识和质量意识,学会"算成本账”,能够督促团队不断提升工程质量。必要的话还要协助项目经理提高研发效能。
带团队?
技术过硬,又能与同事相处很好,懂一定的政治手腕,能够带团队攻克系统和项目。带团队做事不仅需要自身具有过硬的技术能力,还需要具备领导力和管理能力,这可提出了更高的要求。带团队是一项有刺激有挑战的事情
技术布道
对研发领域的某个侧面(比如代码质量、系统重构或者性能、可扩展性、配置化设计或全链路压测等)特别感兴趣,也钻研特别深,而且乐于分享和传播,那么,可以考虑做技术布道者。
换句话说,只要在某方面具备特长,同时又能充分发挥这方面的优势,那么,就具备了某种竞争力。
当持续强化这种竞争力,就会升华为"核心竞争力”。这时候,别人就不能"望其项背"了。
总结
人生最怕半途而废。
人真正的能力是分析和解决问题的能力,做出正确决策的能力,成事的能力。
要成事,需有胆量气魄,有大智慧,计划周密,不屈不挠,突破一切阻碍,做成事情,步步为赢。