什么才是程序员的核心竞争力?zz

原文出处: 知乎 

姚冬的观点

学习能力,尤为是自学能力,你啥时看到那些有名的程序高手在论坛上问“学习 XX 该看什么书,如何快速学习 XXX,学习 XXX 有什么代码推荐”之类的问题,他们想学什么很快就能本身找到相关资料。这个行业发展太快,技术淘汰的速度也很快,3 年不学新东西就可能落伍了。php

动手能力,都是看书看资料,当别人还在纠结看什么书,还在纠结书里的字句是什么意思的时候,有些人的几百上千行代码都已经能运行了。程序员

耐心和毅力,作程序员兴趣当然重要,写本身喜欢的代码那是至关愉快的事情,可是程序开发中不管如何还有大量乏味无趣的事情,要能坚持,咬牙把这些作完。web

表达能力,能在大庭广众下,把本身的想法逻辑清晰流畅地讲出来,让人听懂。数据库

那么技术呢?技术不重要,有了以上几种能力,市场上须要什么技术,很快就能掌握了。安全

最后再说说工资的事,记住两句话:性能优化

  • 工资不是老板对你过去贡献的回报而是对你将来贡献的预期。
  • 现任老板不可能给出让你满意的工资,下一任老板才会。

 

曹政的观点

姚冬回答的很是好,我狗尾续貂的说几句。服务器

咱们都知道学习能力很重要,那么学习能力从何而来,除了去看书上课这种,如何在实践工做中学习成长?网络

我以前微博说了一个笼统的概念,什么是能力? 对待问题的态度,以及处理问题的思路和方法。架构

先说态度性能

你服务器偶尔出 501 错误,也许比例不高(知乎也出现过不少次),不少程序员,没错,是不少,伪装看不见,不在意,或者归咎于人品问题。 这就是态度问题。

再日后,负载高了或者其余什么缘由,忽然频繁出现 501 错误,不去追寻深刻的缘由,而是找各类借口, 什么 IDC 服务商很差,服务器品牌很差,操做系统很差,数据库很差,CDN 很差,网络情况很差,web server 很差,甚至,直接对 Boss 说咱们被 DDOS 啦!(遇到过,帮他 Boss 找过多个安全专家会诊,最后发现根本不是 DDOS,是程序员太烂。)

这就是态度,触目惊心,若是能对问题有敏感性,能知道对任何小的,轻微的问题有足够的敏锐度,你就有了一个快速成长的基础。对问题的敏锐度是很是重要的。不少性能或程序逻辑上非致命的 bug,在不够敏锐的时候是发现不了的,可是一旦进入特殊场景就会骤然爆发,你多一点敏锐度,就会减小这种危机的风险。

第二个态度是解决问题的态度,有人对本身的解决方案信心满满,认为万无一失,但有的人就会多留一条后路;就比如你说我服务器要不要作安全加固,确定要作对不对,要作到尽量严谨和周全,可是你数据库保存密码的时候是否是还要加密?并且要随机 salt,不就是防止万一依然有漏洞被人拿库怎么办么。程序也同样,之前写的一些服务端守护进程,有 bug,会莫名其妙的终止,这个 bug 固然要定位,要修复,可是同时,写一个 cron 检查这个守护进程状态,一旦遇到终止给予自动恢复,这就是第二手准备,即使你多么不但愿他执行,这个准备仍是要作的。对问题 作两手甚至三手准备,也是优秀程序员,架构师的关键素质。

第三个态度是基于沟通与理解的态度,产品或运营提了一个不靠谱需求,一句话打回去固然很爽很威风,可是有没有仔细沟通分析过,这个需求基于怎样的实际诉求,这个实际诉求有没有更合理的实现途径,一句话“这个无法作,这个实现成本过高”,不是正确的沟通态度,并且,最优秀的产品,每每是实现了那些本来人们认为没法实现的诉求。

这样的态度,才有了一个持续进步的基础,下面说思路和方法。

优秀 的程序员和平庸的程序员,若是只看敲打代码的速度,我以为是分不出来的,也许每人均可以一天写不少行代码,可是遇到问题后,平庸的程序员的解决效率,和优秀程序员相比就会有天壤之别。 所谓解决效率,不外乎对 bug 的分析、定位,以及 思考。

最基本的一条,看执行日志,看各类日志,web server 的日志,数据库 的日志,慢查询日志,binlog 日志,php 的错误日志,等等等等,线上出问题瞎猜连日志都不看的大有人在。看日志不仔细不完整的也大有人在,你能去认真研究日志已经超越不少人了。

第二条,模块测试和断点分析,程序员一个坏习惯就是上来就写很大一坨代码而后再执行,不知道一个模块一个模块来写来测试,执行出了问题不知道设置断点,缩小范围逐步分析。断点分析很是简单,将整个代码中插几个中间输出,观察哪一个环节出了问题,或者观察每一个环节的系统开销,对调错和性能优化都很是重要,高手们大概认为这是 ABC 的东西,可是就这玩意我看到的大部分程序员都没有这个习惯。

第三条,错误信息 的理解和搜索,搜索引擎上有各类丰富的技术资料和技术问答,你所遇到的错误信息和错误提示,一般都能在网上搜索到,固然,搜索到后要结合你的场景认真思考,并理解透彻,而不是照猫画虎的去处理,不然可能此次运气好就蒙对了,下次运气很差又不知道怎么回事了。

第四条,不断总结概括,对一个问题,一类问题,以及不一样类型的问题,善于概括整理,不断反思本身的问题,即使是不出 bug 的代码,你通过一段时间去回头看,也有不少思考不正确不合理的地方,有不少优化点,若是你以为本身的代码一贯牛逼,毫无破绽,那你必定是原地踏步,毫无进展。

关于 概括总结,我说个案例

之前咱们有个系统,请求量很是大,负载很是高,有个不错的技术经理来处理,他列了几个升级计划,都很靠谱,去执行了,效果很是好,而后咱们跟进汇报的时候他来说,作了几项升级,总体效果如何,而后我就批评了他。

我批评了什么呢?他是一块儿作的升级,而后一块儿观测的效果,那么这几个方案里,具体每一个方案的实际效果怎样,对提高的帮助多大,他没有任何数据。因此对具体每一个升级方案的价值和重要性,他没有任何概念。你正确的解决了问题,却没有认真的去概括整理,你的收获是有限的。一块儿作升级不能说是错的,可是效果评估须要单独去作,而这个数据是很是有价值的,知识积累,不是你处理过的就必定有积累,而是整理过的。

大概就这些

最后重述一遍

什么是能力?

  • 遇到问题的态度
  • 处理问题的思路和方法

这就是能力

相关文章
相关标签/搜索