浅论机械工程师与计算机工程师的异同

浅论机械工程师与计算机工程师的异同

[TOC]

当下大背景

一直以来,我对媒体中的科技与开发基本上等同于 ICT(IT) 行业的技术与开发的用法耿耿于怀。因为这明显是特权与优越感的赤裸裸展示,科技是科学与技术的统称,不仅仅包括工程的各个分支,例如水利,材料,机械,也包括理论研究的数学,力学等。 至于开发更广泛,只要是最终凝结为产品与服务的行为就是开发,也就是说不仅仅是理工科,营销,管理这些偏文科的岗位也是可以进行开发的。而这些岗位的作用在当下媒体的眼里直接被过滤了,仿佛只有信息行业做出的技术研究与开发才能被称之为科技与开发。另一个例子是算法开发基本上等同于计算机领域的 AI 算法开发,其他各行各业的算法也直接被忽略了。

与高收入,高优越感的信息技术岗位相对位的是传统制造业专业的被称为天坑的专业,例如土化环生机等。这些实际的岗位,收入相对不高,工作环境可能会比较恶劣,在信息革命下也没有足够的发言权加成,因此遭到了大众认知的鄙夷。身处这些岗位的工程师们心里可能都在暗暗琢磨自学点编程技术,转岗赚多些。

虽然 2022 年整体信息行业在裁员,缩小自己的规模,但在整体经济不景气的情况下,也许就是正常的经济现象。其他行业同样在大裁员,连这种关注度都博不到,很可悲。

我的疑问

为什么会产生这样的分化?这肯定与个体的智商能力都没有关系。

如果真的面临选择,哪种岗位/专业才真的适合自己?

选择了其中一种方向,怎样才能做到不偏听偏信与稳步向前?

我的话,既经历过机械设计的学习与工作,也经历过信息技术的习得与工作。基于这些经历与平日的思考,也许现阶段的我能给出一些粗浅的回答。

机械工程师与计算机工程师的区别

工程师的工作都是基于已经被一定程度验证过的理论,结合过往经验,摸索大规模工业化生产产品流程与技术细节的活动。只不过,机械工程师基于的理论是流体力学,热力学,电磁理论,动力学,机械原理,自动化控制原理等,操作的工具是计算机辅助下的机床,加工中心,流水线,压铸炉等,最终的产品则是 2B 的大型设备与 2C 的日常/军工等实际摸得到的产品。计算机工程师则基于计算机数学,计算机原理等理论,操作的工具是计算机等计算平台以及网络连接,最终的产品是软件或者互联网服务。这些不在本文的讨论范围内,我也没有能力展开讨论如此庞大的话题。这里所讨论的区别更偏向于岗位上个人工作感受的不同。

  1. 成就感的反馈速度不同。

    俗话说只要一台电脑与联网的一根网线,计算机工程师就能开始工作。但机械工程师做不到,不管你在计算机上的仿真如何详细与酷炫,最终还是要借助生产加工工具以及流水线将其变成实物才能做最终的确认与交付。对于编程而言,例如脚本语言 python,理论上敲入的每一行代码都能得到正确以及好坏的及时反馈,每一次 debug 成功的成就感都能很快反馈。但是机械制造很难做到,大工业生产已经很成熟的现在,产品的品质与成本通过精细化的生产供应链以及固化的开发生产流程得到优化,每个人的工作只是一个螺丝钉,自己的工作与最终的产品可能相差很多个环节。以我在主机厂研发汽车的车辆计划岗位为例,一般而言一款车型的大升级的周期在 3 年,前期市场调查以及企划部门的方案确定后,实际的产品开发设计可能只有不到半年的开发设计时间,一般都是在计算机上进行的仿真设计开发,也就是 デジタルフェーズ(数字开发阶段),结束后再去开发别的车型。最终可能需要再过一年多的时间才能真正成为市面上销售的产品。虽然期间会有フィジカル(实车验证) 的环节,但很多设计的想法要等到最终产线上确认才知道效果。虽然公司会设计很多策略保持接触实物的感觉,例如日产会定期拆解其他公司的车,组织大家来参观,或者是最新款的车组织试驾,或者是组织参观碰撞试验等活动。但是并不是直接的反馈。公司又通过 QCT(quality, cost, time),即产品品质,成本以及开发时间的数字指标来激励员工进行设计优化,但这些数字并不能直接衡量工程师的个人开发过程中的成就感。例如,好不容易发现某个零件的某个面的角度改变了1°,作为设计师的我认为对于效能的提升很有帮助,提升了大概 10%,但不好意思,这个设计可能要要层层 review (包括项目上也包括行政上的)最终才能知道会不会认可,主要还是因为无法直接验证自己的想法只能靠经验与模拟。

    当然也存在一些机械的研究性质的岗位,例如半导体的尖端加工方法,微型医疗器械的研发等。这些岗位毕竟不是大多数,并且对学历门槛的要求比较高。

  2. 成长环境不同。

    学校里学到的东西在实际工作当中根本不够用。能做到与工作能力相匹配的提升过程大概有公司培训,师傅带领,自学,learning-by-doing,这么几种方式。我虽然很感谢日产在我社会人第一年的很多培训(基本一半以上的时间都在参加培训以及工厂实习),但内容实在没啥用处,很多都是形式化的。师傅带领就纯靠个人情商与运气,并且受到职场的天然属性限制,很多东西是永远不会有人告诉你的。learning-by-doing 也就是多多加班。成体系的自学与实践才是王道,用什么学什么,多总结与交流感悟才是最快的方式,也就是说陌生人之间的交流更重要。然而翻遍全网,有多少靠谱的机械论坛与机械方面的个人博客分享?计算机方面可就太多了,论坛,个人博客,社交账号,甚至是源码分享。

  3. 规则清晰程度不同。

    计算机天然就是一门规则清晰的学科,除了非原子性操作/并发执行顺序/系统任务调度/流水线排布等(如果较真的话,这些也是操作系统与硬件组合决定的,也是有算法可循的)这种需要特别注意的地方,基本不会出现二义性(当然计算机 CPU 也好,内存条也好,电路板也好,也是机械制造的产物,机械原理的不确定性在这里也会有影响,例如 SSD 的擦除次数上限等。这里以忽略这种问题为理想的前提)。bug 被写出来了,它就在那里,它不会有概率消失。不管现实世界如何复杂多样歧义,到了编程里,这些必须按照编程语言的语法以及其他事先约定好的规则(例如配置文件的写法,这种也算是广义上的编程语言,被叫做 DSL(domain-specific language))。毕竟计算机的输入输出就是 0 和 1。虽然软件工程化后会产生随之而来的复杂性,但是其他工程学也是一样的。机械很多在原理上就是不确定的。例如,零件的疲劳强度,不管你对材料配方精度要求多高,加工装配的精度要求多高,你无法预测零件所有的使用环境,产生的疲劳强度的结果就是随机的,只能给出一个大致的可靠区间来。记得有一个颇有名气的博主在博文中显露出对自己计算机学科的优越以及对数学描述语言不清晰的蔑视。我想说要保持敬畏的心态,难道你期待世界是一个全靠二进制编码来描述的世界吗?对物种不使用名字区分,全部由二进制编码去区分绝对是规则更加清晰的,难道大家都去记二进制及其转换的编码吗。不同的学科都只是为了解决不同方向上的问题的尝试实践总结,没有优越可言,哪个学科的发展后面没有路途人的血和泪。知识技术没有区别,使其不同的只是市场而已。

  4. 舆论环境与话语权不同。

    没有信息革命以前,知识与信息的传播可能更加依靠书籍,报刊,广播,电视甚至后来的 DVD。但是信息技术迅猛发展的结果就是发明这些新媒体/互联网技术的人获得了更多的舆论关注以及话语权。毕竟近水楼台先得月。另一方面,受早期开源精神的影响以及本身易于复现以及实现的影响,计算机从业者本来就相对于传统的工程学科更喜欢分享与共同进步(分享的边际成本非常低的原因,再加上计算平台在飞速廉价化,代码的复制粘贴只需要2步)。这就导致了技术如此广泛含义的一个词,现在居然狭义特指计算机技术。

  5. 复杂度不同。

    这一条与第三条本质上是一样的。机械工程师接触到的世界是最低 4D 的,参数的类型以及个数有时是无限的。理想的计算机处理就是一个函数,这个函数只接受自己能接受的入参,处理产出确定类型/个数的数据。当然,目前应用了神经网络等算法的 AI 技术产生了一定程度的不确定性(但是理论上通过把整个过程的计算过程都 dump 下来的话,也是不存在不确定性的,毕竟计算机里不存在纯粹的 random() 函数,虽然这么做性价比非常低,只是理论上),但是与机械工程相比,复杂度无法相比。例如,在汽车里放置一个普通的电子器件,仅从技术角度考虑,你可能需要考虑尺寸大小,自身的形状与周围部件的干涉,安装固定,电磁干扰与信号安全,汽车碰撞后的安全保证(例如短路漏电),应对较高较低温度下的表现,产生热量能否及时散发出去,水密性气密性,振动下的稳定性(噪声等),长时间后的可靠性,如何检测损坏与否,损坏后是否容易维修更换,重量大小是否会增加燃油消耗负担,安装位置会不会导致车辆外形变化进而导致风阻增加,加工组装容易程度,模具的开发难度,产线需不需要因此部件进行调整等等。如果再考虑经济性等其他因素,一个零件的审核与验证是非常耗时的。这就导致了 2 个结果。1 是机械设计非常依赖之前的设计历史,记得日产有前辈说「流用が一番いいね」(沿用已经被验证过的上届设计是最省事的)。2 是机械工程师是越老越吃香,因为设计的经验太重要了,机械设计制造领域的新技术又没有像信息产业一样做到摩尔定律可以指数级发展。有一个小故事形容这个很贴切,有一片海域礁石密布,很多有经验的船长也会触礁失败,但有一个船长几十年都没有失败过。别人问他是怎么知道所有礁石在哪里的,他回答说,我不需要搞清楚所有的礁石在哪里然后避开它们,我只要知道有一条路线是安全的,每次沿着固定线路走就可以。而互联网相关的技术甚至发明了 DevOps 的开发理念,小步快走,即便有些错误也没关系,都可以很快地回退或者解决重新推送。这种思路在比较成熟的机械制造领域很难想象。

  6. 生产模式不同。

    稍微专业一些的术语叫做边际成本不同。机械制造是一个高投入高资产的行业,对于人的投资与依赖不如计算机高。毕竟没有产线与设备,人才再厉害也造不出产品出来。并且由于技术迭代速度不快,很多人的经验与特定场景绑定,等新技术出来了,这些有经验的人已经无法掉头重新适应新技术,导致收入被严重限制。而计算机行业不同,只要成本不算高的运算器与网络(即便是大规模的服务器群,成本与一条大型自动化产线比起来还是相形见绌),人就可以在上面生产。人才就显得尤为重要,因此人的收入比例会相对高不少。但也因为生产周期与制造业相比较短(计算机软件与服务的开发可以先上线再迭代,并且用户的反馈数据较容易获得,因此迭代速度较快)的缘故,开发的节奏也相对较快。同时技术发展很快(虽然基本原理没怎么变),学习的精力成本也很大。

  7. 易验证性不同。

    这一点主要是从自学/研究(自我提高也是工作的一部分)的角度来说的。计算机相关的技术,大多数都能够通过一台或者多台计算平台以及网络连接来验证。并且由于计算机相关技术先天性的规则清晰性,存在很多验证不管是算法能力还是编码能力的“习题”(例如刷题)。举个例子,我新习得了一门编程语言,我希望验证自己的习得水平,证明给面试官看,通过手撕代码解决抽象问题的形式就能够实现。另一个例子,我刚学习了 Docker 技术,想在实践中加深理解以及掌握运用,我可以在自己电脑中装一个 Linux 双系统随便练习,每一步都能得到是否符合自己期望输出的Y/N。除了一些嵌入式相关的,或者比较稀有计算平台上的技术,计算机相关的技术天然比较容易验证。这种易验证性也直接导致了前文所说的反馈成就感。与之相对的在学习机械相关技术时,对知识技能的验证就没有那么容易,很多时候需要专业的设备,以及安全的环境才可以。例如,我学习了加工中心的加工工艺的技术,想要上手验证一下,你需要一台可能价值几千万 RMB 的专用加工中心才行。我想试一下换一种金属涂层的刀具对加工精度的影响,也许那种刀具在世界上连存在都不存在。诚然 CAE, CAD 等计算机仿真技术的发展下,可以一定程度来验证,但是讽刺的是,这些工业软件也是计算机技术的结晶,想要实现仿真效果,或许软件编写人员的机械知识比机械工程师还要牢靠。

机械工程师与计算机工程师的类似

现实一点说都是打工的社会人,但从别的一些角度来看还是有很多类似的地方。

  1. 产品 / 用户导向。

    不管如何难的技术,奇妙的构思,如果无法对用户产生好处的都是不好的设计与开发。如果对技术,理论以及想法こだわる(执拗)的话,可能学校研究所是更适合的场所。一切依赖用户,欺骗用户,利用用户的设计与开发都不是好的技术。记得,做路面干渉レビュー(与路牙等磕碰的检查)时,很多场景需要自己结合当前仿真的数据以及之前车的实车测试数据,想象出实际的磕碰的可能性以及磕碰最严重的地方会是在哪个部位。因为当时没有怎么开过车,觉得这些检查是不是根本不必要的,有谁会傻傻地往路牙绿化带上开。但实际上,自己开车才明白,有时候上路牙是不得已必须的,例如一些老小区里压根没有库位了,只有一半上绿化带才有空间停车。编程中也是如此,C++ 的代码开发中对于自己程序的用户,考虑到用户能做到的,都有可能去做,要在程序里把这些可能性要么通过交互提示出来,要么也可以直接让其无法通过编译,改好后才能编译运行。

  2. 工程的基本原理。

    处理一些相同性质的问题且其数量很有限的时候,可以像在学校里,用 my way 解决,也就是在资源允许的情况下想怎么来就怎么来。但是工程里,这种重复性问题数量会很大,需要考虑自动化解决方案或者是流程化解决方案。与人的协作也是,学校里2,3个人可以随时微信交流,手把手教会,但工程里必须考虑到分工协作。下面一些原则我觉得对不管是机械还是计算机工程都是共通的。掌握现有的工作流程与流程的持续改进。自己的工作成果充分考虑到上下游(同公司的不同部门,也包括其他公司产业等)接口的实现性。容易让没有什么基础的人也能够快速上手理解的设计。重复性的操作自动化实现。数据与成果的可视化。时间节点的意义等等。

  3. 系统性问题解决思维。

    汽车以及大型软件都是及其复杂的系统。对任何一点的改变都有可能导致系统未曾设计到的变化。例如某个车型下面放置的电池为了满足比上一代电池增加续航里程的需求时,通过增加上下方向上的尺寸(厚度)来增加电池容量。电池设计者设计后的结果发现,增加 5 mm 厚度对电池性能没有影响,采用了新技术厚度增加也不会导致电池整体质量增加,散热性能等其他性能都不受影响。然而,他没想到的是这 5mm 会导致底盘需要下降 5mm(因为为了改善上代产品的短板–乘坐性能,车内空间是绝不能让步的), 导致底盘下面的管道无法使用上一代的产品,而研发新的管道设计需要重新开发模具,设计生产模具至少需要 2 个月(打比方), 完全来不及。系统性问题解决思维就是在尽可能早的阶段收集到更多的信息,在实际开发过程中构思多个方案,并及时共享给收到自己影响的所有位置,即便出现问题也要综合所有相关需求与信息找到场景下的最优解。

哪种岗位/专业才真的适合自己

我自己的结论是跟自己性格相符以及感兴趣的岗位/专业才是适合自己的。

首先是性格。我是个偏急性子的人,对于反馈较慢的东西有天然的不满。因此机械设计很难让我觉得适合自己(那为啥当初还去做机械?人生不就是一个不断尝试然后自问的过程吗?)。自己开发设计的东西需要一年以后才能在用户手里得到确认。并且机械设计的经验积累相对而言是个比较漫长的过程,因为很大比例上的经验不是由自己能掌控的了的,这与产品开发周期,生产链的周期等都是关联起来的。计算机相关的东西,比较好的一点是,很多技术不需要太大的成本就可以自己实现练习。

其次是兴趣,这是个没法定义的东西,我只能说 follow your heart。兴趣真的是最好的老师,有它的驱动与支持,才是能坚持下去的最大动力。任何工作如果无法提供足够的兴趣与热情,仅仅依赖压力,或者最坏地,为了满足别人的期待的话,是没有办法长久持续下去的。

如何让稳步向前?

我觉得关键是要有敬畏的心态。这在前面也提及到了。

任何行业,任何岗位,任何技术,任何经验都是一个个人通过自己的智慧与努力得到的结晶。即便是自己成为了某个方面的”大牛”,不仅对自己熟悉的领域要明白自己所知所及的深度在哪里,也要对其他方向心怀敬畏,虚心求教。就像一个比喻里说的,当一个人圆的面积增加了,它的周长也增加了,并且周长增加的速率更快,它接触到的未知的领域也更多了。

不管是对别的方向充满敬畏是有意义的,对自己方向的敬畏更能催生出让自己多学多练多体会的通往卓越的道路。有人会问为什么要这么卷?如果内心真的佛系的话,我想你应该不会看到这里的。

为什么会提及这个问题?因为我感觉很多人非常浮躁包括我自己,充满了成长焦虑之类的东西。在改变与不变中犹豫,在往哪个方向改变中犹豫,选定了方向不知道自己能不能坚持下去而担忧一事无成还不如不改变。

我现在的态度是如果抛开收入待遇不谈的话,其实心怀敬畏的话,你会发现所有的方向其实都是值得「全身全霊をかけて探り続ける」(全力探索)的。

如果只考虑收入待遇的话,目标就太明确了,找到合适的机会,甩开膀子干就是了。

写于 2022 年 4 月底疫情管控的家中

浅论机械工程师与计算机工程师的异同

https://www.chuxin911.com/differences_mechanics_cs_20220421/

作者

cx

发布于

2022-04-21

更新于

2022-11-29

许可协议