来新公司已经三个月有余了,今天刚搞完公司的转正答辩,刚好有空记录以下自己这三个多月从C#转为Qt做项目的一些心得感想
1.换工作
之前一直在杭州那边工作,那边设备软件用C#的开发较多,换到合肥这边后,发现合肥这边设备软件用Qt开发居多,我猜大概是因为地区发展限制的吧,毕竟合肥在发展时间方面还是比不上杭州的。没办法,就只能重写学习一门新的开发技术栈,等以后Qt用熟了再在公司推广C#技术栈吧。
2.新工作适应期
当时刚来这家公司面试时,就说会给我两个月的时间进行从C#到Qt技术栈的过度。等到我到了这里才发现,确实是我多想了,老板怎么可能会给你时间过度呢?所以我刚来半个月就开始着手做Qt相关的项目了,第一个比较重要的项目是一个样品前处理控制系统,主要就是通过IO盒控制下游的皮带、泵阀等IO设备进行设备开关处理,从软件中使用定时器、多线程等技术每个IO设备的联动控制。这里面的难点是需要随时可以实现控制流程的中断,之前传统方法多是使用标志量,在每个流程开始或中间增加了大量的if判断,这样就导致代码不够优雅,这种检查逻辑充斥这控制流程的每个地方。后来记得之前看过一本书里面说了异常触发这个东西很适合流程控制。将控制开关动作看作瞬间发生的事情,在每次控制等待过程中添加标志检测,如果触发流程终止信号,则抛出一个异常,在外界捕获,从而很优雅的解决了流程中断问题。
这个项目最大的问题就是需要和之前的老项目集成,这里我尽可能的实现二者最大程度的解耦,将控制软件和老软件独立开,二者通过modbus tcp进行通讯。即使是这样,在修改老软件过程中也是异常的曲折,大量冗余代码、混乱的逻辑、动不动就是两三千行的一个文件,实在是感受到了屎山的威力,是我迄今为止见的最臭的屎山。没办法,只能硬着头皮吃下去了!
对于代码重构,现在我的想法比之前也是成熟很多,不会贸然得去重构,更多的是在现有基础上逐步地对软件进行重构。先重构通讯层,再重构设备层,最后重构业务层,当然之前的代码架构也没有分层一说了。好的代码让人对业务了解更深刻,差的代码吧简单事情复杂化。
Qt算是C++中非常完善的一个开发库的,想要的功能都有,受限于C++的语言特性,再编译、Debug时总是不太方便。另外,多线程操作也是不如C#优雅的,感觉再项目中除非是性能要求特别高的考虑用C++,95%的业务用高级语言就能搞定,有自动挡车子为啥还要开手动挡呢?
3.规划
后续还是想再继续做一些C#相关的工作,这么优雅的语言不来写项目实在是可惜了。后面公司有一个数据库相关的项目,计划使用Blazor做一个网站形式的数据管理系统。另外自己也是要继续深入学习C++,Qt相关开发技能,对于重构、敏捷开发也要持续学习。