搞电子也要懂设计模式

什么是设计模式?

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

845078939857838149.jpg

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

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

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

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

blob

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

76755_WM.jpg

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

blob

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

blob

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

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

blob

最后,祝大家开发愉快。

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

来自:电子与无线电 / 电子技术
德国公车
4年3个月前
1楼
我也有就是做不出来东西的感觉,但是看了楼主的帖子感觉还是有点模糊
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
深深
4年3个月前
2楼
有意思,不错
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
amo
4年3个月前
3楼
很好的文章!
以我从业十多年的经历,感觉这个行业越来越浮躁了。以前搞过兴趣小组,人气随着那批学生毕业改行,慢慢没了;发起过几个DIY活动,只有几个表示口头支持,但是浏览量很大,最终都是自己单独干,群里的人进进出出,顶着一堆火星文昵称坐等成果,无力吐槽……;招过几次新员工,当时3K的行情给5K试用,也描述了职业规划,没有画大饼,但都是学会一点就跳槽了……现在基本是跟友好的公司合作,各赚一块。
总结:对新手不用报太多想法和期望,想懂的自然会懂(他会问,会搜索、看书主动学习),不想懂的你花心思去教还招人恨(浪费了打游戏、泡妞的时间)
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
4年3个月前 修改于 4年3个月前
4楼
引用 德国公车:
我也有就是做不出来东西的感觉,但是看了楼主的帖子感觉还是有点模糊
我很少推荐书,一本书如果写得不好你推荐给人家就是害人。上面那本书我觉得是比较少见的几本好书之一。
另外就是基础理论必须得懂,电路模电数电都得学。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon作者
4年3个月前 修改于 4年3个月前
5楼
引用 amo:
很好的文章!
以我从业十多年的经历,感觉这个行业越来越浮躁了。以前搞过兴趣小组,人气随着那批学生毕业改行,慢慢没了;发起过几个DIY活动,只有几个表示口头支持,但是浏览量很大,最终都是自己单独干,群里……
行业浮躁是因为门槛低了。以前加入电子行业必须是正经大学本科毕业,大家好歹都是知识分子,有环境才有氛围。现在大学扩招质量下降,教学内容跟不上技术进展,加上有了各种自动化工具、廉价工艺流程,三教九流都可以搞电子了,所以就进来了很多没脑子又想赚钱的人(也就是火星文昵称的这些人)。没脑子又想赚钱其实挺难的,它要求这个人必须非常自私才行。所以amo遇到很多自私的新人,也就见怪不怪了。

相比之下,现在机器学习领域门槛要高得多(至少还能再维持5年),不妨关注。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
立棍
4年3个月前
6楼
搞电子套路深
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
疯狂的蔬菜
4年3个月前
7楼
读遍帖子,比较赞同这个观点。换句话说,设计模式其实就是系统地分析和评估设计需求的方法。

这本书我也给师弟师妹推荐过,但是后面一问,很少人能看得下去...
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
4年3个月前
8楼
233那本书好像写的是合作是调度器。。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
飞鸿浩劫
4年3个月前
9楼
就是个定时器计数
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
sounder
4年3个月前
10楼
当然要参考啊
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
4年2个月前 修改于 4年2个月前
11楼
历史上有很多学科发生了倒闭,比如上世纪80年代的“工业动力学”,讲的是驱动工业经济和进行工业管理设计时需要用到的数学原理。
图:工业动力学问题举例
20170105_235307.jpg
这些学问好不好呢,当然是很好的,很重要、很有普遍性、很能解决问题。但是,它过于不符合用户对于分析问题的方法的惯常理解。想提纲挈领,结果却是无人问津。而他的理论并不是就此消亡,而是分散在许多不同的学科或者技巧中。
总结起来看,各专业,各种技能,都有一些套路和经验,针对这些套路和经验也都有一些不完善的理论。有的学科期望把这些零散的套路和理论搜集起来,形成一门系统的学科,立足虽十分高远,但罕有成功者。
另一个例子是创造学,它把各行各业创新的蛛丝马迹以规律的形式抽取出来,希望成为一门学科,最终发现是徒劳的。
但是我并不反对大家了解一点创造学,实际上创造学至少可以认为是机械工程的设计模式,了解它的确能够为设计开拓视野,不了解它也并不是做不了设计,因为本专业系统的学习已经能为设计创新打下坚实的基础,这些基础本身就包含了创造学的基本原理。
回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

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

novakon
学者 机友 笔友
文章
1257
回复
8401
学术分
16
2008/03/29注册,4 个月前活动

已走,勿送

%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
{{submitted?"":"投诉或举报"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}