Design Principles (设计原则)
这是我在2018年4月写的英语演讲稿,可惜没人听得懂(实际上就没几个人在听)。
文章的内容是我从此前做过的项目中总结出来的经验,从我们的寝室铃声入手,介绍了可扩展性、兼容性与可复用性等概念,最后提出良好的设计应该平衡这些特性与性能、成本之间的三角关系。
第一次用英文写有一点专业性的东西,不知道算不算好。
以下为原文:
Design Principles
Intro
One day, on the noticeboard in our dormitory, there was a paper saying that the ring for rainy days cannot be added into the bell system in our dorm, and also, they won’t rebuild the system for us. I wondered why, because if the system were designed by me, anything could be easily added. Today, I’m not going to comment on their attitude or solution, but to show what a well-designed system should be like, or, what features should a well-designed system have.
Performance
No matter the system is made for yourself or for others, your design must meet the requirements.
The stick in my hand can display images when I’m shaking it. It has a microcontroller, running at 8MHz, to take control of the LED’s. If I used a microcontroller that could only run at 1MHz, it couldn’t display such complex words.
Cost
Obviously, the one at 8MHz is more expensive than the one at 1MHz. Usually the higher the performance, the more you should pay.
Some people build their computers with accessories chosen by themselves. They can be cheap or expensive, according to your choice. If you don’t pay attention to the balance between performance and cost, you’ll probably have a budget of 3’000 and finally spend 98’000.
This stick examines the frequency of shaking by a mercury switch. (If you are interested, I’ll explain its principle after class.) Another approach is to examine the direction of acceleration to get a more accurate position and frequency, which will be more expensive. However, I made it just for fun, so I didn’t want to spend more.
Extensibility
Performance and cost are basic, which everyone, when designing a system, can take into consideration. But engineering design is not such simple. From now on, I will introduce some professional concepts.
Extensibility is the ability to be extended or stretched, or the quality of being designed to allow the addition of new capabilities or functionalities.
Take an example. Some of you know my research project, which is to build a modular development system. It has pluggable boards and abstractions of every module in source code. The use of the system is quite simple but the usage is powerful: buy modules with functionalities you want, plug them together, write several lines of code, then, it works. The core module itself has limited functions, but by plugging and programming, all functionalities of other modules can be added, which means it has strong extensibility.
Compatibility
We need extensibility because the requirements may change, but what if it changes too much? We can design a new system, but we already have something useful in the previous system. Can they work together? A system with compatibility can.
Compatibility is the state of being compatible, in which two or more things are able to exist or work together in combination without problems or conflict. In your computer, sometimes you have to run a program in compatibility mode. The word here refers to backward or downward compatibility, which is a property that allows for interoperability with an older legacy system.
My modular system is a new concept, but there are already lots of traditional dev boards, a large number of users who are familiar with them, and an amount of valuable but not portable code. So, I’m going to program on other platforms to make my system compatible with them.
A complementary concept is forward compatibility. While backward compatibility can solve some historical problems, extensibility and forward compatibility can reduce the workload in the future.
Reusability
Since a system may upgrade, the unchanged parts in the previous version can be reused in the new version. Also, different systems may have something in common.
The modules in my modular system communicate on a bus. The microcontroller on this stick has access to the storage chip by the same kind of bus. Actually, in the source code of the stick, I just wrote an instruction to include the file in the former system. The source code of bus communication is reused.
Reusability is the state or quality of begin used more than once.
The bus of the stick is only used to transfer data from the storage chip to the microcontroller, but the whole functionality of bus communication is implemented. If I made the stick before the modular system, I may have integrated the storage operation with bus communication, which could make the program faster. But when building the modular system, I would have to redo the work.
Relationship among these features
Extensibility, compatibility and reusability have many emphasized properties in common, including modularity, high cohesion and low coupling. They are tightly linked.
All features above can be divided into 3 groups: performance, cost, and the other 3. An ideal system with high performance, low cost and many other features, can only exist in our mind. We cannot have everything at the same time.
As explained before, and also in your common sense, performance and cost are often incompatible.
If I use the modular system to make a simple project, you may think that it will be better to make a single board. Yes, I’ll need fewer boards, fewer chips, less code, and the program will run faster, which means higher performance. But what if I want to add more functionalities? I’ll have to redesign the board, resolder the board, and change lots of the code.
If I want to change the picture displayed by the stick, I must change the source code. An approach to avoid it is to add a Bluetooth module so that I can control it with my phone. But the price of a Bluetooth module is higher than the whole stick.
The 3 groups can form a triangle. You can’t make all of them the best at the same time. But you can do your best, which is to balance them. So, when you’re designing, think about as many aspects as you can. Don’t design a poor system like the one in our dorm.
Thank you.
Design Principles (设计原则)的更多相关文章
- Design Principle vs Design Pattern 设计原则 vs 设计模式
Design Principle vs Design Pattern设计原则 vs 设计模式 来源:https://www.tutorialsteacher.com/articles/differen ...
- 设计原则 Design Principle
Design Principle设计原则 最近由于碰到要参与设计一个音频处理系统,有人提议用一个大的全局变量结构体来做状态信息交流的地方,引起了我对设计一个系统的思考,于是找到了如下资料,当然,关于这 ...
- Android Wear - Design Principles for Android Wear(设计原则)
---------------------------------------------------------------------------------------------------- ...
- 翻译 | The Principles of OOD 面向对象设计原则
本文首发于vivo互联网技术微信公众号 https://mp.weixin.qq.com/s/Q_pziBUhKRywafKeY2T7YQ 作者:Robert C. Martin 翻译:张硕 本文由来 ...
- 设计模式-设计原则(Design Principle)
本文由@呆代待殆原创,转载请注明出处. 写在前面:所谓设计原则并不是一定要遵守的法则,只是一种建议,因为保持这些原则本身会有一定代价,若是这些代价超过了带来的好处就得不偿失了,所以一切还是以简单为准. ...
- 好RESTful API的设计原则
说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ P ...
- RESTful API的设计原则
好RESTful API的设计原则 说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间, ...
- 优秀设计师应当知道的20大UI设计原则
世界级图形设计大师Paul Rand(保罗.兰德)曾经说过:"设计绝不是简单的排列组合与简单地再编辑,它应当充满着价值和意义,去说明道理,去删繁就简,去阐明演绎,去修饰美化,去赞美褒扬,使其 ...
- 好的RESTful API的设计原则
转载自一位大佬 英文原版 Principles of good RESTful API Design Good API design is hard! An API represents a cont ...
随机推荐
- JAVASCRIPT高程笔记-------第 七章 函数表达式
7.1递归 经典递归例子 function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num - ...
- JS 数组两种定义方式
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- Delphi中返回类型为string的函数的一个陷阱(不是很懂)
如果类的一个成员函数的返回值是string类型,需要注意一个问题 其返回值可能是错误的 例如函数的实现如下 function GetString( s: string ): string;begin ...
- NOPI 基本读写
//获取cell的数据,并设置为对应的数据类型 public object GetCellValue(ICell cell) { object value = null; try { if (cell ...
- 【全面解禁!真正的Expression Blend实战开发技巧】第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条
原文:[全面解禁!真正的Expression Blend实战开发技巧]第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条 这一章讲解FluidMoveBehavior的另一个应用, ...
- PySide——Python图形化界面入门教程(四)
PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your Own Signals and Slots 翻译自:http://pythoncentral ...
- Resources.resx 未将对象引用设置到对象的实例
原文:解决使用DevExpress开发错误:未将对象引用设置到对象的实例 在使用DevExpress是总是会出现一些状况.这次同事在他的机器上调试完毕的代码发过来,却出现“未将对象引用设置到对象的实例 ...
- Markdown的选择
直击现场 我一直在思索用什么格式存储文档比较好.之前一直在用google docs,但是它的格式不公开,上传/下载的时候需要转换格式,转换的时候必然会丢失一些信息.于是后来想,那还是纯本文或者mark ...
- QImage的浅拷贝与深拷贝
首先简单说说什么是浅拷贝和深拷贝:浅拷贝就比如像引用类型,而深拷贝就比如值类型,即浅拷贝是共用一块内存的,而深拷贝是复制一份内容. 我们再来看看QImage类的几个构造函数: // 浅拷贝 QI ...
- 搭建RPC over HTTP 环境遇到的问题
最近需要做RPC的IPS协议分析,需要了解一下RPC over HTTP的协议格式,由于此类数据包不易构造,故此想搭建一个抓一些包分析一下. 结果搭建这么个环境硬是用了我四个工作日的时间,崩溃加无语. ...