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

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

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

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

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

 

 

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(控制算法工程师是怎样炼成的)