关于机器人状态估计(9)-如何成为全栈工程师

今天的内容总体和标题并不会太匹配,但是是一些重要的知识。

先发两段一位我非常佩服的超一流程序员对当今世界的整体思考,挺哲学和化学的(可以联想一下目前不断迭代的原神新版本和越来越慢的加载速度):

      游戏开发者往往想从非常高水平的游戏玩法和互动视角来思考游戏开发,结果却陷入了低水平的整体性能。这是因为必须是高性能的代码数量和使游戏能够完成的代码数量之间的差距不断扩大。面向对象的开发技术提供了良好的高级语言方面的覆盖,所以高级程序员对他们的工具很满意。性能专家不断在寻找用硬件做更多事情的方法却 越来越边缘化(性能专家的边缘化恰好在VIO中反置),以至于很多时候内容创造者认为他们没有参与优化过程。在游戏开发中从来没有太多的中间立场,这可能是大型公司所使用的结构和性能技术似乎没起作用的主要原因。第二个原因可能是游戏开发者不会去开发那些需要进行十年维护的系统和应用程序。因此,他们不太可能担心为什么他们的代码应该被封装和保护,或者需要有很好的文档记录。当游戏开发在20世纪90年代末首次蓬勃发展,到现在成为规模更大的工作室时,学术或企业软件工程实践都被视为不可信任的,因为无论这些工程在哪里实现,游戏性能都会急剧下降,每当游戏公司新的潜在员工来自这些行业,他们不会给人留下深刻印象。随着游戏机变得更像标准的微型计算机,标准的微型计算机在设计上更接近旧的大型机。而实际上一些标准的专业软件工程实践才可能会更有用。现在,虽然游戏的规模已经增长到与硬件相匹配,但游戏行业已经不再关注那些非游戏开发实践的发展方向。作为一个行业,我们应该关注其他人在我们之前的研究与实践方向,而大量的学术和专业发展技术却走向了各种乱七八糟的模拟和大容量数据分析(如AI当下发展中的各种歧途)。其实我们仍然面临着特定行业的挑战,比如我们在足够庞大的AI环境中所经历的高频高度异构转换需求的问题,我们有网络环境中用户距离与收发的问题,当MMOS有基于位置的事件时所面临的新问题,因为每个人都试图给其他人发信息所带来的带宽n²问题。

      类或对象的功能也来自于对内部状态的解释,以及随时间推移对状态的更改的解释。事实之间的关系是问题领域的一部分,可以称为意义,但事实只是原始数据。这种面向对象的方法是不可能的,这就是为什么每次事实获得新的意义时,意义必须作为包含事实的类的一部分来实现。分解类,提取事实,并把它们作为独立的组成部分保留下来,给了我们一个机会,远离那些不断灌输永久意义的课程,而不是偶尔不得不通过不那么直接的方法来查找事实。我们不是按意义存储所有可能关联的数据,而是选择只在必要时添加意义。当它是我们试图解决的直接问题的一部分时,我们就增加了意义。

        我们的团队里我应该是工龄最长的工程师加PM,华为9年港科4年紫川7年,软硬算都参与过,但实际我擅长的那些开发技能和技巧在当今世界里相对是有些落伍了(汇编,关系型数据库,时钟处理这些),当然我还是在不断学习和进步。我的同桌是一位15年经验的优秀C系老工程师(目前国内应该就他一个人逐行拆解了某“神”级VIO,做完了注释写完了模块流程图与思维导图),CTO是硬件尖子生和动手达人,目前最接近全栈的也是他(但是软件能力还是有短板),另外几位优秀的RC与RM队长,都是前途无量的年轻人。再就是整个PR过去7年来构建的整个研发部门与体系其他优秀的同事们了,其实他们也没在管我们这块,主线机器视觉业务事情还是太多了,毕竟科研经费有限的情况下,企业实体首先得解决吃饭问题。那就讲讲全栈吧:

  1. 首先第一点,我们是不太认可全栈的,因为我国程序员整体的水平非常低下(包括我们),就像我们组,实际上并没有真正的全栈,每个人都擅长一部分再精通一点点,全部形成的组合才构成了一个强力的全栈形象。也就是说其实最重要的是团队

  2. 那未来会不会出现真正的全栈呢?答案是一定会!即使强如稚晖君,其实也是融入在华为中的一份子,但是随着这些年我们与世界走得越来越近,我们的年轻人开始越来越意识到自己和主流世界的差距(当然也不排除混出了一堆利用信息茧房吃剪刀差坑蒙拐的混子),这样就会有越来越多的年轻人保持谦逊的心态,最终成为全栈。

  3. 成为全栈,一定要有热爱,这是基础。哪怕是热爱金钱,然后为之往死里研究技术,其实也是勉强可以的。

  4. 砸时间,毫不吝啬的砸时间,没有什么捷径可以走。当然砸时间的前提是一定要先把自己这个主路径的能力族组合搞搞清楚,再去砸时间,否则是浪费时间!这里最重要的因素是切忌浮躁。

  5. 前面4点有点鸡汤,最后集中整理干货,第5点:细节Details。这里还是以VIO举例。乱花渐欲迷人眼,很多摸VIO和VSLAM的同学动不动就上来说今天某某厂又发新片了,今天哪哪哪又来了个新开源(狂拽炫酷霸秒所有)blabla的。其实很多工龄都未满三年。。。NANO和XAVIER没摸过。。连个L1 CACHE和L2 CACHE与内存的区别都整不清楚。。。其实整个VIO甚至整个多传感器融合融态学科全部精通都不算是全栈,因为感知也不过是机器人三大主领域之一。所以没有人可以真正成为全知全能的全栈,最多就是某一个细分领域的全栈。 那应该关注什么呢?首先如果想成为机器人领域的全栈,又是从感知开始的话,是不是应该先好好通读几遍高翔博士的14讲?看完之后去看Bafoot教授的机器人学中的状态估计,如果这2关都过了你还没有放弃甚至更感兴趣了。那理论部分就算是过关了。在新的阶段中整体去了解一下电机与电控,了解下减速机工作原理,看看MIT的Odrive,同步学习下CAD和机械,多看看优秀的机械设计,在这块有一定了解的同时就看看自己本科或硕士的专业,CS就恶补电子,电子就恶补软工。工具方面就好好地选择C++,不要装逼的去学C,已经2022年了。抽时间去学习下小型机/中型机/大型机,研究过去20多年整个硬件各个U和多核化(主要是CPU,GPU,DSP,FPGA和NPU,深入了解它们的工作原理和设计机制,花大量时间研究并行化)的整个变化。学习下关系型数据库,多实践编程,至少慢慢能把指针用好。 对各种运行库的基本思路是如果会耽误关键工作的话能用就用,但是不要依赖,有空时能不用坚决手写。能在开源改尽量不手写,但是同样一定要清楚整个逻辑架构。一般这些全部弄完又不走弯路的话,大概最快毕业后硕3-本5年,这时候你应该在30左右(不要拿稚晖君这种从小开始整的距离,稚晖君只有一个,我们都是从菜鸡程序员开始的),恭喜你,至少在机器人细分领域,你已经是一个全栈了。这个时候如果学科还在并且蓬勃发展时,你就可以开始引领自己真正的系统级工程了。

       这时候写这个是因为当今的中国正在发生深远的变化,随着国际形势的发展,越来越多强力的程序员和工程师(仅我就有8-9位上下的同年)开始从大洋彼岸归来,而他们带来的除了更加系统化的工程与科研能力,也将是更加剧烈的内卷与竞争,同样留给“聪明人”们的时间也会越来越少。相应的好事是整个环境会越来越尊重技术,因为我们开始需要更多的和真正的突破。“炫技”或者“深卷”本身都是没有意义的,回归到商业本质上来,积极和勇猛的拥抱市场竞争,才是我们应该去进行的关键路径。也许本文有鸡汤味或者爹味,但是爱听不听啦,哈哈,本来就只是写来送给那些真的猛士们~~~

你可能感兴趣的:(机器视觉相关科普专栏,机器人)