搞电子也要懂设计模式
novakon2016/12/10电子技术 IP:广东

什么是设计模式?

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

845078939857838149.jpg

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

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

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

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

blob.png

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

76755_WM.jpg

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

blob.png

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

blob.png

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

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

blob.png

最后,祝大家开发愉快。

[修改于 8年1个月前 - 2016/12/10 19:52:41]

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

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

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

非常好的书,很基础,系统地学习,同时加上百度解决学习中的关键点,学习效率很理想。


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

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

所属专业
上级专业
同级专业
novakon
学者 机友 笔友
文章
1256
回复
8386
学术分
16
2008/03/29注册,2年11个月前活动

已走,勿送

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}