本文是漫谈架构专栏的第五篇,作者将会从自己的认知角度再次反思什么是软件,文中作者探讨了软件发展火热的根本原因以及软件扮演的角色等问题。如前几天一位架构师所说,我们并不缺架构实践,而是缺少对于架构的反思,希望这系列文章能帮你重新理解架构,重新认识软件。

前面通过四篇文章,把什么是架构,如何做好架构等必要的概念澄清了一下。这些概念对于在各种不同的领域都应该也是有用的,需要读者自行思考,并应用到自己所在的领域中。在这篇文章开始,我们用同样的思考,来看看软件是怎么回事,以及如何运用架构思维,更好的设计和实现软件。

冯诺依曼结构,图灵机,以模拟人为目标

软件的历史,实际上可以说是用机器模拟人的历史。不管大家(包括在这个历史过程中的参与者)有没有意识到,我们都有意无意的在计算机上模仿人类的行为。从冯诺依曼结构开始,程序逻辑开始脱离硬件,采用二进制编码。加上存储,配合输入输出,一个简化的大脑就出现了。图灵机则是模拟大脑的计算,用数学的方式把计算的过程定义了出来,著名的邱奇-图灵论题:一切直觉上能行可计算的函数都可用图灵机计算,反之亦然。软硬件两者一结合,一个可编程的大脑出现了,这也是现在为什么我们把计算机叫做电脑。在硬件上编写出的程序,就是软件,是用来控制硬件的行为的。

成本为王

在初期,软件使用二进制编写的,从硬件到软件,成本都非常的高。随着半导体技术的进步,硬件的成本越来越低,性能越来越高,甚至出现了摩尔定律:当价格不变时,集成电路上可容纳的元器件数目,约每隔18-24个月增加一倍,性能提升一倍。软件方面,为了简化难度,开始采用汇编,进一步出现了类似于人类的语言的高级语言,比如C/C++/Java等,这使得人类可以用类似于人的语言来和计算机沟通。软件工程师慢慢越来越多,开发软件的成本也越来越低。计算机就好像是一个只需要电,不需要休息的人,可以无休无止的工作。

人们越来越愿意把原来只有人才能做的事情,交给计算机来做。结果就导致软件越来越丰富,能够做的事情也越来越多,成本也越来越低。可以这么说,成本是我们为什么采用软件的主要动力,可以节省大量的人员培训,减少雇员的数目。随着互联网的发展,人类社会也开始软件化了。原来必须实体店来进行售卖的,搬到互联网上,开店成本更低,并且能够接触到更多的人。想象一下,一个门店每天的人流达到百万级别是很恐怖的,由实体空间大小来决定。但是在互联网上,访问量千万级别都不算什么。最终的结果就变成,每个人能够负担的工作越来越多,成本越来越低。这也是为什么软件这么热的原因。

软件扮演的角色

随着软件的规模的变大,做好一个软件也变得越来越难了。早期的程序员写程序,主要是为了帮助自己研究课题。这些程序员熟练了之后,提高了自己的生产力,并发现还可以帮助别人写程序,慢慢软件就变成了一个独立的行业。程序从早期由一个人完成,也逐渐变成了由很多不同角色的人共同合作来完成。以下讨论的前提,都是基于帮助别人写程序,多人合作的基础上的。结论对于单人为自己写程序也适用。

在没有软件之前,每个人干自己的工作,自行保存自己的工作结果。人们面对面或者通过电话等沟通,如下图所示。

有了软件之后,实际上,我们是把我们日常生活中所做的事情,包括我们自己本人都一起虚拟化到了计算机中。而人则演化成了,通过计算机的输入输出设备,控制计算机中的自己,来完成日常的工作,以及与其他人的沟通。也就是说,软件一直以来的动力,始终都是来模拟人和这个社会的。比如模拟大气运动(天气预报),模拟人类社会(互联网社交),模拟交易,包括现在正在流行的VR,人工智能等等。模拟的对象越来越高级,难度越来越大。

不管如何发展,模拟人的所有行为都是一个大的趋势。也就是说,软件的主要目的,还是把人类的生活模拟化,提供更低成本,高效率的新的生活。从这个角度来看,软件主要依赖的还是人类的生活知识。软件更多的是扮演一个cost center,这也是为什么会出现很多的软件代工。

软件开发的架构演变

软件工程师是实现这个模拟过程的关键人物,他必须先理解人是怎么在日常生活中完成工作的,才能够很好的把这些工作在计算机中模拟出来。可是软件工程师需要学习大量的计算机语言和计算机知识,还需要学习各行各业的专业知识。软件工程师本身的培养就比较难,同时行业知识也要靠时间的积累,这样就远远超出了软件工程师的能力了。所以软件开发就开始有分工了,行业知识和业务的识别,会交给BA,系统的设计会交给架构师,设计的实现交给架构师,实现的检验交给测试,还有很多其他角色的配合。为了组织这些角色的工作,还有项目经理。这就把原来一个人的连续工作,拆分成了不同角色的人的连续配合,演化成了不同的软件开发的模式。然后慢慢演变出专门为别人开发软件的软件公司。

软件架构的出现

如同前面描述的架构的定义,软件架构的出现也是同样的。一开始是懵懵懂懂的去写软件,后来慢慢的就有意识的去切分,演变成了不同的架构。这个背后的动力也是一样的,就是提升参与的人的利益,降低成本。导火索也是软件工程师的任务太重,我们需要把很多工作拆分出来。拆分的原则也是一样的,如何让权责一致。同样,这个拆分也是需要组织架构的调整,来保证架构的落地。具体如何分拆,如何调整,我们将在另外一篇中着重讨论。

以上通过简单的描述计算机和软件的发展历史,阐明软件的本质,其实就是通过把人类的日常工作生活虚拟化,减少成本,提升单个人员的生产力,提升人类自己的利益。软件工程师的职责在这个浪潮中,不堪重负,自然而然就分拆为不同的角色,形成了一个独特的架构体系。这一切的背后,仍然是为了提升人类自己的利益,解决人类自己的问题。

架构漫谈(五):什么是软件相关推荐

  1. 《架构漫谈》阅读笔记

    这个礼拜,我精读了架构漫谈这本书,感觉自己对架构方面的知识有了更为深刻的了解.感觉学习了架构之后,能对自己的学习和实践有更大的帮助.在这个学期众多的结组任务中,我们可以通过架构的知识,来界定小组目标系 ...

  2. 阅读王概凯老师架构漫谈系列总结

    这学期在学软件体系架构的课程,老师推荐了王概凯老师的架构漫谈系列专栏,在阅读专栏之后,对于什么是架构,怎样做好架构,软件架构如何落地,如何写好程序等问题有了较深的理解,在此简单记录一下阅读之后的感想 ...

  3. 架构漫谈读后感之软件架构师如何工作

    这学期开始学习软件架构,通过阅读王概凯架构漫谈九篇博客,对软件架构有了进一步的了解.感觉学习了架构之后,能对自己的学习和实践有更大的帮助.架构漫谈主要从什么是架构.认识概念是理解架构的基础.如何做好架 ...

  4. 架构漫谈:我心中的架构

    本文为<架构漫谈>系列第一篇.本文将会从:"什么是架构","架构能解决什么问题","架构和框架的区别"三个点来着重讨论,本文系个 ...

  5. 架构漫谈(三):如何做好架构之识别问题

    2019独角兽企业重金招聘Python工程师标准>>> 架构漫谈(三):如何做好架构之识别问题 作者: 王概凯  来源: InfoQ  发布时间: 2016-04-17 10:47  ...

  6. 《架构漫谈》阅读感想

    谈及架构,源于建筑. 一想到建筑,就能想到一块空间,有墙,有门,有窗. 用墙围住的一块密闭的盒子空间,通过门窗与外界保持沟通. 空间内根据住户的生活需求不同,划分为各个房间,有不同的功用. 然后人们对 ...

  7. 架构漫谈(八):从架构的角度看如何写好代码 + 我的思考

    我的总结:当先前对于利益相关者的关系理清了,系统基本架构和测试方法等也有了,进入实际Coding阶段.在Coding前,需要我们考虑好业务功能的分配,关注于功能会频繁变更的部分,为未来的维护和扩展打下 ...

  8. 《InsideUE4》-6-GamePlay架构(五)Controller

    <InsideUE4>-6-GamePlay架构(五)Controller Tags: InsideUE4 GamePlay 那一天 Pawn又回想起了 被Controller所支配的恐惧 ...

  9. 刚哥谈架构 (五)- 推荐给架构师的书单

    刚哥谈架构 (五)- 推荐给架构师的书单 今天收到豆瓣的2019年的总结,发现自己已经在豆瓣渡过10个春秋.今年读了69本书,有很多书非常棒.今天我就给各位架构师,程序员,码农推荐一些我觉得对工作和职 ...

  10. 开篇 让我们跟着Ray Zhang的脚步展望一下五年后的软件界

    Architect Inside I - 五年后的软件界 业界趋势分析及对应的技术战略         张大磊 Ray Zhang 十几年前的某一天,当微软发布Windows3.1操作系统的时候,大家 ...

最新文章

  1. opencv高效遍历图像
  2. python while 循环 if elif else 判断
  3. 使用代码获得所有适用于创建的transaction type
  4. 固定宽度弹性布局(以适应各种各辨率)
  5. 这就是数据分析之算法认知
  6. php : 工厂类演示
  7. insert批量插入500ms_不吹牛!Mysql 千万数据10秒批量插入只需三步
  8. python之---Python深入06 Python的内存管理
  9. 【论文解读】IJCAI2019: 面向中文NER 基于lexicon rethinking的CNN模型
  10. 统考英语和计算机什么时候出成绩单,网络教育统考成绩啥时候出来
  11. svg Path 命令详解
  12. 推荐国产 notebook 软件
  13. 高通qca-wifi移植
  14. excel转置怎么操作_技能篇:Excel数据处理小技巧
  15. HHL算法的QISKit实现
  16. “扣哒杯” AI世青赛公布2021-2022年度全国决赛个人获奖名单
  17. 全球5G无线接入网络(RAN)行业调研及趋势分析报告
  18. 与我十年长跑的女朋友就要嫁人了
  19. sina微博之errorcode:20003
  20. 水管工游戏(啊哈算法)

热门文章

  1. Android开发书籍推荐 学习路线图 资料汇整
  2. 边缘AI哪家强?英伟达、英特尔、谷歌三家芯片硬件测评
  3. 我用C++的理由——关于C和C++的选择
  4. Docker 系统性基础(续)(三)
  5. Java连接Oracle两种方式thin与oci区别
  6. 期刊论文格式模板 电子版_为什么导师反复强调论文的格式?
  7. springboot + vue + nginx+ MS SQL Server项目部署方法
  8. PLC中ST编程的单按钮启停
  9. ZOJ 1711 Sum It Up(DFS)
  10. 寒冬让SKYCC营销软件陪您一起走过