关于校招和嵌入式软开的学习路线的总结和一些思考

作为一名求职者的总结和思考

  • 今天收到了心仪公司CEO终面的短信,投的是嵌入式软开,还是非常开心地。

  • 求职还是比较消耗精力的:

    • 第一环节投递简历,有些公司要填很多东西,比较麻烦,投的多了会消耗很多时间,个人的策略还是有针对性的去投。
    • 明显能感觉得到,有些公司的进度是非常快的,雷厉风行。简历筛选、笔试、测评、技术面以及HR面安排的还是比较有序和紧凑的,而且每个环节都会有及时的反馈。可能在文字上就是几个正面的形容词,但落实到公司每个实际负责的HR上,应该是非常大的工作量,其实是并不容易。我个人也更加倾向于这种公司,因为效率高能代表和反映出非常多地东西。有些公司就不谈了,无状态、无进度、无反馈,懂得都懂。管中窥豹,以小可以见大。就跟一个人一样,如果一个人次次迟到、办事拖沓、事事无交代无反馈,那就能反映出很多的东西。
  • 作为求职者,个人思考后总结出基本就是两个原则:
    1. 专业或者技术栈与岗位匹配,知识和技能基本达标或是胜任,这个就是硬实力了,没什么好讲的;
    2. 一定要靠谱,从招聘方的角度来讲,个人感觉技术面评价第一条和第二条兼有,而HR面则是评价第二条,以及你的求职意愿,简单来讲就是你能不能来,把你招来靠不靠谱。既然HR负责招聘,那肯定会承担相应的责任,招聘到合格的靠谱的人才是他的目的,招聘事故应该是HR最怕的。HR应该会从你的言行中评估你的靠谱程度和意愿强烈。

  • 如果两条都达到了的话,除了没有hc或者有人更优秀,感觉拿到offer的概率还是极大的。

  • 没拿到也没什么好讲的,个人的态度还是要端正的,要么自己学的不够深、不够广,没什么好讲的。HC的多少自己也不能决定,有人更优秀,那他先拿offer也是合情合理的。

  • 人生只有一件事一书的作者金惟纯先生有一句话非常的好,一定要分清自己的事、别人的事以及老天的事。自己的事是专业和技术能力、别人的事是他自己的专业和技术能力、HC的多少以及是否有offer那就是老天的事了。

  • 做好自己的事,了解或学习别人做的好的事,不去忧虑和担心老天的事。

嵌入式软开的学习路线

  • 网上很多的文章和只言片语对我都曾有过很大的帮助,特别感谢某乎懒懒土拨鼠2020年关于校招的总结一文,最有帮助的是嵌入式软开几个阶段的论述,推荐书目以及其导师的分析与建议。
  • 文中有一句话始终印象深刻:尽管现在的技术迭代更新换代非常快,有很多的新框架和新风口,但是只要它跑在二进制计算机上,有些东西就是不会变的。所以理解计算机工作的本质,掌握以不变应万变的能力在嵌入式编程中尤为重要。好的程序员对自己程序的每一个bit都会了如指掌。
  • 自己在啃了ARM体系结构的一本大黑书、Cortex-M3权威指南 – 宋岩译(非常好的资料,特别感谢宋前辈)以及程序员的自我修养-编译-链接与库(非常好的书)后,对计算机和程序的理解确实完全不一样了,这比去学习一门新的语言的收获要大的多。最近又看到不知道是哪个大佬说的一句话,在哪看到的有点忘了,大概意思就是:如果一门语言不能帮助你更好的或者从另一个角度去理解计算机,那么学习它就是没有必要的。这与前面所提的思想不谋而合。不管什么语言编写的程序,落到最后还是某种平台对应的一条条的机器指令而已。
  • 在此借用一下土拨鼠前辈总结的嵌入式学习路线,对自己也是一个回顾和简单的规划。
  1. 裸机驱动阶段
    • 重点是理解软件和硬件是如何联系在一起的:寄存器地址、寄存器结构体的typedef封装以及宏定义是如何联系在一起的。
    • 如何用汇编和C指针去直接操作和配置寄存器(对寄存器的读写)。
    • 吃透启动文件。(想真正理解硬件是如何工作的,必须在汇编层面上去理解,越深入就越会发现汇编的重要。FreeRTOS的核心任务启动和调度就是汇编写的,不懂汇编是不可能学透的。)
    • 或许可以加上各个芯片外设的配置和使用,GPIO、UART、ADC、Timer、I2C、SPI以及DMA等等。内核外设:NVIC、SysTick以及Clock等。
  2. RTOS阶段
  • 移植RTOS。
  • 使用汇编完成RTOS与硬件平台的接口部分
  • 吃透硬件的中断的机制。
  • 吃透上下文切换的本质,彻底理解RTOS。
  1. Linux阶段
  • 土拨鼠前辈把ELF文件和静态链接的部分放在这里,确实是比较合宜的,之前不懂。学过之后,一直想写一个自己的readelf,借此巩固文件IO、标准IO、命令行解析以及ELF格式,找时间争取完成它。
  • Makefile、常用命令、Shell脚本
  • U-boot、Kernel移植、根文件系统构建
  • 文件系统的理解 – inode
  • Linux驱动
  • 系统编程:IO及其缓冲机制、进程、线程、IPC
  • 网络编程:socket、TCP/IP
  • 数据库编程
  • 目前阶段:Linux阶段
  • 短期目标:吃透inode,吃透虚拟内存机制。
  • 长期目标:完成Linux阶段、过程中查缺补漏,回顾和巩固一、二阶段以及底层知识。