ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

MCU与Linux怎么选?驱动工程师的职业发展与学习路径

MCU与Linux怎么选?驱动工程师的职业发展与学习路径 刚入行时纠结 MCU 还是 Linux这个问题我一年大概会被问几十次。前阵子又有个刚毕业的小朋友加我微信说自己拿了两个offer一个是做小家电的MCU开发一个是做视频盒子的Linux应用开发问我到底该选哪个。说实话作为在芯片原厂干了快十年的驱动工程师我既写过头顶的STM32、瑞萨、NXP那些MCU的驱动代码也天天跟kernel、设备树、U-Boot打交道这个问题背后真正的逻辑我太熟悉了。先说一个最核心的观点MCU 和 Linux 不是两个对立的方向它们是完整技术光谱上的两端中间还隔着 FreeRTOS、RT-Thread、Zephyr 这些实时操作系统。很多人之所以纠结是因为把眼前第一份工作当成了终身决定但其实真正应该考虑的是你想进入什么行业、解决什么问题以及你更享受哪一层级的工程挑战。驱动工程师这个角色恰好站在芯片、硬件、系统软件三者交界处见过太多因为选错方向而走了弯路的人也有不少从 MCU 顺利转到 Linux、或者反过来从 Linux 降维做 MCU 的人。这篇文章我就从自己这些年的实际视角出发把两条路的真实差异、职业发展轨迹、学习路线和避坑经验一次说透希望对正在纠结的你有点实际帮助。1. MCU 和 Linux差的不是技术栈而是思考层级1.1 从一颗芯片的启动流程说起想理解两者的本质区别最直接的方式是看它们上电之后是怎么跑起来的。MCU 的启动流程非常直接。以经典的 STM32 为例上电后 CPU 从 Flash 的起始地址取出向量表拿到栈指针和复位中断入口然后就开始执行程序。整个过程没有操作系统参与你写的 main 函数就是整个世界。你操作的是寄存器配置的是时钟树关心的是中断优先级和 DMA 通道所有时序、功耗、资源分配全都要自己在代码里管好。这就像开一辆手动挡小车发动机怎么给油、离合什么时候抬全得你自己判断。Linux 方向则是另一套思路。随便一个嵌入式 Linux 系统从一颗 ARM SoC 上电开始要经历 BootROM、U-Boot、Kernel、根文件系统这个完整的启动链条。BootROM 里面固化的是芯片厂写的引导代码U-Boot 负责初始化 DDR 和加载内核镜像Kernel 启动后还要挂载根文件系统然后才轮到你的应用程序起来。这中间涉及特权级切换、内存映射、设备树解析、驱动 probe 流程任何一个环节出问题启动都会卡住。这时候你的工作重心从怎么让外设跑起来变成了怎么让系统稳定地调度和协作多个子系统。这就是很多人常说的MCU 和 SoC 的启动流程完全不同这句话背后的本质。前者是单任务死循环加上中断你掌控一切后者是多进程多线程协作你只负责其中一小块但要特别清楚自己这块怎么融入整体。1.2 你每天面对的问题层级完全不同因为运行模型不同两条路上的工程师日常面对的问题也根本不在一个层级。做 MCU 驱动或开发你一天的典型场景可能是在 Keil 或 STM32CubeMX 里配置引脚复用查一下有没有把 PA9 和 USART1_TX 搞错调试 I2C 通信时发现从设备不 ACK于是拿示波器抓波形看时序是不是快了那么几个微秒或者调一颗光模块主控 MCU 的时候要通过 I2C 去读 EEPROM 里的校准参数搞清楚地址映射和校验位。这些问题的特点是原因往往非常具体就在寄存器配置和时序波形里只要你细心、有耐心总能找到答案。做 Linux 驱动或系统开发你一天的典型场景可能是设备树里某个节点属性写错了导致外设 probe 失败写一个网卡驱动时发现中断处理函数里不能调用某些函数因为那会睡眠或者 RK3588 平台上视频硬件解码帧率上不去得去查内核的 CMA 内存管理和 VPU 驱动的 buffer 分配逻辑。这些问题背后往往牵扯到进程上下文、DMA 一致性、并发访问等操作系统的核心概念定位起来更抽象也更依赖你对整个系统的理解。用一个不恰当的比喻MCU 方向像是在乒乓球桌上打球球速快、落点准但规则简单Linux 方向像是在打一场沙盘推演的战役你需要同时关注后勤、地形、指挥链你的每一个函数调用都可能影响其他模块。1.3 一条连续光谱不是两个孤岛我特别想纠正一个普遍存在的误区把两者看成非此即彼的选择题。实际上在实际工程里MCU 和 Linux 之间的界限越来越模糊。很多 SoC 里既集成了 Cortex-A 系列的大核跑 Linux也内置了 Cortex-M 系列的小核做实时控制比如 NXP 的 i.MX8 系列就是这种典型架构。在这种平台上一个驱动工程师需要同时理解两套体系大核上怎么通过 RPMsg 和小核通信小核上怎么实时处理一些关键外设。同样很多汽车电子项目里使用的 TC397 这类高性能 MCU配合 EB Tresos 这种 AUTOSAR 配置工具做 MCAL 层开发复杂度一点不比写 Linux 驱动低。你光是配置时钟、ADC 采样、ICU 输入捕获这些 MCAL 模块就要花掉大量时间去理解工具生成的代码。所以与其说选 MCU 还是 Linux不如说你在选一个入门的切入点、一个理解整个嵌入式世界的起点。起点选在哪里会影响你先接触哪套思维但不会限制你未来的发展边界。2. 驱动工程师视角芯片公司里两类岗位的真实画像2.1 MCU 方向驱动工程师的日常因为我在芯片原厂工作身边很多同事就是专门做 MCU 驱动库的。我们做的事情跟单纯做产品开发的工程师稍微有点不同但更有代表性。第一块工作是芯片验证。新芯片流片回来后我们拿到的第一件事就是点亮最小系统逐个验证外设的寄存器行为是否符合设计文档。这时候你往往没有现成的 SDK 可用全靠对着 datasheet 的寄存器描述写代码踩的坑比做产品开发多得多。我记得调一颗内置温度传感器的 MCU 时文档上写校准寄存器是 0x1FFF75AA但实际上产品版本不同偏移量也不一样最后是靠读 ID 码来区分的。这种经验只有芯片原厂的人会告诉你做应用层的工程师未必能碰到。第二块工作是为客户提供 SDK 或驱动代码。比如我们做光模块方向的 MCU客户拿芯片去做 SFP 光模块控制需要用到 I2C 去读写 EEPROM、设置激光器偏置电流等参数。这时候我就要提供一套可靠的 IIC 通信应用例程把时序容错、总线超时、多主冲突这些场景处理得足够稳。说实话光模块对 MCU 的规格要求并不低主频不用太高但 I2C 要快、定时器要准、ADC 位数要高、Flash 要够存校准参数还需要支持在线升级。这些细节在芯片手册里不会直白地告诉你但做驱动的人必须懂。第三块工作是配合 FAE 给客户“擦屁股”。客户的板子起不来、通信老出错、低功耗电流超标这些问题最终都会转到我头上。接到问题后我先看原理图和 PCB 布局再让客户量关键波形一步步缩小范围。有一次一个客户说他们的 MCU 在低温环境下 I2C 通信会卡死我推测是复位电路的电容取值过大低温下上电时间变长导致时序异常结果查下来还真是。这些工作有一个共同点你必须对底层硬件细节极其敏感一个 GPIO 的上拉电阻配置不对可能就会让整个系统在量产时出现偶发故障。这种敏感性只有大量接触寄存器、时序、datasheet 才能真正培养起来。2.2 Linux 方向驱动工程师的日常在芯片公司里做 Linux 驱动的同事又是另一种画风。他们的工作主要围绕 SoC 平台展开像 RK3588、瑞芯微、全志、NXP 的 i.MX 系列或者我们自家做的应用处理器。最常见的任务是做板级适配。新板子回来先得把设备树改对哪路 GPIO 用作了某颗 sensor 的中断脚哪个 I2C 控制器接了触摸屏哪个 PWM 控制背光亮度这些信息全都要在设备树里描述清楚。设备树写错了驱动 probe 就会失败外设就看不到。很多新人第一次接触设备树时很不适应觉得怎么还有这么一层碰运气的配置但弄懂之后你会发现它其实解决了一个非常实际的问题让同一个内核可以适配不同硬件。然后就是写内核驱动本身。最常见的包括字符设备驱动、平台驱动、I2C/SPI 子系统驱动、中断控制器驱动等。写这类驱动对操作系统知识的深度要求很高。举个典型例子你在中断上下文里能不能调用 i2c_transfer答案是不建议因为 I2C 传输会调度、会睡眠而中断上下文里不能睡眠。那该怎么办你可能要用 request_threaded_irq 做一个线程化的中断处理把真正耗时的操作放到内核线程里做。这种问题在裸机 MCU 开发里根本不存在因为你在中断里想干什么都行CPU 就你一个。但在 Linux 里一个细节做错系统的实时性和稳定性就崩了。还有系统级问题的排查。Linux 驱动工程师经常要面对死锁、内存踩踏、DMA 缓存一致性问题。拿 DMA 来说CPU 写了 buffer 之后如果不做 cache flushDMA 读到可能是旧数据反过来DMA 写完 buffer 后不做 invalidateCPU 看到的又可能是 cache 里的陈旧内容。这种问题在代码逻辑上完全看不见只能靠经验和对内存层次结构的理解去定位。我第一次遇到 DMA cache 一致性问题时整整查了三天最后发现是没调 dma_map_single那次经历让我对内存屏障和 cache 维护的理解上了一个台阶。2.3 薪资、岗位分布与行业差异聊完日常肯定绕不开待遇和岗位数量。大致来说纯 MCU 方向的岗位数量非常大。小家电、电动工具、智能家居、工业控制、医疗电子、汽车车身控制模块这些行业都需要大量 MCU 开发工程师。因为岗位多进入门槛相对低你只要有一块 STM32 开发板、会一些基础外设编程就能找到相关工作。但相应的岗位平均薪资比起 Linux 方向要低一些尤其是做家电类产品的天花板相对明显。Linux 方向的岗位主要分布在芯片原厂、消费电子、通信设备、汽车智能座舱、边缘计算这些领域。岗位数量不如 MCU 那么多但对综合能力的要求更高因此薪资下限和上限都更高。一个能独立 bring up 新平台、解决复杂系统问题的 Linux 驱动工程师在市场上是非常抢手的。不过这里要特别注意行业差异往往比技术方向差异更能影响你的薪资。同样是做 MCU你在汽车电子领域做 TC397 的 MCAL 配置实战跟在小家电里做按键扫描和数码管显示难度和薪酬完全不在一个量级。同样做光模块 MCU 的驱动工程师因为涉及高速 I2C、精确时序和复杂的数字诊断监控收入和成长空间甚至超过一些做 Linux 应用开发的。所以与其只看MCU 还是 Linux不如先想清楚你更愿意在哪个行业扎根。3. 刚入行怎么选三个底层维度加一条可落地的学习路线3.1 维度一你想进什么行业这个行业主要用哪条技术栈这是我给所有来咨询的人的第一个反问别先想技术先想行业。如果你对汽车电子有兴趣我会告诉你这条赛道里 MCU 和 Linux 都有但入门阶段大概率从 MCU 起步。汽车上有大量 ECU每个 ECU 里都是一颗 MCU跑的是 AUTOSAR 这类软件架构。你如果能掌握 TC397 EB Tresos 这类 MCAL 配置实战同时理解 CAN/LIN 总线和功能安全那在汽车行业就是香饽饽。未来很多 ECU 也在向带 Linux 的高性能计算平台演进但那是好几年之后的事而且懂 MCU 的底层经验在那时反而更稀缺。如果你对消费电子、芯片原厂、通信设备有兴趣那 Linux 几乎是绕不开的。手机、平板、路由器、智能音箱、边缘服务器里面跑的要么是完整的 Linux要么是裁剪后的 Linux。尤其是做芯片原厂的驱动如果不懂 Linux你连自家 SoC 的 SDK 都维护不了。如果你对智能制造和 IoT 有兴趣那情况更复杂一点。物联网设备端以 MCU 为主跑 FreeRTOS 或 RT-Thread但设备接入云端又涉及网关网关大多跑 Linux。这种情况下你先学 MCU 入门是合理的但也要把网络协议、MbedTLS 这类知识补上才有机会从端走向云。我的建议是用五年后的目标行业倒推现在的技术栈选择。你现在选 MCU 还是 Linux不是在选技术是在选五年后你想站在哪个行业里面。行业选对了技术栈是可以补的。3.2 维度二你是硬件直觉型还是系统抽象型MCU 和 Linux 对人的思维偏好要求也不一样这一点容易被忽视但非常关键。MCU 方向尤其做底层驱动和协议栈调通的要求你有很强的硬件直觉。你得能从一粒电阻的阻值不正确推演出 I2C 波形失真得习惯拿着示波器在板子上点来点去得愿意天天看 datasheet 里的电气参数表格。你的成就感来源于把真实世界里一个很细微的问题定位并解决掉比如原来这个引脚的 open-drain 模式需要外接上拉电阻。这种人往往动手能力强喜欢拆东西看到硬件就有想量一量的冲动。Linux 方向尤其是做内核和系统层的要求你有很强的系统抽象能力。你要能在脑海里构建出进程、地址空间、文件系统、设备模型这些看不见摸不着的概念并理解它们之间怎么交互。你的成就感来源于把一个看似无解的并发问题理清楚比如为什么两个线程同时打开同一个设备节点会导致其中一个崩溃。这种人往往喜欢折腾操作系统、喜欢读源码、喜欢思考抽象机制。两种思维偏好没有高下之分但确实存在匹配度问题。一个完全对寄存器不来电的人去硬啃 MCU会非常痛苦一个看到指针和链表就头疼的人去搞内核也大概率坚持不下来。我建议刚入行的你仔细回忆一下过去让你最有成就感的是把某个硬件问题查明白了还是把一个软件机制想通了这个答案往往就是你最该走的方向。3.3 维度三长期成长路径MCU 拼系统思维Linux 拼细节深度长期来看两条路的成长曲线也不太一样。MCU 方向早期成长很快。你可能半年到一年就能熟练使用各种外设做出一两个像样的产品项目。但三五年后如果你还停留在配置外设、写业务逻辑这个层面成长就会明显放缓。想继续往上走你需要从控制器的思维跳出来开始接触实时操作系统、功能安全、低功耗设计、EMC/EMI 整改甚至参与芯片规格定义。很多资深 MCU 工程师后来都在往系统架构师方向发展因为他们最了解硬件的极限在哪里。Linux 方向早期学习曲线比较陡。设备树、内核编译、驱动框架、内存管理任何一块都能卡住你好几周。但一旦过了门槛成长空间是很大的。内核、Bootloader、文件系统、虚拟化、实时补丁任何一个方向深入研究下去都可以成为专家。同时由于 Linux 本身是开源的你可以接触到全球最优秀的工程师写的代码这种学习资源是 MCU 商业 SDK 没法比的。不过我想提醒的是这并不意味着 Linux 方向就一定高级。做嵌入式 Linux 但只写应用、完全不碰内核的人同样会陷入重复劳动的困境。真正有竞争力的永远是那个能解决别人解决不了的问题的人而不是那个只背着特定技术栈标签的人。我自己见过做 MCU 的工程师因为精通低功耗设计在可穿戴设备领域做得风生水起也见过做 Linux 的工程师因为一直停留在应用层五年后薪资纹丝不动。技术方向只决定你的起点起点决定天花板的是你把这一行钻研得有多深。3.4 给想走 MCU 方向的人一份可以直接照做的入门清单如果你看完上面的分析觉得自己更适合或者更喜欢 MCU 方向我建议你按这个节奏来每一步都别跳。第一步是熟悉工具链。用 Keil MDK 还是 STM32CubeIDE 都可以重点是要会安装 STM32 芯片包会创建工程、编译、下载、在线调试。很多新手一上来就卡在怎么把标准库和 HAL 库用明白上其实没必要纠结先用 STM32CubeMX 生成一个能跑的最小工程后面再慢慢研究代码细节。第二步是逐个点亮外设。GPIO 按键控制、定时器中断、PWM、UART 串口通信、I2C 读写 EEPROM、SPI 驱动 Flash这些基础外设每一个都要亲手写一遍。做 I2C 通信的时候一定要用逻辑分析仪或示波器抓一次波形看看 ACK/NACK、起始和停止条件在示波器上长什么样。这个习惯会帮你以后省很多排查时间。第三步是做一个完整的应用项目。我比较推荐用 OLED 屏幕做一个温湿度采集器里面要同时用到 I2C接传感器、ADC接电位器模拟采集、定时器做软件定时、中断按键响应、低功耗空闲时休眠。这种综合项目虽然不复杂但能把你前面学的知识点串起来。做完后把代码和测试记录整理成一篇笔记以后面试时这就是你最好的谈资。第四步是根据你的目标行业扩展技能树。做光模块方向的去研究 I2C 多主通信和热插拔检测做汽车电子的去研究 CAN 通信、看 TC397 和 AUTOSAR 工具链做 IoT 的去学 FreeRTOS 或 RT-Thread然后试着做一次任务划分和优先级设计。这一步是真正帮你拉开差距的关键。3.5 给想走 Linux 方向的人一条经过验证的进阶路径Linux 方向的学习路径比 MCU 要长得多但好处是每一步都有非常明确的衡量标准。第一阶段是打基础。C 语言、数据结构、Linux 常用命令必须过关。C 语言里指针、结构体、函数指针、链表操作这些内容是后面读内核代码的基石。常用命令至少要把文件操作、进程查看、网络配置、日志分析这几类用熟。这一阶段有一个小窍门把 Vim 或 VS Code 用熟练尤其是批量搜索、全局替换、跳转定义这些功能你以后写驱动每天都会用。第二阶段是理解系统启动。买一块可以跑 Linux 的开发板我不太建议直接上 RK3588 这种高端平台因为成本高且问题复杂对新手不友好。比较合适的是 i.MX6ULL 或者全志 V3s 这类入门级平台几十到一两百块钱就能买到。你要做的事情很具体自己编译 U-Boot、编译内核、用 busybox 做一个根文件系统然后从烧录到启动一步步看 log。这个过程能帮你把MCU 和 SoC 启动流程的差异这个问题彻底弄清楚比看任何教程都有用。第三阶段是写第一个驱动。从最简单的字符设备驱动开始实现 open、read、write、ioctl 这些接口。然后学平台驱动框架把设备树、匹配流程、probe 流程吃透。接下来学中断、并发控制自旋锁、互斥锁、工作队列、阻塞和非阻塞 IO、内存映射和 DMA。整个过程可能会比较枯燥尤其是刚开始面对内核那些抽象概念时但这是绕不过去的。第四阶段是拿真实项目练手。用 RK3588 这类平台做硬件解码就是一个很好的实战项目涉及 VPU 驱动、内核 CMA 内存管理、视频帧 buffer 传递你能在这个项目里获得非常宝贵的系统级经验。另外Linux 内核文档和源码是最好的老师遇到不懂的宏或函数直接在内核源码里 grep比百度上那些过时的博客靠谱得多。顺便说一句现在 VSCode 集成 Claude Code 这类 AI 工具来辅助嵌入式 MCU 或内核代码工程确实能帮你快速理解陌生代码但我不建议过度依赖核心概念还是得自己吃透不然出了问题你连 AI 给的错误答案都识别不了。3.6 如果只能选一条路我自己的真实建议前面讲了这么多客观分析最后总要有个态度。如果现在有一个刚毕业的人跑过来让我做决定我会问清楚他的行业偏好和思维偏好但实在要二选一的话对于大多数硬件背景不强、但编程基础还可以的应届生我倾向于推荐 Linux 方向。原因是这样的Linux 方向的上手难度更高但一旦入了门向下看 MCU 的时候你会觉得很多概念都通了。你会明白设备树里的中断节点和 MCU 里的 NVIC 中断配置是同一个东西在不同层面的表达你会明白内核里的线程调度和 MCU 上的任务切换本质是相通的。反过来如果先做 MCU你会对寄存器很熟、对时序很敏感但让你直接转去写内核驱动时还是会有一段陡峭的学习曲线。从复杂到简单容易从简单到复杂难技术学习也是这个道理。但这绝对不意味着所有人都应该无脑选 Linux。如果你本身对硬件异常敏感喜欢动手焊板子、量波形那你在 MCU 方向的成长速度是纯写软件的人比不了的。尤其是现在光模块、汽车电子、工业控制这些细分领域里MCU 资深工程师是很难招的待遇并不低。我想强调的是别用哪个方向更有面子来做选择要用哪个方向能让我更有热情地钻研来做选择。4. 我把话挑明几条公认的误区与刚入行最容易踩的坑4.1 误区一做 MCU 就是低端做 Linux 就是高端我特别反感的一种论调是网上很多人喜欢把 MCU 和 Linux 分成低端和高端好像做 MCU 就低人一等似的。实际上你去看看光模块行业里面的主控 MCU 要支持高速 I2C 通信、要处理复杂的数字诊断监控、要实现快速响应的闭环控制算法规格完全不亚于一颗入门级应用处理器。再比如汽车电子里那些域控制器很多都是 MCU 加 Linux 的混合架构没有扎实的 MCU 功底你连整个系统的电源管理和通信矩阵都搞不定。所谓的高端低端应该看的是你解决问题的能力而不是技术栈本身。一个能把低功耗做到微安级别、产品能过各种严苛认证的 MCU 工程师绝对比一个只会调包写应用、内核崩了只能重启的 Linux 工程师值钱得多。4.2 误区二选了一条路以后就绑死了我也常遇到有人很焦虑觉得现在选了 MCU三年后是不是就很难转 Linux 了。我的回答是技术栈迁移没有你想象的那么困难。我身边真实的案例一个前同事在消费电子做 MCU 固件开发后来因为项目需要自学了嵌入式 Linux现在在一家芯片公司做 SoC 的系统验证MCU 经验反而成了他的差异化优势。因为他对硬件行为有非常深的理解调试系统稳定性问题时比纯软件背景的人敏锐得多。现代嵌入式系统的趋势就是 MCU 和 Linux 越来越融合。比如鸿蒙系统在 IoT 设备上运行底层既有 LiteOS 这种类似 MCU 的轻量内核也有完全兼容 Linux 的版本。你在 MCU 阶段积累的对中断、任务切换、功耗管理的理解放到 Linux 系统开发里一样适用只是换了一种表达方式。不要把自己锁死在一个标签里持续学习比纠结选哪条路重要得多。4.3 误区三项目越多越有竞争力作为面试官我筛过上千份简历一个很常见的误区是应届生以为项目越多越厉害。我看简历的时候最反感的是那种列了七八个项目、每个都一句话带过的。真正让我印象深刻的是那种只有一两个项目但能把问题背景、硬件原理、软件流程、踩坑经历讲得非常清楚的人。我给你一个很具体的建议做任何一个练手项目都要准备好回答这几个问题——时钟是怎么配置的为什么是这个频率I2C 通信失败时你是怎么排查的中断服务函数里哪些事情不能做你移植 Linux 内核时改了哪些配置如果答不上来就回去把这些搞懂再写上简历。面试官真正在意的不是你会不会用某个工具而是你面对一个具体的 bug 时脑子里有没有清晰的排查思路。4.4 给刚入行者的三条实操建议最后分享几个我踩过坑之后才明白的道理希望能帮你少走弯路。第一别眼高手低从最小的事情做起。不管选哪条路先踏踏实实把一块开发板用起来。点亮一个 LED、读到一个温度值、调通一条 I2C 总线这些看起来简单的事每一步都可能遇到让你抓狂的问题而解决问题的能力就是这么攒出来的。买了板子吃灰比不买板子更浪费。第二把踩过的坑记录下来。我强烈建议你从第一天起就写技术笔记。不需要写得多华丽记清楚问题现象、排查过程、最终原因就够了。这样做有两个好处一是半年后你会发现自己踩坑的速度越来越慢说明能力在提升二是这些笔记是你以后写简历、面试时最宝贵的素材。我自己面试别人的时候特别偏好那种有自己的技术博客或笔记习惯的候选人。第三有条件的话去认识几个比我入行早、比你懂得多的工程师。嵌入式这个领域很多东西不是看书能学会的。比如 I2C 总线上拉电阻多大才合适、DMA cache 问题怎么排查这些经验都散落在老工程师的脑海里他们的一句话可能帮你省下几天甚至几周的摸索时间。当然为了防止对方嫌你烦问问题之前先自己做足功课把能查到的都查了再有针对性地问。回到开头那个小朋友的问题最后我给的建议是先去问清楚自己在第一个岗位上到底能接触多深的技术以及这个岗位背后是什么行业然后选那个能让你有机会把一件事情钻研到极致的方向。我自己当年也是从 MCU 入门后来因为工作一步一步接触 Linux现在两条腿走路。这段经历让我越来越确信技术方向这件事重要但没有你想象中那么重要。真正重要的是你有没有在一件具体的事情上下过别人下不了的笨功夫。如果你也正站在这个路口犹豫这就是我最想对你说的话。
返回列表