从零基础到独立开发单片机项目,我经历了哪些阶段?

最近追了一部韩剧,剧本大概是主角突发意外去世,然后带着他的认知和记忆穿越到小时候,一步步走上人生巅峰。

后面我也在想,如果让我只带着行业认知,不带技术记忆,回到10几年前,从零开始学单片机,到现在的水平,需要多久?

也许3年,也许4-5年,但肯定花不了10几年。

如果我把这10几年的成长经历总结给你,是不是意味着,你也能少走很多弯路。

这2年,我至少接触了1W+的单片机初学者,他们问了各种各样的问题。

我总结出来的结果就是:99%的初学者都走了弯路,而且都很迷茫,焦虑,不知接下来该做什么。

其中有很大一部分在初学者,在职业定位上,就存在严重问题,就是硬件和软件都想学到独立设计的水平。

抱歉,今天我要泼你们一身冷水:几乎不太可能!

这是全栈工程师的水平,新手想达到这个水平,没几十个项目以上的积累是很难做到的。

就拿硬件设计来说,哪怕做了10年,也不敢说什么产品硬件都能设计,换个没做过的产品,照样够你折腾的。

前期学习一定要有侧重点,不要有软硬通吃的想法。

在刚学单片机的时候,我也不知道还分硬件工程师和单片机工程师,我以为都是一个人完成的。

实际除了非常小的公司,大多数公司一个项目标配就是软硬两个职位,毕竟术业有专攻。

新手期,硬件工程师和单片机工程师,两个你只能先主攻一个。

如果是我,我会先选单片机工程师,因为大多数工资比硬件高点,有核心竞争力点。

这个方向,硬件是需要学,但是不需要学太深,这个度的把握很重要,过头了,就得多走几个月弯路

假设我回到11年前,零基础,我会怎么去学习,才快速达到我现在的水平?

很多人会好奇,我现在是什么水平?

先声明,我并不是什么大神,只是项目经验比较丰富。

目前只要不涉及复杂算法的单片机项目我都能做稳定,我是指软件方面,硬件不敢说。

能独立把产品软件做稳定,对我来说就够了,技术的终点是解决痛点,创造价值。

做好做稳定的背后,藏着很多学问,比如编程思维、程序架构设计,程序可扩展性和可移植性。

这些学问,只有做中大型项目才是刚需,否则做不稳定。

从零基础到独立开发项目代码的水平我大概经历了几个阶段

这个非常重要,只有认识到自己目前处于哪个阶段,才知道下一步该如何去提升。

 

第一个阶段:初级阶段

这个阶段就是零基础阶段入门。

 

1.第一个阶段学什么?

学习c语言、基础电路、51/STM32单片机外设之类的基础知识,但是让你做项目做不出来。

 

2.当初我是怎么学习的?

第一步:学STC89C52开发板

我的硬件基础知识、单片机、C语言主要是通过这个开发板学习的。

 

第二步:基于开发板做电子时钟

学完基础语法和单片机外设,我就在开发板上用数码管显示,做了电子时钟的功能,巩固我的编程基础,锻炼代码整合能力。

 

第三步:尝试找工作

没工作和项目经验,没人要。

 

第四步:做了智能小车项目,解决没项目经验的问题

 

这是我在2010年在某宝购买的智能小车套件。

做完这个项目,面试时带过去演示,顺利入职。

不过现在门槛高很多,只会这些,找工作基本没啥竞争力。

 

3.第一阶段推荐的学习方式有哪些?

如果回到10几年前,这个阶段我会怎么学习?

第一个阶段可以用两种方式学习:

1.开发板

优点:能更系统地学习单片机所有外设

缺点:代码不规范,做项目还是没思路,代码水平和整合能力无法提升。

 

2.项目

优点:让你学到单片机外设实际应用,能锻炼功能实现思路和代码水平。

缺点:项目没用到的外设学不到,基础差学习过程比较吃力。

 

4.第一个阶段最大的问题是什么?如何突破?

最大的痛点就是单片机外设都能用起来,整合起来做项目就做不出来。

为啥做不出来啊?最核心的是缺编程思路代码水平

突破第一个阶段的方法就是多做一些小项目,比如智能小车、电子时钟,商业化项目尤佳。

 

第二个阶段:普通单片机软件工程师

经历几个项目沉淀以后,单片机常用外设都在项目上应用过了,做一些基于单片机的小产品也够用了,特别是51、STM8单片机级别的项目。

但随之而来的就是另一个瓶颈期,你会碰到下面几个问题:

1.感觉自己代码写的不够好,很乱,逻辑不清晰,代码整合起来就做不稳定。

2.做大一点的项目就把控不住,比如做代码量在50kb以上的项目就有点吃力了。

3.写好的代码经不起折腾,如果要改功能或者换单片机,整个程序框架就崩溃了。

这些我都经历过,那些被领导催到头顶疼的场景还历历在目。

 

很多工程师做了几年依然处于这个阶段

 

1.为什么突破这个瓶颈很难?

想突破这个阶段是最难的,是思维和代码水平整体的提升,是经验积累到某个阶段的成果,不是学习某个技术点。

眼界机遇、主动学习意识有关。

眼界:就是认知边界,这个大多数取决于你的圈子,如果你身边全是菜鸡,你的认知边界就局限于菜鸡阶段,如果你身边有厉害的,他会颠覆你的认知,原来程序还能这样写!

机遇:你的圈子决定你的眼界高度,你知道你代码写得烂,但是没渠道、没机会可以提升,你碰到的公司做的产品都比较简单的,你也接触不到比你更厉害的人,或者接触到,别人也不会系统地带你,这种情况你是一直无法提升的。

主动学习意识:有时工作稳定下来,人就懒得折腾了,几年时间一下混过去了,但你想混得更好,必须重视持续学习的重要性,主动去寻找渠道,寻找资源学习才会有更多机会。

 

机遇:你的圈子决定你的眼界高度,你知道你代码写得烂,但是没渠道、没机会可以提升,你碰到的公司做的产品都比较简单的,你也接触不到比你更厉害的人,或者接触到,别人也不会系统地带你,这种情况你是一直无法提升的,跟工作年限无关

 

主动学习意识:有时工作稳定下来,人就懒得折腾了,几年时间一下混过去了,但你想混得更好,必须重视持续学习的重要性,主动去寻找渠道,寻找资源学习才会有更多机会。

 

 

2.我是怎么突破这个阶段的?

 ① 跳出舒适圈,选择辞职

后面实在憋不住了,公司学不到东西工资又低,在激烈思想斗争后决定走出舒适圈:跳槽。

 

② 碰到好的平台

好的平台不一定是BAT之类的大厂,大厂分工很细,机会反而更少,我觉得对自己成长最大的公司,就是最好的平台

后面我就去了一家做智能家居产品的公司,我从头到尾做了3款网关产品(代码量110KB以上),1个蓝牙,2个WiFi+GSM的。

 

③碰到好的师傅

做这几款产品之前,很多功能我都毫无头绪,因为没做过,之前做的都是小项目。

幸运的是,公司之前有个非常厉害工程师做了过类似的产品,有现成的源码和图纸参考。

至今为止,他是我工作以来碰到过,代码水平最高,程序架构设计得最好,对我成长帮助最大的工程师,所以我一直认为,他是我”间接”的师傅。

为什么是”间接”的师傅?

因为我进去的时候他早已经离职了。

所以在开发过程,碰到很多技术难点只能靠自己摸索,硬着头皮去吃透他的编程思路和代码。

 

④主动学习意识

当时对这个项目非常感兴趣,很好奇app控制硬件的整个流程是怎么样的,很好奇TFT屏的菜单UI是怎么做出来的,很好奇传感器和网关是怎么组网的等等。

兴趣驱使我那段时间,每天早上买一瓶红牛,8点第一个到公司,一直干到晚上8-9点。

不是为了在老板面前表现,也不是为了工资,就是纯粹想满足好奇。

项目从无到有的开发过程,对于工程师来说,成长才是最大的

在我的职业生涯里,大概前5年都一直处于第二个阶段。

我在想,如果能早点碰到好的平台、师傅、项目,成长是不是快很多?

我相信答案肯定是的!

 

3.突破第二个阶段有捷径吗?

以前我觉得哪有什么捷径,捷径就是想不劳而获。

后面发现我错了,捷径不是说你不用做,而是把时间精力放在最重要的事情上。

如果让我回到零基础,首先我会系统学下51开发板,然后就是不断找项目做、找更厉害的师傅带,从简单到复杂,把基础打牢,而不是去学更高性能的单片机,更复杂的RTOS。

项目数量决定成长速度,项目质量决定成长高度

我认为这就是捷径了,关键是看你能不能找到好的资源和渠道学习。

很可惜,市面上的大多数教程,哪怕是收费几千块的课程,都只是教你学单片机而已,完完整整做一个项目的很少,能突破第二个阶段的项目基本没有。

所以,在2021年的时候,我们开了项目实战特训营。

 

 

带着对我们成长最大的项目,复制我们成长的方法,教大家如何从无到有,一步步把项目做出来,带领认可我们价值的人穿越第一个阶段第二个阶段

 

我们不能保证每个人学了,都能成功突破第二个阶段,但突破第二个阶段的答案都在项目3和项目6里。

 

想完全吃透我们的思维和代码技巧,还得多实践,把我们的思维和代码框架举一反三,带入到你们以后的项目去应用。

 

只有突破第二个阶段,你能做的项目才越多,机会也更多,工资自然也越高。

 

第三个阶段:高级单片机软件工程师

这个阶段,你不仅能把功能实现,而是站在更高的维度去设计你的程序架构和代码细节。

 

这是做中大型项目必须具备的能力,否则你的产品很难做稳定,哪怕做稳定了,维护起来也很麻烦。

 

好的体现是什么?主要有两个层面:

1.好的程序架构

程序架构是一个很抽象的概念,主要体现在程序可扩展性可移植性

可扩展性:就是你的程序增加/修改功能方不方便?比如现在产品2个按键,如果增加到6个,需要改多少代码,简单来说改的越少肯定可扩展性就越好。

可移植性:在单片机开发领域,很多工程师对可移植性完全没概念,比如说你现在用STM32单片机做的产品,后面STM32涨价了,老板让你换成GD32的,需要改的代码越少代表程序移植性越好。

在写任何功能模块代码之前,都要考虑到这两点,主要为了加速产品开发周期,降低产品后期维护成本。

 

2.程序执行效率

同一个功能,不同的人写出来的代码,cpu执行这段程序所花的时间可能不同的,时间越短,说明你这段程序写得越好。

但是一般产品,对程序执行效率要求没那么苛刻,一般我们做到尽量用最少的代码去实现功能就够了。

越满足以上两点,代码越精简,你的编程思维和代码水平就越高

除此以外,其它能力也很重要,比如快速定位、解决问题的能力、电路调试能力,看数据手册能力等。

不过这些,你做项目过程中总能积累出来的,不像编程思维和代码水平那样,能提升到什么高度,跟时间无关,跟机遇有关。

 

给TA买糖
共{{data.count}}人
人已赞赏
单片机百科

STM32有什么特点?优点及用处是什么?

2023-2-16 14:31:09

单片机百科

STM32单片机可以用来做什么?能实现哪些功能?

2023-2-17 15:22:24

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧