程序员的核心竞争力:什么是能力?这就是能力

(以下内容来源于知乎)
如题所说,我现在是个刚毕业的小本,野鸡学校,而且不是正统的计算机专业,现在踏入了程序员这一行,到底什么样的技能才是才是程序员的核心竞争力,换言之,我在工作的前几年,需要累积什么样的技能,之后才能更好的和老板要工资,提要求。

曹政,数据控/历史控/考证控

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

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

先说态度

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

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

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

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

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

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

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

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

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

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

第四条,不断总结归纳,对一个问题,一类问题,以及不同类型的问题,善于归纳整理,不断反思自己的问题,即便是不出bug的代码,你经过一段时间去回头看,也有很多思考不正确不合理的地方,有很多优化点,如果你觉得自己的代码一向牛逼,毫无破绽,那你一定是原地踏步,毫无进展。

关于归纳总结,我说个案例

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

我批评了什么呢?他是一起做的升级,然后一起观测的效果,那么这几个方案里,具体每个方案的实际效果怎样,对提升的帮助多大,他没有任何数据。所以对具体每个升级方案的价值和重要性,他没有任何概念。你正确的解决了问题,却没有认真的去归纳整理,你的收获是有限的。一起做升级不能说是错的,但是效果评估需要单独去做,而这个数据是非常有价值的,知识积累,不是你处理过的就一定有积累,而是整理过的。

大概就这些

最后重述一遍

什么是能力?

遇到问题的态度,处理问题的思路和方法,这就是能力。

点赞的那么多,答谢各位,补充几条思路吧,是上面几个方法的具体扩充

补充1:善于提问,你能得到怎样的答案,取决于你提出怎样的问题。

你遇到问题,你应该知道,从哪里去问,去问什么。

我常见的一个测试题是这样的。

数据库目前挂了,我就是服务器,我不知道为什么挂了,你是一个优秀的分析师,现在我来做响应,你问我问题,你问一个问题,我回答一个指标,然后看你能不能定位问题。(当然,我会根据所假设的问题回答所有数据指标),比如你问我数据库连接数多少,问我系统i/o压力多少,或者问我慢查询日志里有什么,等等,善于提问的人就可以快速得到答案,而不善于提问的人,就会猜测一堆可能,最终却一无所获。

有个真实好玩的案例,有个兄弟公司(前段时间新闻出来,卖了好像十个亿的样子),开始的时候服务端数据库不够强壮,负载起来的时候会出现一些问题,就请我去把脉,我一看windows服务器,SQL server (不要猜了,那是几年前,现在应该改了),我说这个我不会啊,然后人家那么热忱当我是专家,只好硬着头皮上,我连基本操作都不会怎么办,我就坐在那里问问题,开始他们说是不是这样,是不是那样,我说你们不要盲目下结论,你们要是知道结论就别来问我了,我问什么指标,什么日志你们就给我查什么,我就一样样的问,他们现场操作去查数据,我问一个他们查一个给我看,查着查着,他们的工程师说,知道原因了!果然和他们开始的假设完全不同。 其实关键就是问问题的思路,他们一开始没有提出正确的问题。提出了正确的问题,他们很快自己就找到了原因。

补充2:善于划定范围,缩小问题区间。

前面提到的断点分析是一个非常常见的分析方法,但是很多场景,你甚至不知道是哪个程序出的问题,善于将问题范围化,也是一种归纳和分类的能力。

我曾在某个技术群出过一个经典测试,还记得以前微博上提到的一个经典面试题么。“从浏览器输入url到打开网页,中间经历了什么”,这是一个经典的综合认知的题目,基于这个题目,出一个更实战的场景测试是(这个场景其实90%的网站站长和游戏运营商都遇到过),”目前有用户反映网站或游戏卡,请问如何分析原因,以及当前优先级步骤。“。结果在这个群里,只有我徒弟说出了完全正确的答案(09年带过的)。优先级第一步是看在线用户数和当前访问数,对比历史,得到该问题目前的影响程度,来决定后续的优先级,以及减少分析范围。(这是意识问题) 分析思路,分成三大块,前端,网络层,服务端。当然这三块可以继续延伸下去非常多细节,但是至少,能先把问题分成三大块,然后基于一些显见的分析方式快速排除其中几个部分,再逐步细化问题,而大部分人只是从一个局部去思考,讲了很多局部细节却没有完整的纲领,所以这就是差距。

时间: 2024-10-08 10:07:51

程序员的核心竞争力:什么是能力?这就是能力的相关文章

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

0.问题 如题所说,我现在是个刚毕业的小本,野鸡学校,而且不是正统的计算机专业,现在踏入了程序员这一行,到底什么样的技能才是才是程序员的核心竞争力,换言之,我在工作的前几年,需要累积什么样的技能,之后才能更好的和老板要工资,提要求. 上面是知乎上一位同学的问题,曹政老师以及其他几位同学分别从专业技能.思维方式.方法.态度等角度进行了深度剖析,值得我们学习和思考. PS:第一个答案是曹政老师的回答. ——————————————正文开始—————————————— 我们都知道学习能力很重要,那么学

程序员的核心竞争力

前言 鄙人不才,上次写了一篇文章 其中谈到了,如果要作为一个合格的.NET开发人员,需要具备一些什么素质,今天手痒了,想再写一篇文章,谈谈程序员的核心竞争力是什么,怎么培养核心竞争力?大家应该不介意吧,(*^__^*) 嘻嘻…… 1.兴趣 为什么说兴趣很重要,因为兴趣能让你保持对编程的好奇心,我目前在一家外企工作,是今年5月份入职的,和我一起入职的还有一个小伙子,他这个人很聪明,嘴巴也特别会讲,但是这次某公司裁员把他给裁掉了,我其实并不感到意外,为什么?对于一个这么聪明的,能说会道的人,为什么还

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

add by zhj: 对人的态度,对待工作和问题的态度,技术能力,我认为这是做技术的人的核心竞争力. 对人的态度:团队中的人的技术水平是参差不齐的,性格等各不相同.这就要求我们要有包容的心,对人要和蔼,不要 看不起别人,即使自己能力很强,每个人都有弱的时候,即使很牛逼的人也是一步步走上来的,没有谁一出生就牛逼. 如果一个人不好相处,那么无论他能力有多强,别人也不愿意与他合作同事,独学而无友,且孤陋而寡闻,最后这个人 不可能干成什么事,而且这类人不仅工作不顺心,生活上也不会幸福.所以,这类人应该

转载:什么才是程序员的核心竞争力

下文转载自http://www.cnblogs.com/ajianbeyourself/p/4189449.html,版权归原作者所有. add by zhj: 对人的态度,对待工作和问题的态度,技术能力,我认为这是做技术的人的核心竞争力. 对人的态度:团队中的人的技术水平是参差不齐的,性格等各不相同.这就要求我们要有包容的心,对人要和蔼,不要 看不起别人,即使自己能力很强,每个人都有弱的时候,即使很牛逼的人也是一步步走上来的,没有谁一出生就牛逼. 如果一个人不好相处,那么无论他能力有多强,别人

中年程序员对核心竞争力“不可替代”的重新认识

今天没有技术文章,谈谈最近体会深刻的道理. 职场新认识: 观点一:过去成功的项目经验才是职场上真正不可代替的,你有成功的项目经验,能解决当前团队面临的最大问题,这个才是不可代替的:所以频繁跳槽的人通常要比在一个公司待长时间的人更有竞争力(从结果看,软件行业人才流动性高并不是中国人忠诚度不高) 观点二:不可代替是暂时性的,问题解决,你的价值就已经开始下降和贬值,如果公司有新的业务要发展,而你如果没有相关经验的话,大概率会被淘汰:(所以说见好就收,及时调整成长路线才是发展的正确思路) 观点三:一个技

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

其实这个问题主要是想试探一下求职者的核心诉求,并借此预估一下他在本公司工作的稳定性.常见的答案也无非就是这么几种:对薪酬不满意.干得不爽,或者是想换个环境. 然而,我遇到过好几个初次跳槽的求职者给出的答案是:「在原来的公司学不到技术」. 一听到这个,我就不由得叹口气:今天这一小时又算是交代了,这人基本上没戏.因为根据我的经验,这句话如果由工作不满两年的人说出来,很大概率这是个不会学习不会感恩又特别爱抱怨的人. 程序员最核心的竞争力--「学习力」 如果有人问我:你在面试程序员时,最看中的是什么能力

黑马程序员— OC核心语法之构造方法、Category分类、类的本质、description和SEL

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC的一些核心语法,初步了解了OC作为一门开发语言的一些较为深层次的知识.本章我们继续学习OC的核心语法,主要包括OC的构造方法,Category分类,类的本质及深入研究,以及description关键字和SEL关键字. 第一讲     构造方法 1. 构造方法 构造方法是用来初始化对象的方法,是一个对象方法,以减号"-"开头,构造方法其实就是init方法,初始化完毕

黑马程序员—16-oc核心语法

一.    变量作用域 l  变量的作用域主要分为四种: u  (1)@public (公开的)在有对象的前提下,任何地方都可以直接访问. u  (2)@protected (受保护的)只能在当前类和子类的对象方法中访问 u  (3)@private (私有的)只能在当前类的对象方法中才能直接访问 u  (4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问 l  使用注意和补充 u  (1)在类的实现即.m文件中也可以声明成员变量,但是因为

程序员提升之道-人际交往篇

程序员的核心竞争力是什么?很多人会将“技术能力”放在第一位,但是在我的心中我会将“技术能力”排在人际交往能力之后.很多程序员将主要精力花在了提升自己的技术层次上,忽略人际交往能力在职业生涯中的重要性,只懂技术的程序员终究只有有限的发展空间.在工业时代,竞争力是靠不断改进生产方式和生产工具获得的,如今,则是靠不断提高关系质量得到的.很多人会怀疑“人脉”的重要性,误认为技术能力才是最安全的保障,而朋友在绝对利益面前都会分道扬镳.没错,在绝对利益面前除了亲人大多数人都会选择利益,放弃你.这里的一个误区