小编说:知道和做到之间有一道鸿沟,要想跨越它,你不但要努力,还要讲究方法。本文从六个方面分享了技术精进之道,教你如何在技术上持续精进。 本文选自《程序员的成长课》
在专业领域成长的一般模型如图1所示。
模型中有三个要素:
每个人都可以评估自己的现状,自己在做什么、用什么技术、技术达到了什么程度、拿多少薪水、是什么职级、是否被领导认可、与人协作是否顺畅……有很多维度,静下心来思考一下,在纸上列一列,就能得出自己当下的状态。
而目标则很可能随着旧目标的达成而消失,或者随着日复一日的编码、Debug、交付而褪色,或者随着每个月的薪水蒸发掉。一旦我们失去目标,就会陷入迷茫,被动工作,进而慢慢失去竞争力。
所以,要想日有寸进,必须要在日常的开发工作中找到努力的目标。这非常关键——很多人就是因为没有目标而放任自己随波逐流、被动工作,最终变得庸常而被组织淘汰。
因此我们引入原本用于企业的对标管理法,帮助自己在日常工作中找到贴合自己的目标。一旦我们找到目标,对比现状,就可以找到差距和前进方向,有了方向,就可以制定计划,稳步前进,获得提升。
图2 是实践对标管理法指导个人成长的基本过程。
以下解释来自百度百科:
对标管理,由美国施乐公司于1979 年首创,均将其视为现代西方发达国家企业管理活动中支持企业不断改进和获得竞争优势的最重要的管理方式之一,西方管理学界将对标管理与企业再造、战略联盟一起并称为20 世纪90 年代三大管理方法。
对标管理是指企业以行业内或行业外的一流企业作为标杆,从各个方面与标杆企业进行比较、分析、判断,通过学习他人的先进经验来改善自身的不足,从而赶超标杆企业,不断追求优秀业绩的良性循环过程。
所谓“对标”就是对比标杆找差距。推行对标管理,就是要把企业的目光紧紧盯住业界最好水平,明确自身与业界最佳的差距,从而指明工作的总体方向。
在针对个人运用对标管理法时,可以从4 个方面来寻找标杆:
接下来我们就从这4 个方面展开,看看怎么寻找我们的目标。
2.从优秀者身上找目标
我们身边一定有人在某方面做得比自己好,比如:
……
别人做得好的方面,都可能是我们努力的方向。我们要用善于发现的眼睛,找到身边人的突出之处。
在向优秀者对标时,下面的问题清单可以帮助我们有序、系统地分析标杆:
举个例子。
袁大每天都能准时下班,工作还完成得很好。你对这一点很感兴趣,就暗中观察他是如何做事的,发现他过一段时间就会翻看一下纸质笔记本,或者用笔在本子上记录点什么,还有,每天下班的时候,他都会在本子上写点东西。
于是你跟他聊天,发现他每天下班前都会在笔记本上记录今天完成了什么、遇到了什么问题、明天做什么。还了解到他每天都会早到半个小时左右,利用这段时间规划一天的工作。
后来你明白了,袁大培养了一个“早规划晚回顾”的工作习惯,通过这个习惯,保证每天都有几件重要的事可做,每天都有目标、有节奏,这样就可以不慌不忙地工作。
于是你就会思考:袁大的习惯是否可以成为我的习惯?
这个时候,你就找到了一个提升的方向:培养每日完成三件事的习惯。一旦你养成这个习惯,习惯的力量就会帮助你集腋成裘,完成从量变到质变的过程。
再举个例子。
你发现组里的袁二,排查Bug 特别厉害,像一休哥一样,点点头沉思一下,就可以说出问题所在。即便是别人的代码引入的Bug,他也可以很快找到原因——只需要翻翻代码,和对方聊几句。
为什么袁二这么牛?
你向他请教,发现他做到了以下几点:
好了,正好你总是被Bug 困扰,往往一个Bug 能让你愁烦一个星期,这下是不是有努力方向了?
所谓一般性规律,指的是那些通用的、可以指导我们在什么时候做什么事情的规律。
举个例子,舒伯的生涯发展阶段理论就是一般性规律,男大当婚女大当嫁也是一般性规律。
对于开发者来讲,要关注专业能力成长的一般性规律,即技术成长三阶段。
如图3所示。
在技术领域内的成长,基本上都会经历三个阶段:
对开发者来讲,若拥有一年左右经验,多数人处在第一个阶段——专项能力提升的阶段,熟悉某种编程语言,可以完成别人安排的一个小模块的开发。
若拥有三年及以上的经验,就应该进入第二个阶段了。当你在某个技术方向上构建了技能体系后,就可以完成相对复杂的工作,可以独立做一些事情,甚至可以辅导初级开发者来完成工作了。这个时候,你往往已经是团队里富有生产力的成员了。
若有五年以上开发经验,应该进入融合创新阶段,能够独当一面,可以独立完成特定项目的评估、设计、技术方案选择等事情。此时你往往是团队里的技术领袖或者技术管理者,具有比较大的影响力。
假如一个开发者干上八年十年,还到不了第3 个阶段,可能就需要考虑通过其他方式来提升自己的竞争力,保住自己在团队中的位置。
这个模型更适合应用开发人员,对于做基础研究(比如音频算法、图像处理算法等)的开发者,在第3 阶段,可能在他所在领域内钻得更深,成为专家。
我们了解了技术成长的三个阶段,就可以结合自己的工作情况,判断自己当下处于哪个阶段,该做什么事情了。
比如你做了2 年PHP 开发,可能你处于从第1 阶段向第2 阶段转型的过程中,此时提升的方向,就可以考虑和PHP 相关的技术栈,比如了解HTTP 服务器是如何和PHP 整合在一起的,再比如了解数据库、操作系统,这样你就可能会定下掌握LAMP(Linux/Apache/MySQL/PHP)或者LNMP(Linux/Nginx/MySQL/PHP)技术栈的目标。
一门编程语言、一个技术框架,其本身的知识层次也会有深浅,在学习时,也存在先后顺序和一般性规律。从这个角度讲,技术本身的深浅层次也可以用于个人对标管理。
一般来讲,学习一门技术时,有三个阶段:
我比较熟悉Qt,Qt 这个应用开发框架,三阶段的划分可能是图4 所示这样的。
多数技术框架,通过分析,都可以划分出类似上面的知识层次和学习阶段。
以此作为对标的标杆,就可以弄明白每个阶段应该达到什么程度,还可以定位自己处在哪个阶段,当前阶段的任务有没有完成,接下来该学什么。
开发者的工作往往是由一个又一个项目串起来的,每个项目都会有预期结果,都会界定怎么样才算是完成,然后会有一系列的指标用于衡量项目做得怎么样,比如Bug 率、延期时间、并发用户数、持续运行时间、单元测试覆盖率、安全性等。
我们在做项目时,就可以用这些指标来要求自己,这样每个项目都有目标,都可以制定一些策略,帮助自己来实现这些目标。
很多开发者其实不太关心交付时间、Bug 率、冒烟测试通过率、并发用户支持、内存占用、CPU 占用、电池消耗等问题,往往是做完了,能跑,觉得就可以了。
以这样的态度来应付开发任务,其实损失最大的是自己,因为你白白失去了锻炼和提升的大好机会。
如果以项目指标来要求自己,把项目指标分解到开发工作中,并且在开发过程中贯彻执行,收获一定比被动完成任务多得多。
举个简单的例子,如果你用Java 开发一个电商类的Android App,内存占用就应当是你关心的一个指标,否则你的应用就会经常出现OOM 错误,严重损害用户体验,导致用户大量卸载,最终影响产品的市场。
如果你把内存占用作为重点考虑的指标,一定会考虑如何使用图片预缩放、重用、解码格式、缓存等策略来优化内存占用,你甚至会自己设计一个图片缓存池或者特殊的ListView 来专门处理用户快速浏览商品时巨大的内存消耗。
你有了这样的考虑,做出来的APP 肯定比你从未考虑过内存占用问题而做出来的稳定得多。
前面介绍了如何从4 个方面寻找目标提升自己,只要你遵循那些策略,付出一些努力,就可以找到适合自己的提升策略。
下面给出一些经过验证切实有效的提升策略,你可以拿来直接用。
本文分享自 博文视点Broadview 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!