机械专业的真实待遇都是怎样的?

时间:2023-09-13 来源:首页/沐鸣2注册/登陆平台

  本硕机械,毕业自学C++转型工业方面软件,机械专业存在的问题以及转型过程中容易遇到什么困境,我都经历过很多,在这里机械相关专业的小伙伴儿分享一下希望对朋友们有所帮助。

  简单看一下应届生结构工程师和C++软件工程师在深圳的招聘待遇吧,直接在招聘网站查的,和校招的时候也差不多。看到这样的结果也和大家预期的差不多,结构工程师普遍待遇低于软件工程师。当然结构工程师去大厂待遇和市场上的软件工程师差不多,我本硕机械毕业季没有拿到大厂的结构工程师职位,如果能拿到大厂的结构工程师职位可能也会被金钱折服,这也是我决定转型C++工业软件的一个重要原因。

  对比完机械和软件的招聘待遇,再对比一下结构工程师和C++软件工程师的招聘要求,可以很直观的感受到机械仍然是以SolidWorks、Pro/E等软件画图为主,还会涉及钣金、注塑、压铸等加工工艺,以及安装、调试和出差等等。主要的工作是以传统的机械为主,电控方面涉及比较少,有可能涉及的电控可能就是PLC。反观C++软件工程师呢,C++软件工程师的招聘要求主要是C/C++编程能力、面向对象开发、设计模式、数据结构与算法、TCP通信、数据库等等计算机基础知识,与结构设计相比都是迭代成本低,开发成本也低。如果是结构设计工程师想验证自己的想法,需要先用SlodWorks设计好三维模型,如果是要求更高的零件会用有限元优化,但依然是要打样才能准确验证设计的是否可行。而软件debug一下,即便是在服务器上线也是很快可以发现并解决问题。这就是不同职位的区别,培养一个结构工程师的成本远大于软件工程师。

  机械相关专业想往机器人、工业软件、游戏、自动驾驶等方向转型的小伙伴儿,推荐学习C++,软件转型还有一个最大的问题是如何准备面试,面试也是有一定技巧性的,推荐看一下常见的软件工程师面试经验对于转型至关重要。可以去牛客看一下,不管是C++的笔面试题还是真实软开工程师的面试经历都超级多,同时牛客现在还新增了薪资爆料模块,如果想要了解各公司-岗位-部门的工作强度或者薪资都可以去看一看。

  C++为什么在机器人、自动驾驶等领域应用这么多呢?下面这张图片给出了基本的答案,很多底层的控制算法库是基于C/C++开发,比如快速傅里叶变换算法、矩阵计算、特征值求解等等,再者了解过单片机的都知道,单片机需要控制IO也是用C/C++编程,机器人也是嵌入式产品,也需要与IO交互。机器人最关键的一点是对实时性能要求非常苛刻,性能要求严格的地方C/C++就是王者。目前做工业软件开发,工业软件内核也是基于C/C++开发。

  具体每个公司的待遇是保密的,但和招聘网站查的出入不是很大,工作内容可能和招聘要求的出入比较大,想详细了解公司的招聘情况、待遇和工作具体内容找校友是比较靠谱的,出了校门之后校友是职场上比较重要的资源。我换工作的时候在领英上遇到好几个做猎头的校友,校友就帮忙修改简历投递合适的公司。

  领英是招聘平台中比较特立独行的,职场社交是领英的一大特色,我添加的领英好友包括公司总裁、校友、猎头、C++工程师等等,这也能帮助自己一直可以了解职场的发展动态。

  学习不要用情怀自我感动的稀里哗啦,个人而言学习的目标就是自身利益最大化找到合适的工作。多看看新闻,国家也明确需要加强基础研究,加强算法研发。不同的职位发展或者待遇是由行业平均水平决定的,个人情怀只能左手温暖右手而已,选择大于努力,选择适合自己的而且有发展前景的领域不管是未来的待遇还是每天的工作状态是不一样的。

  传统机械、传统汽车等等已经成为成熟的本体,智能化、智慧化的实现需要软件和算法。靠曲柄滑块、四连杆机构能智能化吗?

  工业4.0下的智能制造需要机器人、物联网、大数据、云计算、工业软件等等前沿技术与传统制造业的深度融合来实现。

  自动驾驶汽车可以看做是传统汽车+GPS、激光雷达、视觉、AI等技术而形成,前沿技术是对传统汽车的赋能。这些传感器背后就需要非常多的软件和算法支撑,算法背后就需要线性代数、概率论、高等数学、复变函数与积分变换等数学知识,比如20世纪伟大的快速傅里叶变换算法你是否了解过呢?

  L1和L2范数在机器学习中应用非常多,学完线性代数是否搞明白范数的等价性呢?是否搞清楚不同范数对应的图像呢?

  数据分析或者图像处理中经常用到协方差矩阵,协方差矩阵的特征值和特征向量是否知道是什么含义呢?如果不能搞明白这些基础的概念,面对新的问题时怎么建立数学模型呢?

  火的一塌糊涂的人工智能、机器学习、深度学习等概念到底有什么区别呢?有多少小伙伴儿想往人工智能方向发展,但人工智能到底在解决什么问题,需要什么数学知识都没有搞明白呢?仅仅用Python调包调参数能是你的核心竞争力吗?AI也是有其局限性的,比如工业软件开发很少用到AI,为什么呢?工业软件要求准确可靠,而AI是基于概率统计建立的非精确数学模型,结果是有准确率的概念,比如做曲线拟合,最小二乘法简单好用,如果用机器学习就非常复杂部署也费尽儿。

  想做AI方向需要比较好的数学基础,可以从经典的算法开始入手学习,比如聚类分析、支持向量机、贝叶斯等等。这些算法中会用到线性代数、高数等等大学数学知识,当然还有很多新的概念,比如对偶,原始问题不好求解可以分析其对偶问题,其实大学高数已经应用过对偶优化,高数中解决约束优化问题的拉格朗日乘子法就是对偶。

  下面就是拉格朗日对偶解决约束优化问题的数学模型,想深入学习优化问题的建议看一下凸优化的书,本科的线性代数和高数可以在凸优化中找到用武之地,大家学完高数和线性代数基本找不到这些知识有什么用,数学主要是建模和优化求解,本科学的数学主要是基础知识,优化方面基本没有涉及。高数中的拉格朗日乘子法用的时候只是感觉很魔幻,什么原理是完全不懂的,更不要说建模解决实际优化问题。

  我虽然本硕都是机械专业,但我最大的爱好就是看数学数,线性代数、概率论、高数、凸优化等等英文版的书都看过,研究生期间做智能优化算法的时候这些知识也用到过。当前做算法很难再提出原创性算法,现有的算法能学会并综合应用就很不错了。

  学习支持向量机、贝叶斯、聚类分析等机器学习相关的算法最好是用Python,Python有很多库可以直接调用快速搭建学习环境验证自己的想法。

  下面是Python用sklearn这个库做一个线性的SVM实验,非常简单,如果用C++实现就比较复杂,这就是Python的优势,Python的库非常丰富,而且Python是胶水语言需要什么功能加上几行代码即可,这也是Python大火的重要原因。平时工作做工业软件相关的算法也是这样,用Python或者Matlab快速验证算法,一个复杂的算法用C++验证需要一周时间,Python或者Matlab只需要一上午就能解决,如果算法设计的没大问题就用C++实现并落地。实际的算法开发就是各种编程语言配合,各司其职,真正发挥出各种编程语言的优势,形成优势互补。

  Python入门之后最好还是做一些小的project,如果是本科可以参加科创比赛,如果是研究生做科研也可以尝试用Python,做的project以后找AI相关的工作也算是项目经验。

  如果苦于不了解深度学习等等AI相关的知识,也不知道背后需要什么数学知识,在校的小伙伴儿看一下《深度学习的数学》这本书可以快速地了解深度学习,需要什么知识再去看相关的教材即可。

  如果是对界面应用程序的小伙伴儿感兴趣可以学一下PyQt,我从机械转型软件的第一份工作就是做Qt C++开发,不过Qt C++做开发难度比较大而PyQt基于Python开发非常简单。

  主要还是看个人选择,如果是计划转型工业自动化相关建议学习Qt C++开发,转型第一步是进入相关行业,不用奢望多么高大上,有了1年左右的C++开发经验再跳槽找相关的软件工作就很有优势了。

  支持向量机SVM主要是基于核函数,常见的有线性核函数、多项式核函数和高斯核函数等等。

  学习C++之前先了解C++的应用领域有哪些,C++主要用在对性能和可靠性要求比较高的场合,像银行的交易系统。对性能要求非常高的场合像游戏引擎,机械常用的CAD、CAE、CAM等工业软件,动画常用的Maya 3D,图片处理常用的Photoshop,常用的开源数据库管理软件MySQL等等。C++的优点就是开发效率比C语言高,而且性能与C接近,C++之所以提升了开发效率就是C++支持面向对象的软件开发思想,C语言比较难的指针问题C++设计了智能指针防止内存泄露。C++最大的特点就是难学,机械专业的小伙伴儿学过C语言都被指针毒打过,当时学C语言的时候考计算机二级很多都是靠背题的。能否坚持学好C++,关键的一步就是学习资料的选择,大学期间课本漏洞百出,课本上的程序很多敲到VC6.0里都不能运行,这对于编程的初学者是巨大的打击。

  Linux大神Linus Torvalds有一句格言就是“talk is cheap, show me code.”,这句话道出了学习编程的真谛,编程学习一做题看书的思路是绝对不行的,看很容易懂,但看完coding的时候什么都不会写。不用说写代码,就说C++的面试知识点不写程序就很难理解,C语言和C++中都常考的结构体所占内存大小计算,实际在考察字节对齐的概念,如果没有写代码验证过就很难理解。还有C++继承中的钻石问题、继承中多态的具体实现原理、抽象类、静态成员函数与静态成员变量等等。编程仅仅是觉得可以赚钱是比较难坚持下去的,如果觉得coding有趣就会投入大量的时间去学习。

  码代码也非常累的,要么头发怎么悄悄的掉了呢?编程的学习就是在解决问题中积累成就感,是这种成就感在驱使你继续学习新的知识。

  想学C++的小伙伴儿推荐看一下这个入门资料,大佬带你了解C++服务器端程序开发流程、Linux的基本使用、经典的排序算法、软件工程师面试等等各种问题:

  下面就是常见的C++软件工程师的招聘要求,现在流行云服务,比如SaaS/软件即服务,以前都是桌面应用软件只有安装到本地才能使用,非常麻烦,如果不会安装还需要请别人帮忙,SaaS的理念就是软件服务化,比如需要用三维建模软件浏览一下设计文件,直接在浏览器上找到这个软件的服务界面打开本地文件即可,就是即插即用的概念。

  下面就是Linux平台下C++常用的Vim开发工具,保存并退出文件只需要输入“:wq”即可,仅仅是保存输入“:w”,编译也是非常简单的命令“g++ -std=c++11 main.cpp”。

  下面是C++在游戏、图形软件、web浏览器、三维建模软件、数据库、操作系统等领域的应用。

  推荐一个零基础学习C++的路线,下面推荐的两本书是我自学C++转型看的资料,书不必多,贵在精,好的书如同朋友,“朋友不在于多,贵在风雨同行;言语不在于巧,贵在出于真心。友情到最后,拼的是人品;真正的善缘,从不会输给时间。”。

  编程学习第一步最笨的也最靠谱的方法就是找一本经过大家认可的C++入门资料,边看课本理解概念边敲代码,在敲代码和debug中加深对类、继承、虚函数、成员函数、成员变量、构造函数、copy构造函数、赋值构造函数等基本概念的理解。

  C++编程1个月左右的时间入门之后,就需要开始加强数据结构与算法的学习,简单的数据结构就是字符串、数组、链表等等,稍微复杂的就是二叉树、堆、图等等,算法方面简单的就是位运算、链表翻转、循环数组等等。数据结构与算法也是C++软件工程师面试重点考察的知识,

  下面的一张图片《数据结构、算法与应用:C++语言描述》英文版中讲vector实现的部分,给出源码而且有非常容易理解的解释。

  另外C++开发主要是Linux平台,至于学什么有用,看招聘要求非常直观。

  找工作的时候我只学习了C++和数据结构与算法,Linux是工作过程中学的,看的是大佬推荐的《UNIX环境高级编程》,Linux平台下开发不像windows系统那么多图形化界面,linux主要是用vim文本编辑器写代码,用g++编译器编译程序,调试常用gdb,这些工具的使用基本都是依靠命令行。

  Java主要做企业软件开发,比如ERP、CRM等等。这些软件的特点就是业务逻辑复杂,算法一般要求不多,对逻辑性和项目经验要求比较高,比如高并发。

  我就是普通本科机械专业,本科期间参加很多比赛,像高数、机器人、数控、力学、无碳小车等等,但找工作是非常没有竞争力的,周围不考研的小伙伴儿能找到结构工程师的工作就算很不错了,很多是工艺工程师和设备管理工程师,这两类岗位是需要经常去车间的。本科在读的小伙伴儿加强高数、线性代数、概率论、英语、编程等知识的学习,即便是考上985的机械专业研究生也是非常划算的。我学习高数的方法就是参加高等数学竞赛,学校有学科竞赛,也有全国大学生高数竞赛,如果是从大一开始看考研数学资料不参加竞赛是坚持不了多久的,学习是讲究反馈的,要不大多数小伙伴儿不喜欢学习高数呢,主要是放眼望去看不到有什么用。参加竞赛那证书加分拿奖学金就是一个快速的反馈,获奖就能大大积累成就感,考研的时候报考985也比较有信心。

  考研最关键的就是信息,本专业考什么专业课?专硕与学硕什么区别?考研数一和数二什么区别?选择985还是211?本专业研究方向怎么选择?考研学校如何选择?等等这些问题都是考研提前规划需要了解的信息,知己知彼百战不殆,考研也是一样,获取的有价值信息越早越多越能增加考研的成功率。

  看一下工业软件算法工程师招聘中对数学的要求就知道学数学是多么重要,数学有一点就是需要长时间投入才能达到运用自如,应对期末考试那套突击手法是不行的::

  考研数学全书是我大学看的最多收获最多的一本书,高数、线性代数和概率论平时学习和期末复习主要就是看考研数学全书,考试的时候遇到很多原题,线分,高数和概率论也都是98左右,最后考研数学考的还可以130左右。机械专业的小伙伴儿不建议研究太难的数学竞赛题,校级竞赛一般就是考研题难度,看考研数学全书拿个二等奖和三等奖不难。其他时间去学习编程和控制相关的知识,加强交叉学科的能力。

  再次提醒:大一大二准备考研的小伙伴儿,最好参加学科竞赛,通过竞赛积累信心和成就感。

  数学只有在本科期间才有时间学,到了研究生阶段学的非常少,读研是以做科研发paper为主,学习是问题驱动式的,科研需要什么知识就去学什么。高数中的最小二乘法可以查一下这个算法有哪些工程应用,尝试用C/C++编程实现就非常锻炼能力。线性代数中学的协方差矩阵也可以查一下协方差矩阵的特征值和特征向量有什么实际含义,有什么工程应用。复变函数与积分变换中学的傅里叶变换算法可以尝试用C/C++编程实现,传统的傅里叶变换算法时间复杂度是O(N^2),实际项目是用快速傅里叶变换/FFT,里面用到蝶形算法,FFT的时间复杂度直接降到O(NlogN)传统傅里叶变换到快速傅里叶变换经历了几十年的时间,正是FFT的出现信号的实时处理才成为现实。真正去实现FFT算法才知道这个个算法中的两个公式是多么伟大。

  读大学或研究生甚至博士目标只有一个,就是找个好工作,那就不用太纠结专业,专业仅仅是一次选择而已,看职场需要什么动去锻炼就可以了。

  从车企的招聘可以看出传统机械已经不能适应时代的发展,需要注重跨学科知识的学习,比如加强编程和算法的学习。

  考研竞争越来越激烈,早点了解考研的事情可以有针对性的做一些大学规划,我大一就开始看考研数学全书,参加了很多高数竞赛,大学期间非常充实。

  现在考研人数越来越多,研究生毕业压力也是越来越大,有计划读研或者已经读研的小伙伴儿需要了解一下科研究竟需要什么能力,大学期间是否可以针对这些能力做一些科研的尝试呢?

  回答者@Terrell,本硕机械毕业自学C++转型工业软件,有需要欢迎交流。



上一篇:为什么我要劝退机械专业
下一篇:机械类专业有哪些