当我们选择程序员这个职业以后,相信每个人内心中都至少会有一些以技术自居的骄傲。对于其他行业的人来说,我们做的事情是神秘的、无法理解的,程序员就像是迷一般的行业,旁人的这些看法更加深了我们以技术自居的傲气。
程序员这个职业,有一个基本要求,那就是保持学习心态。自己所在的领域的知识要想学精通,需要花费大量的时间和精力,还需要充足的强化训练。除此之外,每年还都有数不清的新技术出现,也说不准哪个领域会火起来。所以,我们要想保持竞争力,除了掌握好已经知道的知识外,还需要时刻学习新技术,甚至转到新的开发领域。一个基本现状是,职业对我们的要求非常高。我相信每个程序员都能明白这个要求。
根据我的观察,新入职的程序员可以大致分为三类:
1)第一类,把自己平时会用到的东西学会使用之后,便安于现状,如果不是工作需要,便不再学习新东西;
2)第二类,感觉自己要学的东西很多,但不是非常清楚该学习什么,所以一直想做新东西,想学新技术,并时刻保持学习的动力;
3)第三类,明确知道自己该学习什么,以及该如何学习,并时刻保持学习的动力。
读者朋友可以先对号入座,并排坐好。接下来我们详细分析一下每一类程序员的特点,以及每一类同学该如何突破这一阶段的限制。
在讨论之前,我向读者朋友们真诚的表达一下我的想法:对于每一种生活、工作方式,我都没有鄙视的意思。我始终认为,人人都是不同的,每种生活和工作方式都可以理解的,都是有意义的。下面我单纯的从职业发展的角度去讨论每一类同学的认知缺失,以及真诚的给出我在职业发展方面的建议。
把自己平时会用到的东西学会使用之后,便安于现状,如果不是工作需要,便不再学习新东西。
在我们周边能发现不少第一类的同学,刚入职的同学中,有超过50%的人是这个状态。他们的表现往往是:工作做完就好,工资不低就好,工作氛围过得去就好,知识够用就好,经常定时上下班,偶尔加加班赶工作,有了空闲时间,看看小说,跟跟剧,打会游戏,陪陪女朋友,非工作时间很少看书学习。
对于这一类的同学,他们没有学习的动力和意识。我曾深入思考过这个原因,我得到的结论是:这部分同学不能意识到以及确定主动学习能给自己带来哪些明确的好处。在不明确主动学习给自己带来多么具体的好处时,他们更倾向于被动学习,因为被动学习的好处是很明确的,能够解决工作中的实际问题。如果这部分同学能从心底认定,自己坚持学习,一年后年薪涨5万,两年后涨10万,三年后涨20万...... 我相信他们也会有充足的动力去坚持学习(这里我们只讨论普通人,有的“高富帅”可能对钱不感冒)。这样,我们便弄明白了这部分同学不能主动学习的根本原因:没有从心里认定主动学习能给自己带来足够大的好处。这种思想的成因有很多种,其中,最常见的一种心理学成因是:长期养成的内心不自信。这类同学出于对自己智商和学习能力的怀疑,他们并不认为自己足够聪明,并不认为自己付出一定的努力,能取得相应的回报,甚至他们会担心自己付出很多,但还是没有长进,会被别人嘲笑自己不聪明。基于以上心理,他们倾向于把自己套在一个“自我保护圈”中,他们被动的去接受新东西,稳定住现有的工作,一切都中规中矩,这样就没有人质疑自己的能力了。客观的说,这是一种消极的工作态度,自己认为的中规中矩,其实会限制自己的职业发展,因为其他人都在进步,而自己是逆水行舟,不进则退。
对于这类同学,我建议大家多看一些能够帮助自己突破认知限制的书,比如《认知突围》、《番茄工作法图解》、《麦肯锡工作法系列》等。这个心理障碍需要系统化的去突破和克服,首先需要认识到通过改进自己的学习方法是可以提高学习效率的,然后需要理解学习是提高自己的唯一途径,最后,需要突破认知,明白每个人都是有无限发展可能的,千万不要把自己限制在一个固定领域中。
同学们,我真诚的希望大家相信我上面说的话。让自己的内心坚定的相信以下几点:
1)优秀的人永远在学习、进步,只靠被动的去学习工作中遇到的新问题来实现成长,是远远不够的;
1)付出就会有回报,你的持续努力,一定会让你变得越来越优秀,将来一定会改善你的薪水收入;
2)如果怀疑自己的智商和聪明程度,可以试着学习一下新的学习工作方法,比如《番茄工作法图解》,你需要探索出一套适合自己的方法,勇于尝试,你一定能发现它;
坚定信念是保持实践的前提,我真诚的希望你能突破这个认知限制。当你突破了这个限制,你很可能会成长为第二类同学。
感觉自己要学的东西很多,但不是非常清楚该学习什么,所以一直想做新东西,想学新技术,并时刻保持学习的动力。
每当谈到第二类同学,我的脑海中总能浮现出这样一个画面:这些同学经常买各种技术书籍(算法类、网络开发、系统开发、语言类等等),乐此不疲,但是很多买过书并没有真正深入的阅读;在工作中,总想做新东西,总觉得做过的东西都没有意思了,这类同学还有一个重要的特点,他们的工作中,经常会犯一些小错误,做的东西会有一些问题,但他们认为这都是正常的,并不太放在心上。这类同学也很常见,大家能不能发现身边这样的同事呢?或者,大家自己是不是也有这个特点呢?
这类同学,一直在学习,也会一直成长,这一点是毋庸置疑的。我想跟第二类同学讨论一下学习的目标和学习的方法。
第二类同学,在学习时,容易犯的一个问题是,对技术浅尝辄止,没有积淀成自己的知识,这是学习的目标不明确造成的结果。根据我自己的经验,我们在学习和接触新知识时,直接接触到的知识往往是别人的博客、官方文档等信息载体,这些信息传达到我们的大脑后,需要自己的理解、逻辑推理、分析、判断,最终转化成自己的知识,才算是完成了知识的学习。只有把知识完成这个转化过程,才能算是真正的学习,才会让自己的知识实现积累。否则,看到的知识点如同过眼云烟,稍后就忘记了。所以,在学习过程中,需要多思考。建议大家在学习新知识时,做一些笔记或者脑图,把这些知识点归纳总结起来,有一些真正的转化后的知识输出。没有积淀的学习,等同于做无用功。
在知识的学习和转化为自己的积淀过程中,还有一个学习的程度的问题需要注意。学习到什么程度,最好联系实际问题去衡量,需要依赖于自己对于当前问题的架构和一些性能指标的理解。对于第二类同学,他们往往无法从架构和性能指标等角度去分析,当前问题需要解决到什么程度,这也决定了这些同学无法衡量这个知识点自己需要学习到什么程度。给大家举个栗子,假如我们用到了MySQL存储我们的数据,但是发现MySQL偶尔会出现内存溢出导致MySQL挂掉的问题,于是我们需要解决这个问题。
首先需要明确这个问题需要解决到什么程度。很显然,我们要弄明白出现问题的根本原因,并且保证这个问题不会再出现。这个时候,我们就有了一定的方向,首先需要查询一下导致这个现象的常见原因都有哪些。假如我们不熟悉这个问题,那可以通过咨询大牛或者google之,总结出原因可能有A、B、C、D、E......几个可能性。然后我们一一分析和排除这些可能性。这个分析和排除的过程是极其复杂的,针对每一个可能性,需要归纳总结所有可能的原因,然后一一排除,只有有了100%的信心才能排除这种可能性。假如我们最终确定,是因为QUERY语句的问题,QUERY的记录数过多,而且并发过高导致的。那么我们就需要解决问题,思考如何修改,能永久的避免这个问题。是否需要修改MySQL可用内存大小?是否需要修改查询的并发度?是否需要优化出现问题的查询?如何避免以后再有这种查询出现?如何添加监控机制,再遇到这种问题时,能快速预警,避免花时间定位问题?这些都需要我们去思考。试着从架构的角度去思考问题,思考自己应该学习什么,应该解决什么,给自己定一些指标,去要求自己必须完成。这样,我们就确定了这个学习的度。只有彻底的解决了这个问题,我们的学习就是有意义的。最后,在解决完问题之后,把解决问题学习到的知识点进行归纳总结,转化积淀,然后再进行适当的扩展学习。比如,MySQL的内存管理机制是怎么样的呢?是否需要学习呢?
上面我们提到了第二类同学最需要注意的问题,学习新知识,最好结合实际问题去学习。我们工作中遇到问题的情况必然不少,如何学到位,把解决问题做到位,是一个很值得注意的问题。这里还有个大家很关心的问题:应该如何平衡时间和精力去学习新技能呢?我的看法是:如果新技能在工作中用不到,那么可以适当花时间去学习,但不要过多,因为用不到的技术,很难去深入使用和理解,而且没有真正的应用来解决问题,很容易忘记。工作中遇到的具体问题,如果需要学习新知识和新技能,那就值得花足够多的精力去解决,这么做,一是可以很好的完成我们的工作,还可以深刻的学习新知识点,何乐而不为呢?而且,工作中遇到的问题是层出不穷的,把这部分的问题和知识学好,对我们的成长已经足够有帮助了。在未来的面试中,也主要考察在既往的工作中解决的问题等个人贡献,没有面试官会寄希望于你自学的新技能。看到这里,大家是不是已经有答案了呢?学习时最好联系工作中的具体问题,从全局的架构层次去弄清楚应该学习到什么程度,并以高标准要求自己去学习知识,并将知识转化成自己的积淀。
通过问题现象看本质,通过本质找规律,用积累的规律来指导自己的工作,这是成长的最佳实践。
说了这么多,有一个很核心的问题:如何才能从全局的架构层次去弄清楚问题该解决到什么程度呢?这一点我也帮助不了大家,因为我不可能帮大家去看具体的问题。那怎么办呢?去请教同组的大牛吧!大牛之所以成为大牛,主要原因就是他比较厉害(当然也可能是吹出来的,这种人很多,谨防被忽悠)。让大牛帮你分析问题该解决到什么程度,然后,自己再去执行就好了。既然提到了大牛的作用,这里给大家一个建议:跟至少两个大牛搞好关系,虚心学习,有了问题,想办法得到他们的指导。《权力与影响力》这本书在指导初入职场的人时,提出了一个观点:几乎所有成功的职场人士在其职业生涯初期都得到了两个或者更多的良师指导自己。对于程序员这个职业,这一点也非常重要。我们的学习方向和学习深度,可以多请教大牛。只要方向是对的,就可以放心的学习了。
再说一遍,找准职场导师很重要!这里提一下如何找个好导师。古语云:名师出高徒。我们要想做一个“高徒”,有一个名师能给我们带来很大帮助。那么如何选择名师呢?我认为有三个标准:正能量足、格局大、善于分享知识。每个标准都非常重要!正能量足的人,能带动身边的人以积极向上的视角来看待生活、工作,能以自己带动大家去学习、拼搏奋进,大家可以根据这个描述来分辨一个人是否有足够多的正能量。负能量多的人,一定要远离,负能量的人只会交给你消极抱怨。格局大的人,看待任何事情都能站在更高的层次上,在技术上,他们高瞻远瞩,在工作中,他们深谋远虑,总之,格局大的人志在远方,胸怀大志!多和格局大的人接触,自己看待事情的眼光也会慢慢开阔起来,而不再对小人和小事情斤斤计较。善于分享知识的人,一般会有一套自己的学习方法论,分享只是这个方法论中的一个环节,牛人的分享能成就我们,更重要的是能成就他们自己。我们需要学习牛人的学习方法论,同时从牛人的分享中学习牛人的智慧结晶。
对于第二类同学,还有几个我常用的思维方式,希望对大家有帮助。
1)学会分享,可以尝试着把自己学习的东西分享给同事和朋友。自己的学习、积淀,跟自己分享知识,完全是两个层次。大家可以试试,一个知识,能给别人讲明白,才是真正的弄明白了。这一点,对我们升华自己的知识积累非常有帮助,而且还会积累我们的影响力;
2)持续积累思维模型,这里给大家介绍一下思维模型,我们工作中常见的架构和需求,基本都可以用一个思维模型去概括。举个栗子,假如数据库的记录数过多,该如何解决呢?其实,有很多的成熟的方案可以借鉴。我们在工作的过程中需要不断的归纳总结,将公共的问题进行建模,积累这些问题的解决方案,积淀成自己的思维模型。以后再遇到类似问题,可以快速的套到积累的模型中,从而用成熟方案解决问题。我的经验是,当积累到足够丰富的思维模型后,量变到质变,就化身成了架构师;
3)学习系统化思维。我们身边的一切都是处在一个固定的系统之中的,公司的组织架构是一个完整的系统,产品的设计是一个完整的系统,技术的架构也是一个完整的系统,我们所接触到的一些问题和事物,都是处于一个系统之中的。有了系统化思维,我们看待业务、架构、职业发展时,可以通过全局来分析局部,看问题能够更全面。系统化思维可以提高我们思考问题的广度和高度,正确的学习和分析问题,可以保证我们分析问题的深度。有了广度、高度和深度,我们在解决问题、自我认知和定位、职业发展等问题上,才能看的更准确。
4)在分析问题时善于变换思路。在分析问题时,如果在某一个思路上思考了很久,还没有突破,就没有必要再花时间在这个思路上了。当然,也不能把问题抛到一边不理睬,而是要想办法找到一个新思路去尝试。换个思路可能豁然开朗,也或者,我们灵光乍现,旧的思路一下子想通了。总之,灵活变换思路,切忌钻牛角尖。
如果大家做好了上面的这些点,大概可以成为第三类同学。
明确知道自己该学习什么,以及该如何学习,并时刻保持学习的动力。
如果读者朋友感到自己一直在高效的学习,并且有充足的动力保持这个学习状态,而且没有上面提到的一些问题。那么你很有可能属于第三类同学。
对于这类同学,在学习上,我没有什么能指导大家的。学习方法因人而异,希望大家保持。
最后,说一下我认为比较好的几个工作方法,希望这些方法能让你们如虎添翼。
1)工作中,我们的目的是把工作做好,要以目的为导向。切忌以下几点:不要带情绪上班,用一个真诚的友谊态度对待每一个同事;解决问题才是最重要的,不要做无谓的争吵。当我们时时以解决工作中的问题为主要目标时,我们是最高效的。
2)做任何事情,不要急着把事情做完。建议大家看看《你的灯亮着吗》这本书,在有问题时,挖掘真正的问题,分析问题才是最重要的。牛人之所以是牛人,牛在能够准确的把握问题,系统的分析问题,准确的解决问题,其中把握问题、分析问题是最重要的,解决问题是执行的范畴,当问题分析清楚之后,制定了具体解决方案,执行起来往往并不太复杂。程序员往往容易看到设计文档或者需求描述后,就一股脑的开始干活。就我的观察,很大一部分程序员做的工作,都需要返工,这就是没弄明白真正的问题是什么。一厢情愿的开发,这叫单恋,如何达到两情相悦,真的需要花时间去思考明白。
3)善于沟通、并且时刻同步进度。自己单独完成一个工作时,让需求方及时的知道进展和遇到的问题,及时同步进度;当和别人合作完成工作时,这一点会更重要。友善提醒一下大家,让lead时刻清楚你在做什么,做了哪些东西,是非常重要的。随时同步进度,能避免我们走很多弯路。如果走错了方向,及时止步,然后纠正方向才是最明智的选择。而不是一股脑走到底。
这一篇,就写到这里吧。下一篇文章,我会介绍新入行的程序员在工作中,常有的几个错误观点,以及我的一些看法。
在第四篇中,我将介绍如何树立正确的价值观和职业素养,在我看来,这是事业的基石。