大家好,今天想跟大家聊聊我在2022年经历的一些传统行业和互联网的差别。因为一些机缘巧合,2022年我在偏传统行业的工业智能制造做项目。项目主要是一些通过机器人、机械臂代替一些危险岗位人工操作。
薪酬的差异
大家最关心的肯定是薪酬问题,所以我们直接先聊这个。
一个中高级 Java 在互联网环境下,一般能在20K以上。由于我所在的项目中,几乎不用 Java,所以我拿 C# 的岗位来说,同样的水平能在15K以上。
这是我所见到的差距,互联网和传统行业薪酬上的差距还是很大的。
岗位任务的差异
前面我有提到我所在的项目,几乎是不用 Java 的,所以这一年来我都是用 C++ 和 C# 做的项目开发。刚从 Java 岗位转过来的时候,是非常的不适应的。因为我的工作主要是以做算法落地,由于项目的特殊性,Java的效率达不到 C++ 的效率那么高。
相比 Java 每天大部分时间的 CRUD, 换到 C++ 这边每天都是做性能优化,做算法优化。互联网 Java 岗的话,基本上是基于某个业务写一些业务代码。有些同事使用 C# 也主要是一些上位机方面的任务。
项目和技术
我抽一个项目来讲讲,为什么没有 Java 岗位的需求。在做 Java 的同学眼中,可能 Java 是万能的,没有 Java 不能做的,Java 的性能非常好。 但是我们的项目 Java 是没办法满足的。
我简要介绍一下,项目中我们有 10 秒的时间,来完成机械臂拿焊钉、拿焊牌、机械臂到钢材面前把焊牌和焊钉焊到刚才上面。
机械臂的一系列工作都是C#来和机械臂上的编程进行交互的。大家可能会有疑问,这个交互 Java 不能完成吗?那非常抱歉,机械臂生产商会提供 C++ 和 C# 的SDK ,但是不会提供 Java 的。 Java 做的上位机程序也过不了国际标准。
上面的描述中,没有提到 C++ 编程的内容,那会在哪一步呢?
我们的 C++ 程序位于机械臂移动到钢材面前之后,C++ 程序需要去出发机械臂上的相机拍照,然后需要对图片进行推理,再进行计算得出最佳的焊牌点。再通知上位机程序去控制机械臂做焊牌的动作。
C++ 程序这一块,我们需要压缩到 3 秒钟来完成拍照、推理、计算的过程。拍照几乎不花时间,但是推理如果使用CPU来做的话,会慢很多,CPU 和 GPU 的推理速度会相差非常大,所以我们能用GPU的话,基本上还是会用GPU来完成。
计算过程中会依赖于图像处理方面的一些库,比如 OpenCV 最好用的开源图像库,3D 点云方面的一些库, 比如 PointCloud Library。 这两个方面的库在 Java 中,几乎处于不可用的状态。 我曾经想用 JavaCV 来完成 OpenCV中同样的事情,但是效率非常的低下,所以我最终还是放弃了 JavaCV,选择了 C# 的OpenCVSharp 和 原生 C++ 的OpenCV。
最让我震惊的莫过于算法上的差异了,在互联网这边,我们说算法基本上是排序、查找之类的。到了这边天天打交道的是 最小二乘估计、梯度下降、卡尔曼滤波等等。非常考验一个人的数学功底,在互联网呆了那么多年,可以说数学基本是还给老师的,天天补数学,有种上学终于没有白上的感觉。
由于我们项目中,拍照是 2个相机同时拍,需要对相机进行标定,做基线对齐,做到类似于人眼的感觉。这样才能得出某个刚才具体在某个位置。这里会用到一些线性代数的知识来做相机的标定。
数学在工业上的应用真是大开眼界。在互联网的时候,还真是没有相关的知识能用到项目上,大部分业务根本不需要这方面的知识。
最近的一个项目中还用到了物理相关的知识,我们需要通过程序来控制小车前进和停止,在这里我们就需要考虑小车的速度和距离之间的一些关系,需要尽可能的避免和其他物体的碰撞。
真的能够体会到以前的那句老话– 学好数理化,走遍天下都不怕。
结束语
虽然只是短短的一年的时间,但是明显的能够感觉到互联网和传统行业之间的差别。互联网更多的是在堆各种业务,来解决我们教育和生活上的一些便利。传统的行业更多的是在解决怎么让某件事效率更高,让人在某些危险的工作岗位上脱离出来。