articles
articles copied to clipboard
我的上一份工作
已经有半年时间没写文章了,不是因为这半年太忙而是太懒,期间也冒出过很多想法,但没动力尝试。我感觉现在状态非常差,自信不足,做事敷衍了事,同事关系糟糕。 我想通过这篇文章总结自己为什么跳槽后,变成现在这样,下面的内容会有点记流水账。
文章出现这种格式为如果我作为部门leader,我会怎么解决问题
面试
4月中经过两周时间投递和面试,虽然收到的offer不少,但是普遍薪酬较低,只有两个offer薪酬能达到预期,其中一家是创业公司,刚获得天使轮投资,虽然薪酬占优,但是考虑到发展与稳定性,最终选择了另一家国内传统零售龙头公司,下面称其为Y公司。
选择
选择Y公司有两个因素:1、Y公司的传统业务在国内零售行业占比较大份额,有自己的供应链,长期处于盈利状态,稳定性较高。2、Y公司得到腾讯高额融资,试水新零售业务,需要IT系统支持,团队尚未成熟,有机会可以施展拳脚。
入职体验
入职第一天,被安排到一个临时工位,没有告诉你文档在哪里,代码仓库在哪里,去哪里开通账号,所有东西都要问同事,同时由于不同权限负责人不同,开通所有账号,花费约一周。
入职体验作为新员工接触公司的第一印象,尤为重要。B公司这方面做的比较好,在员工入职前一天,HR发送邮件让负责账号管理的同事,开通所有账号,并邮件抄送给其上级主管,员工入职当天,需要主管接待新员工,跟团队成员做一下互动,让大家互相认识。
接触代码
拿到代码后,第一时间了解项目架构与开发规范,但是发现项目由于人员变更过于频繁,同时前期没有做严格的开发规范,导致项目出现较多问题。
1、代码格式和风格多样。
引入eslint做静态检测,可以增加git hook强制提交代码时校验。统一代码格式化规则,使用prettier插件导出配置文件。
2、由于小程序早期版本不支持组件,项目存在大量应用template开发,但是template的css是全局的,为了防止css冲突,template的class命名会很长,但是也还是无法解决样式冲突。另外template还会操作setData方法,会导致数据不可控。
多人开发的项目,代码的隔离性较为重要,但是template模式明显违反了该原则。在小程序支持组件后,应该在编写新功能时使用组件开发,逐步替换template。同时规范UI组件和业务组件,维护好组件文档。但是在推行组件模式开发时,有部分开发表现得较为排斥,最终未能推进组件化,导致项目仍然有大量混合开发。
3、代码分层与职责不清晰。由于没有独立接口层,网络请求定义会被嵌入到逻辑层,不仅无法复用请求代码还会导致层级职责不清,修改代码时较难找到对应代码
加入独立的apis目录,将项目用到的所有接口统一在apis目录,同时优化http层,统一处理网络错误和服务端通用异常。
4、代码圈复杂度高。圈复杂度表示一个函数具有的分支个数,例如一个if else复杂度就是2,如果一个函数圈复杂度高,就表示该函数逻辑过于复杂,维护和理解成本高
如果使用vscode,可以安装CodeMetrics插件,时刻计算函数的复杂度。对于老旧代码,可以使用sonar扫码统计。
5、代码重复率高。使用sonar扫描,显示有4.5%代码重复,67处重复代码块。
重复的代码,说明开发时有复制粘贴代码现象,可复用代码没有提炼到公共方法,粗暴的复制代码,增加了项目代码量,也增加维护难度。解决这个问题可以用sonar扫码静态代码,根据提示具体代码块,删除重复。
管理问题
虽然上面说了很多技术问题,但我认为技术问题只是一个表象,核心问题还是企业管理问题。上面是以技术的身份分析问题,这个小节,我会以管理者的身份分析问题。
1、选对人。 在项目启动初期,选对人编写第一行代码尤为重要,他决定项目的代码风格,架构,编码规范。如果写下第一行代码的人缺乏架构能力,或管理团队的经验,容易忽略制定相关规范。 在Y公司,项目原有四名开发,两个月内离职三名,遗留的代码债务需要新开发偿还,同时由于架构过于松散,偿还债务的时候会引起大量bug,新开发为防止产生bug,会偏向复制代码进行修改,进一步恶化代码。
2、授权。 在接手项目初期,虽然发现很多问题,但是因为没有行政权,leader也没有正式授权项目由我负责。在推动改造的时候,老员工有较大排斥情绪,最终导致制定的开发规范只是一纸空文。
作为部门leader,选择项目负责人前,应该慎重考察评估该负责人的责任心和团队管理能力。一旦选中,就应该明确其责任与权利。
3、减少沟通。 沟通看着像一个褒义词,在我看来,在企业里过多的沟通是影响效率的重要因素。在Y公司,由于项目排期,接口对接,测试对接等都没有利用系统管理。会出现你依赖的资源,例如UI,接口,你需要多次询问开发进度,资源提供时间。测试在提交bug的时候,只在企业微信留言,不但会打断开发思维,还会让bug缺乏状态标记,开发修改完毕后,测试未能及时回归。
具有成熟开发流程的企业,跨职能合作时,应该遵循契约精神,在前期规划,各职能评估开发工时,输出资源有统一的平台管理,例如UI稿放到蓝湖,或者通过邮件发送。接口文档通过swigger维护或者RAP维护。测试人员发现bug,记录详细信息到jira,开发人员修复后,标记bug状态,测试人员可通过jenkins自行构建回归。
4、安排到正确的位置。 进入Y公司本以为是负责前端团队的建设的,进入后,安排的工作和初中级开发无异,每天的工作是编写业务代码,编写界面,调整几个像素。工作中毫无成就感,也对个人成长不利。
5、leader要能下得了战场。 作为小组技术负责人,如果连编码能力都不具备,不能带领团队攻坚的,是不称职的管理制。如果leader长期脱离编码环境,对组员提出的问题缺乏感知力,也就没法集中资源解决问题。如果你做到部门leader,管理上百人,请忽略这条。
离开
企业成功的重要因素是效率的提升,如果你所在的企业一直在原地打转和内耗,而且你无法改变现状,那选择离开是明智之举。
我的下一站是哪里?
这个问题思考了很久都没有得到明确的答案,在企业工作已经第七年了,重复与无趣的工作内容让人厌烦。但是迫于生计,企业是一个最保障的选择。在接下来的五年,互联网行业是不是一如既往的繁荣,还是泡沫破灭的到来?如何在动荡的时期,保住工作,更上一层楼了?我还没有答案,唯一能做的就是保持学习。