美文网首页
计算机是怎样跑起来的

计算机是怎样跑起来的

作者: 咔咔西2021 | 来源:发表于2018-03-07 14:59 被阅读0次

今天讲一本和计算机有关的入门读物,作者是日本的矢泽久雄,自称软件艺人。我呢,大概用了8个小时把这本书认认真真的读了一遍。作为一个入门级程序员,这本书给我的感觉是,“业界良心书”。作者用了大量的类比,采用已知去渗透未知的方法,尽最大的可能让更多的读者了解计算机和编程的原理,将有带入感的场景和枯燥的知识合为一体,真的是面向人类在写书。即便是从专业的角度看,也绝对称得上是高级程序员写出的文档。更重要的是,这本书融入了作者对计算机和程序的理念,甚至是一种哲学思辨,如果你阅读这本书,你一定能够感受到更深一层的东西,感受到了那种严谨的工匠精神。

小聊一下日本这个国度。这些年,零零散散的,我也是读了不少日本作者写的书,接触的日本文化也算不少了,能够隐隐约约的感受到这个民族的气息。精致小巧、较真谨慎、谦虚内敛似乎是他们抹不去的标签。那里会不会是一个更“面向人类”的国度呢?也许是我的偏见。为了眼见为实,看来有必要到日本游历一番了。(话说区块链的大牛们,最近是不是都跑到日本去了?)

本书框架

A.基础

计算机的三大原则

1.计算机是执行输入、运算、输出的机器;

计算机的硬件由大量的IC (Integrated Circuit )集成电路组成,引脚的电压变化就会产生不同的信号方式。计算机还没有发展到能通过自发思考创造出信息的地步。就算是现在火热的人工智能,同样不具备自由意志的思考能力。只有输入、运算、输出成套出现,计算机才能执行任务。

IC

2.程序是指令和数据的集合;

从最早的C语言,发展到C++(加入面向对象),再到后来的JAVA 和C # ,都没能脱离指令和数据的范式。人类社会发展遵循一个底层逻辑,分工和细化,也即经济学里讲的比较优势。可以理解为分工和细化在计算机领域的实例。

3.计算机的处理方式有时与人们的思维习惯不同

01010101就是计算机的思考方式和逻辑。简单,对就是这么简单的逻辑,生生造出了一个深远影响真实世界的虚拟世界,靠得就是不同的组合排列方式。而对计算机来说,什么都是数字。

计算机的构造

微型计算几的基础元件只需3个,CPU、内存和I/O. CPU是计算机的大脑,负责解释、执行程序;内存负责存储程序和数据;I/O是输入/输出设备的英文单词缩写,负责将计算机和外部设备连接在一起。中型和大型机也都是在此基础上进行设备的扩展,其核心工作原理都是一样的。

汇编语言/机器语言

汇编语言--就是根据表示指令功能的英语单词起一个相似的昵称,并将昵称赋予给0和1的组合,这种类似英语单词的昵称叫做“助记符”,汇编语言即是使用助记符的编程语言。

构成机器语言的是二进制数,在汇编语言中,则使用十进制数和十六进制数记录数据。机器语言是唯一一种CPU能够直接理解的编程语言。

B.逻辑

顺序、分支、循环

程序的流程可以分成三种:顺序执行、条件分支、循环。

解决一切问题有一个通用的方法论:

• 明确和理解问题;

• 拆分和定位问题;【需要80%的精力分配,拆分转换成容易解决的小问题】

• 提出解决方案;

• 总结问题(反馈)

编写代码也一样,只要定义好事件的流程,就可以套用顺序、分支、循环模式解决所有问题。

其中作者提到了结构化程序设计,其核心就是去除了GoTo跳转指令,仅用顺序执行,条件分支和循环表示程序的流程。

算法Algorithm

算法是程序设计的“熟语”,一旦了解了算法就可以将自己的想法完整的传达给计算机了。那么什么是算法呢,书中给了例子。例如为了达到“计算出两个数相加的结果”这个目的,就需要一次完成以下三个步骤:即“输入数值”、“执行加法运算”、“展示结果”,像这样的处理步骤,就被成为算法。

这里有几个我们需要正三观的几个要点:

• 算法中解决问题的步骤是明确且有限的;

• 计算机是机械地解决问题;

• 有一些套路,如典型算法;

• 可以利用计算机的处理速度解决问题,即使是笨方法也无妨;

• 使用编程技巧可以提升程序执行速度;

• 数字间有规律可循;

• 写代码可能只占很少的一部分时间,大部分时间是在寻找拆解流程的思路。

C.数据

有了算法,接下来我们要有数据才能完成运算。

数据结构

变量,变量是数据的容器,其实质是按照变量所存储数据的大小被分配到一块物理的内存空间上。

数组,数组实际上是为了存储多个数据而在内存上集中分配的一块内存空间,并为这块空间整体赋予了一个名字。

,采用LIFO( last in first out) 后进先出的数据方式。好比你往箱子里放玩具,最后放进去的,总是在下次玩的时候第一个被拿出来。

队列,采用(FIFO first in fist out )先进先出的数据方式。好比排队买火车票,先来的排在前面,买完票就先出去了。

(LIFO和FIFO,学过财务的同学可能对这个概念比较熟悉,和库存管理中应用的概念是一样的)

结构体,所谓的结构体,就是把若干的数据项汇集到一处,并赋予其名字后形成一个整体。一旦定义完结构体,就可以把他当作一种数据类型,用来定义变量。结构体中包含成员,可以为成员变量赋值,然后用表达式调用。

链表,是一种类似数组的数据结构,这个“数组”中的每个元素和另一个元素都好像是手拉着手一样,只需在结构个体中添加一个成员,并指向另一个元素的地址。(在C语言中,把存储着地址的变量称为“指针”。简单吧,认为难的,往往是不理解的。如果把时间戳 Timestamp加入其中会怎么样?)

二叉树,带两个地址链接信息的自我引用结构体。自我引用的结构体就是以指针为数据类型的成员。把二叉树简单理解为有两个指针的链表也可以。

面向对象

记得在学编程之时,总是听到面向对象,面向对象,自己一脸懵逼的样子还历历在目。面向对象无非是打包封装,工具化的一个过程。减少你的重复劳动,模块化,分工细化,外包。将对象的行为和操作内置于对象本身。使编程更加人性化,接近人的认知模式。带来的好处显而易见, 容易上手,开发效率和可维护性高,只要在对象内部做改动就好了。我想,有关“用户故事”的学问应该也是伴随着面向对象和在现实世界建模的方式一起发展起来的。

谈到面向对象,就不得不提一下类和对象的区别。类就好比是做饼干的模具,而对象就是饼干本身。更形象点例子,狗是一个类,吉娃娃就是类的一种,这就是“对象是类的实例”常被提起的那句话的最好解释。其中吉娃娃有名字,有颜色,有性别。这些就是对象内的变量。我们可以为这只吉娃娃取名字叫哈尼,然后把哈尼赋值给名字这个变量,如此而已,简单吧。

数据库 

是一个非常大的话题,就从技术角度来简单说一下吧。有兴趣的朋友可以延展阅读《Human Singularity

数据库主要分为关系型数据库和非关系性数据库,这里主要讲关系型数据库。

书中提到,数据库(Database)就是数据(Data)的基地(Base)。我们生活中无数不存在数据,把这些数据整理归档成表(Table)就形成了表格形式的数据。DBMS数据库管理系统,就是管理这些数据的程序。SQL结构化查询语言是用来操作数据内容的,其中CRUD,即插入、获取、更新、删除就是基本的操作。而在区块链世界里,只有CRW,一个历史数据不可更改的数据库。

数据库系统的要素包括“数据文件”“DBMS”“应用程序”三部分。把三个要素全部部署在一台计算机上,称作“独立型系统”;把数据库文件部署在一台计算机上,并且使数据文件被部署了DBMS和应用程序的多台计算机共享,这样的系统称为“文件共享型系统”;把数据文件和DBMS部署在一台或者多台计算机上,然后用户从另外一些部署这应用程序的计算机上访问,这样的系统被称为“客户端/服务器系统”。

随着计算机网络科学产业的发展,数据存储和使用更加多元化,针对不同的客户需求和功能要求,各公司也都推出了自己特点的产品,比如amazon,青云,阿里,京东,七牛等等。

这里要提一下数据库的规范化,所谓的规范化,就是将一张数据的大表分割成多张小表,然后在小表之间建立关系,以此来达到整理数据库结构的目的。而且可以加入连接表(Link table),将多对多的关系分解成两个一对多的相对简单的对应关系。

D.网络发展

计算机网络的发展,离不开通信协议、数据加密技术和标记语言等技术的支撑。

TCP/IP协议

IP, 你可以把它看作主机在网络上的一个门牌号码,在其下的局域网中,各个硬件都是你的“家里人”,你的“家里人”需要通过各自的“身份证”(MAC地址)来分配到动态的子网络地址,这样你和你的家里人就可以和世界上任何角落的计算机进行通信了。

局域网

TCP,是用于通过数据发送者和接收者相互回应对方发来的确认信号,可靠传输数据。这样的数据传送方式称作“握手”(handshake),也就是把你要传输的数据内容打成小包,加上必要的信息并发送的过程。

TCP

加密

加密其实就是对数据进行再编码的过程。

最早的加密技术是“对称密钥加密技术”也称作“私密密钥加密技术”。这种加密技术的特征是在加密和解密的过程中使用数值相同的密钥。这种技术并不适合于互联网世界。

于是,上帝说世界需要公开密钥,于是就有了公开密钥加密技术,也就是非对称加密。RSA算法是目前在互联网应用最为广泛的公开密钥加密技术。

数字签名,你可以简单理解成公开密钥加密技术的反操作。人家用公钥加密,我用私钥加密,再用公钥解密,最终做一个验证,证明你所声称的那个,就是你声称的。有点意思吧!

至于说,有了加密技术就万无一失了吗?换个角度看,也就是在取舍权衡,放弃一点点安全感,能够换来的不止百倍的收益。

XML/HTML

HTML是网页标记语言,XML是数据传输语言,是元语言。通俗地说,HTML是给人看的,XML是给计算机看的。只是说,HTML中的标签大都是预先定义好的,而XML是可以自定义的。

其中SOAP(Simple Object Access protocol )简单对象访问协议可用于分布式计算。所谓分布式计算,就是把程序分散部署在用网络链接起来的多台计算机上,使这些计算机相互协作,充分发挥计算机整体的计算能力。简单地说,SOAP就是使运行在A公司计算机中的A程序,可以调用运行在B公司计算机中的B程序。对,这就是应用在BC领域的分布式计算,10多年前就有的技术哦。

结尾:

在全书的结尾,作者谈论了计算机技术领域的从业者的职业走向。To SE or To 程序员?这是一个值得思考的问题。

程序员,没什么好说的,写代码,做用户故事。在我看来,是一个不断长胖的过程,在自己擅长的领域不断拓展自己的宽度,最终变成一个领域的大木桶--技术大牛。

SE系统工程师,在进行业务信息化时,负责调查、分析业务内容,确定计算机系统的基础设计及其详细规格的技术人员;同时,也负责系统的项目管理和软件的开发管理、维护管理工作。由于主要的工作是基础设计,所以不同于程序员,SE需要具备从硬件结构,软件的构建方法乃至横跨整个业务的广泛知识以及项目管理经验,是一个不断长高的过程。

这本书给我们搭建了一个计算机世界的基本框架,让小白和刚入门的人形成了一个知识体系的大网,诚然这张网的网眼很大很大,所以那留出来的空白就是需要我们自己去编织的部分,那同样是人生的乐趣所在。

相关文章

  • 完美!华为18级技术专家苦熬3年硬肝出整套网络+操作系统文档

    有意思的计算机书籍套装全3册 “网络是怎样连接的+程序是怎样跑起来的+计算机是怎样跑起来的”,一套蹲马桶就能看懂的...

  • 读《计算机是怎样跑起来的》

    用了四五天时间抽空把矢泽久雄先生的《计算机是怎样跑起来的》读完了,接下来准备读他的《程序是怎样跑起来的》。再读之前...

  • 一周学习计划(11.26-12.02)

    计算机是怎样跑起来的 11.27 第一章:计算机的三大原则 计算机三大原则 1、计算机是执行输入、运算、输出的...

  • 计算机是怎样跑起来的?

    对于计算机的运行机制和原理,还有程序是什么?为什么这样? 《计算机是怎样跑起来的?》这本书通俗易懂,适合小白阅读。...

  • 【计算机是怎样跑起来的】

    开头的部分讲到了集成电路,I/O、内存、CPU如何配合,对于理解计算机如何输入数据有些形象的画面帮助。 1.计算机...

  • 计算机是怎样跑起来的

    今天讲一本和计算机有关的入门读物,作者是日本的矢泽久雄,自称软件艺人。我呢,大概用了8个小时把这本书认认真真的读了...

  • 计算机是怎样跑起来的

    计算机三大原则 初级问题,硬件和软件的区别是什么?硬件:看得见,摸得着,真实存在的设备。软件:运行在硬件之上,计算...

  • 计算机是怎样跑起来的

    存储汉字时,字符编码不同,汉字所占用的字节数也就不同。在GBK字符编码下,一个汉字占用2个字节。而在UTF-8字符...

  • 前端资源整理(持续更新)

    前端书籍 《计算机是怎样跑起来的》《DOM编程艺术》《锋利的JQuery》《你不知道的JavaScript》《Ja...

  • 笔记篇章之《学习之路》

    计算机基础 《程序是怎样跑起来的》 推荐理由:类似深入理解计算机的图解版本,如果第一次看深入理解计算机看不进去,可...

网友评论

      本文标题:计算机是怎样跑起来的

      本文链接:https://www.haomeiwen.com/subject/dbmrfftx.html