前端进度不理想,线上 bug 源源不断;程序代码堆成了屎山,引起了问题新花样不断。
问题的根源在哪里?
所谓的复盘大会,能得到的答案基本就这几个:场景太复杂;工作太忙碌;需求变化太快。
还有一种说法,每一座前端的屎山,都离不开身后”优秀的”产品经理。
的确,这的确都是前端痛点,也属于前端领域不可以避免的问题:
很多场景,特别是游戏行业,复杂度与难度,可以说已经超过了后端,也许一个简单的增删改查,对前端来说可能要考虑数十种动画,交互,展现,效果等场景。
互联网人都知道的加班加点。能到家吃个晚饭的工作,某种意义上已经很奢侈。
前端就是这么尴尬的一个角色,需要将自己暴露在界面上,却没有话事权。这玩意随便抓个人,都能提出一点意见。设计师肯定有自己的主见;产品经理可以提一些意见;项目经理可以有一些意见;后端也可以提一点意见;行业竞争对手,也会给你一些参考;从来不参与互联网的的老板,客户也可以提一些意见…
更可怕的是,他们都是“对”的,且说话比前端有“分量”。
再继续下去,所谓的复盘大会,最终只会演化成吐槽大会,或是皮球大会。
然而,雪崩的时候,没有一片雪花是无辜。
细想,笔者还是在过往的合作,或者是他人的吐槽,或是社区中,还是 Get 到一些团队存在的一些前端问题。
他们始终觉得自己没有任何问题,继续保持着自己的”做事风格”,与”编码习惯”。文章以该人员的视角看待问题。
团队人员之间要保持良好的友谊,应该学会包容。
即保证了任务的完成,也和谐了整个团队,Nice!
团队规范?技术方案?
当讨论话题的时候,保持沉默是金的精神。实现时,那才是个人独立人格的体现,随时替换上自身“最优秀”的解决方案。
社区出现了什么技术,你关注了吗?我可是先行者。我不仅学习了,还实践到项目中。
分享曾经遇到的部分“优秀”员工,保障自我质量的的小技巧:
相信自己的直觉,再去检查多看一遍,简直是对自己技术的一种侮辱。
是的,程序员的最高境界,就是用最简单的语法,把最复杂的问题给解决了。
有人正是将该原则,发挥得淋漓尽致。
大部分程序员的薪资结构,都是固定模式,不像销售岗等,需要根据一些业绩来评估。
既然一时半会,提高不了自己的待遇。我可以少做事情呀,方案难点都给别人来想,代码杂活推给别人来干,这样自己的性价比就提高了。
突然觉得自己真是太机智了!
一个项目大了,公用方法的确少不了,而且很多时候,如何同步给其他协助伙伴,也是个大问题。
一个优秀的想法由此而生,打造自己模块的私人工具库!
你们封装你们的,我封装我的。看淡公用工具的起起落落,也无需饱受工具的影响,不如做打造一个与世无争的私有库。
良好的代码封装,对程序的帮助,相信大家都有目共睹。
不知你们有没有遇过,一个项目有 10 来个公用的 upload 组件?虽然功能都差不多,但总有一点差异的嘛。
是的,快速封装原则,直接拷贝一个修改成自己想要的 upload。还不对其他产生影响,可以称为程序界一个”快准狠”的骚操作。
代码规范?那不正是一种约束,不存在的。 公用封装?那不是也是一种限制。
我们都需要一些自由。
前端近年来,的确高速的发展状态。每时每刻都有可能发生变化。
然而,部分优秀员工,与借助了这个思路。这里就不单单赞扬前端了。产品,UI 也包含一起吧。
是的,没错,就是有序的命名。有序就是个褒义词,有顺序,说明调序清晰。
open1()
, open2()
,…openN()
。次序说明我们是有原则的人。.left-left-left-left-left-right
,让你直观看出有第几级。if
与 else
算是每个语言都会用到的基础语法,需好好重视。
多嵌套几层 if
,算是上 if
的传承发扬发扬光大。
三目运算符,存在的意义是更精简的语法直观的表达该项的判断关系。
但后续社区发现一个判断无法满足,可能会出现 3,4 个情况,于是三目为了满足,变成了“多目”。
部分优秀的程序员,善于使用“多目”,十来目,不正是艺术的体现。
调试已经是程序员必不可少的一个环节。笔者也会加上一些调试,方便有问题的时,快速的定位。
笔者个人的习惯,是会在前面加多一个独立标识,尽量让这个标识能快速搜索到位置:console.log('name===', name);
而有些程序员,更加巧用打印了。
console.log(name,'name')
。到时候觉得其他人觉得影响他的调试,简单,到时候他可以写个正则就可以匹配到。console.log(name)
。这个没关系,其他人员需要关闭,好好跟踪你的代码,总能找到输出的地方。深入程序的小伙伴都知道,程序员的级别,不在表面的花里胡哨,而在与底层的抒写。
所以,样式上我直接用起底层的 style
。无需 class
,直接 style
撸起来更能体现自我能力上的资深。
如果 class 有问题?我手写肯定会写一个有魔法性质的 !important
!
当前,业界无论变量还是方法,都统一使用了英文。
笔者也是英文烂得一坨屎,有些不常用的词汇,只能依赖“翻译”,有些也会出现拼错。
但高端的玩家,总有自己更优雅的方案,中文拼音用起来!
是否遇到拼过复杂的英文命名?是的,太复杂也许自己都记不住。所以是不是应该使用缩写?pName
,cValue
,是不是更精简。
这里就不讨论没有注释的问题,这个有些命名,如果部门统一,我个人觉得规范范围内,可以不写。
这里只讨论优雅的注释:笔者遇到过比较优雅的注释,类似“第 1 版本”打上了正确的注释,待这里的业务更新到“第 3 版本”时,注释还是“第 1 版本”的。
然后,这些注释,会指引你走向一个作废的逻辑。
见过 2000 行以上的一个完整的 vue 页面么?没错,业务太复杂了。
但我们的原则不能变,我们要保证一个页面,一个 vue 文件的维度,不可切割。
好的,上述赞扬了坚持“一个页面,一个 vue 文件的”人员,还有部分优秀人员,喜欢子子子子组件的人员。
父子组件多传参,尽可能多层传递。子给父,父再给子子子子,每个操作都似乎在告诉别人,不同组件之间是离不开的“一家人”。
首先,这句话,笔者非常的赞同,程序中,的确一个函数,需要代表一件事情。
然后,这个“事情”的维度的,标准还是很大差异的。
你信不信我,10 行代码能分出 3 个函数?虽然他们都不会重复使用,但这样让函数做的事情,更“精确”。
什么“一个函数只做一件事情”, 部分一个函数就可以处理很多事情。
特别是通过命名已经直白的告诉你需要做什么的。
举个栗子,checkPermission
,你可能觉得他只是检查权限。错了,他还同时修改了价格,你想不到吧。
花了不少时间,还有其他小技巧,如使用页面级 mixin,无需模块化与复用等。想想这玩意儿写不完,有兴趣的小伙伴,自己到评论区补充吧。