前端开发程序员如何分配公司工作和个人技能的提升
重点:前端开发程序员如何分配公司工作和个人技能的提升
3个问题
下面是根据几个小伙伴给我发的一些问题,整理归类的;
- 公司的工作大部分都是处理业务逻辑,怎么提升代码能力
- 很多公司就三四个前端,甚至有的就1个前端,也没有比你更高级的同行帮你review代码,如何提升代码
- 忙的时候,公司崔进度,只能赶时间完成;空闲的时候,想去重构一些项目的时候,但是又不敢做!我们有哪些机会提高呢?
- 1是没有精力做,2个线上项目历史原因不能改;
- 改的好,没有功劳,万一改不好,又要被骂;
上面3个问题,我认为主要是表现;
真正的核心点是:如果在工作中解决问题并提升技能
https://www.zhihu.com/question/26961831
痛点一:平时都是写业务代码,如何提升代码能力
关于这个痛点,网上有很多人的观点是:无论工作多忙,每天都要抽2个小时出来看书,看技术文章,用来学习,这样每天都坚持2小时学习肯定会技术变好;
首先这个观点我不认为有什么错误,但是我认为:这个观点非常的不接地气,不能适合大多数人,可能很多实际工作中并不能2小时学习,如果一个建议,大多数人都用不了,可能就不是一个好办法;
比如今天项目比较忙,或者学习一半被打断;注意这种没有目的的学习,很容易分散精力,而且没有目标,学习的效率也很低!
下面是结合我自己的实际情况,一些认为有用的提升办法;可以参考参考!可以让你一边工作一边提升!
1.做之前先想好思路,然后再动手
不要着急写代码,拿到一个需求,先想想怎么去做;
如果需求有问题,或者需求有不明确的地方,找产品经理沟通下;
等你需求整理好了,实现的思路也想好了,然后再打开你的编辑器;
注意这时候打开编辑器,并不要立刻开始写代码,先按照刚才想的思路,把每一步的TODO都写好;
// 登录业务逻辑演示
// TODO 初始化
function init () {},
// TODO 用户输入过程中的处理逻辑
function userTyping () {},
// TODO 用户提交表单
function submitHandler () {},
// TODO 表单验证
function formValida () {},
// TODO 调取API发送给后台
function login () {},
// TODO 登录成功的逻辑
function loginSuccess () {}
然后再根据自己的写的TODO去填充;这样写出来的业务代码,因为是自己仔细考虑的情况下写的,不容易出BUG,而且方便后期维护;
一定不要上来就启动编辑器开始写代码,你一顿操作猛如虎,没有经过思考,可能写出来的代码并不是很好;
2.坚持重构自己每天写的代码
等业务代码写完以后,不要就去摸鱼了,如果你写完代码就摸鱼了,或者跑出去浪了,可能就没办法继续提升了;
做一个程序员,应该坚持重构自己每天写的代码;
(注意:如果是一个大项目,不是自己从最开始慢慢循序渐进写出来的,尽量不要去整体重构;而是从自己每天写的代码开始着手,慢慢的只重构自己写的代码;)
通过重构自己每天写的代码,会使你的项目更容易维护,这种重构无论开展业务还是提高自己都是很好的。
如果你自己不坚持重构,以后产品频繁迭代,你的代码越来越臃肿;可能有一天,产品经理增加的需求,你自己都抱着破罐子破摔的心理写代码了;那时候你的心态可能是"又不是不能用",那就悲剧啦!!!这种就是恶性循环;
而且同事们又会感觉『你这个家伙怎么写的代码这么多BUG』,这时候你升职加薪的机会都渺茫了;
如果前期没有养成每天重构自己代码的习惯,后期很容易导致你自己都不敢重构自己代码了;
所以重构是一个循序渐进的过程,强者越来越强,弱者越来越弱!
如果你坚持重构,你写的项目会越来越稳健,你的技术思路和角度也会越来成熟;反之你很容易越来越完蛋,在一家公司坐的感觉产品经理是傻X,老改需求,做不下去就频繁跳槽;
我们静下心来想想:不经过频繁迭代出来的互联网产品能是一款好的产品么?所有产品迭代是很正常,所有公司都会遇到!而且互联网产品的优点就是可以快速迭代!
包括最典型的,等完全开发完再发布的windows系统,他发布后也是要不断优化和打补丁的;
如果你们公司的产品,写完以后就不管了,可能是赚快钱的套路,做的基本都是没啥前途的产品;
3.尽量多测试自己的代码或者写测试用例
测试自己的代码,不要直接丢给测试,或者抱着又不是不能用的心态;
我们在工作中,遇到产品经理的不合理需求,该提出来就要提出来;
但是只要是自己接手做的事情,都要努力做到最好;这是一个习惯问题
如果你是写页面的,没办法写测试用例,那就多测试下页面;
因为你写的代码,你自己最清楚;你多测试下,估计输入错,估计不正常的操作,看看有没有问题;
这样可以协助你写出稳健的代码;
4.可以写写注释
代码写的过程中,注意写注释;
如果代码写完以后,记得也多看下有没有什么注释需要补充的;
这样你以后回来维护的时候,可以快速理清楚思路;
利人利己的操作;
程序员有个臭毛病:
- 讨厌接手没有注释的代码
- 讨厌写代码的时候写注释
大家都是同行,没有必要相爱相杀啊!!!
5.总结记录下自己的代码片段
平时碰到一些比较常用的代码,或者容易复用的代码,抽出来整理记录下;
这些不单单是给别人看的,帮助自己的地方也非常多!
好记性不如烂笔头!等你遇到相同场景,直接翻出来复制粘贴,10秒钟就可以搞定,岂不是美滋滋;香不香?
小结
这些都是在写业务代码点点的积累过程;说起来很容易,做起来也不难,如果这么一直坚持下去,肯定会越来越好;
网上也有很多说写业务代码,技术很难提高这种言论;我认为这个观点不适合大多数程序员;即使你所在的公司,是给别人做官网的;你也能在写业务代码的同时提高技能;
市场上最少也应该90%的程序员,都是写业务代码的,没有几个公司会招一堆程序员来做技术研究;
而且,如果我们研究和总结出的技术不能解决实际生产过程的问题和痛点,也没有什么实际应用场景;那么这种技术就是垃圾技术,没有用的技术;
至于写业务代码能够让你有多少提升,大部分取决于你完成业务代码以后的时间;
如果你写完代码以后,像上面说的,重构自己的代码,测试自己的代码,写写注释,多总结记录代码片段;
可能你一天两天感觉不到好处,一周两周可能也感觉不到,要不了一年,你就很快变强了;
痛点二:公司没有人给review代码,如何提高
https://www.zhihu.com/question/65720941
很多公司就三四个前端,甚至有的就1个前端,也没同行帮你review代码,如何提升代码;
首先,如果你身边有经验丰富,有技术不错的人,你要自己主动的请他帮你review代码,大多数情况下,同事是没有义务给你review代码;
没有同事会天天主动热情,嘘寒问暖的帮助你,除非碰到了有传销性质的公司;我们程序员不会碰到的;
如果能有人帮你看代码,给你提意见,那么针对的意见,可能给你的帮助会很大!但是这需要你自己去主动;
如果没有人帮你浏览代码;我认为下面几点可以试着做;
1.读你现在使用技术的源码
很多人一直重复劳动!原因之一就是很少读源码!
公司中同事都是你忙我忙大家忙,好的技术文章非常少,适合你的好文章就更少了;
你有找技术文章的时间,不如读你现在使用技术的源码。读源码,真的能学到非常多有用的技术;
因为是你工作中使用的,所以你工作写代码,会逼格越来越高!
2.学会造轮子
我们工作中,不是要造那种jquery,vue,react的轮子;
很多人推荐造那些不切合实际的轮子,我觉得纯属扯淡;如果你造的轮子不能使用在生产环境,那就不是造轮子,那只是学习源码;
我们应该造能够用在工作中的轮子,最直接的就是从工作中使用的一些插件,工具,包等开始弄;
如果你知道该怎么造,可以开始做一些可复用的小工具;
比如平时我们判断数据类型,最简单的 typeof
,精确点的就是 Object.prototype.toString.call(123)
我们可以做一个通用的判断
let _typeof = function (data) {
try{
let value = /\[object (\w+)\]/.exec(
Object.prototype.toString.call(data)
);
return value[1].toLowerCase();
}catch(e){
throw `_typeof内部错误,${e}`
}
}
使用的时候
_typeof(123) //"number"
_typeof('123') //"string"
_typeof(123n) //"bigint"
_typeof(null) //"null"
_typeof(undefined) //"undefined"
_typeof({}) //"object"
_typeof([]) //"array"
_typeof(/123/) //"regexp"
然后你把上面这个方法封在自己的工具类里;以后所有判断数据类型,都调用自己封的小工具使用;
这样慢慢就会越封越多,如果后面感觉维护困难,你就看看jquery,lodash等一些工具怎么维护的,慢慢的,那就自然而然提高了;
这样才是真实生产环境中造轮子的正确的方式;
3.学会使用外援
公司没人带你不要紧,你总该有机会使用互联网吧;
大神们都活跃在网上,就去找大神们的博客看,去stackoverflow上请教;
去Github,npm上搜项目,看看别人怎么写代码的,这样都会帮助你;
然后去拉勾,智联招聘翻高级岗位的招聘要求,然后根据它来学技能,这些都是外援的方式。
4.找准工作的侧重方向学习
很多程序员学习就好像小猴子下山一样,碰到一个比较火的技术,就买书、找视频学习一下,学了十天半个月就放下。
每一项技术都在学,每一项都是写写DEMO项目。看上去啥都会,其实啥都不深入;
做一名程序员来说,技术广度相对技术深度来说没有优势,中大型的公司里专人做专事,需要的是好的螺丝钉,你只需做好一名称职的螺丝钉就好了,项目老大指挥你往哪里打,那就往哪个方向发,这就够了;
所以技术深度好的螺丝钉更值钱,项目大方向等之类的,不是你关心的事情;
如果你只是想做一名好的程序员,只需打造好核心技术栈就行了;
那些学了以后,不能用于生产环境的学习,我感觉都是浪费精力的,除非你想转方向,以后做那个领域;
当然如果你不甘心做一个螺丝钉,还想做点别的方向,比如技术leader,比如产品经理,那还是推荐多方向看看的;
痛点三:公司业务忙,进度赶的厉害,如何提高
首先抛出一个观点;公司业务忙,赶业务也不要紧;但是你不能在那种做重复劳动的公司里
这类公司的特点是,你没有什么核心竞争力,很容易被替代,他们需要的是速度快,考核你也是一天能做多少个页面之类的;那种地方非常不推荐呆;
1.一定不要去外包公司,要去有自己产品的公司
至于为什么不要去外包公司;
核心就是:自己有产品的公司,会不断的打磨产品,产品慢慢迭代,员工写的代码是需要考虑维护的;
外包的活,基本都是不重要的,不核心的;外包公司外派员工到甲方做的很多是边边角角的事情;
很多还是一锤子买卖,做完后就不用管了;很少考虑你的代码后续维护;
2.如果工作内容是简单的重复劳动,并且一直催你效率加快,建议离职
比如你在公司就是简单的写写页面,然后让你一直写写写的,每天都是一堆页面等着你写;领导们也是催着或者教你每天怎么样能做更多的页面;
这种公司,钱不高,天天做些搬砖的活,这种公司你还不辞职,等着领口罩么?
3.合理评估时间,不要让自己被动
如果一个需求,你三个工作日可以完成,那么评估时间的时候,最少要报5个工作日;要多给自己留点后路;
还记得刚才说的,写完代码以后需要做的事情么?
那些都是需要时间的;这样你就有时间来做技术储备;
一定不要傻乎乎的,3天完成就报3天,如果有bug,3天完不成,领导也会感觉你这个人怎么这么不靠谱,说3天完成的,结果3天做成这个鸟样;
4.合理看待自己做的业务
经常看到一些情景:某些小伙伴因为掌握了某些技术,比如Nodejs,React等,比如看过react等一些潮流技术的源码,知道原理,就自封为高手。
有些小伙伴仰慕某个团队,原因是那个团队使用了某个非常牛X的技术。
这不能算不对,但是出发点有点问题;
哪怕你做一个看起来很小的业务需求,为了达到极致,所需要的技术和能力是非常综合。
那些技术大牛,他们肯定不会拿所掌握的技术去限制公司的产品需求,而是倾听需求,给出精益求精的方案。
真正让前端工程师技术变好的是项目的深度,而不是不停地做项目。
项目越多,在单个项目中投入的时间就越少,容易陷入肤浅。
任何一个有价值的项目,都可以一直深挖。深挖项目,深度思考还可以锻炼工程师的创造力。
所以前面说了几种公司直接推荐离职,我们在项目之间的空档期,要珍惜时间,深入思考,总结,这时候要猥琐发育,不要浪。