zoukankan      html  css  js  c++  java
  • 什么才是程序员的核心竞争力

    add by zhj: 对人的态度,对待工作和问题的态度,技术能力,我认为这是做技术的人的核心竞争力。

          对人的态度:团队中的人的技术水平是参差不齐的,性格等各不相同。这就要求我们要有包容的心,对人要和蔼,不要

    看不起别人,即使自己能力很强,每个人都有弱的时候,即使很牛逼的人也是一步步走上来的,没有谁一出生就牛逼。

    如果一个人不好相处,那么无论他能力有多强,别人也不愿意与他合作同事,独学而无友,且孤陋而寡闻,最后这个人

    不可能干成什么事,而且这类人不仅工作不顺心,生活上也不会幸福。所以,这类人应该调节自己,对人友好,别人才

    会对你友好。良好的工作氛围是高效工作,愉快工作的前提。

          对工作和问题的态度:这里的问题是指其它人提出的问题,当别人希望你解决问题时,不应该直接拒绝,要与问题提出人

    讨论问题背后隐藏的需求是什么,这种需求是否实际,想清楚的再决定是要解决它还是拒绝它。比如,产品经理提了一个新的

    功能需求,这个需求实现起来非常复杂,不应该直接拒绝,而应该与产品经理讨论这个功能背后的需求是什么,为什么有这样

    的需求,如果需求很实际,那就应该想办法去解决。需求肯定是不断增加的,这也说明产品还有一定的生命力,如果哪天不再

    增加新功能了,那也就说明这个产品的生命周期快要结束了。不要因为感觉别人提的需求很弱智而去批评别人,尤其是产品的

    需求,因为很多时候,这只是你自己的感觉,你没有决定性的把握证明对方提的需求不可行,也许他的需求是符合实现的,可

    不可行往往要接受市场的检验,如果你认为不可行,那可以把自己的观点亮出来,与对方讨论,而不应该批评对方白痴弱智。

    没有人愿意被批评,可以与别人讨论,但不应该与别人吵架,把关系搞糟糕。

          技术能力:一个人的技术能力取决于两点:自学能力+人际关系。对这两点,我都深有体会,互联网行业发展很快,新技术

    日新月异,这就要求你必须要有持续学习和比较强的自学能力,这的确对人提出了比较高的要求,也因此,做互联网软件工程师

    很累,对于像我之种大学和研究生没读计算机的人来说更是累得要死,自己一方面要学习计算机的基础知识如Linux操作系统,

    软件工程,设计模式,另一方面也要学习新的技术,如NoSQL,网站架构等。对于人际关系这点,我也深有体会,我工作之后,

    很多东西都是从别人那里学来的,比如第一份工作时,很多问题是从师傅那里学到的,第二份工作中,firebug, http, restful,

    django, django-restframework, mysql, redis, uwsgi, nginx, postman,数据库搜索引擎,网站架构中的高可用,高伸缩

    等这些东西都是从同事和朋友那里听说的,然后自己才慢慢的熟悉的,可以说是那些同事把我领进门的。现在,我主要靠这些东西

    吃饭。良好的人际关系能开扩自己的视野,提高自己的水平,给自己提供更多的机会,非常有利于自己的发展。

    下面是知乎上关于该问题的回答,原文见http://www.zhihu.com/question/27180582

     姚冬,招聘音视频相关算法工程师

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

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

    耐心和毅力,做程序员兴趣固然重要,写自己喜欢的代码那是相当愉快的事情,但是程序开发中无论如何还有大量乏味无趣的事情,要能坚持,咬牙把这些做完。

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

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

    最后再说说工资的事,记住两句话:

    工资不是老板对你过去贡献的回报而是对你未来贡献的预期。

    现任老板不可能给出让你满意的工资,下一任老板才会。

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

    姚冬回答的非常好,我狗尾续貂的说几句。

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

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

    先说态度

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    大概就这些

    最后重述一遍

    什么是能力?

    遇到问题的态度

    处理问题的思路和方法

    这就是能力

  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/4189449.html
Copyright © 2011-2022 走看看