【转】是不是程序员总会遇到一个瓶颈期,觉得自己没有进步了,该怎么解决?

一 程序员的困惑

第一个跟我说这个的是小丁丁。

小丁丁在论坛时代的修真院,就已经是比较出名的了,他的学号是016。

在线上自学的时候会用Flex布局,还会做Gif动画。

当他说要来线下学习的时候,算是我第一个比较期待的人。

是的,那个时候我每天都会看他们的日报。

后来小丁丁成了修真院的睡袋师兄,几乎所有的线下师弟,在修真院打地铺的时候,都会找小丁丁买睡袋。

他也确实成长的很快,很快就可以独立完成一个项目了。

这很不容易,特别是在修真院的教学体系还不完善的时候。然后我把呆萌奎和小丁丁都留了下来,他们算是公司的第一批从学员转过来的正式员工。

可是没多久,小丁丁跟我讲,他想离职。

我说过,如果在工作中遇到任何问题,都可以跟我谈,可是如果你一旦说出来离职这两个字,就绝对不会开口挽留。

可还是简单问了问。小丁丁说,他已经有两个多月没觉得自己有进步了。

总是在做重复的东西,除了自己的代码更熟练之外。

而且,修真院一直都很苦,几乎是没日没夜,熬几个通宵的事很正常。

而我的脾气也不好,经常把他们骂的狗血喷头。

当然薪水也不高,任何一个人从修真院出去,薪水翻倍还算是比较正常的。

小丁丁那个时候,算是刚入行4个月,还是6个月,我不记得了。

那个时候我其实是还是比较BS说做项目代码没进步的。

我自己写了很多很多代码,最喜欢的其实往往就是不断的重构代码,不断的提升自己的效率。

如果我觉得我在反复的做一件事,那么我就会想办法让这件事变的高效一些,所以这几年写了很多代码生成的东西,尽可能的让自己的时间和精力用在架构设计,重构和测试上。

我觉得小丁丁根本没理解什么叫代码。

可是小丁丁自己很纠结,他本打算是一直跟着我的。

是的,我其实也打算是带着小丁丁一起飞的。可是我不喜欢纠结的人,所以我说。没事儿,我帮你推荐工作。

于是帮他介绍到了一个朋友的公司,那边面试完之后,给出的薪水是12K。

对的,修真院就是这么一种尴尬的境界。当时宸宝的薪水才3K,可是他带出来的学员,3个月出门,就可以拿到8-12K了。

小丁丁也不开心,对他来讲,也是一样的。

一边是工作压力大,一边是薪水拿的低,一边是明显不如自己的人,可以拿到更好的薪水,而自己又没有了进步。

所以小丁丁很困惑。

他收到offer之后,说要请我吃饺子。

于是半夜12点多,公司楼下,我们在十字路口的大街上路边小摊要了两份饺子。

小丁丁第一句话就是:老大,他们给我Offer了。

第二句话就是:可是我舍不得你。

然后就是哭。

我笑。说:哭毛线啊?找到份12K的薪水不挺好么。

第三句话,他说:老大,我不走了。你让我再留下来吧。

我说:好。可是我得跟我的朋友解释清楚,不然以后我没法做人了。还有。没有第二次了。

小丁丁说好。

于是我又给朋友打电话,果然,被朋友骂的狗血喷头。

可是没过两个月,小丁丁还是决定走。

于是我又给他推荐了另一家朋友的公司,那边也比较喜欢小丁丁,还是愿意给他12K。

小丁丁又拒绝了。

直到第三次,我实在忍不了,跟小丁丁说:赶紧滚。

这次没给他推荐工作,他自己找到了一家公司。薪水是10K还是12K,我不记得了。

但是总算是平定下来了。

可是我记得很清楚,这是第一次有人跟我说,觉得自己没进步,遇到了瓶颈。

大概之前也有过,可是那基本上都是工作三到五年的,想要我指点一下接下来怎么走。

我还从没遇到刚刚工作4个多月和小半年就觉得有瓶颈的。

后来,呆萌奎也这么跟我说。

跟着是古尘,刚刚又是宸宝。

我想了很久,觉得还是有必要再理一理思路,试着去总结一下,一个程序员,什么时候会遇到瓶颈期,又该怎么去渡过。

特别是在做项目代码的时候,会不会觉得自己没有收获。

毕竟,我是见过有些人,不喜欢做项目,做事总是能推就推,就喜欢看书看源码提升自己的技术实力的。

二 程序员的分级

之前讲过程序员的分级。分成了自己独立完成项目,这个叫初级程序员。

能带Team完成项目,并且能够了解项目框架中的源码,思想,能够做一些改进,这个叫做中级程序员。

能独立写框架,写算法,这个叫做高级程序员。

我觉得这三种就够了。高级程序员全世界也就那么几个,初级程序员也好衡量,不是高级也不是初级的,就是中级。

没必要再分。

这种分法第一次出现在知乎的时候,就被一些人嘲讽,这也是符合知乎价值观的事儿。

先不谈这个话题,只说小丁丁,宸宝,古尘,呆萌奎,这几个工作不到一年的小菜鸡的瓶颈从哪来。

在他们刚入行的时候,确实进步很快,因为每天都在学新的东西。

我看到之前有人在我的贴子里反复的跟我说:老大求更新。

我都默默的说一句,更新个毛线呢,早就写到修真院的官网上去了。

所以实际上,以WEB工程师为例,他们大概会花3~5周的时候去学习CSS,包括自适应,响应式,Bootstrap和Less,以及Html5和CSS3的一些东西。

这里的学,并不仅仅是学,而是指他们真的可以写出来代码。

所以在这段时间里,每天都会感觉到进步,因为每天都会学习到新的技能点。

这些技能点也是整理在修真院的技能树中。

跟着会花6~8周,或者是更长的时候去学习JS。

这包括原生JS,JQuery,AngularJS。我没再要求他们学RequireJS和GruntJS。

或者是其他的React。会AngularJS就够了,其他的必须要在他们工作中去使用了。

所以在这段时间里,他们也是在每天都学会新的东西,而且总会有新鲜感。

前3个月或者是4个月,基本上都是这样。

这个时候,也会有人遇到困难,但是大多数都是没长进,而不是没什么东西可以学。

显然 ,小丁丁他们不是这样的,他们是没有东西可以学了,不知道自己要学什么,总觉得自己只是熟练度上升,而不是深度有所增加。

所以可以简单的理解为,对WEB工程师来说,前3~4个月,都属于新手技能学习阶段。

那么接下来呢?

首先,并不是没有东西可以学了。WEB永远不缺新鲜的框架,也不缺少对于框架底层的理解,而是到了一个必须把自己学会的东西沉淀和积累的过程。

你到了一个学有所成,必须要动手反复做项目的时候了。

这个时候的重点是什么?

是业务知识的积累,编码规范的积累,最佳实践的积累,开发流程的积累。

而这些,有谁一开始就意识到,对于一个出色的工程师来讲,以上四个方面都是非常非常重要的技能点呢?

比如说,业务知识,现在的趋势是越来越偏于行业的融合。有几个有明显行业特征的,像金融,医疗,汽车,财务,电信。这些没有业务知识是很难写代码的,写出来的也只是一堆又一堆无意义的垃圾。

再比如说,支付,IM,地图,第三方登录分享,微信公众号,微信小程序。这些同样是没有太多技术含量,但是你必须要去理解的。

除些之外还有更多通用的设计,表单验证,图形验证码,文件上传,语音播放等等等等。而这些很难会给人一种深度的体会,更多的时候像是堆积在一块儿。

困惑也会来自于此。做一个项目,少于也要2周,大点的,可能要2个月,做3~4个项目下来,一年就已经过去了。

算起来,是不是自己除了业务知识熟悉了点,开源框架多用了点,其实没有什么长进的?

可是你们不知道,业务知识和业务逻辑,也是程序员的重要技能之一。同样的没有速成,只有入了一个行业,才会真正的感受一个行业。

再说第二个,编码规范。晓进已经工作2年多了,之前跟她说的很多东西,她到现在才慢慢的理解,比如说,数字要换成常量。很多时候当我们说起来的时候,大家都懂,可是自己写的时候,还是会忘。

这个不是真懂,这是看起来懂了。什么时候才会懂?真正吃过亏的时候。晓进最近在接手一丁写的代码,要么就是培宇写的,反正当看到>=1这种代码的时候,真的是一脸蒙逼,对,不要想着有太多注释,连常量都懒得替换的人,怎么可能会有注释。

而且 注释 又怎么样?代码更新了,注释 没更新的时候多了去了。反而是增加了更多的文档不一致而已。

然后晓进才真正懂的用常量来代替数字的含义。

这些道理前人总结过了很多次,可是有些坑你不去踩,是真的不会理解的。

特别是对后端而言的日志规范。

这些没有大量的项目做支持,你是不会感同身受。而有时候,写代码,就在于这种小的细节。

第三个是最佳实践。

说起最佳实践,这些东西没有半年到一年的时间是没办法理会的。

怎么说,没有持续的维护一个项目,很难理解自己的代码倒底是怎么样的。

没有需求变更,没有代码交接,根本不会知道什么是正确的代码。

实现一个功能有很多种方式,很多人仅仅会聚焦在源码,框架,算法,语法上,可是更多的时候你都是在写一个可持续维护的系统 。

我现在跟他们说,怎么样才是一个好系统 ?并不是仅仅是说,我给你一个需求,你花了半个小时做完才是好系统,而是要看需求变动后,要花多少时间才能完成。

如果你能又快又好的完成一个系统,又可以在需求变动后很快的完成,这是一个设计良好的体系,而且非常注重和业务的结合,在系统设计的时候必须合理的去预测哪些需求是有可能变化的。

永远不要相信产品经理那张嘴。所谓的最付款实践就是这样,当你遇到问题的时候,当你遇到需求变更的时候,你的代码才会是真正的展现出来价值。

程序员工作的环境永远是在线上,很多人都有习惯,说我代码写好了,我提交到SVN上了。这算个毛线。

跟没做是一样的。

所以说,最佳实践也是需要大量的项目积累,特别是需要有一个长期的维护,没有一个持久的项目,很难理解什么才是最佳的实践。

我们每次CodeReview都在尽力将最佳实践整理出来。这个时间,我觉得至少也是需要半年到一年的巩固时间。

第四个是开发流程的积累。

开发流程其实是比工程师的能力更重要的事情,或者说,他是将一种松散的行为规范化的情况。

合理的开发流程都并非是人为设定,而是遇到了各种实际的问题,从解决问题的角度出发而给出的方案,并且是不断的修订中完善的。

我写代码这么多年,感受最深的其实就是开发流程。修真院这家公司,在前一年半,我都没敢提流程这件事,因为大家都太菜了,菜到根本就没办法按流程去走的地步。整整一年半的时候我都是用放养的方式去做,所以流程最核心的概念是为了提高效率,避免问题。而不是人为的束缚,很多工程师其实是不太理解这个的,也比较难看到价值。

最近差不多半年多,都在教他们怎么遵守流程,怎么去解决开发流程中遇到的问题。

太多坑不踩是不知道的了。

以上这四点,都是在初学者,从0基础到2年之内最容易遇到的问题。在这个时间阶段,你可有会觉得自己并没有学会什么新技术,只是在做重复的劳动,甚至会有一些疲惫。也会想要去认真把一门技术学深,却总觉得没有时间。

这也是我在最近一段时间里经常会听他们讲到的。

我和他们不同的就是,我从来不认为这是一个没有任何长进的过程,如上所述,我觉得这是在业务知识,编码规范,最佳实践,开发流程的积累。

如果你自己发现以上这四点也没有任何的进步,那才可能是真正的出了问题。

很多时候,你学习一门知识可能只需要几个小时,把它用好却可能需要10年。

与此同时,还包括解决问题的能力,学习新技术的能力,都是在潜移默化的改变成。1万小时定律我没太具体了解是什么,也没仔细去推敲,但是大概的意思我猜测就是一个多练习的过程。

所以我自己其实是有点反感知乎上各种动不动就叫人看源码,谈算法的2B们,也懒得争执。

特别是这个问题下,又出来几个人蹦哒着说点老一套。

说起来没睡太好,写的有点乱,但是第二部分的重点就是在于提醒,觉得自己遇到瓶颈,没有长进的小伙伴,仔细分别一下自己倒底是属于哪种情况。我能百分百的确定说,如果你在业务知识,编码规范,最佳实践和开发流程上有进展,那么你并不是没有进步,而是你没有意识到他的价值。

所以什么时候才到了应该去看源码,去看更底层更核心的阶段呢?

解决问题。

但你遇到了一个问题,想想别人是怎么解决的。

先去自己猜想问题解决的思路是什么,然后再去看他源码实现。

所有的流行的开源框架都是为解决问题而生。

自己瞎折腾解决不了实际问题的框架也根本不会流行。

比如说Bootstrap是为什么存在?

Https是为了什么出现?

WEBSocket又是怎么回事儿。

TCP的三次握手为什么要这么设定。

如果你在写代码的过程中,首先是看自己遇到的问题是什么。

大到设计模式,小到底层协议,先确定这是不是你会经常遇到的问题。

暂时抛开不是你当前最着急需要解决的问题,着重点放在最容易出现的问题上。

先去找解决方案,看看大家都是怎么解决的,有没有通用的解决问题的方案。

再看看这些通用的解决的问题的方案,是否适应你的情况。

如果不是,应该怎么优化,怎么改进。

这才是顺理成章的去读源码的步骤。

那些什么问题都没遇到,就动不动去谈看了多少源码,看了多少书的,倒底是为了学知识还是为了装逼还是为了给自己加谈资?

我也很不喜欢面试官在面试的时候装逼的。以前经常有人问看过JDK的源码没,看过Spring的源码没,我就经常在心里骂傻逼。如果你问我说,JDK的GC算法都有几种,适合什么场景,有没有可以再优化的空间,我会觉得很喜欢。

所有的技术都源自于解决实际的问题,甚至包括在实验室里写学术论文也一样。总是先去优化和改进一个具体的点,这样才有实际的意义。

所以当你真的是对技术感兴趣,是一个Geek,那么更应该去从解决实际的问题出发,想办法提升自己的效率和解决实际的问题。

当然,公司的环境和氛围会给你很大的帮助。但是所有的学习最是要从内心发起的吧?

最后整理一下,我给出来建议:

1:0~6个月 学习技能和术语和思维方式的阶段

2 :3~24个月 学习业务知识,编码规范,最佳实践,开发流程的阶段

3 :6~120个月 抽象梳理问题,寻找解决方案,参加其他人解决问题的思路,给出自己解决方式的阶段。

所以亲们,如果觉得自己没有像初学的时候进步那么快了,不要慌,你可能是在用一种方式前进。

当然更多的人,可能一开始就学了假语言,上了假知乎,自以为是一个真程序员。

这个回答依然是很主观,不负责。看到评论里有说为毛我正经回答的答案也靠后的,显然是被踩的多了啊。

但是没关系,早说过我没能力把所有的人都教会,我只愿意去教愿意听我话的人~

其实感觉还有很多东西没梳理出来,也是自己平常总结的太少。先这么着吧~~

有兴趣的话可以进群讨论

6群 200人 254078081(招募中)

转自知乎暗灭

本文转自it修真院自问自答第十五篇

时间: 2024-11-04 15:09:02

【转】是不是程序员总会遇到一个瓶颈期,觉得自己没有进步了,该怎么解决?的相关文章

Java程序员如何突破成长瓶颈期?

对工作1-3年的程序员来说,依据个人情况提前规划未来职业发展方向,这很重要.譬如,在未来3-5年甚至更久,工作要做到什么程度?往哪个方向发展?通过怎样的路径才能实现目标?如果沉浸在当下"程序员高薪"的论调中岁月静好,总归有一天会面临网上热议的"程序员中年危机",以至于最后不得不步入转行或提前退休的尴尬局面. 职业规划的重要性 人生和职场就像下象棋,你只有明确了目标才不会在每一步上迷茫,之所有迷茫,是因为不清楚自己最终想要什么,下一个阶段的目标在哪里? 我相信有很多的

程序员到底是一个什么职业?

为什么有人在技术造神 大家应该已经感受到,技术圈这两年已经和娱乐圈创业圈差不多的氛围了,这其实是有原因的. 最主要的原因是,创业公司和创业媒体越来越多,他们需要大量的程序员投身到创业这个高风险的行业中,而造神,正是让程序员们自动跳进火坑的绝佳办法.不是说程序员不能创业,我是说,创业媒体们故意模糊了创造和创业的界限,把程序员们的创造冲动偷换概念,鼓吹了太多不适合的人去创业. 另一个原因是,招聘成本高涨,CTO们为了能提升影响力,不得不频频出席各种大会刷脸.文笔好的再做做自媒体和技术社群,既能强化个

八问程序员-----总有一个适合你

先来张美图,缓解一下眼部疲劳,这是今天的天气,北京能有个这么好的天气真是很好啊,珍惜吧 1,为什么程序员中女生那么少? 说个我所经历的真实的案例: 我在一个开发群里回答过一个关于系统开发的问题,回答正确之后很多人说竟然是妹子,好厉害啊! 我默默的无语中........... 如果要是放在以前我上学期间,我一定回一句:女生怎么了?女生就应该比男生笨? 也正是因为你们想着女生肯定做不了程序员,在很大程度上导致了程序媛数量少的问题. 所以,如果想要程序员行业多点儿女生的话首先要摈弃这种毫无事实依据的想

大部分程序员心中有一个管理者的梦想,但在技术路线上"半路夭折"

当我们大学的时候还在为如何学好技术发愁的时候,那时的我们在内心深处"埋下了"一个小小的理想,我一定要学好技术,成为一个优秀的程序员.对于在IT行业摸爬滚打6年的我,想起以前的小小理想有些莫名的心酸和感动.看看周围正在前行的朋友和已经倒下的朋友,大家都在艰难的前行,至少大部分人已经脱离最初的想法,最终的想法转向了统一的话题"如何脱离技术,去做管理,因为钱多,发展好".其实这并不是不对,因为大家需要生活,需要养家糊口,这个是没有问题的.但是会带来一个现象就是全行业把做技

每个程序员都有一个孩子

不管你是菜鸟还是大牛,你都是程序员,每个程序员都有一个梦,写出一个完美的程序,让它在千千万万个手机上运行.但是往往事与愿违. 你是程序员,有好多人会问你,你搞程序的初衷是什么,我说是兴趣,他只会呵呵一笑(笑的有点阴森),以后别人再问我同样话,我直接会说,为了钱.他就会说,真庸俗.我也不会辩解什么,人家说的是事实.但是我会很负责任的告诉他,至少我在写程序的时候,就像是在呵护自己的孩子一样,呵护每一行代码.这就够了. ...

PHP程序员如何突破成长瓶颈

PHP因为简单而使用,但不能因为它的简单而限制我们成长!文章给PHP工程师突破成长瓶颈提了一些建议,希望PHPer能够突破自己,有更好的发展. AD: 作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题,我该如何突破自身的瓶颈,以便更好的发展呢? PHP工程师面临成长瓶颈 先明确这里所指的PHP工程师,是指主要以PHP进行Web系统的开发,没有使用其的语言工作过.工作经验大概在3~4年,普通的Web系统(百万

PHP程序员如何突破成长瓶颈(php开发三到四年)

作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题,我该如何突破自身的瓶颈,以便更好的发展呢? PHP工程师面临成长瓶颈 先明确这里所指的PHP工程师,是指主要以PHP进行Web系统的开发,没有使用其的语言工作过.工作经验大概在3~4年,普通的Web系统(百万级访问,千成级数据以内或业务逻辑不是特别复杂)开发起基本得心应手,没有什么问题.但他们会这样的物点: ◆除了PHP不使用其它的语言,可能会点shell

7. 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么?

银色子弹(英文:Silver Bullet),或者称“银弹”“银质子弹”,指由纯银质或镀银的子弹.在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人等超自然怪物的特效武器.后来银色子弹常被用做致命武器的代言词.被比喻为具有极端有效性的解决方法,作为杀手锏.最强杀招.王牌等的代称. IBM大型机之父佛瑞德·布鲁克斯(Frederick P. Brooks, Jr.)在1986年发表的一篇关于软件工程的经典论文,便以<没有银弹:软件工程的本质性与附属

漫谈程序员系列:一个老程序员的2014年终总结

人生天地之间,若白驹过隙,忽然而已.蓦然回首,头上似霜雪,脸上似山川.我的 2014 啊,你就这么毫无眷恋地离我而去了.既然往事已不可追,未来尚未到来,在这年末岁首的间隙,就让我来回忆一下余烟尚存的 2014 吧. 2014 年,对我而言,发生了很多事,不管怎样,我还是一个程序员,这是工作.生活,以及我自己,给我的标签.也许很快这个标签会泛黄.蝶化.零落成泥碾作尘,不过不论怎样,它是我青春的纪念,它仍将伴随着我继续前行. 坚持技术博客写作 看到这里,也许你笑了. 是啊,这一年我不务正业,虽然每周