IT瓶颈

作者: ve追风_685b | 来源:发表于2018-04-11 14:38 被阅读0次

以下文章转载自知乎,暗灭-京华九月秋近寒,浮沉半生影长单.

暗灭

京华九月秋近寒,浮沉半生影长单

123 人赞同了该回答

作者:暗灭

链接:https://www.zhihu.com/question/55101110/answer/142661828

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

前言

这是IT修真院自问自答系列第十五篇,同样是干货和硬广混杂。

一 程序员的困惑

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

小丁丁在论坛时代的修真院,就已经是比较出名的了,他的学号是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个月  抽象梳理问题,寻找解决方案,参加其他人解决问题的思路,给出自己解决方式的阶段。

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

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

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

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

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

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

        技能树.IT修真院

        “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

        这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

我的邀请码:17742750,或者你可以直接点击此链接:http://www.jnshu.com/login/1/17742750

相关文章

  • 职场瓶颈如何突破

    有很多种职场瓶颈,薪水瓶颈,人际关系瓶颈,能力提升瓶颈,业绩瓶颈,转型求职瓶颈等。其实这些总结起来就是对现状不满,...

  • 瓶颈啊瓶颈

    今天忙碌了一天,感觉很疲惫,什么也不想写。本来要做的课件也没有状态做。 本来工作挺充实的一天,完成了两个客户方案对...

  • linux 下查看性能状态命令

    解决问题: 性能优化,首先分析是由于哪些瓶颈造成的性能低下, 如 cpu 瓶颈,内存瓶颈,io瓶颈, 或者程序本身...

  • 性能分析定位方法

    CPU瓶颈内存瓶颈IO瓶颈 一、CPU瓶颈 系统cpu使用率:利用率高可以关注IO是否有非空闲等待(iostat)...

  • linux性能分析小技巧

    分析系统瓶颈系统响应变慢,首先得定位大致的问题出在哪里,是IO瓶颈、CPU瓶颈、内存瓶颈还是程序导致的系统问题; ...

  • 觉醒者(二百一十三)

    写作瓶颈其实就是心理瓶颈,找到并且排除内心的障碍,瓶颈就被突破了,然后一帆风顺。 只要有“自我”,瓶颈就依然存在。...

  • 瓶颈是制约,评估是分析

    四词故事:瓶颈、深度、评估、认识。 瓶颈是制约,深度要吃透,评估是分析,认识是反思。 瓶颈是制约 瓶颈一般是指在整...

  • 瓶颈是制约,评估是分析

    四词故事:瓶颈、深度、评估、认识。 瓶颈是制约,深度要吃透,评估是分析,认识是反思。 瓶颈是制约 瓶颈一般是指在整...

  • 奔跑的人生

    每个人都有能力上的瓶颈,学习实践可以突破瓶颈,但是当你遇到无法突破的瓶颈时,你会怎么选择呢。 无法突破的瓶颈,可能...

  • 瓶颈

    我想,我是遇到瓶颈了,有多少年不曾遭遇了,我不知道我能否扛过去。我不希望改变现在我已有的行文习惯,我喜欢散文...

网友评论

      本文标题:IT瓶颈

      本文链接:https://www.haomeiwen.com/subject/eaaahftx.html