两年时间,从汽轮机厂到阿里巴巴

文章转自本人公众号:机械猿,本人之前在四川某汽轮机从事结构强度设计,目前在阿里巴巴淘宝事业部担任高级开发工程师,有机械工程同行想转行IT,或者有想入职BAT的可以找我内推~

一些絮叨

有幸能有华科机械的硕士同行过来咨询IT行业相关情况,这里大致总结一下个人经验。

本人目前在阿里巴巴淘宝事业部从事后台开发,本科为机械设计制造及其自动化专业,硕士课题为机械结构及力学强度分析相关,使用的工具基本包括UG(做过汽车建模的应该都知道)、MATLAB、ANSYS跟LS-DYNA,硕士毕业后在生产燃气轮机的某公司呆过一段时间,从事转子透平的结构设计跟综合受力分析。接触职场后有感于生活压力巨大,下决心进入IT行业,中间辗转换过其他公司,目前也算圆了校招的遗憾,顺利入职BAT。

两年时间,从汽轮机厂到阿里巴巴

转自网上的一张调侃图

工科专业基础

本科时工科基础课程像高等数学、概率论、电工学、数电模电跟计算机专业所学一样,专业课程像制造工艺学、材料力学、工程材料、理论力学、机械原理与机械设计,其实难度并不比编译原理小,而且同样能培养人解决问题科学的思维方式。说这么多,就是想总结一句话,工科行业的学生转行写代码是有技术基础的。

两年时间,从汽轮机厂到阿里巴巴

车间工作环境

两年时间,从汽轮机厂到阿里巴巴

第一份工作做的ANSYS疲劳寿命分析

前奏

校招投过一汽大众跟上汽大众,因为一些原因都没过,后面也拿到了广汽跟中电29所的offer,给的待遇还行,但是对比我当时去的公司,虽然待遇好点但是广州生活成本太高,纠结了一番还是拒了。刚入职时,因为硕士项目使用过MATLAB做一些数据处理,分了个写上位机采集振动传感器的活,使用LabVIEW软件的DAQ模块完成。之后陆陆续续跟了几个项目有点积累,加上大一学过C语言课程(谭浩强的教材),因此准备学学基础算法知识为后面晋升工程师做铺垫。学习数据结构与算法我使用的是清华大学出版社出版的《数据结构与算法》,主要是因为这本书例题是用C语言编写,符合阅读习惯。现在回过头来看,说不上多好,但是足够让你掌握基础知识,基本能玩转Visual Studio。这里给大家一个官网链接,对于没任何编程基础的,强烈推荐把这本书上主要的例题自己看一遍做一遍一共两遍:

两年时间,从汽轮机厂到阿里巴巴

入门

后面去了一家制作家用传感的公司,有了之前的编程基础,参与了一个烟感设备使用电信云上云项目,需要端侧基于stm32f109做低功耗业务系统。由于之前没有相关积累,在网上搜了正点原子跟野火的很多资料,自己买了几块开发板(因为不会移植)跑起来了。项目使用的是freertos,网上资料也比较多,当时还买了本北航出版的《嵌入式实时操作系统μCOS-II原理及应用》跟《嵌入式操作系统内核调度》,对嵌入式操作系统有了初步的了解。北航的《嵌入式操作系统内核调度》这本书强烈推荐,里面用C语言自己一步一步实现了Wanlix嵌入式系统,有点类似于linux0.11初级版的样子,对终端处理、任务调度、队列、互斥锁、文件系统都从零实现,对没有Linux基础的小白很友好。看完这本书,自己动手实现一遍,对系统的多任务处理有个全局观的了解,再入门去看Linux相关知识就极容易迁移理解了。

刚接触Linux编程的时候,对于Linux系统几乎一无所知,幸好当时公司已经有了Ubuntu系统电脑。这里极力推荐《Linux私房菜基础学习篇》,先把Linux下常见的命令像ls、grep、mkdir等等使用熟练,遇到小问题多问老员工,使用两个月后尝试自己弄台机子安装一个windows+Linux双系统,能跑起来说明Linux环境编程基本入门了。

当然期间还自学了《深入理解计算机系统》《UNIX环境高级编程》跟《UNIX网络编程卷I》这三本书,后面两本书第一次看没怎么理解,后面去了ARM中国从事mbedos研发时结合项目仔仔细细研读了一遍,确实是两本经典。怎么说呢,常读常新。

公司传感器联网使用的是uip协议,内部联动采用的是私有协议封装的协议头跟数据,这一块没有很经典的书籍,基本上是在****博客网站上搜索排名较高的帖子学习TCP/IP协议栈跟阅读uip源码。这里推荐老衲五木的帖子《LwIP协议栈源码详解——TCP/IP协议的实现》,这本帖子从网卡收包一直到socket编程都讲的很透彻,看完之后再学习《TCP/IP详解》有很大的帮助,对于后面从事底层网络优化工作是最好的协议栈入门。在这家公司做的项目虽然不大,但是提高了自己的编程基础,同时对端云连接项目开展跟业务落地有了自己的想法和理解。项目后期买了本《ARM Cortex-M3与Cortex-M4权威指南》,看完后对stm32系列的芯片移植及调试定位有了系统性的了解,从事物联网行业绝对有很大提升。

因为程序运行在单板上,而程序编译是在Linux系统完成,这里就涉及到一个交叉编译的问题。编译问题坑相当多,这一块光看书没用,一定要自己敲代码自己搭建整个工程多跑几遍踩了几个坑才能对程序的指令及数据流有个大概的了解。大部分资料都是参考****跟Linux社区的高分贴,这里推荐《程序员的自我修养---链接、装载与库》,可以系统性的了解。再说一次,弄懂编译链接是机械出身的学生入门IT行业的必经之路,这一块弄通之后,后面了解各种芯片的什么动态加载、内存加速机制等等基本很通畅。学不会怎么办?这里讲讲我的一个小经验。。ARM中国在深圳南山,算是车水马龙的高档地区,基本周末有空无心学习我都会去龙华民治的农民房走一遍,告诫自己不拼搏一把以后就是这种生活。。效果很好,动力十足,不光是兴趣推动,都是生活所迫啊。

后面的项目开始接触python,当时没买书,直接在菜鸟编程上学习了一个晚上,写写基本的自动化脚本基本没问题。当然要想专门从事python工作的话,还是需要买几本相关的书。

https://www.runoob.com/python/python-tutorial.html

当然项目开发迭代使用到了svn跟git,还有makefile的编写,这里推荐《git权威指南》跟《跟我一起写makefile》这本pdf,网上下载很方便,需要的后续我把百度云链接放上。然后使用shell脚本是必备技能,这里同样推荐菜鸟教程网站入门,后面使用到了高级技巧,就上****搜索高分贴吧。

https://www.runoob.com/linux/linux-shell.html

这两个项目对我提升基础作用相当大,对项目架构分工有了宏观概念,有了模块化编程的思想,对代码质量管控流程也比较熟悉。当然回过头来看如果读研选的是电气工程,研究生阶段基本自己一个人就可以玩转一个物联网项目,说不定校招就能直接进BAT了。。。

数据库这块,花个周末把MySQL的增改删查基本的操作熟悉,后面项目上再补基本没问题。

坐在门槛上

来了淘宝之后发现光写写后台程序还不够,还需要跟APP联调,因此下了个Android Studio开始调试淘宝的各种bundle。是的,对于社招的员工,公司根本没耐心没时间让你慢慢学习,直接开搞。这里推荐《第一行代码 Android》,当然这一块我也刚入门正坐在门槛上,就不多分享,正在跟随Java大神学习。

为了防止35岁升不了p8被开除,现在基本每天下班都要写写项目所用到的技术基础以及以前自学的东西防止遗忘,但是好久没写过文档,不成章法,后续改进。后面会把重点放在后台开发、无线开发、动态加载加速、cmake及编译链接、ADB自动化调试等等有价值的经验写写记录。

推荐的书籍汇总

《数据结构与算法》清华大学出版社,有好几版,随便挑一本都行

《啊哈!算法》最基础的算法入门

《算法图解》

《嵌入式实时操作系统μCOS-II原理及应用》

《嵌入式操作系统内核调度》初步概念理解操作系统模型

《深入理解计算机系统》

《编程之美—微软技术面试心得》

《剑指offer》

《C Primer Plus》

《操作系统导论》

《Linux私房菜基础学习篇》

深造书籍

《程序员的自我修养---链接、装载与库》

《UNIX环境高级编程》

《UNIX网络编程卷I》

《TCP/IP详解卷1》

《C++ Primer Plus》

《第一行代码 Android》Java入门

最后放一张公司民间协会,借以共勉。

两年时间,从汽轮机厂到阿里巴巴