05 | 思考题解读:如何实现可自我迭代的计算机?
05 | 思考题解读:如何实现可自我迭代的计算机?
讲述:丁伟
时长14:02大小12.90M
需求分析
怎么实现可自我迭代的计算机?
结语
赞 46
提建议
精选留言(68)
- Enthusiasm2019-05-02总结:设计系统架构的前提是用户需求分析,用户需求包括分析出稳定需求点和变化需求点。从功能上看,稳定需求点一般是实现偏核心需求的需求点,变化需求点往往是实现偏扩展性需求的需求点。从层次结构上看,稳定需求点往往在系统层次的底层,而变化需求点往往在更加抽象层(上层)。从从属关系上看,稳定点需要提供功能给变化点使用,变化点调用稳定点提供的功能。从时间顺序看,稳定需求往往先现是变化点实现的基础,变化点通过调用已经实现的稳定点提供的功能来实现更为抽象的功能。 系统架构类似于一个栈的结构,人机交互(变化点)放在栈顶,底层工作(稳定点)置于栈底。 这节课程让我联想到网络中的OSI 7层模型。大概其也体现了这种软件架构思想。好处就是架构清晰,职责明确,功能规范等等。 以往我认为的架构设计类似上面的描述,描述起来类似按自顶向下顺序,采用分治思想完成。但许老师的方法又有些巧:架构好比搭积木,许老师是先有了很多积木(需求点),然后把再确定这些积木放在哪一层次的格子里。这简化了架构设计的难度,好比用市场经济代替计划经济,很有趣。 架构设计博大精深,灵活多变,初学课程的我们,对架构设计的学习,也只能算是盲人摸象。展开
作者回复: 很赞的总结
共 3 条评论160 - s2019-05-08已经很久没有看到这么赞的文章了,起初踏入编程的大门就是想创造,在我眼里设计一个项目仿佛完成一个完美的艺术品。工作了以后感觉这份激情渐渐的被磨平,面对客户需求,仅仅是 "他指哪,我打哪",软件的产出仅仅只是换钱的砝码。这篇文章又把我的梦想拉了回来。技术能解决的问题都不叫问题,唯独思想的升华是无价的,万分感激!
作者回复: 这是我听到的最好的赞美,感谢。能够唤醒人们对架构之美的追求,无疑是我最大的动力。
共 2 条评论77 - 山口谈退隐去了2019-05-08看完这篇文章让我想起了在一本育儿书上看到过这么一句话:“当人们使用‘需求’这个词的时候,他们所说的常常是一个能够满足需求的解决方案而不是需求本身”。而需求分析就是为了找到问题,然后告诉人们,你其实还可以这么做而不是你应该这么做。
作者回复: 赞,很多人都有这个误区,以解决方案代替需求。要清醒认知这一点并不容易。
共 2 条评论67 - 梦醒十分2019-04-30老师授课知识的角度很有深度,更贴切的说是一种思维方式,这种深度思考,从事情的本质重新推演与复盘的思考方式是很值得学习的。因为我们大部分人应该都没有想过自己去重新设计一个计算机的实现。
作者回复: 从无到有到万物,我们这个课的脉络之一就是重新从零构建整个信息世界,这一点在开篇词中提到过,这一点非常非常关键。另一个脉络是架构思维的递进,这一章重点是需求分析。这两个脉络相辅相成,交织在一起。
30 - WL2019-04-30请问一下老师, 03和05两篇文章中的"可自我迭代的计算机"中的"可自我迭代"是啥意思, 是指的是计算机可以执行各种各样的外部程序吗?
作者回复: 指功能可以越来越强大,是活的机器,而不是能力固定的机器
19 - Enthusiasm2019-05-02“活到老学到老”啊,突然意识到,不光是软件架构如此,连计算机系统架构也是如此。 我们从小学计算机,每门计算机课程的第一课总是概述“计算机由硬件系统和软件系统构成”。 今天,许老师通过抽象出“稳定点”和“变化点”的概念,从另一个角度带给我对这句话更深的理解,才让明白这句话的真正含义。 原来,所谓的硬件系统就是“稳定点”,软件系统就是“变化点”。 原来,一句最最平淡无奇的描述,一个最最基础的系统,也蕴含着“架构思维”。 万事万物其实是相通的,我的梦想就是,透过这些表象的描述,看到思想的本质。展开
作者回复: 硬件系统就是“稳定点”,软件系统就是“变化点”。挺好的总结。
19 - 程序员小跃2019-04-30拿到一个需求,需要做明确的需求分析,这是对我目前水平来说最有用的方式。文中讲的需求分析,让我受益很深。 不过实践部分,有点吃力,还需要细细品味才行。
作者回复: 做任何事情,首先要有正确的姿势,然后就是千锤百炼、熟能生巧了。
11 - Geek_88604f2019-05-01请问许老师,用户执行ls命令的时候,从系统架构图上看各模块之间是如何交互的?
作者回复: ls会调用文件系统,文件系统会调用外置存储的驱动程序,驱动程序会调用cpu的端口io指令。
7 - 裴海港2019-04-30我觉得拿一个软件系统的架构作为例子是不是更好,因为对于有些人来说,BIOS,ROM,文件系统,驱动程序这些过于抽象,难有代入感,不便于消化吸收。
作者回复: 这个例子的确有点复杂。不过这些概念引入的时候都有相应的内容介绍,而且也是理解计算机很重要的基础,所以在例子类型上没有刻意避免。您可以说一下哪个概念比较难以理解,这样我可以多补充一下相关背景知识。
7 - 老男孩2019-07-09第一遍没明白,看了第二遍似乎明白点了。中央处理器->bios->操作系统->中间件->我们编写的可执行的机器码。控制权是通过一种约定或者是抽象一层一层向外扩展,稳定性也是从里到外逐渐衰减。可以完成的功能是也从极简到复杂多样化。我们在设计的时候应该找到稳定点和变化点,或者是稳定层或者变化层,变化的依赖稳定的抽象,而是不是稳定依赖变化。极简及稳定,复杂及变化。6
- ljf100002019-05-01内置/外置存储是这样划分?内置存储应该是ram/rom/flash这些cpu可直接寻址的设备,其它不可直接寻址的设备是外置存储。CPU启动必然是从一个非易失的内置存储上某条指令开始。
作者回复: 对的
6 - ljf100002019-04-301。这里外置存储应该包括我们平常所说的内存和硬盘。现在允许cpu直接执行存储上的指令,除了内存,可能大家熟悉的只有flash了。 2。如果没有cpu直接执行外置存储上指令的能力,就是有sh也没用,毕竟sh也是保存在外置存储上。
作者回复: 1、不包括内存。外置存储(外存)是指cpu不直接支持的存储。cpu直接支持的叫内置存储,包括:寄存器、内存(RAM)、主板上的ROM。 2、cpu并没有直接执行外置存储上指令的能力。它通过支持虚拟内存做到支持外置存储的。虚拟内存在某一个页不存在的时候发生缺页中断,缺页中断由某个函数响应,再把缺的页从外存读进来。
共 2 条评论6 - 涵2019-04-30请问老师,最终架构图中的文件系统和现实中的操作系统是什么关系?文件系统是否是操作系统的一个子系统?或者说操作系统是否就是从文件系统中衍生出来的具有更多功能的文件系统?谢谢!
作者回复: 挺好的问题。这里的文件系统子系统,它的交付物是什么?假设还没有操作系统这样的基础软件,它是否可以是包(package)?我觉得是可以的,虽然这样无法实现文件锁这样的多进程协同能力,但是我们实现的是单进程的计算机,不需要有文件锁这种东西。
5 - 嚆同学2019-09-25架构图中,汇编语言放在第二层不太理解,虽说可以理解为是CPU指令的高层次包装,我感觉应该放在最上层,请老师指正?
作者回复: 语言分内核和库(扩展)。内核是表达方式,库是领域知识或科技成果。语言内核在第二层,库在应用层。
3 - 王聪 Claire2019-05-23请问一下BIOS程序的这两条功能:1. 支持执行外置存储中引导区的机器代码程序; 2. 跳转到外置存储的固跳转到外置存储的固定地址,把执行权交给该地址上的引导程序。其实是一件事情,就是加载外置存储固定地址引导区的程序并在内存中执行。对吗?多谢。
作者回复: 对的
3 - gopherliu2019-04-30我突然想起个事,关于稳定点和变化点。各个银行的手机app大同小异,有必要每个银行都造一遍轮子?甚至就是所有的手机app都是基本的那一套。最为稳定的一点就是:账户密码。这玩意有必要每个app来一份吗?难道就不能有一个每个人单独的、唯一的数字身份?为了争夺用户,却给用户带来的更多的麻烦。还有,用户的数据为啥就不能属于用户自己的呢,被各大互联网巨头利用过来、利用过去的。对于此,许老师有何看法?
作者回复: 账号密码,这个是个选择权的问题,确实是产品经理和架构师要考虑的点。现在蛮多软件都直接接微信或支付宝账号的。用户数据属于用户有点理想化,因为数据是在使用软件过程中产生的,更多只能通过法律途径解决,而挺难技术层面解决。
共 2 条评论3 - gbfa2019-04-30文章中提到做架构第一步是需求分析,那后面如何将需求逐步过渡到具体实现,能否提炼出几个比较通用的步骤?
作者回复: 后面会涉及这块,这本身也是这个专栏的一个关键脉络。
3 - Smallfly2019-06-26BIOS 从外置存储固定地址加载程序并执行,那是不是说,外置存储必须要在这个地址上放置引导程序。是 BIOS 要求外置存储必须遵循的协议。
作者回复: 是的
2 - Barry2019-04-30如果一个系统过于复杂,那么就需要剥离出一个个服务,来最终实现整个系统的服务。这样的好处就是每个小的服务之间互不干扰,迭代优化等都可以独立进行。看到这篇文章讲的计算机架构的设计,我就联想到了微服务
作者回复: 的确如此,但是系统也不是越微越好,后面我们会谈系统分解粒度的问题。
2 - 不老梦2022-10-30 来自上海需求分析-->拆分成功能点-->找出稳定点和变化点-->根据稳定点和变化点决定放到那一层
作者回复: 👍
2