个人成长阶段

如果起点是进入一个行业的小白,那么到成为这个行业的专家,至少经历三个阶段:

- 知识的原始获取阶段:刚进去一个行业,我们都是“学徒”,不懂的东西很多,每天只要稍微动动手、动动脑就可以感觉到不错的成长。毕业工作后开始融入一个团队,开始参与项目的开发,有师傅带、有同事学,很多时候你不想学到东西都很难。所以,在这个阶段,是自身技术的爆棚期,是一个快速成长的阶段。

- 知识的结网积累阶段:八年抗战,经历过第一个阶段以后,大家都有了自己的看家本领,技术足以应对日常的工作和研究。每天忙忙碌碌,但是感觉都是重复性的工作,“收获很小”。即使继续学习,发现每天研究和接触到的新知识很多都是重复性的内容。渴望伴随着迷惘可能是这个阶段的特点,从“灵魂深入”隐约感觉到自己应该再多学点东西,但是每次付诸行动感觉都收获颇少,所以开始怀疑和迷惘。其实,大家忽略了这个阶段最本质的特点:由于知识的广度加快,知识的深度速度“变慢”,但是广度的知识,往往给人一个“肤浅”、“无用”的幻觉。“广”在某个程度上就是“深”,看似无关的经历经验、看似无关的知识点,其实,在经历一个长期的获取、思考、吸收之后,突然有一天,点成线成网,人有了一种“大彻大悟”的感觉,迅速进入第三个阶段。

- 知识的沉淀升级阶段:大彻大悟之后的升华,开始一段新的快速成长的阶段。

曲线只有最低点,没有最高点,所谓“心有多大、世界就有多大”。做为一名技术人员,时刻清楚自己当前的位置。另外,我觉得这个曲线除了对技术人员适用,应该同样适用于其他行业,共勉。

我会在每个阶段,根据我切身的经验,聊一下我的想法。

阶段一:知识的原始获取

这个阶段,就是让自己拥有一技之长,可安身立命。简单点说,就是“我有别人认可、不可被替代的价值”!

做为技术人员,当然首先体现在这几个方面:

- 至少熟悉一门编程语言。不管这个语言是啥,JUST DO IT,把它搞熟,至少做到写代码得心应手,基本语法、高级技巧了然于胸!很多人总喜欢对(纠)比(结),A语言好还是B语言好,这就像,你看到有人开奔驰,有人开宝马,所以你就开始纠结以后我到底是往奔驰的方向努力,还是往宝马的方向努力?买奔驰还是买宝马,纠结这个,倒不如去纠结:今天我是开奔驰,还是开宝马!

- 至少熟悉一个数据库。不管是MySQL、SQLite还是PostgreSQL,还是其他的RDB。熟悉不仅仅是可以写出“别人看不懂的SQL语句”,更多体现在你对这个数据库的了解和驾驭程度,例如性能调优、索引优化、库表设计、数据库设计的原理以及最佳方案。

- 熟悉使用各种项目协作工具。这是团队合作的基础,例如沟通IM工具、代码管理工具、任务追踪工具、Wiki/Markdown文档编辑工具,等等等等。

重要的是,不管是前端、服务端还是客户端,让自己成为某一个领域的能手!

如果做到了这一步,只能说明你仅仅胜任一个优秀的软件开发工程师。我觉得还远远不够,最多只能说,这个阶段完成了一半。另外一半更重要的就是自己的修行:

- 自己知识结构的横向发展。如果你只熟悉一门语言,或者你用“熟悉一门语言的眼光”去看“另一门仅仅了解的语言”,就鼓吹说“PHP是世界上最好的语言”,只能说你是无知的井底之蛙。我们需要带着一种对比的眼光,去了解多种语言,知道每种语言的优缺点以及适用场景,做到能够根据产品特点、交付周期、团队特点、性能等多方面考量下的语言和框架选型。同时,关系型数据库之外,开始接触和了解热门的Redis、MongoDB等NoSQL数据库,了解不同的数据库的优缺点和使用场景。另外,读优秀的代码!读优秀的代码!读优秀的代码!至少你得读过两个比较热门的MVC的框架源码吧?“好奇”驱动,我和我的团队常常说的一句话就是,代码里所有你觉得比较“神奇”的地方,都值得你通过阅读源码把神奇的魔法挖出来。例如,一个请求的URL如何映射到你的action上?映射到你action上的context是如何被创建出来的?有一些工具方法不经过初始化、不需要引用你就能直接用?当你靠“脑补”不能补上这块空白的时候,你需要挖进去,直到下次看到类似的神奇你脑补就能想明白。

- 个人能力的全面发展。开始扛起项目组里的攻关大旗,着手解决一些别人棘手和不能解决的问题,“解决难题”才能拉开距离,这是加分题!(把项目做出来,其实是一件非常简单的事情,持续的维护和运维,才是一件非常困难的事情,个人的能力的深挖,也体现在这里)。另外,全面发展还体现在不断提高自己的沟通能力(沟通的闭环原则),可以参见我另一篇文章《和开发组长聊聊沟通》,可以带团队、以项目负责人的角色制定项目计划、执行项目计划并完成项目或者产品的交付。

这个阶段,持续1年还是5年还是更长,在我看来,决定因素不是智商,而是你到底为了获得这样的一技之长付出多少时间和汗水。如果,IT是你终身的职业,那么,榨干你智商之外的潜力,每个人需要付出的努力是一样的,你唯一需要决定的,是在刚毕业、精力旺盛的头几年就把自己的潜力挖掘出来,还是拉长战线用个十年八年?战线拉的越长,投入产出比一定越低,辛苦程度一定越来越高。如果到成家之前,你都达不到第一个点,那以后工作带给你的只有痛苦,任何新的技术的出现,对你带来的都只是痛苦。

这套理论或者说想法,我刚毕业的时候也不知道,也没人告诉我要多努力多努力。只是我觉得我比别人的起点低,同时也算比较幸运,在我最有精力和时间的时期,在工作、技术成长上付出了几乎全部的努力,来拉短这个差距:

- 读各种书籍:不管是在项目中用到哪种语言,几乎看完了相关语言的经典书目

- 看各种代码:项目里相关不相关的代码,通读;用到的开源代码,第一件事就是读完源码再动手使用

- 写各种代码:尝试的改进通读的代码,工作之外也练手了好多代码

阶段二:知识的结网积累

这个阶段,更像是人到中年,不能靠拼体力、拼“编程代码量”、拼时间来提高自己,而是漫漫长路上,练就内功大法。在我看来,主要包括两个方面的修炼:

- 抓住机会拓宽自己的视角(扩大知识面)。机会可能是你接下来几年参与或者主导的项目以及积累的项目经验,也和你工作之外自己的努力有关。参与不同的项目、接触不同的客户,对一个人的影响和改变,“经验”只是其中一个很小的方面,更大的影响则是你看问题的视角。不同的项目了解不同的行业,把工作、项目、产品做到自己能力的至高点,成为某个行业的专家(达到力所能及的高度);接触不同的客户,和不同风格的客户合作、沟通交流,做到从容面对和善的、虚伪的、蛮不讲理等等各色客户,学会站在客户的角度思考问题、讲客户听得懂的语言、上下管理好客户的预期;开始意识到团队的重要性(你真的懂团队吗?),能够架构团队结构、成员的成长,带出产品或者项目的同时,能带出一个能打硬仗的队伍。知识的广度延伸,是一个缓慢的过程,工作中不懂技术万万不能,但是只懂技术也万万不能,而技术之外的领域,对技术人员来说,学好学精,也是最困难的地方。

- 个人的持续学习(持续深挖)。冰冻三尺,非一日之寒。这个阶段,对大部分人来说,是最难的一个阶段,难在很多人会放弃(反正我可以应付日常的工作,满足带来的止步),很容易迷惘和浮躁(我还想学,但是每天看看看的,都是自己会的,那些不知道的对我的工作也没啥用处)。而正确的改变自己的认知(抓住机遇、正确的对待自己的努力),是突破这个阶段的前提。知识的积累,一开始就像在储备知识这个网状结构的节点。每一个知识碎片,都可以是这张网上的一个节点;而且很多节点在一开始的时候,你自己也搞不清楚到底有用还是没用,更搞不清楚节点之间的联系。就像如果你的脑子里只有两个点,没关就是没关,你也连不上,但是当我们把这个结构无限的放大,节点多到一定程度,很多知识相互连接,就是一件很自然的事情。

- 社交以及朋(战)友。找到你的战友,在你孤独的时候、迷惘的时候,有陪你喝酒吹水的人。也所谓三人行必有我师,很感谢这么多年,我身边的这些朋友,亦师亦友,让我学到的远远大于我自己的能力所获取之外。

所以,我个人的经验:

- 如果你有非常明确的努力方向,那么脚踏实地,坚持不懈。有进步,那是正常的,如果你感觉不到进度,那也是正常的。切勿把自己放到一个结果导向的思维定式里。

- 如果你没有明确的目标和努力方向,但是你要认识到一点,至少你有看家本领,你要做的就是把自己该做的事情做好就够了,目标只是你不知道,其实“天知道”^_^.

We are always putting ourself into the perceived world, break it!

有时候我也把这种方法,叫做“自我麻痹”。当你发现自己难有突破的时候,你要么找别人“麻痹”你自己,要么你找到一种合理的观念自己“麻痹”自己。很多时候,没人告诉我到底该怎么来做,我需要自己给自己一点信念,不断的用那个还有点激情、还有点梦想的我去打败那个满足、懒散、浮躁的我。

仔细想想,你是不是也有两个我?当你用一个我打败另一个我的时候,要么你进入的第三个阶段,要么你退回到第一个阶段。

阶段三:知识的沉淀升级

胜利即升华。

这个阶段,是蜕变成“大神”的开始,是用知识创造知识的量变到质变的过程:

- 构造模型,用“已知”加速掌握“未知”。我们经常谈,谁谁谁学习能力比较强。什么叫“学习能力”?就是谁能快速的用自己的旧知识来掌握新知识、未知的知识!怎么做到?思考(对重复性业务的抽象和未来业务拓展的前瞻,强调过去的经验和对行业的预见)-》找到规律规则,也即模型-》应用模型规则-》改善。杂乱无章的东西,不符合人的认知,只有从杂乱无章的事物里找到规律,才能被人的认知体系所接受。找规律的过程,就是建模的过程。几个例子。技术人员经常讲(喷) “这个语法是抄的哪门语言的”。什么意思?因为你的认知体系里已经有一个语法的模型,所以你在用你已有的语法模型去认识新的语言里的语法模型。我们要学一门新的编程语言,学什么东西?“哎呀,我在熟悉的那门语言里是这么写控制语句的,这门新语言是这么写的” “哎呀,我在熟悉的那门语言里是怎么定义类和函数的,这门新语言是这么定义的”。等你语言见多了,你就会有自己对语言的认知模型,然后你就会骂人:“这些创造语言的大牛都该去死;有毛病,用 function 用的好好的,你非要改成 func,或者改成def;我用花括号好好的,你非要改成冒号;我声明变量的时候,把变量类型放到前面,你非要改成写到后面。”... 如果你这么想,而不是“PHP是世界上最好的语言”,恭喜你,你已经开始有了自己认知的模型,然后你会抽象出这样一个模型:编程语言其实是按照编程语言创始人的理(喜)论(好)定义好让你写字的规则而已;所以学习新的语言,就是了解一下别人定义的规则,没有好坏对错,我们都是牛人的“跟屁虫”而已。等你代码写更多之后,你会这样来认知新语言:了解一下语法规则;看一下框架;熟悉一下生态(libs是不是足够过,应用场景都有啥,你熟悉的工具在这个生态下有没有类似的替代)。所有这些放在一起,才是你做技术选型的依据。再举一个例子,开发框架,给你一个新的开发框架,你需要了解啥?这个“需要了解啥”的定义,就是你认识编程框架的模型:路由机制是啥样的;模板机制是啥样的;插件扩展性体现在下;工具集有哪些;性能考量和开发效率考量有哪些。你可以按照同样的方式和方法去认识TCP/IP协议:特定场景(Context)下对0和1的解释。有了这个认知模型,你学习TCP/IP其实就是在学:有多少种context,在每种context下每个位上0和1代表了什么意思。这同时也是性能优化的关键。再比如,按照这个思路应用到编程之外,和客户合作的协议是什么?是基于信任与关系模型下的win-win。

- 微创新,对已知的归纳总结、打磨升级。当你开始寻找规律、构建模型之后,接下来要锻炼的就是,用这个规律和模型去不断的认识新的知识,然后在认识了新的知识之后,返回去改进或者完善你的认知模型。

- 最后,你会掌握了用自己的视角认知这个世界的方法。别人告诉你的世界都是假的,你从书上学到的知识也都是假的,只有你掌握了自己的认知方法,用自己的方法去认识这个世界,知识才为你所用。我一直用一种简单的“协议模型”来理解和认识工作、社会以及世界。别笑我年纪轻轻,敢谈认识世界,也许明天醒来,我就会鄙视我渺小的看法,但是,在这个时刻,我有自己对世界的认知模型。两年前我给团队做过一场“万物皆协议”的培训,那个时候,更多的关注技术中的协议,现在经过两年的改善,也许下次可以分享一下我脑子里的新的“万物皆协议”的理论了^_^

好不容易经历了三个阶段,以为自己成神了,其实,年轻人,你还是太年轻,醒醒:

?

永无止境,靠眼忘不到高度,靠的仅仅是你的想象力!

时间: 2024-10-19 00:26:40

个人成长阶段的相关文章

细说高级程序员的几个成长阶段

转发自:http://chuansong.me/n/1522918 软件开发是一个奇怪的行业,市场远远供不应求.这是一个已经存在多年的问题,而且随着时间的流逝,愈演愈烈. 我们严重缺乏能够满足需求的人才.这个行业相当年轻.大多数软件项目是失败的.几乎所有的项目都会超出预算.我们解决问题的最佳指导方针可以归结为——“用一些通用方法去解决问题,当然这些方法常常不管用,于是,唯一能做的就是不断地尝试,逐个看看是否奏效”. 现在我们把淫浸代码时间超过3年的开发人员称为“高级开发人员”.这些人通常把持领导

主要针对Oracle DBA在成长阶段的定位

主要针对Oracle DBA在成长阶段的定位,学习方法等几大方面进行了经典的论述,详细内容请参考下文. 一.定位 Oracle分两大块,一块是开发,一块是管理.开发主要是写写存储过程.触发器什么的,还有就是用Oracle的Develop工具做form.有点类似于程序员,需要有较强的逻辑思维和创造能力,个人觉得会比较辛苦,是青春饭J; 管理则需要对oracle数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维,责任较大,因为一个小的失误就会down掉整个数据库,相对前者来说,后者更看重经验.

软件开发人员的成长阶段

初级程序员 中级程序员 高级程序员 高级开发人员悉知自己的长处和短处,力争尽可能地扬长避短. 高级开发人员深知理论联系实际的重要.他们明白,世上没有所谓的构建软件的“正确方式”,建立良好软件的唯一途径是要将理论适应客户.代码库.团队.工具和组织的需求. 高级开发人员理解并权衡领域涉及的一切,同时会思考如何去支持设计模式.库.框架和流程. 高级开发人员不仅仅了解自我,还知晓组织和客户的工作方式和价值观,以及对于组织和客户而言成功相关的重要和不重要的因素.一旦出现问题,高级开发人员会想方设法地去解决

你公司的企业移动化停留在哪个阶段?一起来测一下吧

企业转型移动互联网,已经不是什么新鲜事了.但是,有的人以为用上移动OA,企业就移动互联网化了,殊不知,别人家的企业已经将移动平台的作用发挥得淋漓尽致,那么,什么才是企业移动化?企业移动化又经历了哪些发展阶段? 下面,小编带领大家回顾一下,大家可以各自测试下,看看你们公司的移动化,都停留在哪个阶段. 1.简单应用的起步阶段 2004年,以塞班系统为代表的智能操作系统开始兴起,企业通过移动WAP网站.Java小程序实现简单的移动化.由于2G移动通信网络数据承载能力.设备软硬件水平和其他无线网络接入技

产品所处的不同阶段:产品经理该怎么做

一个产品健康的成长之路就是在其所属的不同阶段陆续增加不同的功能,反之,很容易在产品上线之后得不到预想的结果,也就是步子大了容易扯着Dan.针对产品的某个功能,首先应该分析产品所处的阶段,是1.0阶段.2.0阶段.3.0阶段.这里推荐一篇很赞的简文:(不同阶段的产品中:产品经理该怎么做    作者:灯芯笼  发布:2015.01.10 02:33)产品在不同阶段该考虑的功能及用户是不同的,所谓的1.0阶段,就是产品从0-1的过程,此阶段主要是确定并验证用户的需求,让用户快速了解产品,因此该阶段应该

汇道科技:经历这五个学习阶段 成为Java技术大牛妥妥的!

互联网大数据时代飞速发展,IT行业的薪资待遇水涨船高,不少人都心生羡慕,纷纷选择向IT行业进军,其中特别活得就是JAVA大军,每年都有数以万计的各行各业的人转行学习JAVA,那么,一个零基础的人要怎么学习JAVA蜕变成技术大牛呢?我们看看汇道科技JAVA技术总监怎么说. 学习JAVA要分阶段学习,不同资历的人要根据本身实际情况去学习,主要分为这几个阶段: 第一阶段:基础阶段(Java基础) 你将要在这个阶段学会的技能: 软件行业信息了解. java的魅力和安装. 变量. 常量. 算术. 关系.

跨越:迈过成长阶梯的断层

在旧文<程序员的成长阶梯和级别定义>中定义了一个程序员的成长阶梯,大概有下面几个阶段: 初级 中级 高级 资深 专家 很遗憾,当时到了专家这个阶段,我就没法给出很明确的答案了.只说了,职业成长就像爬楼,每一个级别就像一个楼层.但到了一定阶段(每个人的阶段不会一样)会发现上面似乎还有几层但却看不见下一层的楼梯了. 这就是本文想探讨的,关于成长阶梯的断层. 定义 因为之前我已经走到了资深阶段,并停留了一段时间,所以我的断层出现在从资深到专家之间. 旧文中,我用一种模糊怀疑的语气表达过关于专家的定义

程序员的成长法则与进阶攻略

一直想对过去职业生涯的成长路线做一个总结性思考,并沉淀为一部作品,今天终于完成了. 1 从毕业到今天,在程序这条道路上已经走了十多年了,前期在金融.电信行业写写程序,最近七年在互联网行业从事电商应用相关系统的技术工作,也一路从程序员成长为了一名架构师. 今天这个时代,对于程序员来说是一个特别幸运的时代.每一个有追求的程序员都希望能获得快速的成长,但成长的道路没那么平坦和舒适,一路上充满了崎岖.障碍和迷雾. 同样,在我成长的道路上,我也走过很多弯路,这一路上我也有过迷茫,有过困惑. 如今,经历了这

《构建之法》学习(5)——团队和流程

<构建之法>学习(5)--团队和流程 1.非团队和团队   团队共同的特点: 团队有一致的集体目标,团队要一起完成这目标 团队成员有各自的分工,互相依赖合作,共同完成任务 2.软件团队的模式       一窝蜂模式       主治医师模式 有首席程序员,他/她负责处理主要模块的设计和编码,其他成员从各种角度支持他/她的工作.       明星模式 主治医师模式运用到极点,可以蜕化为明星模式,在这里,明星的光芒盖过了团队其他人的总和.       社区模式 社区由很多志愿者参与,每个人参与自己