控制算法工程师是怎样炼成的

搞算法的那帮神棍一天都在干嘛?

没干啥事,凭什么拿那么高工资,太不公平了?

想成为算法工程师该怎么修炼?

能问出这些问题的人,多半不是搞算法的同行。不过下文会解答这些疑问,以帮助更多的人理解算法工作,特别是有雄心的老板,负责的HR职员,专业的猎头,以及有志于算法的工程师。

 

 

认知的过程,是一个理论和实践不断循环的过程。理论是前人从实践中总结的,去实践才会对理论有更深刻的认识。在不断实践的过程中,又不断总结经验教训,进而上升为理论。“流水不腐”,让认知循环运动起来,不断更新认知,才有源头活水,才有不一样的工作输出,才有长久的职业生命力。这也是谈论“工作经验”时要把握的内涵。

理论和实践的辩证关系,具有哲学上的普适性,当然并不只针对某一个人。而控制算法的特点决定了对它的认知过程,也决定了控制算法工程师的成长规律。

首先是数学模型,客观世界是连续的,使用微分方程组描述;算法是数字实现,数字世界是离散的,使用差分方程组描述。其次是专业领域知识,自动控制需要熟识自动控制理论,知识元有:传递函数,状态空间,稳定性,反馈系统,状态观测器等。再次是数字实现,CPU用编程语言如C语言,FPGA用硬件描述语言如VHDL,这需要掌握相应的数字器件,精通对应的语言。这些都是基本的知识点,但是需要打通任督二脉,将这些知识点融汇贯通,才能做到胸有成竹,才会运用得游刃有余。

数学是一种能力,是在从小学到大学的漫长学习过程中培养起来的。一些人高中选择学习文科,就是因为看到抽象的公式头皮发麻。数学能力就是把畏惧变为欣赏,看到公式背后的美妙并由衷赞叹。数学公式的背后就是奇妙的自然景点,只是欣赏这种景点靠的是脑力而不是眼力。算法工程师需要数学这种能力,将规律抽象为公式,透过公式看到规律。因为被控对象要通过公式描述,控制规律也是公式描述的,相互交流也得用公式表达。

在学生时代看来,自控理论有一堆公式,一堆理论,非常像数学。那是因为自控理论已经是一类规律的总结,对很多被控对象普遍适用。只有联系实际,才会知道那些概念意味着什么。比如位置超调,撞到机械限位,机械就坏了。比如稳态误差,幅值大了会明显感觉到抖动,频率高还会听到难听的噪音。不懂控制理论,有人就敢质疑那些系统设计方法太理论。不懂控制理论,即使有一套算法实现,也调不了一个参数。不懂控制理论,调了参数,也无法判断是否最优。

编程语言和数字器件,是两门实践性较强的技术,需要通过实践去强化认识,加深理解。在数字器件上编程练习,是掌握这两门技术的有效方法。数字器件众多,学了51单片机,再用一用复杂点的单片机,总结出单片机一类器件的应用规律,就不再局限于某一款单片机。对于一门编程语言,掌握全部语法和控制流程只是基础,简洁易读可重用也是要追求的,软件组织形式编程思想也必须被重视。算法还要讲究时间空间效率,嵌入式算法对效率有更严苛的要求。

“万小时天才论”的确是有道理的。10000小时是成为一个专家的必要时间,这意味着连续三年半每天8小时有效投入。除去周末节假日,再减去无效时间, 5×8小时这样工作,大概应该要5年以上。8小时之外的业余时间可以用来补充有效投入时间,从而成长得更快。所以“一个人的成就取决于他的业余时间”,这种说法也不只是鸡汤。但是996却不是一种可持续的工作方式,因为长期的疲劳状态,必然对应长期的低下效率,而且也削弱8小时之外可能的有效投入,不利于长远发展。

简单重复的工作,比如流水线工人,理论实践循环的最终结果,就是机器人的应用及其效率的不断提升。复制粘贴的程序员的确应该有一些危机感,在工作过程中,应该向深度或者广度不断拓展,否则就徒然浪费了成长的时间。认知必须要跟上“工龄”,否则就会被后来者淘汰。因为大家都默默遵守这条规律:“酬薪”跟“工龄”,“工龄”跟“工作能力”,并不是成正比例的关系。只是并不是都能清楚地意识到。较为合理的关联是 “酬薪”跟“工作对象”“工作能力”,单位由“工作对象”选择合适的“工作能力”,个人根据 “工作能力”确定“工作对象”。

作为一个控制算法工程师,要名副其实,就要掌握更多的理论知识和实践技术,查阅大量中英文文献,不断跟踪国内外先进的进展,静下心来踏实沉淀,持续投入,深入理论,联系实际,输出创新的工作成果。沉淀不浮躁,复杂不重复,这才是控制算法工程师的硬核技能。经验不等于手熟,算法也不是简单重复,无论怎么讲,算法都是复杂的创造性劳动。

### 控制算法工程师必备知识和技能 #### 专业知识与技术背景 控制算法工程师需具备扎实的编程能力和良好的编程习惯,精通C/C++语言,并能熟练运用VS或MATLAB这样的开发工具[^1]。深入理解和应用数据结构(如链表、栈、队列、树等)、算法以及软件设计原则对于构建高效可靠的控制系统至关重要。 #### 数据库与面向对象编程 熟悉数据库编程有助于处理复杂的数据存储需求;而掌握面向对象编程(OOP),能够使代码更加模块化易于维护和发展。 #### 深度学习框架和技术 为了适应现代自动化系统的智能化趋势,控制算法工程师应该至少掌握一种主流深度学习框架——TensorFlow 或 PyTorch,并理解基础概念如训练过程中的优化策略、不同类型的激活函数及其应用场景、防止过拟合的方法论即正则化手段等[^2]。 #### 高级机器学习模型的理解 除了传统的监督/非监督学习之外,还需要对embedding方法、attention机制、多任务学习(multi-task learning)、强化学习(reinforcement learning)及在线学习(online learning)有所涉猎并形成基本认识,这些高级特性往往决定了智能决策系统的表现优劣程度[^3]。 ```python import tensorflow as tf from tensorflow.keras import layers, models # 创建简单的神经网络模型作为例子展示如何利用tensorflow进行建模 model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(32,))) model.add(layers.Dropout(0.5)) model.add(layers.Dense(10, activation='softmax')) model.compile(optimizer=tf.keras.optimizers.Adam(), loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True), metrics=['accuracy']) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值