前言
码农是世界上最苦逼的职业,没有之一。996的福报,007的办公室猝死,尤其是底层码农更为辛苦,接下来博文以亲身体会来告诉大家如何避免成为底层码农。喜欢博主的小伙伴,动动你的小手,一键三连吧。
在这里喂自己袋盐,可视化(tableau)和毕业设计(matlab)的小伙伴,可订阅以下博主精心整理的几个专栏。
在博主的资源中也有各种算法的应用实例源代码,需要的小伙伴自取哟。
端正心态
制定目标我们人人都会,当我们立下flag:想要成为优秀的工程师、想要学会TensorFlow的时候,其实就是树立了目标了。然而树立目标并没有什么卵用,目标还是目标,你还是你,不说接近并且达到目标了,就连往目标移动的趋势都没有。这也是绝大多数人中途放弃的原因,所以在一切的一切开始之前,首先要端正心态。
世上没有一蹴而就的事情,想要提升自己的实力,往上走是一个漫长的和自己对抗的过程,不是今天打了鸡血看了几篇技术文章,明天刷了两道LeetCode就能变强的。
巴菲特说过一段话,我们长久以来持续不断的努力,就像是在一个长长的斜坡上往下滚雪球。这个斜坡太长了也太平缓了,以至于一开始的时候几乎看不出来它是一个斜坡,雪球滚起来也无比地缓慢。但是,只要我们坚持下去,它就会越来越快,越到后面雪球也越大,给你的收获也就越大。
我现在越来越觉得,所谓的天赋其实很多是一个人的耐心而不是聪慧。你能有多耐得下性子,能够有多熬得住,你就能把事情做得有多好。
很多人听到这些道理估计都怕了,担心自己熬不下去,但好消息是提升技术实力的斜坡其实非常陡峭,比大家想象的要陡峭的多。
坚持一个月能学会一门语言,坚持半年能够熟悉一个领域的技术,坚持两到三年就可以成为一个优秀的工程师。这其实已经非常非常迅速了,不相信的话,我随便举个例子,你们可以去看看《人民的名义》和《大明王朝1566》这两部剧,去看看想要在官场混得如鱼得水,把事情做得滴水不漏有多难。我个人的感觉是想要从愣头青变成官场老油条,至少需要十年起步。相比之下,工程师的两三年成才,是不是已经快得多了?
制定目标和拆解目标
很多大神给你分享了许多方法论,都很有道理。但是真正让你实操,你可能还是不知道该从何做起。这里面的原因其实很简单,因为你的目标本身就没有找好。
在绩效考核领域有一个著名的SMART原则,分别是specific,mesureable,attainable,relevant和time-bound。翻译过来就是具体的、可衡量的、可实现的、相关的以及有时效的。举个简单的例子好了,我们想要提升自己成为高级码农,那么问题来了,什么样的码农是高级码农?我们怎么量化指标?这个目标有哪些相关的小目标?你准备用多久达到?
这几个问题问一问自己,是不是感觉立刻就清楚了很多?不再像是刚才那么迷茫了?
我们都知道做事前要有目标,但是很少有人清楚目标分为两种。一种是用来持续努力逐渐逼近的长期目标,另外一种是当下可以立即执行的短期目标。在你努力的过程当中,短期目标随着你进度的不断推进,是一直会变化的。而长期目标,相对稳定,几年内保持不变。
就拿我自己来说吧,成为顶级博主,坐拥10多w以上的粉丝是我的长期目标,当下把每日读者阅读量提升到5000以上是我的短期目标。长期目标可能需要几年甚至十几年的时间,但短期目标是实时迭代的,也许下周我就达成了。到时候就会指定新的目标。
人很多时候迷茫,主要原因有两个,一个是不确定做什么对我们的目标有帮助,第二个是不知道如何找到目标当中的执行点。针对这两个问题,最好的办法就是拆分。把目标拆分地越细越好。越细的目标越明确,越明确越容易执行。
比如你想要进入BAT,针对这个大目标你什么也做不了。但是当你拆解出夯实基础、积累经验、准备面试这三个中等目标之后,你就不是一头蒙了。如果你继续拆分,把夯实基础拆分成熟练掌握Java,再把熟练掌握Java拆分成了解Java中面向对象的概念,那么你当下就很明确地知道你要做什么了。如果在这个过程当中再能结合上上刚才说的SMART原则,那么你的目标感以及驱动力也会更强。
知其然更要知其所以然
前面讲了一些总的方法,后来来聊聊一些具体的举措,可以实实在在地应用起来帮到大家。
程序员的成长贯穿着bug,碰到bug与各种问题是必然的。但是遇到bug之后每个人不同的处理方式是完全不同的。
打个比方说,写java的时候,少配置了配置文件,导致环境异常,报错。有的人是什么也不做,这次遇到了这种情况,花了很多时间查资料解决了,下次再遇到还是要查资料。有的人呢,则是记住了这个异常发生的原因,下次再遇到就不用查资料了,直接可以解决。还有的人呢,不仅记住了异常的原因,而且搞清楚了问题产生的背景和原因,为什么需要配置文件,这个配置文件起到了什么作用。这样,不仅下次遇到相同的问题能解决, 遇到近似的问题,都能想明白该怎么解决。而且解决问题背后带来的就是技术的成长和突破。
我以前刚毕业做java的时候,git、maven都没有用过。maven非常容易出问题,写过java的应该都懂,稍微一个包没配好,或者是版本不对就会报错。一开始的时候,都是师傅帮我解决问题。后来我发现这样我根本没有长进,于是我试着自己去解决。
一开始的时候要花很多时间,才能摸索出来问题的原因。后来,我花了点时间学习了一下maven的原理,以及和spring以及tomcat等框架运行的时候是怎么配合的。很快,我不仅可以解决自己的环境问题,还能帮助别人搞定别人搞不定的问题了。我技术的飞速提升正是在这个阶段。
做程序员这行,需要技术积累。技术怎么积累?仅仅靠我们自己去学习钻研也是不够的,我们在实践当中积累的经验也是非常重要的一个部分。利用好每一次遇到问题的机会,去学习到一个原理或者是一种方法,日积月累,你会发现好像自己什么都懂一点了,好像很多零碎的只是拼凑起来了。等到了这个时候,你离技术大牛也就不远了。
多做10%
最后一条其实有些普适性,不仅仅适合程序员。
怎么样能从普通到优秀,从优秀到更优秀?
总结来总结去,无非是付出更多的努力,以及用更高的标准要求自己。我个人把这条量化一下,设计成方法论,就是一句话,那就是多做10%。
你我都知道,追求决定成就。如果你追求成就大师,即使你成不了大师也能成为专家。如果你追求成专家,你可能只能成学者,如果你追求学者,可能你只能做一个普通员工,如果你追求普通员工,可能连工作也找不到……
但必须承认,不是所有人都敢于设定高标准。也不是所有人都有能力追求高标准,但多做10%却是完完全全可行的。
这样的例子太多了,比如老板让你做一份数据,你用了一个小时跑完了数据,是不是可以多用十分钟写一段python做几张图表呢?你花了一下午的时间开发了某一个功能,是不是可以多花二十分钟多review一下自己的代码找找潜在的bug呢?你花了很多时间学了一点新技术,是不是也可以再多花一点点时间记录下来方便以后复习呢?
我刚毕业的第一年是我技术成长非常迅速的时间,那时候当时的主管每周都会给我们做技术分享。其他人都是带着耳朵来听,听完就结束,只有我一边听一边记,之后还花了点时间把笔记整理了一下。
结果靠着笔记记录的内容,以及充分的准备,我用一年的工作经验面试过了一家大厂。不仅如此,我把这份笔记借给过许多朋友,帮助他们也获得了不错的机会。
仔细想想,其实这也非常符合边际效益,很多事情边际效益是先递增再递减的,好比考试,从0分考到60分其实要比从60分考到80分难得多。因为能考到60分,说明大部分基础题都会了,只需要再巩固一点,再学一点附加题,完全可以考到80。反而是从80分考到90分很难,因为容易做的题都做了,剩下的都是硬骨头。但很多人付出了许多努力,刚做到60分就迫不及待地放弃了,不得不说是非常可惜的。
突破自己,其实并不需要我们做惊天动地的大事,很多时候就是从这些看起来很小的事情上入手的。
最后的最后
希望各位小伙伴能够多多提升自己的码农层次,在今后的日子里不断突破自己,拿大厂offer拿到手软!