我对编程的兴趣始于黑客攻击……
没想到最终走上了单片机开发的路线。 也许现实不允许我有梦想。
黑客的成长太漫长了,我的首要任务是找到一份谋生的工作。
我不是计算机专业的,即将毕业,对编程一无所知。
我第一次自学的是Java。 学了基本语法后,我好像明白了,但又好像什么都不懂。
简单来说就是做项目的时候没有想法。
后来接触了单片机。 经过深入了解,我发现这个编程很简单,如果有基础的Java背景的话,学C语言是非常快的。
电路相当复杂,尤其是模拟电子器件。 幸运的是,我后来发现它不需要深厚的模拟电子基础。
我果断买了一块开发板,按照教程操作,一个多月基本实现了开发板上的所有功能。
历史总是惊人的相似。 虽然我可以使用每个外围功能,但当我开始一个项目时我很困惑。
后来我又做了一个智能汽车项目。 我买了配件,没有视频教程。 我只是依靠商家提供的教程。
最后我又独立写了一遍。 做完之后,我明显感觉自己的水平提高了。
主要有几个改进:
1.学会阅读别人的项目代码
这个能力尤为重要。 虽然看的过程比自己写更痛苦,但在实际工作中,很多时候还是要去看别人写的代码。
一开始公司不会让你开发产品,而是让你维护老产品,改代码。
如果以后想要提高,也需要有这个能力。
2. 编程思维
也就是实现功能的思维,这个也很重要。
如果你从来没有做过这种功能,最好的办法就是学习别人的实现思路。
一般来说,如果你做过某个功能,下次再做的时候就会明白。
这个只能通过不断的项目积累,在开发板上是学不到的。
3. 编程层面
理解实现的思想和能够把它写成代码是两件不同的事情。
我的做法是先模仿别人的代码,然后分析这样写的好处。
过程也是相当痛苦的,但是随着经验的积累,会变得越来越容易,最终你会到达梦想的高度。
完成智能汽车后不久,我就找到了工作。
我一开始接触最多的是STC51和NXP单片机。
工作了大概2、3年,我基本上可以独立写大部分单片机产品的代码。
当时我觉得自己已经很优秀了,单片机编程太简单了,无法满足我。
直到后来我去了一家导航公司,涉及GPS、菜单、雷达探测等功能。
我这才意识到自己的水平有多差,才发现自己以前做的产品太简单了。
这家公司让我的技能提高了很多。 我以前从来不知道如何制作多级菜单,但从那时起我就知道了。
主要是通过观看经验丰富的工程师的代码来学习的。 掌握理解他人代码的能力非常重要,并且可以持续整个职业生涯。
可以说,不到一年的时间,相当于我之前两三年的时间。
有时候并不意味着做的时间越长,你的水平就越好。 关键是看你身边有没有高手可以借鉴。
如果你在公司工作一年,基本上就会对公司的产品非常熟悉。 它们都是同一类型。 您可以更改电路和代码以成为新产品。
如果你呆的时间长了,对你来说基本上都是重复性的工作,你的水平也会慢慢提高。
这是我的水平第一次得到了很大的提高,也刷新了我对单片机编程的认识。 事情并不像我想象的那么简单。
第二次是后来跳槽到一家做物联网网关的公司,有语音、菜单、无线数据软解码、OTA、4G、Wifi等功能。
这可能是我遇到过的最复杂的产品。
类似于我们无限微控制器编程实践课程中的第三个项目。
为了让很多基础不好的同学能够快速上手,我简化了一些产品功能,尽量保留最常用、最核心的东西。
虽然我做了这么多年,但要独立做这个产品对我来说还是非常困难的。
主要是功能太多,头脑很容易混乱,不知道如何整合。
在开始这个项目之前,我也重新研究了一下之前工作过的老工程师的代码,看看有没有什么有用的东西。
就这样,我在一个地方一点点拼凑,最后慢慢消化、创新,形成了自己的东西。
这个项目我做了大约一年的时间,但最终还是不稳定,因为当时第三方云平台还不成熟。
主要原因是底层协议存在漏洞,app功能不是很强大,导致用户体验不佳。
比如离线推送功能,总是有很多型号的手机无法推送。
所以,这就是为什么物联网很难做出稳定的产品的原因。
涉及的事情太多了。 不仅仅意味着硬件稳定,还取决于云平台和制作App的经验是否足够丰富。
另外,联调涉及远程通信,很多细节难以理解,开发周期也较长。
这个项目对我的成长贡献最大,但对于红牛来说有点贵。
只要没有什么特别的事情,基本上每天早上我都是第一个到公司的,而且公司也是一家初创公司。
老板每次看到我都很感动。 如此积极主动的员工并不多。
事实上,我对这个项目非常感兴趣。 我一直想做这种中大型项目,但一直没有机会。
我其实和大家的想法是一样的,就是希望尽快让自己具备独立做项目的能力,无论项目大小。
有时,我常常想,如果我在第一份工作的两年内就接触过这种项目,并且有人来领导它该多好。
也许我5年或者2年就能达到别人的水平。
后来接触了蓝牙协议栈等开发。 经过前面的积累,研究就变得容易多了。
蓝牙协议栈系统是我迄今为止遇到的最好的非RTOS。
因此,我决定精简一下,移植到STM32上,以备将来使用。
虽然之前写过一个批量验证的程序架构,但毕竟还是有点粗糙。
例如,队列函数只能将字节数据入队和出队。 如果可以传输任何数据类型那就更灵活了。
这个架构也是开源的,我在2019年随机录制了一组视频,有兴趣的可以看看。 对于提高自己的编程水平还是很有帮助的。
教程已上传至各大平台。 B站搜索无极单片机编程就可以了。
最后总结:想要快速提升自己的编程能力,还是要通过项目不断积累,不过也有一个捷径,就是和资深工程师一起做项目。 同样是积累,但效率却有天壤之别。