搞电子也要懂设计模式

什么是设计模式?

用特定的工具完成一件特定的任务,大家总是能想到很多方法。经过无数工程师的尝试之后,大家总结出了一些最优的方法,比如说“在某某情况下实现某某目的,采取什么做法最可靠、最可扩展”,这些经过总结的做法,就称为设计模式。


(联合收割机:解决收获问题的设计模式)

设计模式不是设计规范,它没有强制性,但它可以帮助你用优雅、可靠、可维护的方式解决一些前人已经解决过无数遍的问题,并在这个过程中吸收前人的精髓思想。如果你想解决的问题是工程问题而不是科学研究,你就必须得懂一点设计模式。

比如说半个世纪前,计算机程序是没有select(分支结构),也没有while(循环结构)的,一切都用goto(地址跳转)来实现。后来大家写程序写得多了,就有人发现:其实大多数编程工作都是在用goto实现select和while的功能。后来我们就把这些结构归纳为基本的设计模式,几乎所有高级编程语言都继承了这些设计模式,让我们可以方便地写程序。

搞软件有设计模式,搞电子其实也有设计模式。比如我们学单片机,往往学会了“单片机可以怎么编程”,却没有搞明白“单片机应该怎么编程”,后果就是程序一旦复杂起来,有时就不知道该怎么写了;或者有的问题搞了两三个月,结果换成人家两三个星期就搞好了。最后虽然知道了单片机是怎么工作的,但有些功能就是做不出来。


我经常看到很多人提问,说我要用单片机加某个传感器实现某个功能,程序怎么写?求大神帮忙!!!这些同学是不会写程序吗?不是的,他们会写for和while,只不过他们不了解单片机程序的一般设计模式。如果是验证工作原理,程序就很简单;要组成一个系统,系统间各个部件要协作,这个程序就不是谁都会写了。很多没有接受过工程教育的爱好者,甚至一辈子也写不出能流畅工作的程序,只好天天找大神求助,却不知道还有“设计模式”这回事。


举个例子,论坛有很多同学想自己用单片机设计数据采集系统,比如航电、数采卡之类的,并通过这个过程学习单片机程序设计。问题是,这些程序究竟该怎么写?写一个while循环吗?应该在中断内还是中断外处理数据?怎么实现延时?怎么实现多任务?于是这些同学就到处提问,成为了社会的负担。


还有的同学靠蛮力去尝试,那简直就是在浪费生命。假如他们了解那些经过检验的设计模式,就可以节省很多无用功。所谓跟牛人做项目,看高手写代码,拆机器拍电路,其实都是在学习设计模式。不过,这些学习方法都是野路子,效率很低。如果我想正经地学一下设计模式,有什么捷径吗?


我印象中科创除了joyeep发过一次他的软件设计模式库之外,就没有人提过这些事了,包括KC901的团队也只跟大家讲过一些原理性的东西,没有讲过设计模式。而决定一个工程项目(也就是绝大多数DIY项目)周期长短的关键,往往就是设计模式而不是基础理论。

对于单片机相关的设计,我推荐《时间触发嵌入式系统设计模式》,这本书是老外写的,写的很好。


最后,祝大家开发愉快。

[修改于 3 年前 - 2016-12-10 19:52:41]

来自 电子技术
2016-12-10 20:02:42
1楼
我也有就是做不出来东西的感觉,但是看了楼主的帖子感觉还是有点模糊
折叠评论
加载评论中,请稍候...
折叠评论
2楼
有意思,不错
折叠评论
加载评论中,请稍候...
折叠评论
3楼
很好的文章!
以我从业十多年的经历,感觉这个行业越来越浮躁了。以前搞过兴趣小组,人气随着那批学生毕业改行,慢慢没了;发起过几个DIY活动,只有几个表示口头支持,但是浏览量很大,最终都是自己单独干,群里的人进进出出,顶着一堆火星文昵称坐等成果,无力吐槽……;招过几次新员工,当时3K的行情给5K试用,也描述了职业规划,没有画大饼,但都是学会一点就跳槽了……现在基本是跟友好的公司合作,各赚一块。
总结:对新手不用报太多想法和期望,想懂的自然会懂(他会问,会搜索、看书主动学习),不想懂的你花心思去教还招人恨(浪费了打游戏、泡妞的时间)
折叠评论
加载评论中,请稍候...
折叠评论
novakon(作者)
4楼
引用 德国公车:
我也有就是做不出来东西的感觉,但是看了楼主的帖子感觉还是有点模糊
我很少推荐书,一本书如果写得不好你推荐给人家就是害人。上面那本书我觉得是比较少见的几本好书之一。
另外就是基础理论必须得懂,电路模电数电都得学。

[修改于 3 年前 - 2016-12-10 22:44:18]

折叠评论
加载评论中,请稍候...
折叠评论
novakon(作者)
5楼
引用 amo:
很好的文章!
以我从业十多年的经历,感觉这个行业越来越浮躁了。以前搞过兴趣小组,人气随着那批学生毕业改行,慢慢没了;发起过几个DIY活动,只有几个表示口头支持,但是浏览量很大,最终都是自己单独干,群里……
行业浮躁是因为门槛低了。以前加入电子行业必须是正经大学本科毕业,大家好歹都是知识分子,有环境才有氛围。现在大学扩招质量下降,教学内容跟不上技术进展,加上有了各种自动化工具、廉价工艺流程,三教九流都可以搞电子了,所以就进来了很多没脑子又想赚钱的人(也就是火星文昵称的这些人)。没脑子又想赚钱其实挺难的,它要求这个人必须非常自私才行。所以amo遇到很多自私的新人,也就见怪不怪了。

相比之下,现在机器学习领域门槛要高得多(至少还能再维持5年),不妨关注。

[修改于 3 年前 - 2016-12-10 21:14:08]

折叠评论
加载评论中,请稍候...
折叠评论
2016-12-11 01:27:21
6楼
搞电子套路深
折叠评论
加载评论中,请稍候...
折叠评论
2016-12-13 08:41:48
2016-12-13 08:41:48
7楼
读遍帖子,比较赞同这个观点。换句话说,设计模式其实就是系统地分析和评估设计需求的方法。

这本书我也给师弟师妹推荐过,但是后面一问,很少人能看得下去...
折叠评论
加载评论中,请稍候...
折叠评论
2016-12-15 13:16:18
2016-12-15 13:16:18
8楼
233那本书好像写的是合作是调度器。。
折叠评论
加载评论中,请稍候...
折叠评论
9楼
就是个定时器计数
折叠评论
加载评论中,请稍候...
折叠评论
2016-12-22 15:12:22
2016-12-22 15:12:22
10楼
当然要参考啊
折叠评论
加载评论中,请稍候...
折叠评论
2017-1-5 23:46:10
2017-1-5 23:46:10
11楼
历史上有很多学科发生了倒闭,比如上世纪80年代的“工业动力学”,讲的是驱动工业经济和进行工业管理设计时需要用到的数学原理。
图:工业动力学问题举例
272676

这些学问好不好呢,当然是很好的,很重要、很有普遍性、很能解决问题。但是,它过于不符合用户对于分析问题的方法的惯常理解。想提纲挈领,结果却是无人问津。而他的理论并不是就此消亡,而是分散在许多不同的学科或者技巧中。
总结起来看,各专业,各种技能,都有一些套路和经验,针对这些套路和经验也都有一些不完善的理论。有的学科期望把这些零散的套路和理论搜集起来,形成一门系统的学科,立足虽十分高远,但罕有成功者。
另一个例子是创造学,它把各行各业创新的蛛丝马迹以规律的形式抽取出来,希望成为一门学科,最终发现是徒劳的。
但是我并不反对大家了解一点创造学,实际上创造学至少可以认为是机械工程的设计模式,了解它的确能够为设计开拓视野,不了解它也并不是做不了设计,因为本专业系统的学习已经能为设计创新打下坚实的基础,这些基础本身就包含了创造学的基本原理。

[修改于 3 年前 - 2017-01-05 23:54:07]

折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
ID:{{user.uid}}
{{user.username}}
{{user.info.certsName}}
{{user.description}}
{{format("YYYY/MM/DD", user.toc)}}注册,{{fromNow(user.tlv)}}活动
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png