☰
嵌入式工程师培养计划:从C语言到Linux的完整学习路线
2026/10/8 13:03:09 网站建设 项目流程

1. 这套培养计划到底在教什么

"卓越嵌入式工程师培养计划"这个名字听起来挺唬人,但拆开来看,它其实就是一条从零基础到能独立做项目的学习路线。核心覆盖四块内容:C语言基础、51单片机入门、STM32进阶、嵌入式Linux系统开发。这四个阶段不是随便排的,而是按照嵌入式行业实际的技能成长路径来设计的。

先说C语言。很多人觉得C语言就是大学里应付考试的东西,指针、数组、结构体学完就扔了。但嵌入式开发里,C语言是吃饭的家伙。你写51单片机的寄存器操作要用C,写STM32的HAL库调用要用C,写Linux下的驱动和应用还是C。所以这套教程把C语言放在最前面,不是没有道理的。热搜词里出现的"完数c语言什么意思"、"c语言 a= ++b解释"、"字符串逆序c语言pta"这些,其实都是学习过程中遇到的具体语法问题,说明初学者在C语言阶段就会卡住。

然后是51单片机。有人会问,现在STM32这么便宜,为什么还要学51?这个问题我在实际带新人的时候被问过无数次。51单片机的价值不在于它性能多强,而在于它的结构足够简单,你能清楚地看到每一个寄存器的作用,能理解中断是怎么进的、定时器是怎么计的、IO口是怎么驱动的。STM32的库函数把很多东西封装起来了,你调个HAL_GPIO_WritePin就完事了,但底层发生了什么你根本不知道。先学51,再学STM32,这个顺序能让你在后期调试STM32出问题的时候,知道该往哪个方向去查。

STM32阶段是重头戏。从GPIO、中断、定时器、ADC、串口通信,到FreeRTOS、物联网网关、蓝牙通信,这些内容在热搜词里都有体现。比如"stm32 adc切换通道"、"stm32 gbk转utf8"、"五线四相步进电机stm32"、"stm32控制伺服电机485",这些都是实际项目中会遇到的具体问题。教程如果能把这些点讲透,那价值就很大了。

最后是嵌入式Linux。这是嵌入式工程师往上走的关键一步。热搜词里的"嵌入式linux项目"、"linux镜像安装"、"linux常用命令"、"linux系统安装python"都指向这个阶段。Linux下的开发跟裸机开发完全是两个世界,你要学会用命令行、写Makefile、理解设备树、写字符设备驱动。这部分内容难度陡增,但也是薪资分水岭。

这套培养计划适合的人群很明确:电子、自动化、计算机相关专业的学生,想转行做嵌入式的在职人员,以及做了几年单片机想往Linux方向发展的工程师。如果你已经能独立完成STM32项目,那前两个阶段可以快速跳过,直接看Linux部分。

2. 为什么这样安排学习路线

2.1 从裸机到系统的认知升级逻辑

嵌入式学习最大的坑就是"跳级"。我见过太多人,C语言指针还没搞明白,就去买STM32开发板,跟着视频跑了一遍流水灯,就觉得自己会了。然后遇到串口收不到数据、ADC采样值跳动、中断进不去这些问题,就完全懵了。原因很简单:底层认知没有建立起来。

这套培养计划的路线设计,本质上是在帮你建立三层认知。第一层是硬件认知,通过51单片机理解GPIO的推挽输出和开漏输出有什么区别,理解为什么"51单片机驱动LED时不能采用输出高电平的驱动方式"——因为51的IO口高电平驱动能力很弱,拉电流只有几十微安,而灌电流能达到十几毫安。这个知识点在热搜词里出现了,说明确实有很多人踩过这个坑。

第二层是外设认知,通过STM32理解ADC的多通道扫描、DMA传输、定时器PWM输出、串口中断收发。这个阶段你要学会看参考手册,学会用示波器抓波形,学会用逻辑分析仪看时序。热搜词里的"stm32 dwt"指的是Data Watchpoint and Trace,是Cortex-M内核的一个调试单元,可以用来做精确延时和性能分析,这种细节说明学习者在往深处走。

第三层是系统认知,通过嵌入式Linux理解进程调度、内存管理、文件系统、设备驱动。热搜词里的"虚拟存储器管理c语言"、"文件缓冲区c语言程序"都指向这个层面。到了这一层,你不再只是写代码让硬件动起来,而是要理解整个系统是怎么协调工作的。

2.2 工具链和开发环境的选型考量

学习嵌入式,工具链的选择很关键。51单片机阶段,通常用Keil C51或者SDCC。Keil是商业软件,但国内用得最多,教程配套的例程基本都是Keil工程。STM32阶段,主流是Keil MDK和STM32CubeIDE。CubeIDE是ST官方免费的,集成了CubeMX配置工具,能自动生成初始化代码,对新手很友好。但很多公司还在用Keil,所以两个都了解一下没坏处。

Linux阶段就不一样了,你要在Linux系统下开发。热搜词里的"linux镜像安装"、"免费linux网站大全"、"永久免费网页版linux"说明很多人连Linux环境都还没搭起来。我的建议是,直接装一个Ubuntu的虚拟机或者双系统,别去折腾那些网页版的东西,因为嵌入式Linux开发需要用到串口、USB、网络等硬件接口,网页版根本满足不了。

交叉编译工具链是另一个重点。你在x86的电脑上编译出能在ARM上运行的程序,这个过程叫交叉编译。工具链的安装和配置是嵌入式Linux开发的基本功,教程里应该会讲到arm-linux-gnueabihf-gcc的安装和使用。

2.3 从51到STM32再到Linux的平滑过渡设计

这三个阶段的过渡不是割裂的,而是有内在联系的。51单片机让你理解寄存器操作,STM32让你理解库函数封装和中断优先级,Linux让你理解操作系统抽象。每一步都在前一步的基础上增加新的抽象层。

举个例子,同样是点灯。51单片机你直接写P1 = 0xFE,操作的是寄存器。STM32你用HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET),操作的是库函数。Linux下你用echo 1 > /sys/class/leds/led0/brightness,操作的是sysfs文件系统。三种方式,三种抽象层次,但底层都是控制GPIO寄存器的某个bit。

理解了这条线,你就不会觉得Linux驱动神秘了。它无非是把硬件操作封装成文件接口,让应用程序可以通过读写文件的方式来控制硬件。

3. 核心阶段实操要点拆解

3.1 C语言阶段:指针和内存是绕不过去的坎

C语言学习里,指针是最大的拦路虎。热搜词里的"c语言 四组指针指针怎么表示"说明有人在纠结指针的复杂声明。我教你一个方法:从右往左读。比如int *(*p)[10],先看p,然后看*,说明p是一个指针,然后看[10],说明指向一个数组,然后看*,说明数组里存的是指针,最后看int,说明指针指向int。所以p是一个指向"包含10个int指针的数组"的指针。

但光会读声明没用,关键是要理解指针在内存中的实际含义。我建议在学指针的时候,画内存图。每定义一个变量,就画出它在内存中的位置和值。比如:

int a = 10; int *p = &a;

内存里a占4个字节,假设地址是0x1000,存的值是10。p也占4个字节(32位系统),假设地址是0x2000,存的值是0x1000。你画一遍就明白了,指针变量本身也有地址,它存的是另一个变量的地址。

文件缓冲区是另一个容易出问题的地方。热搜词里的"文件缓冲区c语言程序"指向的是fopen、fwrite、fclose这套文件操作。很多人写完文件不fclose,程序就结束了,结果文件内容是空的。原因是数据还在缓冲区里,没有刷到磁盘。fclose会触发缓冲区刷新,或者你可以手动调fflush。这个坑我在实际项目中见过好几次,调试了半天以为是写入逻辑错了,其实就是忘了关文件。

学C语言的时候,不要只看不练。每学一个知识点,就在电脑上敲一遍,然后改改参数看结果有什么变化。比如学sizeof的时候,试试sizeof(int)、sizeof(char)、sizeof(int *)、sizeof(struct {int a; char b;}),看看结果是多少,想想为什么。

3.2 51单片机阶段:从寄存器操作理解硬件本质

51单片机的学习重点不是写多少功能,而是理解硬件的工作原理。热搜词里的"51单片机状态机"、"51单片机密码锁"、"基于51单片机的电子秤"都是典型的练手项目。但做这些项目之前,你得先把基础打牢。

GPIO驱动LED的电流问题是第一个要搞清楚的。51单片机的P1、P2、P3口是准双向口,输出高电平时驱动能力很弱,通常只有几十微安到几百微安。而LED的工作电流一般在5mA到20mA。所以如果你用高电平驱动LED,LED要么不亮,要么很暗。正确的做法是灌电流驱动:LED的阳极接VCC,阴极接IO口,IO口输出低电平,电流从VCC经过LED流入IO口。这样IO口只需要承受灌电流,51的灌电流能力能达到10mA以上,驱动LED绰绰有余。

定时器的配置是另一个重点。51的定时器有四种工作模式,最常用的是模式1(16位定时器)和模式2(8位自动重装载)。配置定时器的时候,你要计算初值。假设晶振是12MHz,机器周期是1微秒,你要定时50毫秒,那需要计数50000次。16位定时器最大计数值是65536,所以初值应该是65536 - 50000 = 15536 = 0x3CB0。然后TH0 = 0x3C,TL0 = 0xB0。这个计算过程教程里应该会讲,但很多人只是抄代码,不理解为什么这么算。

状态机编程是51阶段比较高级的内容。热搜词里的"51单片机状态机"说明有人在学习这个。状态机的核心思想是把复杂的流程拆成一个个状态,每个状态只做一件事,根据条件切换到下一个状态。比如密码锁项目,可以拆成"等待输入"、"输入中"、"验证中"、"开锁"、"报警"几个状态。这样写出来的代码逻辑清晰,容易调试,也容易扩展。

烧录和下载是最后一步。热搜词里的"51单片机烧录"、"51单片机下载软件的代码"说明有人卡在这一步。51单片机通常用STC-ISP工具通过串口下载,需要USB转TTL模块。下载的时候要注意:先点"下载"按钮,再给单片机上电。因为STC单片机在上电时会检测串口是否有下载命令,如果先上电再点下载,就错过了检测窗口。

3.3 STM32阶段:从库函数到RTOS的进阶

STM32的学习曲线比51陡峭得多。外设多、寄存器多、时钟树复杂,但有了51的基础,理解起来会快很多。

开发环境搭建是第一关。热搜词里的"stm32芯片包安装"说明有人在装Keil的器件支持包时遇到了问题。Keil MDK安装完只是一个IDE,它不认识STM32的芯片型号,你需要额外安装对应的Device Family Pack。比如STM32F1系列要装Keil.STM32F1xx_DFP,STM32F4系列要装Keil.STM32F4xx_DFP。这些包在Keil官网可以下载,安装后Keil的器件列表里才会出现对应的芯片。

ADC多通道切换是实际项目中很常见的需求。热搜词里的"stm32 adc切换通道"指向这个问题。STM32的ADC支持规则组和注入组,规则组可以配置多个通道按顺序转换,注入组可以打断规则组的转换。如果你要用DMA搬运ADC数据,通常用规则组多通道扫描模式。配置的时候要注意:每个通道的采样时间要单独设置,采样时间太短会导致采样值不准,太长会影响转换速率。一般来说,如果信号源内阻在10kΩ以下,采样时间设为55.5个周期就够了。

串口通信和编码转换是另一个高频问题。热搜词里的"stm32 gbk转utf8"说明有人在处理中文显示时遇到了编码问题。GBK和UTF-8是两种不同的字符编码方式,GBK用2个字节表示一个汉字,UTF-8用3个字节表示一个汉字。如果你的STM32从串口收到的是GBK编码的数据,要显示在UTF-8的屏幕上,就需要转换。转换的方法可以查表,也可以用现成的转换库。但更根本的解决办法是统一编码,发送端和接收端都用同一种编码。

FreeRTOS和物联网网关是STM32阶段的高级内容。热搜词里的"freertos stm32物联网网关"说明有人在用STM32跑RTOS做网关。FreeRTOS的核心是任务调度,你要理解任务的优先级、阻塞、就绪、运行等状态,理解信号量、队列、事件组这些任务间通信机制。物联网网关通常需要同时处理多个任务:采集传感器数据、通过WiFi或4G上传数据、接收云端下发的命令、控制执行器。用RTOS可以把这些任务分开,每个任务独立运行,互不干扰。

电机控制是STM32的另一个重要应用方向。热搜词里的"五线四相步进电机stm32"、"stm32控制伺服电机485"都指向这个方向。步进电机的五线四相指的是有5根线,其中1根是公共端,另外4根是四个相的线圈。驱动方式有单四拍、双四拍、八拍等。八拍模式步距角最小,运行最平滑。伺服电机通常用PWM信号控制,或者用485总线发送位置指令。STM32的定时器可以产生多路PWM,很适合做电机控制。

3.4 嵌入式Linux阶段:从裸机思维到系统思维

嵌入式Linux是这套培养计划里最难的部分,也是最有价值的部分。从裸机开发转到Linux开发,最大的挑战不是语法,而是思维方式。

环境搭建是第一道门槛。热搜词里的"linux镜像安装"、"linux系统安装python"说明很多人还在装系统阶段。我的建议是:装Ubuntu 20.04或22.04的虚拟机,分配至少4GB内存和50GB硬盘。安装的时候选"最小安装",不要装那些办公软件和游戏,省空间。装完之后第一件事是换国内源,否则apt安装软件会很慢。然后安装开发工具:sudo apt install build-essential git vim。Python一般系统自带,如果没有就sudo apt install python3。

常用命令是必须熟练掌握的。热搜词里的"linux常用命令"说明有人在学习这个。我列几个嵌入式开发最常用的:ls看文件,cd切目录,cp复制,mv移动,rm删除,mkdir建目录,chmod改权限,ps看进程,top看资源占用,ifconfig看网络,ping测连通,ssh远程登录,scp远程拷贝,grep搜索文本,find查找文件,tar打包解压,make编译,gcc编译C代码。这些命令不用死记,用多了自然就记住了。

交叉编译是嵌入式Linux开发的核心技能。你在x86电脑上编译出ARM能运行的程序,需要用到交叉编译工具链。安装方法:sudo apt install gcc-arm-linux-gnueabihf。编译的时候用arm-linux-gnueabihf-gcc代替gcc。比如arm-linux-gnueabihf-gcc -o hello hello.c。编译出来的hello是ARM格式的,在x86上运行会报"无法执行二进制文件",但在ARM开发板上可以正常运行。

设备树是嵌入式Linux比较难理解的概念。简单来说,设备树是一种描述硬件的数据结构,它把硬件的详细信息从内核代码里分离出来,用文本文件(.dts)描述。内核启动时读取设备树,根据设备树的描述来初始化硬件。这样同一份内核代码可以支持不同的硬件配置,只需要改设备树就行。设备树的语法有点像C语言的结构体,有节点、属性、值。比如:

led { compatible = "gpio-leds"; status = "okay"; led0 { label = "red"; gpios = <&gpio1 5 GPIO_ACTIVE_LOW>; }; };

这段设备树描述了一个LED,接在gpio1的第5脚,低电平点亮。

字符设备驱动是Linux驱动的入门。字符设备是指以字节流方式访问的设备,比如串口、LED、按键。写一个字符设备驱动的基本步骤是:定义file_operations结构体,实现open、read、write、release等函数,注册设备号,创建设备节点。听起来复杂,但套路很固定。教程里应该会带着写一个LED驱动或者按键驱动,把整个流程走一遍。

学嵌入式Linux的时候,不要一上来就看内核源码。先学会用,再学会改,最后才去研究内核实现。比如先学会用GPIO子系统控制LED,再学会改设备树添加自己的LED,最后才去看GPIO子系统的内核实现。这个顺序能让你保持学习的信心。

4. 常见问题与排查技巧实录

4.1 编译和烧录阶段的典型问题

Keil编译报错"cannot open source input file":这是头文件路径没设置对。在Keil的Options for Target -> C/C++ -> Include Paths里添加头文件所在的目录。如果用的是CubeMX生成的工程,通常不需要手动添加,CubeMX会自动配置好。

STM32烧录报错"No target connected":先检查ST-Link和开发板的连接,SWDIO、SWCLK、GND、3.3V四根线是否接好。然后检查开发板是否上电。如果都没问题,可能是ST-Link的驱动没装好,在设备管理器里看看有没有识别到ST-Link。还有一种可能是芯片被锁了,需要用STM32CubeProgrammer解锁。

51单片机下载失败:最常见的原因是串口选错了,或者波特率不对。STC-ISP工具里要选对COM口,波特率一般选9600或115200。如果还是不行,试试降低波特率,有些USB转TTL模块在高波特率下不稳定。另外,下载的时候要先点下载按钮再上电,这个顺序不能错。

Linux下编译报错"arm-linux-gnueabihf-gcc: command not found":交叉编译工具链没装或者没加到PATH里。用sudo apt install gcc-arm-linux-gnueabihf安装,安装完用arm-linux-gnueabihf-gcc -v验证。如果提示找不到命令,检查/usr/bin下有没有对应的可执行文件。

4.2 硬件调试中的疑难杂症

LED不亮或者很暗:先量电压,看看IO口输出高电平的时候电压是多少。如果只有1V左右,说明是驱动能力不足,要改成灌电流驱动。如果电压正常但LED还是不亮,检查LED是否接反了,限流电阻是否太大。一般LED的限流电阻在220Ω到1kΩ之间,太小会烧LED,太大会很暗。

串口收不到数据:先检查波特率是否一致,发送端和接收端必须用同一个波特率。然后检查TX和RX是否交叉连接,发送端的TX要接接收端的RX。如果都没问题,用示波器或者逻辑分析仪看TX线上有没有波形。如果有波形但收不到数据,可能是数据位、停止位、校验位的配置不一致。

ADC采样值跳动:这是很常见的现象,原因可能有几个。一是参考电压不稳定,检查VREF引脚是否接了滤波电容。二是信号源内阻太大,导致采样电容充电不足,解决办法是增加采样时间或者加电压跟随器。三是地线干扰,模拟地和数字地要分开走线,最后单点接地。四是电源纹波太大,加LC滤波或者用线性稳压器给模拟部分供电。

STM32进不了中断:先检查中断优先级配置,NVIC的优先级分组和抢占优先级、子优先级是否设置正确。然后检查中断使能位是否打开,包括外设的中断使能位和NVIC的中断使能位。还要检查中断标志位是否清除,有些中断在进入中断服务函数后需要手动清除标志位,否则会一直触发。最后检查中断服务函数的名称是否和启动文件里的向量表一致,写错了就进不去。

4.3 学习路线上的认知误区

误区一:51单片机过时了,直接学STM32。51确实老,但它的教学价值不可替代。51的寄存器少、结构简单,适合建立"操作寄存器控制硬件"的基本认知。直接学STM32的话,很容易变成"调库工程师",只会调HAL库,出了问题不知道怎么查。

误区二:学嵌入式Linux要先精通Linux运维。不需要。嵌入式Linux开发和Linux运维是两个方向。运维侧重服务器管理、网络配置、服务部署,嵌入式Linux侧重交叉编译、驱动开发、系统移植。你不需要会配Apache、Nginx,但你需要会写Makefile、会看设备树、会写字符设备驱动。

误区三:C语言不重要,反正有库函数。库函数也是C语言写的,你不懂C语言,就看不懂库函数的实现,出了问题就不知道怎么排查。而且嵌入式开发中经常需要直接操作寄存器,这更需要扎实的C语言功底,特别是位操作、指针、结构体这些。

误区四:看视频就能学会。看视频只是输入,真正的学习发生在你动手写代码、调试、解决问题的过程中。我建议看一节视频就停下来,自己把代码敲一遍,然后改改参数看结果有什么变化。遇到问题先自己查资料解决,实在解决不了再看视频里是怎么讲的。

4.4 常见问题速查表

问题现象可能原因排查方法解决方案
Keil编译报错找不到头文件头文件路径未添加检查Include Paths配置添加头文件所在目录
STM32烧录提示无目标连接或驱动问题检查SWD连线、驱动状态重新连接、重装驱动
51下载失败串口或时序问题检查COM口、波特率先点下载再上电
LED亮度不足驱动方式不对测量IO口输出电压改为灌电流驱动
串口收不到数据配置不一致检查波特率、连线统一配置、交叉连接
ADC采样跳动参考电压或干扰检查VREF、地线加滤波电容、分离地线
中断进不去优先级或使能问题检查NVIC配置正确配置优先级和使能
交叉编译命令找不到工具链未安装检查/usr/bin安装工具链并验证
Linux下权限不足用户权限问题检查文件权限chmod修改或sudo执行
设备树不生效编译或加载问题检查dtb文件重新编译并更新dtb

这张表里的问题都是我实际遇到过的,有些坑踩了好几次才记住。建议你把自己遇到的问题也记录下来,形成自己的排查手册。嵌入式开发的问题往往不是孤立的,同一个现象可能有多种原因,排查的时候要按可能性从高到低逐个排除。

5. 从学习到实战的进阶建议

5.1 如何选择练手项目

学完基础之后,一定要做项目。但选什么项目很有讲究。太简单的项目(比如流水灯、数码管)练不到新东西,太复杂的项目(比如完整的物联网网关)又容易卡住。我的建议是选"跳一跳够得着"的项目,比当前水平高一点点,需要查资料、需要调试,但最终能搞定。

51阶段可以做的项目:电子秤、密码锁、温度报警器、红外遥控解码、步进电机控制。这些项目用到的外设不多,逻辑也不复杂,适合练手。

STM32阶段可以做的项目:OLED显示、MPU6050姿态检测、蓝牙通信、WiFi联网、FreeRTOS多任务、CAN总线通信。这些项目开始涉及复杂外设和通信协议,能锻炼调试能力。

Linux阶段可以做的项目:LED驱动、按键驱动、I2C传感器驱动、SPI屏幕驱动、串口通信、网络编程。这些项目让你理解Linux的设备模型和驱动框架。

5.2 调试工具和仪器的使用

嵌入式开发离不开调试工具。最基本的工具是万用表,量电压、测通断、查短路。示波器用来看波形,分析时序问题、信号质量问题。逻辑分析仪用来看数字信号,分析I2C、SPI、UART等总线的通信过程。USB转TTL模块用来串口通信和下载程序。ST-Link或J-Link用来调试STM32。

这些工具不需要一次买齐,根据学习阶段逐步添置。51阶段一个USB转TTL就够了,STM32阶段需要ST-Link,Linux阶段可能需要示波器和逻辑分析仪。如果预算有限,可以先买一个入门级的逻辑分析仪,几十块钱的就能用,配合开源软件PulseView,能分析大部分数字总线。

5.3 代码管理和版本控制

从学习阶段就要养成用Git管理代码的习惯。每次写完一个功能就提交一次,写清楚提交信息。这样出了问题可以回退,也可以看到自己的学习轨迹。Git的基本命令:git init初始化仓库,git add添加文件,git commit提交,git log查看历史,git diff查看差异,git checkout切换版本。

如果不想用命令行,可以用VS Code自带的Git功能,或者SourceTree这样的图形化工具。但命令行的Git还是要会,因为很多开发环境没有图形界面。

5.4 持续学习的资源和方法

嵌入式技术更新很快,持续学习很重要。我的经验是:看手册、读源码、做项目。看手册能了解芯片的详细功能,读源码能学习别人的设计思路,做项目能把知识转化为技能。

ST的参考手册和 datasheet 是必看的,虽然厚,但遇到问题的时候查一下,比在网上搜答案靠谱。Linux内核源码可以从驱动子系统开始看,比如drivers/leds、drivers/gpio、drivers/i2c,这些子系统的代码结构清晰,适合入门。

遇到问题的时候,先自己查资料,查不到再去社区提问。提问的时候要描述清楚:用什么芯片、什么开发环境、什么现象、做了什么尝试、报什么错误。信息越详细,越容易得到有效的回答。

5.5 职业发展方向的选择

嵌入式工程师的发展方向大致有几个:单片机开发、Linux驱动开发、系统移植、物联网开发、电机控制、汽车电子。每个方向的技术栈和薪资水平不一样。

单片机开发入门门槛低,但天花板也低,适合做产品快速迭代。Linux驱动开发门槛高,但薪资也高,适合做底层平台。系统移植需要熟悉uboot、kernel、rootfs,适合做方案公司。物联网开发需要懂通信协议、云平台对接,适合做智能硬件。电机控制需要懂控制算法、PID、FOC,适合做工业控制和机器人。汽车电子需要懂CAN、LIN、AUTOSAR,适合做车载产品。

我的建议是:先广后深。前两年把51、STM32、Linux都过一遍,找到自己感兴趣的方向,然后深入下去。不要一开始就钻一个方向,容易限制视野。

最后分享一个我自己的习惯:每学完一个阶段,就写一篇总结,把学到的知识点、踩过的坑、做过的项目都记下来。过一段时间回头看,能清楚地看到自己的进步,也能发现当时理解不到位的地方。这个习惯坚持下来,收获会很大。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询