从你家的衣柜,理解软件编程的「架构」
从你家的衣柜,理解软件编程的「架构」
2017-05-09 陈小霖Kelly 51CTO博客
作者:陈小霖Kelly
来源:商学院毕业的程序员
可阅读原文
事情是这样的,一个读商科的好基友是金融公司的职员,觉得互联网未来很有发展,于是找到了一个云计算公司,进行面试。
可是他完全不懂技术,就跑来咨询我各种问题。 其中一个问题,着实让我很深思,他问:
「软件编程里,什么是架构?」
所谓架构,即软件架构,在软件工程中,经常会出现架构一词,甚至还有专门的职位,叫“架构师”。 架构是什么?我们看看百度百科怎么说的:
软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件体系结构是构建计算机软件实践的基础。
看完了百科... 算了,咱们还是从一个女人开始说起吧
从衣柜收纳看架构
日本有一个“收纳女王”,名叫近藤麻理惠,被英国媒体称为日本整理女王,而且被美国《时代周刊》评选为“2015 全球最具影响力的 100 人”之一,上榜理由是——特别会做家务。
女王有什么本事?她能把家里每一寸空间的效用发挥到极致,比如,给你的衣柜,来一个变身:
想一想,我们自己的衣柜是怎么样的?
我们的衣柜,用普通随意的折叠方式,堆放衣服,大概放置 100 件衣服。
女王呢?同样的衣柜,经她处理,却可以容得下 200 件衣服。怎么做到?
这就要讲究方法与技巧了,比如女王的做法:
衣服折叠后不平放,而是垂直放置。
衣服还可以按颜色摆放,从左到右从重到轻,颜色从深到浅。
...................(省略各种套路)
一系列的方法、技巧、套路,就能让原本有限的空间里,收纳更多的物件。
换句话,用更好的整理方法,调整了衣柜的衣服摆设的“架构”,就能让衣柜变得更好。
我觉得,“架构师”可能是一个每家妇女都在做的事情,一点都不复杂——为一个杂乱无章的家,通过有规律的方法、技巧,来让我们的家变得更加的整洁,这就是“调整架构”。
当某一天,发现之前的整理和摆设,不太满足需要了,翻箱倒柜地把衣服、物件翻出来,重新整理。这重新整理的过程,就叫“重新整理架构”。(刚好这对应了软件工程中的一个词,叫“重构”)
对此,我们甚至可以把日本的“收纳女王”,给她一个很程序员的称谓——家庭架构师。
当出现“重构”的时候,家里的其他人可就着急了,明明一个家好好的,干嘛要把它整乱了,重新布置?“家庭架构师”可有着他们自己的理由,说这样可以让家变得更好、更实用、blah blah blah说一堆。
每一个家庭,总有那么一个妇女或妇男,是家里的架构师。
在这里,为方便理解,斗胆重新定义“架构”这个概念:
把大量东西进行排列组合的技巧和方法,就叫架构。
软件架构
在我上一篇文章「想自学编程?霖哥建议从 JavaScript 开始!」中,提到一个函数思维的概念,里面提及到:
所谓函数,学术上来定义,是一个统一的代码块;而霖哥的理解,函数就像一个别人生产好的工具。
理解“函数”至关很重要,程序开发当中,几乎 90% 的代码都在不断地调用函数。当程序员想做一件事的时候,第一个要想到的,是“找函数”,而不是写具体的函数。
大量的代码和函数促使软件工程领域,产生了一个职位,叫做架构师。架构师的工作,一般就是对大量的编程代码,给出优秀的整理方案,指导程序员团队更好的工作。
我们也听说过类似的写代码的新闻,比如“一个女兵 90 天编 40 万行代码”,这听起来特别的牛逼。
可是我们仔细想一想,40万行代码,是什么概念?我们估算一下:一本书里的一行,我们算少一点,大概20字,那么40万行代码,接近 800 万字。而一本 200 页的书,大概是30万字,那么800万字,已经可以写成一本大概 5000 页的书了。
上面只是一个估算,精确性这里不多追究。一个人写出 40 万行代码,确实有点夸张,但是实际的大型商业软件项目中,几十个程序员互相协助,这个代码规模有时候还是挺常见的。这里面,用“函数思维”来想,也有着成千上万的代码和函数。把他们管理好,这就是架构师的工作。
细思一下,把家里的上百件衣服,塞到一个衣柜里,就有着无数的方法和技巧。更何况,整理 40 万行编程语言代码、近 5000 页的书?!
回到霖哥上一段的定义:
把大量东西进行排列组合的技巧和方法,就叫架构。
大量的编程语言代码,需要架构师进行管理和收纳,好的架构师,就像好的家庭收纳女王,让一个家的效能放大几倍:
写1万行代码,就能实现别人10万行代码的功能;
用1台电脑的运算资源,就能发挥出别人用100台电脑所能达到的效果;
现实的软件开发中,最常见的现象莫过于,当老板提出各种新的需求时,好的软件架构,用1小时的就能完成改动,而差的架构,则需要加班加点,整整花上半年,甚至一年,才能完成改动。
这可是现实软件工程师里非常常见的现象,不然,加班干嘛?软件开发中的大量时间,有时都耗在了架构调整上,而不是编程语言本身。
这种对架构的改动,就像我们之前所说的家庭妇女的“重构”。从这个角度我们思考,我们就能理解家庭妇女为什么要翻箱倒柜的,对家里的衣服和摆设进行重构,还诸多理由。程序员也就能谅解,软件架构师们为什么要把成熟的软件产品,加班加点进行大幅度的修改了。
“软件架构师”跟“家庭架构师”,他们的工作是非常的类似的,他们都负责把大量无序的东西,变得井井有条、更有扩展性,让事物变得更好。
(图:常见的Windows操作系统的软件架构,是非常复杂的,不必细看,可跳过)
淘宝网的架构演化
在实际的软件开发中,把架构玩得出神入化的,非大型网站莫属了,如淘宝网。
我们知道12306网站,经常动不动就无法访问,而一些大型商业网站,如淘宝网,几亿用户同时在里面购物,却一直能保持快速的浏览,这是为什么?
因为架构设计的不同!
首先,我们知道,我们访问一个网站,其本质,就是访问一台电脑,我们把这样的电脑,叫作服务器;当访问这台电脑时,就会返回给我们网页信息,显示在浏览器上。
(图:最简单的网站架构,摘自《大型网站技术架构》)
如图,这是我们平常最简单的网站应用服务器架构了,它主要有应用程序、文件、数据库,一般它们都是安装在同一台电脑上。
我们自己用过电脑都知道,一台电脑,当运行的软件非常多,它就会变得很慢,甚至直接死机,无法操作。
同理,如前所说,访问一个网站的本质,是访问一台电脑。当大量的人同时访问一台装有网站的电脑,电脑就会不堪重负,无法访问了(比如,12306)。
最初的淘宝网,其实也是这样一个简单的架构,而随着他们业务的发展,10多年过去了,他们的架构已经演变成类似这样了:
(图:现在常见的大型网站技术架构,摘自《大型网站技术架构》,太复杂,我建议你不要点开看)
把大量东西进行排列组合的技巧和方法,就叫架构。
嗯,可以看到,为了应付海量的用户访问网站,大型网站的架构师们可以说使出浑身解数,把各种各样的编程代码组成软件服务,通过各种各样的技巧和方法,形成一个复杂而高效的架构。
发展到今天,淘宝网的网站架构已经变得一个非常非常复杂的巨无霸了。
结果,你也知道了,在这样的一个架构下,今天的淘宝网能够同时容纳几亿人的访问,这是因为它的架构,了不起;普通的架构,却可能经不起几千用户的考验。
这不是跟我们的收纳女王,“家庭架构师”很相似吗?同样的一个衣柜,人家可以整得井井有条,收纳大量的衣物;而很多人的衣柜,却衣物四散、混乱不堪。
总结
霖哥今天用了日本整理女王作为类比,介绍了什么是软件编程中的架构,并且妄自下了一个定义:
把大量东西进行排列组合的技巧和方法,就叫架构。
软件工程,90%的代码都在不断地调用函数;用牛逼的方法和技巧,对大量的函数调用进行整理,成就了软件开发中的“架构”。
我们不妨脑洞大开,“函数”就像砖头,“架构”就像建筑结构,软件编程是不是很像造房子?下一篇文章,霖哥想说说造房子与编程的关系。
最后,霖哥呼吁,请珍爱你生命中的家庭架构师——你的妈妈、你的爱人、或者,你自己。
我是霖哥,一个商学院毕业的程序员,通过自学编程成为一家大型上市公司的资深软件工程师。
如果在了解或学习编程的过程中有迷惘、或对一些生涩的科技概念的不解,用力留言!
转载于:https://www.cnblogs.com/fengxianzi/p/6851742.html
从你家的衣柜,理解软件编程的「架构」相关推荐
- 助你编程能力「突飞猛进」的干货分享
本文 GitHub https://github.com/Jack-Cherish/PythonPark 已收录,有技术干货文章,整理的学习资料,一线大厂面试经验分享等,欢迎 Star 和 完善. 大 ...
- android电池管理软件,精准电量「Accubattery」Pro for Android v1.4.4 直装解锁专业版 —— 非常好用的电池健康检测维护管理软件...
精准电量「Accubattery」Pro 是一款非常好用的电池健康检测维护管理软件,其基于一系列科学的研究和测试「信息数据量都很大,这里就不详解了"我不会告诉你是我解不了!"」,能 ...
- 云原生软件交付服务商「KodeRover」完成 100% 开源,同时宣布完成数千万元天使+轮融资
36氪获悉,云原生软件数字化交付服务商「KodeRover」已于 7 月中旬完成其核心产品 Zadig 100% 开源,同时也宣布完成数千万元人民币天使+轮融资,本轮融资由经纬中国领投,⽼股东盈动资本 ...
- java并发实战编程pdf_「原创」Java并发编程系列25 | 交换器Exchanger
2020年Java面试题库连载中 [000期]Java最全面试题库思维导图 [001期]JavaSE面试题(一):面向对象 [002期]JavaSE面试题(二):基本数据类型与访问修饰符 [003期] ...
- java简单编程_「4」Java简单编程
1.第一个Java程序 ●Java程序开发步骤: ●通过文本编辑器来编写java代码至扩展名为java的文件中. ●调用编译工具javac.exe来对java源文件进行编译,生成扩展名为class的字 ...
- 手机c语言图形界面编程工具,「分享」C语言如何编写图形界面
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面.大家也都有回答,需要其他的库.MFC,GTK,QT. 本人近期刚用GTK库加上纯C ...
- 客制化键盘编程_「教程」客制化发光键盘线详细教程
转自星期五 Friday Tartan65加猛男粉数据线镇楼 大家好,我是星期五 Friday.今天为大家带来客制化数据线教程之--发光线的制作方法,超多细节的那种. 废话不多说,首先准备工具( )内 ...
- 软件如何「吞噬」汽车?
来源: 汽车电子与软件 自动驾驶技术和电动汽车的发展将为汽车增加数亿行代码.汽车行业能否应对? 持续的半导体短缺令全球汽车行业损失还在持续上升.在一月,分析师预计,由于供应短缺,汽车产量将减少150万 ...
- 2021.09 电子学会 - 软件编程(图形化)试题讲解
软件编程(图形化)试题讲解 一级 考核目标 考查对软件编程界面的认识和基本操作:能够导入角色.背景和声音,通过对角色和背景进行简单操作,编写一个具有简单顺序结构的作品:同时考查简单的逻辑推理能力. 插 ...
最新文章
- 高仿百思不得姐项目开发(粗略笔记,后期规范排版和更新)
- 分子生物学之蛋白质与氨基酸
- linux的基本命令--常用
- 不定字段数目的数据库表设计和数据结构
- TensorFlow2-生成对抗网络
- 存储过程 传 datatable
- html css精灵,谈谈CSS Sprites(css精灵)
- 江山控股附属斥资3.02亿收购云阳新能源发电100%股权并偿债
- jvm原理、启动时间、与编译器操作系统关系
- iPhone 13的新对手?小米历史上最好看的手机即将发布
- 想从事 DBA 工作,该挑选哪一款数据库产品【转载+整理】
- js中获取当前屏幕宽度方法如下:
- 《图解http》读书笔记
- 解决Windows远程桌面连接工具连接不上远程操作系统的问题
- 【转载】网易博客完美支持Word写日志
- php程序root权限,root权限是什么
- 东莞塘厦适合团建的农家乐|团建出游好去处|休闲游玩好地方
- mq中消息消费的几种方式
- 一些关于 CAD数据库 插入字段
- ubuntu:防火墙配置详细讲解(全)
热门文章
- 微信小程序-扫一扫 wx.scanCode() 扫码大变身
- 凌恩生物文献分享|IF31.316→一网打尽与婴儿疾病相关的病毒组研究
- 微信拉黑了之后聊天记录还在吗
- 股价创近11个月新高,欢聚集团靠短视频跟直播为市值撑腰?
- 如何锻炼肌肉的10个小贴士
- 【100%通过率】华为OD机试真题 JS 实现【硬件产品销售方案】【2023 Q1 | 100分】
- 计算机兵推,如何兵推网络中心战:NCW的兵推框架
- Python实现识别html文本内容并截图放入word文档
- 这是目前最快的 Java 框架,300个框架中排名第一,真香
- 花了300多买的鞋柜,没想到...