14 年大专机电一体化毕业,至 18 年,一直做本专业相关的电气工程师
当时工作需要,会使用三菱,西门子,abb 的大型伺服系统,不过这个就业面很窄,收入也很不可观
当时除了学校学了半学期 c ,还有一些电子电工,数电,没什么编码基础
很偶然的做了一些事情
1 ,学习 ardiuno ,这个后来没太多收益
2, 学习托马期微积分,导致学会 mathemetics ,看起来和转行软件开发没关系,但实际上是必要的前置条件
3, 学习 3d 打印,这个后来没太多收益
4 ,学习了 c++,这个没有太多直接收益
在这个基础上
有一次在做伺服电机控制时,
用 mathemetic 设计 5 次方曲线,(求导求导求导后曲线还是平滑的,意味着加加加速度是平滑的)
然后在 excel 里用尝试把函数离散化成数据,画成图表,把离散化后的值导入动态控制 plc ,用于控制电机转速
虽然实验后发现只有转速很低时才能维持曲线形状,但是水了一个专利, 领导和我都交了作业,双赢
而且学会了 vba
直接导致我转到软件开发行业的事情是
有一个西门子 wincc 的 scada 项目需要落地,因为我们每年买很多西门子的伺服,
他们顺势向我司倾销了 wincc 组态软件,它可以在 windows 平台使用 vbs 脚本二次开发
和 plc 通讯,采集数据 数据归档,显示,控制的(比较少)的作用
vba vbs 都是 vb6
由于我是唯一熟悉它的人,所以这项目就落我头上了
后面又发现 wincc 可以嵌入.net 的 wpf 或 winform 的自定义控件,为了做出漂亮的图表控件,我开始学.net
wpf 和 winform 当时了在网上了解了一下,wpf 可以做得比较漂亮,比较少人用,学校通常是教 winform
我选择 wpf 时,可能有一部分原因是觉得以后可以找工作时没那么多竞争对手吧
这段时间又学了 c#, 和一些设计模式
18 年的时候 在线投简历面试到一个初创公司 就辞职去了广州,面试用的就是用 wpf 写的控件库
都是驻场开发,海南琼海,海口,博熬,陕西,
出差了很久,没什么进步,只做了 9 个月,一回广州就辞职了, 差不多只在广州 1/3 的时间,其他时间
19 元旦-21 年我在某安防上市公司做客户端
当时客户端里即有视频解码,相机控制等功能页面,
也有大量的业务页面,当时都用 wpf 做
后来客户端嵌入了 chromium, 前端组一边做需求
业务相关的页面一部门让 web 前端做,
客户端和嵌入的网页用 auth2 token
后面前端抽一队人做做低代码工具,低代码工具做出来后
开了很多前端,保留了 6 ,7 个人的团队做低代码工具
原来的测试和实施抽了一些来成立新的部门,专门做配置
客户端一些页面用 wpf 实现,一些业务相关的用低代码直接配置(数据库,流程引擎,到 ui 都是配置的)
客户端开了很多人,当时我小组长手下只 4 个人走得只有我,我也跳槽了,就他一个人了要,然后他也跳槽了
于是我们组也消失了,其他客户端组来把我们项目接手了
我在这段时间业余本来想学 vue3+ts , 但 ts 太新,当时还没有什么学习的资源
而且防着低代码平台平替掉我,于是就没有再想过往前端学,实现也是如此,前端躲过低代码,现在又面临被 ai 的替换
于是这段时间业余学了一下kubernetes
但是没后端机会,1 是 c#本来就少被用于国内后端,2 是 kubernetes 那时也是新兴,.net 更用不上它了
但是通过学习 kerbernetes ,还是学会了很多有用的技术,shell, 边界网关协议,vim 等,不算白学
后面又学了点qt,没学多少,就跳槽了
21 年,在拿了两个年度优化后和年终后,跳槽到北京做医药零售垂直领域的桌面客户端
多了一些合规,医保之类的东西,技术上倒没太多变化,saas ,to B
这段时间没加班, c++ 和 qt 两边都开始比较认真的学, 但学了一段时间又放弃了,因为 qt6 不支持 win7
当时感觉 天蹋了
于是又学习了一段时间的 DX 11 ,把 opengl 和 dx11 的视频都看了一下,最后选择了 dx11 ,
学到一半,感觉跨度太大,学了也不好找工作,还是放弃了,于是又回过头学 qt ,学 qt5 ,不能放弃 win7,xp
重新下决定,就学 qt 了, 不再犹豫不决
由于我习惯了 xaml+c#的 mvvm ,
所以我在写 qt 项目时更偏向于 qml + c++写 mvvm 的代码
历史总是惊人的相似,在 winform 和 wpf 中的选择,在这时变成了 qt widget 和 qt qml 之中的选择
我还是选择了后者,但这次是因为喜欢 mvvm
qml 的 mvvm 依赖 qt 的运行时反射, 绑定到 qobject 对象,
我希望用更好的性能绑定到 c++普通类里,所以我花了很多时间写了一个c++静态反射框架,
仅依赖 std ,header only
这下可以像写 wpf 那样写 qt 了,虽然不能用 vs 热重载 c#(c++)了
但 qml 自己实现 ui 热重载还是很简单的(官方没支持),结合 rsync ,notify 等工作,在嵌入式上也能热重载 ui
结合我的反射,包装了类似 c# observablecollection ,inotifypropertychange 等对标的泛型类(模板类)
我的 qml + c++的开发效率比较 wpf ,不差多少了
于是我尝试做了一个高仿的网易云音乐,后面找工作用到它了
吐槽一下,当时的网易云窗口 4 边的阴影是 4 个分别显示一个阴影透明窗口
this isn't a realy borderlesswindow!
22 年,美团 京东 纷纷开始线上售药了, 我当时所在的公司也开始做这方面的业务, 桌面软件所在的这个事业部,全端了,一个都没留下,第一次拿了 n+1 ,给了 25 天左右没有工作量的时间,带薪找工作, 当时谈到最后两 offer 一个 c#,一个 c++
c#那个开始谈了 package 46w ,后来要发 offer 了他们 ceo 砍了一刀,变成 24x16 , 于是就降了一点总包,来 c++这边了,面试时拿之前学习的《高仿网易云 demo 》 项目面的
这份工作主要是 cv 方向,第一年差不多都是在别人的屎山上加加功能,改改 bug ,第二年初争取到 0-1 都我自己设计架构的项目,我把微软 wpf 的 prism 那套设计模式用 c++ qt 重实现为一套qt mvvm 脚手架:cpp-prism ,在我主导的项目中使用它进行开发,期间对 cpp-prism 所做的重构,也都推到了这个 repo 里 算是一边工作一边磨合 c++/qt ,提高熟练度吧
这个架构中,已经合并了大大小小的项目 6 7 个,大部分是研发一半死掉的,上量产机的项目只有 2 个,但因为架构合理,除非是改了萃取后的公共分部,否则不轻易在合并项目时产生太多冲突,,不管是 ui 还是业务,都能很容易的取出来,在需要的时候组合成一个新的跨平台,跨 cpu arch 的 app ,相信以后仍然会有很多项目在这个基础上扩展
而今已经没有像刚入职那么忙碌
又学习了 Pytorch , 可以写一些简单的 cv 模型, 比如春节期间自己写卷积识别了扫雷游戏截图的所有格子状态, 本想结合 ddqn 让模型自己学会扫雷,但 ddqn 强化学习研究了几周扫雷还是越玩越乱,就放弃了,只好暂时搁置
接下来想要学习的主要有两个方向
1 跨平台 chromium 开发,
2 ros 机械手相关,例如立体相机点云识别,moveit 路径规划 姿态分析,抓取 ,结合 ros 仿真,强化学习
1 可能会比较不吃学历,但前端越来越容易被 ai 取代
2 比较吃学历,难度应该也比较高,可能会学了找不到工作
所以我目前还是更倾向 1 ,主要是比较不吃学历,应用面也比较广,互联网嵌入式都可以用 chromium 统一写 Ui
总结起来,能转到软件开发,运气成分占了很多,一开始学的 wpf 也是比较冷门的,没有和应届正面抢工作,后面能一路跳槽成功,是因为学习没有太脱离实际,每次脱离实际了都通过刷求职软件校正回来,总之,有时候最重要的事情不是去看远方模糊的,而是做好手边清楚的
|