当前位置: 首页 > news >正文

离职总结(2022-9-5)

2022年9月2日,是在这家公司的最后一天,从2020年11月2日入职算起,也不到两年的时间。离职前加班加点的赶工了一个月把最后一个版本完成了(周末在赶,晚上一两点还在赶那种),本来这个版本可以不做早点走人的,但是之前的代码确实写的不好(有我自身水平低的原因,也有多人交叉修改代码的原因),所以重构了一些代码,这样别人改起来也方便一点。离职之后打算先休息一段时间再找工作,期间进行一些总结和学习,反正单身狗也没有房贷和婚姻的压力。面试总会问为什么离职,问这个都是明知故问,还有比钱更重要的考量吗(虽然也有人际、环境等因素),一是当前薪资(能力匹配),二是未来的薪资(个人成长),虽然现在疫情的原因工作没那么好找,但辞职学习一段时间也比待着混日子强(没有经济压力、想要自我提升的前提下)。

工作总结

1.开发周期偏短,产生大量遗留BUG和垃圾代码

目前的流程是开完需求评审会后,开发组长把任务分给小组人员进行时间评估,然后根据时间再重新调整部分需求。一般产品经理会给个提测或者验收日期,一些超时的小的需求就留到下个版本,但是重点需求不能按时完成就需要延长开发周期。

之前我有两次评估时间开发组长觉得长了,就说公司是创业公司要提高开发效率巴拉巴拉的,搞得好像我在摸鱼一样。我的思路是组件内一些关联的代码也需要简单的重构下,因为初期的设计没有考虑到当前版本这个需求点,但是他们就觉得直接做加法把功能堆上去,先把需求完成再说,后续也不给时间优化代码。这也导致目前项目里很多冗余的代码,就是为了赶进度瞎写的,写起来容易改起来难,每次提测除了当前版本新需求一堆BUG,还能测出一堆遗留BUG。本来我们组开发水平也有限,还只关注需求完成不关注质量,那就没法了(虽然大部分小公司都有这种问题)。宁愿多给一周时间测试和改BUG也不多加一点开发时间,我不懂这是什么思路。

刚开始我有空还会改点遗留一两年的老BUG,后来被组长教育后就醒悟了,在这里把需求完成就可以了。

2.代码质量差

项目代码质量差,除了我自身能力不足,也有其他的一些原因:

项目开发周期短。给的时间短,自然就容易出现代码设计上的缺陷,不利于维护和拓展。最开始的时候开发过程中还会修改和增加需求,后来流程完善了一些,不会在开发过程中有大的需求变更了。盲猜产品觉得功能完成了,界面好看,就完事了。

开发水平参差不齐。我的编程水平算是比较低的,但是同在一个公司,其他同事应该也大差不差。比如有人在非阻塞或者未加锁的情况下多线程直接访问,轻则数据不同步,重则程序崩溃。还有个项目那两个同事组件样式定义都是复制粘贴而不是封装成独立的组件。这里要吐槽下开发组长,之前有个BUG最后查出来是他写的,他让我们去找原因就算了,第二天开早会还在说代码中不懂的要多问,此外,他还经常把别人的代码改出BUG来。

缺少开发规范。目前我们组是没有开发规范的(之前提过一个编码规范,但也没落实),大家都按照自己的一套逻辑在写。没有注释就算了,如果是多人合作还可能出现一个功能多个实现接口的情况,没有接口规范来约束。

缺少代码审查。目前是只管完成需求,个人和公司都没去管代码质量的问题,项目代码早已经是一座座屎山了。

3.我写BUG的一些经验

容易产生BUG的起因:

指针或者参数没初始化。一般会因为异常访问导致崩溃。有次调用Win API结构体参数的指针没初始化为NULL,导致崩溃,找了好久。

复制粘贴时变量名没改。如多层循环时,外层的自增变量带到内部导致越界异常访问。复制粘贴导致的BUG我没少干,以后需要认真点。

多线程同步问题。这个同事写的BUG比较多,死锁卡死程序,不加锁出现异常访问等。

没有对参数的有效性进行判断。这个也是同事的老毛病,有段时间各种越界导致崩溃。

修改历史代码也容易产生BUG,应该尽量写好注释,便于别人修改。

还有一些UI交互的BUG,要和产品沟通好细节,不然做出来不符合需求。

只要养成各种坏的编码习惯,写完不自测,轻轻松松就能完成BUG KPI。

4.开源协议

首先忏悔下我以前也没遵守开源协议,后来了解了才开始尽量去遵守。目前参与的项目里,也有一些同事引入的GPL库,我这里得撇清责任,我没有引入也没有使用那些库。

未竟的事业

虽然参与了好几个项目,但主要负责的是辨音这个项目的开发,目前还遗留了一些想做但没做的任务:

1.任务调度器

之前的需求任务是独立且只能单个执行的,只需要开个进程通过RPC调用即可。后续新增需求可以将不同任务组合按顺序执行,前者输出作为后者输入,同时不限制任务个数按顺序执行。我的想法是再抽象一个任务调度的模块管理各种任务的组合执行、插队执行等,每一种任务一个队列。同时,计算机资源占用也纳入考量,因为算法执行时很占CPU资源,按优先级需要可以先暂停其他优先级更低但是不在同一个处理进程的其他任务。

2.QML组件封装

目前做的QML组件都是很零散的,没有一套统一的接口,后续考虑统一接口并增加样式管理。

3.封装波形编辑组件

无论是我画的录音组件还是公司已有的图谱组件,都太原始了,每次修改都是牵一发而动全身。需要参考其他成熟的图表库进行重构。

4.线程池和进程池

5.封装数据库操作

6.日志管理

展望未来

随着工龄的增长,自己的能力也在逐步成长,只想在有限的时光多尝试一些新鲜的事物。吾生也有涯,而知也无涯。平时就学一点音视频和3D的知识,不需要学多深,可以应用到项目中即可,目前主要还是以做Qt界面为主。非要说定个什么目标的话,那就是希望自己能有一个上千星的开源项目,不过目前还没想好项目方向。

我就一农民工,继续干几年Qt,然后就该回乡下种菜去了。

相关文章:

  • 计算机组成原理_Cache的替换算法
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • 如何快速提取设计地形等高线?
  • 详解MeerEVM:MeerDAG共识下的智能合约执行引擎
  • 上万字全面解读websocket(多种实现方案,含集群实现代码)
  • 【网络安全】XSS跨站脚本攻击专题讲解
  • 【栈和队列OJ】一、有效的括号
  • 行业竞争分析及发展动向
  • c++现代特性
  • 【学习笔记】go协程和通道
  • 十二、bootstrap前端开发框架
  • USACO Training 1.3 Milking Cows
  • < Linux > 进度条小程序 + git三板斧
  • 惊险的十天
  • 【数据结构初阶】堆堆的实现堆排序TOP-K
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Angular2开发踩坑系列-生产环境编译
  • CSS 提示工具(Tooltip)
  • C语言笔记(第一章:C语言编程)
  • docker容器内的网络抓包
  • fetch 从初识到应用
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript-Array类型
  • Making An Indicator With Pure CSS
  • Nacos系列:Nacos的Java SDK使用
  • php ci框架整合银盛支付
  • React-生命周期杂记
  • SegmentFault 2015 Top Rank
  • V4L2视频输入框架概述
  • Wamp集成环境 添加PHP的新版本
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 程序员最讨厌的9句话,你可有补充?
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 聊聊sentinel的DegradeSlot
  • 免费小说阅读小程序
  • 嵌入式文件系统
  • 思考 CSS 架构
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 网页视频流m3u8/ts视频下载
  • 小李飞刀:SQL题目刷起来!
  • 原生js练习题---第五课
  • ​批处理文件中的errorlevel用法
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Java第九次作业--输入输出流和文件操作
  • (C语言)球球大作战
  • (第一天)包装对象、作用域、创建对象
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • ./configure、make、make install 命令
  • .FileZilla的使用和主动模式被动模式介绍