第一次自学的是java,学完基本语法,好像懂了,又好像啥都不懂。 通俗点讲,就是做项目毫无思路。 后面接触到了 单片机,深入了解后,发现这个编程简单,有java基础学c语言也贼快。 就是电路比较复杂,特别是模电,还好后面发现并不需要太深的模电功底。 果断买了块开发板,按着教程顺藤摸瓜,一个多月基本把开发板上的功能都实现了一遍。 历史总是惊人的相似,虽然单个外设功能都会用,但一做项目就一脸懵。 后面又做了一个智能小车项目,买了配件,也没视频教程,就看商家提供的教程死磕。 最后又自己独立写了一遍,做完以后明显感觉自己水平提升了。 主要有几方面的提升: 1.学会看别人的项目代码了 这个能力特别重要,虽然看得过程比自己写还痛苦,实际工作中也经常要去看别人写的代码。 刚开始公司也不会让你去研发产品,会让你维护老产品,改代码。 后面你想提升,也需要有这项能力。 2.编程思维 也就是实现功能的思维,这个也是非常重要的。 如果你没做过这种功能,最好的方法就是学习别人的实现的思路。 一般某种功能,你做过了,下次做就懂了。 这个只能不断通过项目去积累,在开发板上学不到。 3.编程水平 懂实现的思路和你能用代码写出来又是两码事。 我的办法还是先模仿别人的代码,然后分析他这样写有什么好处。 过程也是比较痛苦的,但是随着你经验的积累,后面会越来越轻松,最终达到望眼欲穿的高度。 做完智能小车不久,我就找到工作了。 刚开始接触最多的是STC51和NXP的单片机。 工作了2,3年左右,基本大多数的单片机产品我都能把代码独立写出来。 那个时候感觉自己已经很牛逼了,单片机编程太简单不能满足自己了。 直到后面去到一家做导航的公司,有涉及到 gps、菜单、雷达检测等功能。 我才知道自己的水平有多渣,才知道以前做的产品都太简单了。 这家公司让我的水平也提升了不少,以前一直不知道多级菜单怎么做,从那以后知道了。 主要还是看老工程师代码学出来的,掌握看懂别人代码的能力很重要,能贯穿你整个职业生涯。 可以说那1年不到的时间顶我前面做2,3年。 有时候不是说你做的越久,水平越厉害,关键还是看你周边有没有高手可以学习。 你在公司做1年,基本对公司产品就很熟悉了,都是同类型的,可能改改电路改改代码就是一款新产品了。 呆久了,对你来说基本都是重复工作,水平提升也很缓慢。 这是我第一次水平有较大的提升,也重新刷新了对单片机编程的认知,并没想象简单。 第二次是后来跳槽到一家做 物联网网关的公司,有语音、菜单、无线数据软解码、OTA、4G、Wifi之类的功能。 这应该是我有史以来碰到过最复杂的一个产品了。 类似于我们无际单片机编程实战课程里的第三个项目。 只是为了很多基础差的学员能快速上手,我把一些产品功能简化了,尽量留下最常用最核心的东西。 虽然做了这么多年,但是让我独立去做这个产品还是很吃力的。 主要是功能太多了,脑子就容易乱,不知道该怎么整合。 做这个项目之前,我还把以前上班那些老工程师的代码又重新研究了一下,看有没有什么能用的东西。 就这样,一个地方拼凑一点,最后再慢慢消化创新形成了自己的东西。 这个项目我大概做整整一年,最后还是没做稳定,因为那个时候第三方云平台都不成熟。 主要是底层协议有漏洞,还有app不是很给力,导致用户体验感很差。 比如做离线推送功能,总是有很多型号的手机推送不了的。 所以,做物联网的产品,很难做稳定就是这个原因。 涉及的东西太多,不是硬件稳定就行,还得看云平台和做app的经验是否足够丰富。 再加上联调都是远程沟通,很多细节很难理解到位,开发周期也长。 这个项目对我的成长是最大的,就是有点费红牛。 只要没特别的事,每天早上我基本都是最先到公司,公司也是初创公司。 老板每次看到我都很感动,这么上进的员工不多了。 其实我是对这个项目很感兴趣,一直想做这种中大型项目,就是没机会。 我和大家的想法其实是一样的,就是想尽快让自己具备独立做项目的能力,不管大小项目。 有时候,我经常在想,如果第一份工作那2年,就能接触到这种项目并有人带。 或许我2年就能达到别人5年甚至以上的水平。 再后面,就是接触了蓝牙协议栈之类的开发,有了前面的沉淀以后,研究起来轻松多了。 蓝牙协议栈的系统算是我目前接触到比较好的非RTOS了。 所以,我决定把它精简以后,移植到STM32上面来,以后为我所用。 虽然之前也写过一个经过批量验证的程序架构,但毕竟还是简陋了一点。 比如说队列功能,只能入列和出列字节数据,如果能传输任意数据类型就更灵活了。 这个架构也是开源的,并在19年随便录了套视频,有兴趣可以去看看,对编程水平提升还是有挺大帮助。 最后总结:想快速提升自己编程能力,还是得不断通过项目积累,但也是有捷径可走的,就是跟资深工程师做项目,同样是积累,效率天差地别。 |