关于工业软件
https://bbs.uestc.edu.cn/forum.php?mod=viewthread&tid=2120965
需要内网访问
在工业软件领域浅浅地接触了一小段时间了,来聊聊自己的感受。
工业软件,侧重点偏向于工业,主要有3D建模软件、流体仿真、电路设计等等多种类型。我接触的是3D建模软件。说是软件开发,其实更多的是领域相关知识。一个优秀的工业软件,从诞生到走向成熟,需要经过漫长时间的锤炼,稳定的建模引擎、渲染引擎、几何约束求解器、物理引擎等等等等核心都是通过长时间的用户反馈和迭代,不断缝缝补补才完成的。
由于使用了更多领域相关知识,工业软件开发也更贴近于国内的教学内容。你所学的微积分、矩阵理论(点积、最小二乘等)、最优化理论、算法(A*等)等等只是都有机会用得上,因此,在准备找工作的过程中和开发的过程中还算比较好适应。提到工业软件经常会觉得高大上,但是更多的是小工作堆起来的。在工业软件开发成熟的后期阶段,开发的内容可能更多的是偏向于一些corner case的修修补补,也更加偏向业务逻辑(这点可能跟大厂的sql boy差不多?),
一个大型的工业软件的开发迭代会经历很多年,代码量惊人,已经不是一个牛人就能驾驭的了的。中间还可能出现人员流动,开发人员水平参差不齐,代码质量就很可能出现失控的风险。例如,会存在多个功能相同的函数的实现,文档、注释欠缺等等。如果一个公司的工业软件开发已经到了成熟阶段,从技术上来讲,学到的东西其实不多,还得顶着阅读屎山代码的痛苦(如无注释、无文档等情况),同时,测试数据往往是比较复杂的(比如上万个三角面片,复杂的约束关系等等),调试起来也是非常麻烦,耗时,且不会带来多大的成长,有可能改到最后就是缺了个if。
目前在工业软件这块,绝大多数还是C++作为开发语言。年份比较久一点的公司可能连C++ 11都不用(这也就是我说为啥比较贴近国内教学内容的一方面原因了)。整体偏向于客户端开发,尤其是Windows下的桌面客户端开发。虽然此类软件上云的难度较大,近年来厂商也逐步在做一些云的开发。由于是涉及用户界面的桌面客户端开发,在开发过程中会使用到大量的设计模式,可以说是设计模式的绝佳实践了。同时由于软件的规模比较大,一开始会设计好整体架构,很多开发的规范都得跟着规范走,或许近几年国内的公司可能技术选型这一块会新一点?要不然受内部技术限制,跳槽时也会比较局限。由于代码量庞大,一小段代码的修改可能会影响许多其他功能,这一点在改底层代码的时候尤其是这样的,因此,除了开发之外,一般都会配备完善的CI、CD、QA等配套技术与人员。从开发的全流程来说,确实是可以体验大型软件开发的完整流程的。由于领域相关和闭源属性,当下的大模型技术对开发来说帮助并不大,作为一个开发密集型的软件领域,我觉得倒是很有必要在内部收集数据集自建内部大模型。
尽管要学的内容很多,但是软件本身不赚钱,例如,中望在21年的时候的利润才4个多亿(貌似,忘了),开发成本达1.1亿(貌似),国内军工购买工业软件可能每年也1亿美元多一点(估算),这是总体的估算,因为可能你司开发的软件只能覆盖一部分的需求而已。国外工业软件发展多年,大家一提到就能说SolidWorks、UG这些,生态建设做得很好,用户粘性高,转向BUG较多的国产软件阻力偏大,更别说国外市场了。工业软件属于小众软件,不像office这种能够覆盖大批量各个领域用户的办公软件,工业开发周期漫长,收益不高且要等待很长的时间。这些问题也可能是资本市场不青睐工业软件这一块的原因吧。
对于CPPer,如果是想通过工业软件开发作为跳板,跳槽到互联网大厂,我个人对此是比较悲观的。技术栈和业务与互联网大厂高度不重合,可能也就一个语言相关些(可能语言标准也不是特别高,计算机网络这些也不怎么用,高并发也不需要怎么考虑),如果跳槽,大概率是跟秋招一样重新准备了吧(就像我上面说的,因为工作内容比较贴近于学校学的)。
随便说说,想到啥就说啥,可能没多少逻辑性,当个乐子看看就行了。
