知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

零基础自学编程10个月,拿到多份高薪offer,成为自动驾驶软件工程师

发表时间:2022-03-25来源:网络

写在前面的话

这是我的第一篇文章,因为之前一直会看别的大牛们写的博文来学习知识,秉承着opensource的原则和回馈大众的想法,我想把我的经历和经验分享给大家。每个人的个性不同,兴趣也不同,因此我说的方法和我的经历不对每个人适用,希望大家能从中获得对自己有用的经验~不喜勿喷

为什么想转行做软件工程师

我本科学习的是微电子学,学了很多关于如何制造硅片,以及工艺方面的知识,对半导体和理论物理方面有些许的知识储备。当年为什么选这个专业,其实完全是懵懵懂懂的,因为一开始对编程充满了恐惧,以及对软件工程师存在着青春饭的刻板印象,除了软件工程师外还算比较好混饭找工作的便是电子工程师,于是就选择了一个当时环境下比较热门的专业。进入大学后,发现自己对这一行不是很感兴趣,可是又没有转专业的勇气。于是就浑浑噩噩的混到了毕业。毕业后选择了留学这条出路,继续在集成电路这条路是前进。

经过了本科的洗礼,我发现自己对纯理论的知识实在是提不起兴趣,于是在研究生阶段选择了一个不太偏离本科方向,又能够多动手而不是纯学术的方向--数字电路设计。如果对电子工程方向 (EE) 有了解的同学应该知道,所谓的数字电路设计,就是利用你对物理和电路的至少,来设计出功耗比较低,而且性能也不错的电路版图。里面的分支也很多,有前端设计,后端设计,验证等等,我就不具体叙述。基本上我当时给自己定的目标就是在毕业后成为一个前端设计工程师。所谓前端设计工程师就是利用HDL语言: VerilogHDL 或者 VHDL硬件语言,在集成电路开发板上( FPGA 或者 ASIC )设计电路,然后利用Altera(现在属于Intel) 或者 Xlinx等公司的集成开发软件来对你设计的电路进行综合仿真。

基本上这个工作是一个对物理知识要求比较高(如果要成为优秀的前端设计工程师), 要对时序,竞争,延时等电路知识有很深的理解。虽然相比于纯理论来说会稍微有意思一点,但是仍然有些枯燥乏味。而且半导体行业在近些年在全球一直是夕阳产业,除了中国外。原因很简单,因为半导体的圣经摩尔定律,已经基本到头了,对于7nm或者是更小的工艺极限,量子物理已经是个非常严重的影响集成电路开发的问题,而人类对量子理论本身还是特别了解,于是导致了各大工艺厂商都不知道该如何开发新的工艺架构。这阶段是后摩尔理论时代。

废话有点多。。。因此在认清了这个现实后,我坚定了一个想法,就是转行。在一个不感兴趣的夕阳产业奉献我的人生,不是我要的人生。什么行业是未来的热门? 答案显而易见: 未来属于人工智能和自动驾驶。而且下一次的工业革命一定是围绕着IoT,AI等方向来展开的。而且这个趋势已经愈演愈烈。

所以在2018年的春天,我刚从半导体工程师的殿堂Intel实习回来,就决定放弃目前从事的行业,转身投向自动驾驶反方向。成为 一名C++工程师

这里我要抛出我对于转软件工程师的核心观点: 兴趣是转行的中心

你想转行的原因仅仅是因为工资和更好的就业机会,还是你真的对这方面感兴趣? 我之所以这么问是有原因的。当然每个人都想挣大钱,有一份稳定的工作。今天干得不爽,直接走人,换公司。但是对于转行来说,有一个先天的缺陷,就是你比所谓科班出生的同学来说,少了很多相关知识。这意味着你需要付出比其他人更多的付出和努力,才能追补上你之前欠缺的知识。因此兴趣是很重要的。如果没有兴趣,是不可能坚持长时间高强度的学习的。

其次另一个很重要的因素是: 项目

如果没有一个能够让你动手的开发项目,关靠自己看书自学,纸上谈兵,是没有办法进步的。因为很多C++的语法,是你不去上手,修改各种bug和错误,是永远无法理解和消化的。

当然如何寻找一个项目也是个很严峻的问题。因为我不是在国内读的研究生,因此给不了很多国内朋友的经验,我只能说说一些我在国外的经验和了解到的有效的办法

实习: 可以找到一份能够让你零基础开始的实习工作。因为实习生在国外来说是很便宜的,而且不用给你买保险,因此公司不会在意找个实习生他是否有很多的开发经验。相对于正式工作来说,实习会容易寻找很多在研究生做学生工: 在研究所打工是更加实际和现实的办法。因为学生工的工资是更加的便宜,基本等于不要钱,每个月付给你400欧左右的工资,让你干各种工作,对于研究所来说是特别实惠的。而且对于学生而言这也是win win的选择。毕竟你没任何经验,有个能够让你动手,学到知识的地方,并且还给你工资,何乐而不为。我早期的时候Linux方面的经验就是通过在研究生打工学来的。大学的课程不会去教你什么是linux什么是Git什么是shell。当时我就是靠着我的厚脸皮,一遍遍去研究生问,他们需不需要人,然后得到了一份能够让我动手的工作毕业设计: 寻找相关方向的毕业设计也是一个很好的方法,我是建议在国外求学的学生不要为了方便毕业,选一些没有实际意义的题目,毕竟对于大部分学生来说,这是一次难得的动手机会,你不利用这个机会好好学,去社会上,公司里,是不会免费教你的朋友:) 而且研究所的导师大部分都很好,毕竟他们都在象牙塔里,其实也都还是学生,没有经过社会的洗礼,对他辅导的学生都会尽力解答你的问题。不要害羞,不懂就问:)Github上的Tutorial项目: 这个方法是我认为的最次的办法,因为我没有试过,毕竟tutorial的项目太过于简单,但是besser als nichts。怎么说也是个项目吧。。。

这里我叙述下我从零基础到能够看懂并且修改有10多年C++开发经验的前辈源代码所经历的事情:

我当时就是选择了一个很有挑战性的题目,一个很热门的方向ADAS。而且我的导师也是出了名的不管学生,因为他自己是个天才,平时也很忙,基本上不会有时间手把手教你解决问题。但是好处是,到了公司里,就是这样的状态,大部分靠自学。工程师的基本职责就是发现问题,并且自己解决问题。Google and stack overflow is always your friends。

我当时的题目是去接手一个具有10多年C++开发经验的学生的源代码,并且对他的代码进行修改,用Cuda从写一遍。这个题目光听名字就很难,而且要在掌握C++的基础上还要学习Cuda C 以及各种计算机视觉方面的库函数如PCL,OpenGL。当时的我不知道这个题目的难度有这么大,而且我导师很鸡贼,告诉我不是那么难,只是中等难度。喜欢挑战的我就接下了这个题目。

我的学习过程主要分为以下几个阶段:

利用一个月的时间对项目的背景了解,阅读论文,并且读完 这本书。C++Primer确实是一本很好的编程书籍,里面基于C++11对大部分的语法和实例都有很好的讲解,但是这本书的缺点是,晦涩难懂,基本上里面很多的知识点,是要在日后的项目中不断的尝试才能了解的。读完一遍,只是浑沦吞枣,了解了个皮毛。我当时用3周的时间对C++Primer这本书读了两遍,不包含后面的进阶篇。而且还完成了一些网上的C++入门课程。当我信心满满的打开大牛的源代码时,我怀疑我看来一本假书。大牛用的语法我见都没见过,要如何看懂大牛的代码。当时我的内心是崩溃的,但是我有一个比较好的性格,就是不轻易放弃。。。一直相信自己能行。接下来我用了1一个多月的时间去研究大牛的代码,和他的编写形式,以及命名规则。关于命名规则网上有很多种code style,我当时是看到Google Code Style。研究大牛的代码是一个很好的学习过程,因为别人有多年的开发经验,他用的注释格式,函数规则,一定是他经过多次摸索,找到的最好的方法,你去研究他的代码,就省去了很多不必要的弯路。当然看不是纯看,一遍看,还要一遍在自己的电脑上试,不懂的地方第一次看不懂没关系。人脑是个很奇妙的器官,它具有自己学习和联想能力,当你休息了一天,再看第二遍的时候,那就会发现之前看不懂的地方好像理解了一些:)自己动手阶段。研究了一个多月大牛的代码后,胸有成竹,觉得自己可以动手:) 感觉自己就算不是大牛,也已经是个小牛了。然而当我动手的时候,才发现,自己的天真和无知。我到现在都记得自己开始动手写的第一个下午,整整从下午1点坐到了6点,写了不超过20行代码。其中还有10多行的无效代码,就是include blabla之类的代码。真的不去动手,你就不知道自己的无知和菜。但是意识到自己的无知和菜是好事,这样菜能摆正自己的定位。。。疯狂学习阶段,当我意识到自己的无知与菜逼之后,我开始疯狂的学习动手,基本上每天我都会在实验室坐上10个小时(当然有大概4个小时是在刷youtube,抖音,以及玩手游) 但是劳逸结合的情况下,还是有有效时间的。而且我当时有周末进实验室的权限,一般的学生没有,因此大部分时候,我周末也会在实验室工作。基本上一周6天的工作,每天工作10小时。完全的自愿,而且不会觉得有那么的难熬,这就回到我之前提到的,兴趣很重要。我对我的毕设项目很感兴趣,当我看到我自己写的代码,在显示器上投射出PCL点云时,以及用GPU实现了性能巨大提升时,给了我很大的满足感和成就感,就像看着自己的孩子终于能走路了一样:)

接下来的事情就比较顺理成章了,因为我的努力,我的毕业设计取得了很好的成绩,而且和导师的关系处的很好。之后的投简历过程中,因为我丰富的实践经历,以及对硬件和软件方面都较为扎实的知识,我收到了多家公司的offer。最后幸运的选择了一家我心怡的500强汽车行业公司,成为了一名自动驾驶汽车功能软件开发工程师。

这就是我的经历,我觉得每个人的想法和兴趣不一样,所以每个人也会走不一样的路。但是我始终是觉得,别人能做到的事情,你一定也可以。因此我能够做到,屏幕去的你也可以做到。前几天我看到了youtube上有一个同学分享了他如何在零基础的情况下从数学专业,通过6个月的编程培训班,最终进入了硅谷的google成为了一名软件工程师,年入18w刀。

这样的故事每天都在上演,因此你也可以,只要你有恒心和兴趣:)(非鸡汤)

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜