该不该放弃嵌入式,单片机这条路?
Posted 无际单片机编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了该不该放弃嵌入式,单片机这条路?相关的知识,希望对你有一定的参考价值。
本文几乎浓缩了我从业10几年的精华,内容涵盖我转行、打工、创业的经历。
建议从头到尾不要错过一字一句,因为字里行间的经验之谈,或许能成为你人生重要转折点。
全文3700多字,写了6个多小时,如果你赶时间,建议先点赞+收藏防止找不到。
很多人痛苦的根源,就是怕吃苦。
相信,我比你们的年纪都大,虽然我一直觉得自己才20多岁。
人生上半场已过,我最大的感触就是只要还活着,就是不断碰到问题,然后解决问题的过程。
问题只会迟到,不会缺席,今天你逃避的问题,以后会以另一种更残酷的形式出现。
借此机会,我简单回顾下我这12年,看完以后你会觉得,原来不是你比较倒霉,每个人都是这么苦过来的。
只是有些人,选择在一条赛道,坚持苦下去,直到突破瓶颈,有了更高造诣。
有些人中途放弃,换一条新赛道,刚开始确实很容易,越往后发现也是很难,最终陷入苦的恶性循环。
一、转行
我2011年入行至今,做了单片机开发有12年时间了,在这期间遭了不少罪。
先从入行开始说起,我是电气专业,实习看到那些师兄工作,不是灰头土脸,就是满头大汗,全身充满了屌丝的气息,关键工资还低,狗看了都摇头。
我对这种付出和回报严重不成正比的工作,充满了排斥。
但没黑这个行业的意思,这是20岁出头时对行业的认知。
我寻思,起码找个工作环境好一点的,比如坐在办公室玩玩电脑,工资又高的。
这种职业,或许只有程序员比较适合我。
刚开始,我并不知道单片机,而是选了java,因为当时真的很火。
以前穷学生,没钱报课,只能买一本书,网上看一些免费的教程入门。
自学了几个月,把Java SE学完了,也学了mysql和oracle,但感觉云里雾里,似懂非懂,反正就是什么项目都做不出来。
和现在很多新手学单片机一样的,学完c语言、单片机,一做项目就一脸懵逼,写程序没思路。
现在做了技术10几年,才明白这个再正常不过了,每个工程师都会经历的。
解决办法就是多做项目,先做点小项目,再做复杂的,慢慢积累。
这是个转折点,很多人就是没跨越这一步,以为自己不适合,就放弃了。
或许当初我再坚持一下找点项目做,就成功了。
后面我研究了一下,原来Java SE只是基础,学完这个只是开始,还得选Java EE和Java ME继续学习。
我TM心态有点崩了,耗了几个月时间,好像连门都没入。
然后我也不管了,尝试去找工作,一直碰壁,当时连找啥职位都不知道。
后面有个培训机构叫我去面试,正庆幸终于有眼瞎的。
去到以后,一波套路下来,我算搞明白了,原来是招生的。
就是先用你的缺点打击你,你这种水平找工作没竞争力,需要去他们那里再培训提高才好就业。
我说没钱,他说没关系,可以先贷款,等你找到工作再还。
听起来不错,最后我还是走了,因为这个“老师”给我的感觉就像个骗子。
迷茫焦虑、浑浑噩噩不知道多久后…
生活所迫,不得不继续折腾。
如果经历过诺基亚时代的人,应该知道,当时手机的应用一片蓝海。
所以,我尝试选择Java ME这条路走下去。
现实比我想象要复杂太多了,教程少,又没师傅带路,新手靠自学根本入不了行。
误打误撞,我就是通过Java ME慢慢了解到单片机的。
深入了解了一下,发现这个东西好像比java简单,只需要会c语言。
后面,我买了一块STC89C52的开发板,有java基础很快就点亮了第一个LED。
顿时激起了我的兴趣,感觉比java有意思多了,竟然还能通过程序控制硬件。
相信很多单片机工程师入行时,也是和我一样,纯粹就是兴趣驱使。
如果看工资的话,很多人不愿意学,因为当年做单片机的工资比纯软件低很多。
大概学了几个月我忘记了,但是应该不超过3个月。
学习过程也没那么顺利,特别是学模拟电路那块,根本学不懂,差点放弃。
还好学开发板的时候,模拟电路很多知识用不上,只需要大概看懂原理图就行了。
我学了c语言、51单片机、基础电路、Protell99SE就去找工作了。
当时还不流行网上投简历,都是去人才市场,买门票进去投简历,然后现场HR面试这种。
事与愿违,不出意外的话,我能找到工作肯定是个意外。
拒绝理由基本就是学历、专业、工作经验、项目经验这些。
连续被10几家拒绝以后,是一种怎样的体验?
当时和一个朋友一起去找的,两个难兄难弟都没找到,然后我们去烤鱼店点了一份烤鱼,啤酒干了2,3瓶(不胜酒力),两个人大男人一条烤鱼一半都没吃完。
都焦虑到吃不下饭,然后不断在质疑自己,像我这种是不是不可能转行成功?
朋友也劝我,别人本专业都找不到,你怎么可能找得到。
我要不要先进场打螺丝,积累点工作经验再转会不会好一点?
后面我还真这样做了,我去找了一个修DVD的公司,每天像机器人一样,测试机器,听DJ舞曲。
做了一个星期,我就提桶跑路了,因为有一个同事给我洗脑,说我会单片机做这个干嘛,浪费时间。
辞职后,我冷静了一段时间,思考如何才能入行。
后面想通了,学历、专业、工作经验我都没法改变。
但是项目经验可以改啊,谁规定只有工作才能有项目经验,哪怕是业余项目,也比没有强。
找到这个切入点,我选了个智能小车的项目。
还好,某宝还保留着10几年前我的订单信息,不然大家还以为我在吹牛逼。
这个项目的图纸和程序,都还保留了一部分。
做完以后,我嫌还不够牛逼,后面又自学了VB,做了一个上位机,用上位机去控制小车,不过这块资料已经丢失了,当时记录笔记的网站也关闭了。
这个项目让我顺利地找到了工作,成功入行,虽然月薪只有1.8K。
我来对这个阶段性总结:
如果你还在这个阶段,不妨坚定一点,感性一点,定了目标拼命往前冲就行了,事在人为。
为什么你会觉得很难?
我觉得大概率是走了弯路,因为你没经历过,没经验,所以出现问题不知道怎么解决,不知道自己能不能解决。
如果有一个经历过的人,直接告诉你,他曾经也碰到过这种问题,并且告诉你,他是怎么解决的,我相信你会像开挂一样成长。
二、研发生涯
虽然入行了,但是麻烦还是很多,而是换了一种形式。
在前1-2年的时候,自己独立实现产品功能程序都有问题,我的目标就是能达到独立开发软件的水平。
到第3,4年的时候,基本大多数产品程序都能独立开发了,又觉得自己代码写得很烂。
最怕就是好不容易测试稳定,领导又说要改功能,看着乱七八糟的代码,都有想辞职的冲动。
这个阶段,我又有了新目标,就是把代码架构写得更好,扩展功能和移植到别的项目上都很方便。
这个阶段花费的时间最长,因为市面上没这样的教程,身边也没有什么好的师傅带。
后面突破这个阶段,就是完完全全靠时间和项目堆积出来的。
关于程序架构,我在2019年的时候也录了一套比较系统的视频,当时本来想卖的,后面工作一忙耽误了,现在直接开源回馈下粉丝。
是不是干货,够不够硬核,自己去看一下就知道了。
可以在小破站直接找无际单片机编程,就能看了。
具备程序架构设计能力以后,我的日子好过多了,因为做新项目就是复制粘贴,然后再增加一些产品特定的功能代码。
来新项目了,老板问我多久做出来,我一般回答3,4个月,然后可能1个月就做完了,剩下2,3个月摸鱼。
以上就是技术面。
但是工作又不止技术面,其它方面的烦恼也非常多,比如说在小公司里没量,供应商不鸟我们,做项目频频受阻,大公司又勾心斗角,拉帮结派,请个假要”一村人”签字才能批。
比如我总是一边靠这门技术吃饭,一边骂这个行业垃圾(工资低),总是比做java的同学低几千。
不过这些都是小问题,最困难的问题就是技术面和突破收入瓶颈。
技术面就不说了,我们无际单片机有项目实战特训营,拿出我们研发生涯里对我们提升最大的项目,信就干,不信也别喷,毕竟没强迫你,想学我们还得看缘分,看素质。
单片机工程师的收入瓶颈是多少?
这个还真不好说,跟学历、能力、城市、行业、机遇都有关系,最靠谱的就是自己去相关平台搜单片机工程师,看看平均值是多少。
我给个参考值,一线城市,大概在25-40K之间。
三、创业
我为什么要出来创业啊?
做了10年,工资早到瓶颈了。
很多人问我,做单片机开发有没有年龄危机,能不能干到45岁。
我说能干到你不想干为止,因为大多数人做到35岁,就做腻了,要么转管理、要么转销售、要么创业。
我就是活生生的例子,不想继续打工,是因为我觉得自己的时间应该可以更值钱。
我选择了创业这条路,技术创业,犹如赌狗,十赌九输。
如果你站在理性的角度,肯定不会选择创业,如果你去问身边的人,十有八九不建议,做技术工资高又稳定,不香吗?
所以刚开始,做一个感性的,能死磕的傻比,相对容易成功。
太聪明的、想法多的、奇技淫巧多的,大概率会失败。
回想我转行的时候,再到现在创业2年多,哪次不是满腔热血,管他三七二十一,像傻比一样在看不到希望的道路上死磕。
如果你事事都理性去分析利弊,你会发现,这世上就没有你适合玩的东西。
不过,不了解我的人,不要被我洗脑,也不要模仿,要知道自己能承担的风险阈值,平衡这个点也很重要。
创业初期,我是完全转行,做了别的行业。
很幸运从第二个月开始就有收入,虽然每个月只有几千块。
你可能会觉得很假,什么?刚创业第二个月开始就有收入?
我的方法是砸钱拜师、砸钱买项目、砸钱提升认知。
有些课,一时半会对我也没啥用,刚开始觉得不止,踩坑了。
但是后面通过不断项目实践,慢慢就领悟了,能把这些知识串起来,形成自己的知识体系,最后把这个体系套用在不同的项目里。
接触行业越多,我越发现各行各业内卷很严重。
现在我很庆幸掌握了这个技能,让我有竞争壁垒,进可攻退可守,创业失败也可以回去打工拿个高薪,稳得一批。
但这个技能,对我来说,也仅仅是个工具而已。
所以,很多人说,做单片机没前途,做单片机没Linux工资高。
我选择沉默,毕竟,每个人看到的世界不一样。
我与嵌入式软件开发爱恨交织的 7 年
关注+星标公众号,不错过精彩内容
作者 | 梦人亦冷
很多大学生、初学者总爱问一个问题:该不该放弃嵌入式、单片机这条路?
以下是一位网友分享的嵌入式开发经历,希望可以帮到你。
阶段 1
大一到大三这个阶段我与大多数学生相同:
学习本专业知识(EE专业),
学习嵌入式软件开发需要的计算机课程(汇编原理,计算机组成原理,操作系统,C语言等),
学习嵌入式项目(来源于实验室项目,自己想到的项目以及各种比赛)。
关于如何学习嵌入式软件开发:
① 学习51单片机。
这个阶段你只需要跟着郭天翔的视频去学,只要求实现功能,不求甚解。
但建议能够提出问题,比如“为什么往IO控制寄存器写入特定值能点亮LED灯?”
“IO口的电路结构是什么样子的?”
“什么是上拉下拉,灌电流拉电流?”,
这一阶段主要是熟悉单片机的使用,并且在使用中思考发现问题,还能熟悉一些基本概念。
② 开始查资料看书。
看模拟电路数字电路等等,开始去弄明白1中所提出的问题。这时候问题主要集中在电路方面。
③ 开始学习STM32。
随便买个板子,看原子的书跟着一步步去做。
这时候你会遇到很多计算机方面的问题,这时候一边学习教程,一边学习:微机原理,编译原理,操作系统。
你要弄清楚 ARM 架构,弄明白 CPU 如何取指,译码,执行,知道地址总线,控制总线,数据总线如何工作。
要弄明白你编译各个阶段产生的各个文件是什么,什么是分散加载,什么是重定位,什么是代码段,什么是数据段,等等。
弄明白 CPU 如何启动,程序镜像在内存中如何布局。
要知道中断的原理,以及现场保护等等。最后你了解了各个知识点之后,转向 GCC 开发 STM32,这时候你如果知识掌握得不错,你应该可以很快地学会编写链接器脚本并且明白每一条语句所代表的含义。
④ 开始增强 C 语言。
深入挖掘C语言的各个死角。
最好可以做到当你写下一条语句的时候知道编译器会如何处理。
还需要数据结构和软件工程,建议最好还要学习一下设计模式。
开始学习养成良好的代码风格,开始思考代码的结构。
可以说设计模式如果能学好,在往后学习 LINUX 内核时大有裨益。
你会发现 LINUX 的输入子系统有点像职责链模式,会发现 ASOC 音频系统有点像模板方法模式。
私以为,如果能在两个以上不同方面考察同一种编程思想,你会得到更加深刻的理解,更能领会其精华。
⑤ 认真研读 OS 方面的书。
各个知识点都要弄明白,进程是什么,程序是什么,线程是什么,竞争死锁优先级反转,虚拟地址空间物理地址空间,用户空间内核空间等等。
开始学习 ucos,这个没什么可说的,如果在 2 中能熟练掌握各种知识点,知道 CPU 如何中断如何保护恢复现场,那么读ucos 的源码时候,在原理上就不会有什么疑惑。
如果能在 4 中养成把握代码整体结构的能力并且学习好数据结构和基本的算法,读源码就没有什么障碍。
一旦原理弄通了,源码也能读懂,那么吃透 ucos 就是顺理成章的事情。
⑥ 自己仿照 ucos 写一个 stm32 上的实时 os 出来。
⑦ 进军 LINUX。
学习 LINUX 的基本使用,看赵炯那本内核剖析,啃 LINUX 内核设计与实现,把握总体的内核架构。
之后可以学习驱动,看建议陈学松老师的书,弄明白基本的驱动架构和如何编写简单的驱动,认真对待,这里强调一下设备驱动模型。
最后啃 LINUX 内核源码情景分析,上下两册用心读,这里着重强调一下内核中的 VFS 部分。
之后就是看宋宝华老师的书,进一步学习驱动开发。
最后,看内核源码看内核源码看内核源码。
⑧ 其它的什么 SPI,IIC,什么 DMA,都只是技能问题,只要知识学的好,技能想咋点就咋点。
阶段 2
大三到研究生入学前这个阶段我在工作与考研之间无比纠结,并在此期间无数次常思考嵌入式开发到底是什么,如何把嵌入式开发做好,以后该选择怎样的一条职业道路。
为此,像很多人一样,在知乎上像做嵌入式开发的前辈们咨询过多次。
在这个阶段,我学习了 Linux 驱动开发,并渐渐认识到,嵌入式开发是一个比较偏软件的岗位(我认为大多数学生做的工作都是嵌入式软件开发,而不是硬件开发),
应该深入学习计算机体系结构的知识,而不是把那些无聊的嵌入式相关项目翻来覆去的做(尤其少参加乱七八糟的比赛)。
最终,我选择了读研,想站的再高一点看这件事。
阶段 3
研一进入研究生阶段(2018),当大家都火急火燎的加入 AI 的阵营时,我依然对嵌入式爱的深沉。
选课时,我选择了嵌入式实时操作系统,计算体系结构相关的课程,还看了很多相关的书籍,依然每周保持嵌入式 Linux 的学习。
时不与我,明明选择了做底层的导师,结果导师转做深度学习了,还好是做终端+AI相关的方向,也不算完全偏离嵌入式,这让人多少有点欣慰(毕竟我还是放不下嵌入式的)。
在这个阶段,由于接触了不少的人和事,我越来越认识到,嵌入式只是一个平台,切勿把嵌入式看作一个具体的岗位,无论硬件还是软件。
因此,我对这个岗位以及行业就业现状有了更进一步的认识。
阶段 4
研二到研三在这个阶段,我对狭义嵌入式(驱动,应用开发)完全释怀,
我认为许多人喜欢的嵌入式并不是驱动或者应用等开发,而是对底层系统的一种好奇心与掌控时的快感。
与其说喜欢嵌入式,还不如说喜欢的是计算机体系结构。
因此,只要是涉及到硬件的软件开发,我都喜欢,我也将其均定义为嵌入式。
因为嵌入式软件开发就是建立在底层语言,计算机组成原理,操作系统等知识上的一种软件开发,
如果你想将嵌入式开发做好,你就得学好这几门课程 ,如果你学好了这几门课程,底层软件开发工作的岗位你应该都能胜任。
因此,又何必将嵌入式开发狭义的划到驱动开发,XX协议开发之类的呢?
最终,这个阶段我毅然放弃了 Linux 驱动的学习,投入了 Python 深度学习的怀抱中。
我不再关注我到底做的是不是嵌入式开发,只关注和嵌入式平台有没有关系。
我研究的是如何把一个深度学习模型部署到嵌入式平台上去。
有人可能会疑问,这和嵌入式开发有什么关系?为什么没有关系呢?在嵌入式平台上用 C 语言编写神经网络模型的前向推理,这不是把我们的C语言和组成原理的知识发挥出来了吗?
当图像处理程序性能不足时,查看生成的汇编程序,当汇编效率不高时,将 C 语言替换为我们自己写的汇编代码,这还不够嵌入式吗?
其实,当我们把思路放宽后,嵌入式就不再是某一个具体的岗位了,
它有可能是 AI 算法工程师,AI编译器开发工程师,FPGA加速工程师,高性能工程师等等。
来源:
https://www.zhihu.com/question/370606355/answer/1865920389
声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。
------------ END ------------
欢迎关注我的公众号,回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
欢迎关注我的视频号:
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。
以上是关于该不该放弃嵌入式,单片机这条路?的主要内容,如果未能解决你的问题,请参考以下文章