上位机软件工程师和普通软件工程师有什么区别?这是我跟其他程序员小伙伴一起聊天时他们问我最多的问题,很多想要从事上位机软件开发这个职业的其他程序员对于上位机软件工程师日常的工作内容还是比较模糊的,简单来说,上位机软件工程师和普通软件工程师比较大的区别就是,上位机软件工程师需要经常和硬件和人打交道,而一个普通的软件工程师,可能平时除了写代码,就是和部门同事打交道了,这就是它俩的区别。但在此基础上,我们还需要延伸一下,细化一下!



和硬件打交道



既然有上位机,那么就会有下位机,下位机通常指得是能够直接使用电信号或者其他比较直接的方式向设备发送指令的,比如PLC、继电器、IO信号卡等等,总之,下位机五花八门,不是只有PLC才叫下位机,只不过通常做下位机,PLC做得多一些而已。

在我们这种经常写上位机软件的程序员眼里,只要非软件的,我们统称叫硬件,很少再去谈什么下位机。

要聊硬件,很多刚接触上位机开发的小伙伴都有一个顾虑,那就是自己没有对接过硬件,甚至有很多公司在招聘上位机软件工程师的时候,都会问上位机软件工程师对接过哪些硬件。

可以这么说,我做了那么多年上位机,我对接过各种硬件,想要完全熟悉,只能说学不完,根本学不完!

工业用的硬件如果摆出来,最起码都有上千种,哪怕是最资深的上位机软件工程师,可能一辈子能够接触的也就上百种,想要完全熟悉根本就不可能。

但是,这些硬件虽然五花八门,但是通讯逻辑无非就那么两种,不是串口就是网口、通讯协议搞清楚了,剩下的就是怎么发送和接收数据的问题了。

发送和接收数据的方式也就那么几种,比如说Socket、Modbus、MQTT,别听那些硬件工程师说什么485、232还是什么其他复杂的通讯逻辑,基本上在软件工程师这边,没什么区别!

上位机软件工程师入门硬件知识只需要会这些就行了!多了你也不会!高级一些的,比如说一些运动控制卡的使用、机器视觉,那个的确是需要个人经验的,但是学起来也不难!

所以,各位如果想转上位机开发的同学,不要焦虑,上位机的硬件开发比传统软件开发的逻辑简单多了!

和人打交道



这是上位机软件工程师和普通软件工程师最大的不同,上位机软件工程师和人打交道的频率要高于传统软件工程师,这里的人可能是公司同事、甲方项目经理甚至是甲方的底层操作人员。

而且,除非贵公司做的是整机开发,即那种设备和软件一体机,否则,可能连项目需求都是需要上位机软件工程师在甲方那边一点一点磕出来的!

所以,上位机软件工程师出差的频率是比较高的,目前我所接触到的涉及到上位机软件开发的公司,几乎没有不需要出差的!有些公司出差的频率还特别高!这主要看公司的组织架构!

比如说,我曾经任职的一家公司组织架构就比较完整,有项目经理、机械工程师、电气工程师、装配工程师、软件工程师、系统工程师(实施工程师)。

其中,项目经理和系统工程师就是负责跑腿的,装配工程师只有在设备安装时才需要出差。

项目经理的职责就是了解需求,所以直面客户的情况比较多,系统工程师则是在装配工程师安装设备时或者安装完设备后做辅助工作的,比如说协助装配工程师安装硬件,协助软件工程师安装软件和调试软件的。

但是,像我现在的公司,组织架构就不那么完整,因为没有项目经理,也没有系统工程师,因此,软件的需求确定和后面的软件安装调试都是要软件工程师亲力亲为的,所以出差加班的频率就有些高了!

基于此,因此,上位机软件工程师不光要和客户确定需求,还要跟公司同事一起研究软硬件方案,最后部署项目后,还需要组织客户培训,项目出问题的时候,还需要在一线聆听客户的“教诲”!

一些不太好干的项目,被公司催进度、被客户骂那是常有的事情!有时候项目做得不符合客户的心意,在酒桌上赔礼道歉也是很正常的事情!

能不干就不干



现在,上位机软件工程师在目前国内还不算饱和,甚至说缺口很大,原因很简单,那就是大家都去学Java了!可上位机软件使用的编程语言里,C++和C#占大多数,一小部分使用Python,这里就不说了,很多旧设备使用VB或者VB.Net的非常多,而像C++、C#和VB程序员本来就少,像C++程序员,做底层的就比较多,因为工资高嘛!还有做游戏开发的也比较多,C#更别说了,基本上有点追求的,都去做游戏开发了,因此,C#上位机软件工程师更缺!

但是,为什么不建议大家从事上位机软件工程师这个职业呢?

说简单点,那就是基于上述第二点,因为经常需要出差和加班,甲方需要你在1号把设备运到他们那边去,你2号就不行!而且,一旦出现项目逾期的情况,这种压力一般人是承受不住的!

总结

总之,上位机软件开发工程师虽然工作内容比较简单,但是需要面对复杂的同事和客户关系,没有一定的耐力是干不下去的,

当然了,如果您是一个能吃苦耐劳,想要工作稳定,对于薪资要求又不是太高的程序员,那么上位机软件工程师将会是您不二之选!

ad1 webp
ad2 webp
ad1 webp
ad2 webp