以前在公众号里有个读者给我留言:html
请教个问题,公司高职级和初中级,都是写业务代码,那么高职级的价值在哪里呢?前端
因为公众号回复留言的限制,当时我就简单的回复了以下的几个点:vue
还有不少不少,初级工程师和高级工程师差距不只仅是代码质量上,并且其余能力上,解决问题的能力,抽象问题的能力!程序员
今天有时间,想详细的跟你们谈谈我所遇到的、见到的厉害的程序员,一样是写业务代码,为何会比初级程序员拿的工资高?web
通常人可能拿到需求,就开始写代码了,写着写着因为页面功能愈来愈多,感受代码愈来愈复杂,本身都会以为难以维护了。npm
我拿我本身举个例子,以前有一次我写完一个页面以后,而后给另一个同事(能够理解为高级程序员)让他帮我 Review 代码,看到个人代码以后就以为这个写得不对呀,怎么会这么去设计呢?小程序
而后他给我理了下整个页面应该如何去设计,一个页面分为哪些块,有哪些事件,每一个事件应该 dispatch
哪些 action
,而后整个模块有哪些数据放在 store
里,哪些模块放在 state
里,当时反正听他理完以后,感受本身写的代码真的很垃圾,而后花了两天时间把上周写的代码重写了一边。后端
注意,这里是重写,不是重构,重构是对软件内部结构的一种调转,目的是不改变软件可观察行为的前提下,提升其可理解性,下降其修改为本。那么若是保证不改变软件可观察行为呢?就须要写测试用例,保证测试用例能跑通的状况下进行从新构造代码才是重构的第一步,没有测试用例的重构就是耍流氓。前端工程师
那么如何提升设计代码的能力呢?并发
我以为有一个方法对于提升设计代码的能力很是有帮助,那就是采用 TDD(测试驱动开发)。
TDD 的原理是在开发功能代码以前,先编写单元测试用例代码,测试代码肯定须要编写什么产品代码。 --来源百度百科
为何 TDD 会提升设计代码的能力呢?能够看到 TDD 的原理是要在写代码以前就要写测试用例,在写测试用例的时候你必然得去思考你的每一个函数,每一个模块,每一个组件应该如何去设计才能使得易于测试,每每易于测试的代码都比较好维护。
这就能够达到在写代码以前先去设计代码,而后才写代码,也就是先思考,后行动。
我只是说 TDD 能够提升设计代码的能力,并无说我就特别提倡 TDD,说 TDD 很麻烦,难以实施的人就不要跟我讨论了。
咱们要知道,技术是为业务服务的,没有业务谈技术的好坏都是瞎扯淡!
经常能够看到不少实习生,或者刚来的应届生会吐槽之前的老代码用的框架老,用的技术旧,而后就去改为新的,本身以为牛逼的,而后没有多个环境测试,发上线就挂了,这种例子不少不少,别说咱们公司,就连咱们组都出现过好几回这样的状况了。
这种就是只考虑技术问题的,而没有去考虑为何之前前人要这么写,前人没有用这些东西,难道仅仅是由于那个时候没有新东西,或者说认为前人比你差。
极可能就是他们考虑到了业务上的需求,好比要兼容 IE、或者好比考虑到了有不少用户用 iOS,Safari 不支持 webp ,或者好比考虑到不少用户是低端机,性能很差,不能用一些新特性等等问题。
对于老板来讲,他根本无论你用什么新技术,新特性,也许你用了新特性确实让代码更简洁了,可是,可是,可是,发到线上挂了,那么你写的东西就是垃圾,连最基础的稳定性都保证不了,更别说流畅性,高并发。
常常看到不少初级工程师就是,无论产品、运营甚至后端提出一些需求,他也很友好,只要是需求,他都接,而后成天忙忙碌碌,还常常加班,可是实际上,不少需求作了没有什么价值,也许还有些是重复工做,还把本身搞得很辛苦,这种状况真的不少不少。
而后还有一种状况是有一个产品需求来了,而后 balabala 一顿需求讨论以后,产品给出一个期限,初级工程师满打满算,可能能完成,而后就说能行,结果要么对本身能力估算错误,要么不少突发状况,而后不能按时上线。
而高级工程师基本上不会出现不能按时上线的状况,我思考了几点缘由:
这里我想要表达,不是全部的需求都是有必要的,不要每一个需求都去接。
那么若是来判断一个需求是否应该接呢?
我以为主要是去思考他背后的价值,为何要作这个东西,作了能达到什么样的效果,若是产品说不出来价值,或者说产生的价值与你花费的时间不匹配,那么这个需求就是有待商讨的。
不少初级工程师可能昨晚一个项目就完了,还以为很 OK 呀,而后也把在项目中的问题一个一个的解决了,按时按量的完成了任务。
对,这就是初级工程师的标准,能完成一个项目。
那么对于高级工程师除了完成项目还会作什么呢?
也许会封装几个公用组件发到 npm 上你们均可以用。
也许会整理一个脚手架出来你们用,好比之前公司没有用 TS,那么用 TS 写完项目以后,踩了不少坑,你就能够整理出一个脚手架,而后把踩得坑记录下来,方便后面想用 TS 的人用。
也许发现前端工程师还原 UI 搞是一件枯燥无味,并且没有技术含量的事儿,我司有个大佬就写了一个 UI2Code 的工具,能够将 Sketch 文件转化为 html 代码。
也许高级工程师发现一上线一个功能,小程序和 H5 都要写一套如出一辙的,而后我司大佬就写了一个能够将 vue 代码转换为小程序的框架,一套 vue 代码,h5 和小程序都能用。
这些都是我身边的例子,能够看到高级工程师常常解决的不是一个问题,而是解决一类通用的问题,而后给出解决方案,而且得以实施,历来不会认为吧项目作完了就完了,没有一点产出,也许你作这个项目是对本身太大的帮助,成长的。
而后我在知乎上看到了一个初级程序员常常犯的错误集锦,我以为很是你们均可以看看,本身有没有这些毛病。
1 命名不规范
2 日志不规范
3 拒绝写接口和假数据
4 不写单元测试
5 盲目集成
6 逻辑不清
7 不作方案
8 不关注性能
9 惧怕重构
10 作出来就好,不考虑优雅的方案
11 不考虑将来需求的变化
12 遇到问题的时候不会试错
13 不会写伪代码
14 不作数据量的预估
15 提交代码不规范
16 不喜欢打Tag
17 不遵照发布流程
18 不知道Bug修复的优先级
19 总喜欢手动修改线上代码
20 不作数据备份
21 不作自测
22 不尽力模仿真实数据,测试数据很随意
23 不抽取公共代码
24 不认真听需求讲解
25 不看验收标准
26 不主动推动项目进度
27 遇到难题不主动反馈
做者:暗灭连接:www.zhihu.com/question/33…
初级程序员主要是体如今目光短浅,缺少思考,作完东西没有成果,不积极主动。
而高级程序员不只仅是代码写得好,写得快,确实思考得更长远,作的东西更有用。
我列举我身边所遇到的高级程序员所作的事,我以为更有说服力,不是空谈大道理,都是我从身边的大佬们身上学到的,但愿能给刚入职场,或者感受本身是个初级程序员的程序员们一些警戒。
固然,上面所说的高级工程师所拥有的优势和初级工程师的缺点,都不是全部高级工程师都会有全部的这些优势,也不是全部的初级工程师都具备这些缺点,这是没办法进行定量的。
大家身边还遇到什么高级工程师的特色,或者初级工程师的缺点,欢迎在评论区里面留言。
最后欢迎你们关注个人公众号「前端桃园」