- 「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」。
- 当然 不论新老朋友 我相信您都可以 从中获益。如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力!
知乎问题:如何让不懂编程的人感受到编程的魅力?
Part 0. 前言
问一个类似的问题:「如何让不懂篮球的人感受到篮球的乐趣?」
很明显,答案取决于人。
对于某些人来说,编码可能是乏味而艰巨的,但对于有些人则是非常有趣且有益的。
通常情况下,编写好代码之后,我们很难评判编码的过程是无聊还是有趣的。
但是我们可以通过更好地了解 「计算机编程是什么」,因此您可以自己来评判这是否让你感到乐趣。
就当代的发展水平来说,只要有电的东西就会涉及到编码;
Part 1. 计算机发展简史 | 解决实际的问题
一切的开端 | 织布机
衣食住行是人类的基本需求,世界各地都有纺织和织机的发明。
如何提升纺织的效率,成为一个很重要的课题。
与 「针织物」 不同,「机织物」 由两条或两组以上的相互垂直的两个系统纱线或丝线构成,纵向的纱线 叫 经纱,横向的纱线 叫 纬纱。
通过两条线不同规律的交错,就会形成不同的颜色和排列的变化,也就会带来不同的纹样。
- 图片引用自:https://www.sohu.com/a/301616592_99894978
最原始的织机是手动完成的。
后来人们发现,织物纹样的变化总是按照一定规律排列完成的,到了战国时期,就发明了 多综式提花织机,通过 综框 来完成这一项工作:
这或许就是最原始的 编码:通过把 提起规律相同的经纱 穿入 同一个综框的综丝 中,来达到当某一个综框提起时 (通过脚踏板完成),表达某一个特定纹路的线被提起,也就完成了 特定纹路的编织,加快了工作效率。
织布机的更进一步 | 束综提花织机
不过采用综框也有一个明显的限制,那就是 无法织出比较复杂的纹样,因为纹样复杂则代表着需要更多的经纬纱以及经纱提升的规律更复杂,意味着可能引入成百上千次纬纱才能完成一个循环。
如果仍然采用综框控制纱线提升,则可能需要成百上千个综框,这在机械上实现是非常困难的,因此便有了 束综提花织机。
束综提花织机没有综框,而是被 设计成两层,每一根经纱会穿入综丝中实现 单独的控制,上层 的人将需要提起的经纱提起,而 下层 的人则再经纱提起后通过梭子将纬纱送入织口,并用打纬装置将引入的纬纱打牢。
然而通常来说,这类织机上会有成千上万根纬纱,纹样复杂,于是聪明的老祖宗们发明了 花本:
简单来说,花本存储了纹样信息。
图中花本的竖线连接穿入了经纱的综丝,横线存储了每一次引入纬纱时提花信息,当竖线越过横线覆盖在横线前方时,表明对应的经纱要被提起。
这就有点儿 编码规则 的意思。
会说话的「机器」 | 雅卡尔织布机
上面说到的束综提花织机虽然是一大进步,但可想而知的是,它仍然效率缓慢并且织布工人的劳动量非常大,也非常辛苦。
时间来到 18
世纪的欧洲。1725
年,布乔 开拓性的使用 打孔纸带 来控制经线的提起和放下,从而让织出花样成为一种半自动化的工作:
历史上第一次,机器能够读出存储介质中的内容,并且照其行事。
在布乔提出构想 65
后的 1790
年,约瑟夫·玛丽·雅卡尔 根据前人的成果设计了新式织机,最终于 1805
年完成了首台 自动提花织机:
雅卡尔将 穿孔纸带 改进为 穿孔卡片,根据纹样图案在卡片上打孔,通过孔的有无 带动一系列机械运动装置来 控制经纱的提升,一张卡片对应循环内一次引纬时经纱提升的信息,引纬完成后,可通过脚踏板控制卡孔卡片转动,下一张卡片翻转至工作位置以控制新一次引纬的提花:
雅卡尔织机大幅度节省了时间和工作量 (全自动且效率是之前的二十五倍),而且只需一位工人,很快就被广泛使用在工厂生产中,雅卡尔也荣获了拿破仑授予的荣誉勋章。
穿孔卡片控制织物纹样的设计成为了程序设计思想的萌芽,为信息技术的发展开展了一条新的道路。
程序设计思想开始萌芽 | 差分机
时间来到 19
世纪初,法国人 巴贝奇 (Chanles Badbbage) 在贾卡织机的启发下,设计并制造了 差分机。
故事背景
18
世纪末,法国政府在开创米制之后,决定在数学中统一采用十进制,竟奇葩地想把原本 90
度的直角划分成 100
度、把原本 60
秒的 1
分钟划分成 100
秒,尽管从现在看来这样的想法绝逼是一种倒退,但他们在当时真就实施了。这一改制带来的不光是人们在使用时直观上的别扭,原本制作好的数学用表 (如三角函数表) 都需要全部重制。
法国政府将这项丧心病狂的工程交给了 数学家普罗尼 (Gaspard de Prony),普罗尼正头疼着要如何才能完成这项艰巨的任务,突然想起著名经济学家 亚当·斯密 (Adam Smith) 的那本《富国论》,他决定采用书中提出的 劳动分工 的做法,将制表的工作人员分成三组:
- 第一组 由五六名牛逼的数学家组成,他们负责制定运算中所需的公式;
- 第二组 由九到十个擅长数学的人组成,他们负责计算出一些关键数据,并把第一组制定好的公式进行简化;
- 第三组 由约一百名计算人员组成,他们利用第二组提供的关键数据和公式,做最简单的加减操作就能得出最终结果。
第三组的工作简单到什么程度,就是他们甚至都不知道自己正在算什么玩意儿,事实上他们的文化程度大部分都不高,里头好多都是理发师、失业人员什么的。可见即便文盲都能完成的计算,在那个时代还是得依靠人力去做。
而为了保证用表的正确性,普罗尼要求 每个数至少算两遍,并且 要在法国的不同地点用不同的方法计算。这项劳民伤财的工程整整进行了十年才完成,然而不幸的是,最终的表里仍然有错。说到这一点,可以说,那个时代基本没有一版数学用表是完全正确的,有些版本甚至错误百出,要知道数学用表出错有时后果会很严重,比如航海表一出错就可能直接导致船毁人亡。
巴贝奇 在了解到普罗尼的事迹后泪流满面,决心要做一套完全正确的数学用表,为达目的,他尝试了各种减少错误的手段,比如调整纸张和墨水的颜色以提高数字的识别度,直接拿现有的多个版本的表进行誊抄、比对、让不同人员反复校对,在 1827
年出版了一个版本,结果里头还是有错。只要是人为的就没有完美的,巴贝奇彻底跪了,他发誓要造一台机器,让机器去生产数学表。
这就是史上著名的 差分机 了。
伦敦科学博物馆·差分机设计图纸&半成品:
第一台真正意义上的电脑 | 分析机
尽管没能亲手实现差分机,但巴贝奇并不会气馁,或者说他本来就是根本停不下来的那种人。明知实现不了,巴贝奇仍在一刻不停地改进着自己的设计,直到有一天,他构思出了一种空前的机器——分析机,正式成为现代计算机史上的第一位伟大先驱。 (Father of computing)
1834
年,分析机概念诞生之际,巴贝奇自己都为之感到无比震惊。在此之前,任何一台计算机器都只能完成其被预定赋予的计算任务,要么是简单的加减乘除,要么像差分机那样只能做差分运算,它们都属于 calculator
,而分析机才是真正的 computer
,它不局限于特定功能,而竟然是可编程的,可以用来 计算任意函数——现代人无论如何也无法想象在一坨齿轮上写程序是怎样一种体验吧!
巴贝奇设计的分析机主要包括三大部分:
- 用于存储数据的计数装置,巴贝奇称之为 “仓库”(store),相当于现在 CPU 中的存储器,这部分是从差分机上的计数装置改进而来的,我们很容易想象它的模样;
- 专门负责四则运算的装置,巴贝奇称之为 “工厂”(mill),相当于现在 CPU 中的运算器,这部分的结构相对复杂,巴贝奇针对乘除法还做了一些优化