From d5f26b871ce5110ea5af348f45b352551bcd0198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CZouXin=E2=80=9D?= Date: Mon, 29 Aug 2022 21:16:17 +0800 Subject: [PATCH] modified: chapters/1.md modified: plan/1.md --- chapters/1.md | 40 ++++++++++++++++++++++++++++++++++++++++ plan/1.md | 4 ++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/chapters/1.md b/chapters/1.md index e413f9e..b160863 100644 --- a/chapters/1.md +++ b/chapters/1.md @@ -15,6 +15,46 @@ | 2020 | 2020: 95% 的企业说 开源软件是他们企业 IT 基础建设的重要部分。 | . | . | . | ### 开源发展历史的脉络 +注:关于开源的历史,在网络有很多介绍,我(邹欣)在这里不想做其他文档的复读机,而是主要讲我的理解。 由于我的水平、经历和看问题的角度,我的看法可能有不准确,不符合事实,或者有偏颇之处,希望大家指出这些问题,我们可以展开进一步的讨论和澄清。 + +1. 开源的环境/文化 + +计算机科学的发展,是建立在其他学科的基础上的,自然地,计算机软件的发展也不例外。 +在计算机发展的早期(1940 年代),它的硬件有非常有限的速度和容量。 +Mark I:CPU 内部计算一个加法:300 毫秒; 相当于 3 Hz 的主频。 大家手里的笔记本电脑是 1G Hz 主频。 +Mark I 的内存: +72 storag registers, each holds 2 23-digit decimal numbers and its algegraic sign. + +程序员的工作:把一个计算公式(例如 一个复杂的方程)转化为 --> 数字和数字的操作 --> 输入到电脑中。 直接使用机器语言 (汇编语言) + +早期的程序就是把数学公式变为一个计算机能执行的对数据操作的序列。 + +早期的程序员都是搞数学的,每一段汇编代码是和机器的细节,包括内存的地址绑定的,程序无法重用到另一次的执行中(因为内存地址不一样了),而不用说,程序能够分享到别的机器上了。 在1945 年, Mark I 的程序员开发了很多常用的数学公式的实现方法,但是在拷贝代码的时候,要把地址重新安排,很不方便。 这些方法如何能够方便地让大家互相使用呢? 一个想法,从原来的直接使用机器的绝对地址变为 “relative coding",建立了一个抽象 --- 不实用绝对的地址,而是使用相对的地址。 + + +1946 年 5 月: John von Neumann 发表了 “First Draft of a Report on the EDVAC", 描述了现代计算机的结构: +- binary logic gates +- stored instructions and data +- serial execution of instructions. + +怎么实现 “stored instructions / programs", 而不被具体的机器细节所绑定? 如何用参数来支持对这个program 对不同输入? 这就是 sub-routine (子程序)的产生。 + +1950: Mark III 电脑诞生,支持 subroutine 的功能,让 “子程序” 可以方便地在不同的地方被调用。 + +Grace Hopper 霍珀在工作中,对于早期计算机指令的规范也做出了很多贡献。 +  +在计算机出现的早期,指令都是用二进制或者八进制来表示的。机器只认识这些数字,对于机器来说,挺方便的。但计算机代码,究竟是给计算机读的,还是给人读的呢? +  +霍珀和其他程序员在实践中发现,这些代码需要花很多时间来记忆,修改,和讨论,执行起来很不方便,于是他们做了一系列的改进: +首先,用英语字母来表示计算机指令,这样程序员就能方便地阅读和理解。 +其次,霍珀成了第一个在源程序上写注释的程序员,这个习惯传到了很多其他人。 + +第三,她们发明了流程图 (Flow Chart),使用矩形来代表操作,使用菱形来代表选择。俗话说“一图胜千言”,流程图极大地提升了工作效率。所以一直到 70多年后的今天,还会被许多初学者沿用,帮助设计和理解程序。   +  +在1950年代末,沿着 "让计算机程序容易写,容易理解”的思路,霍珀还领导设计了现代编程语言 COBOL,这个语言后面被广泛地用于商业领域。 +在1950年代末,沿着 "更高效地做科学计算“ 的思路, 为了 Formula Tranlating 而设计,诞生了 FORTRAN,当时的 IBM 电脑只有大写英语字母,因此这个语言的字母也全部大写,后来才改为 Fortran。 (早期发明者:John Backus 1953 - 1957) + + ### 国内开源的发展现状 diff --git a/plan/1.md b/plan/1.md index cb6f55a..d4d4c12 100644 --- a/plan/1.md +++ b/plan/1.md @@ -36,7 +36,7 @@ http://t.csdn.cn/ihAJj 你既然来学习 ”开源软件开发“ 这个课程,那么你一定对这个领域有不少疑问。 上这门课的所有学生的疑问一定是不一样的,那么,你把你的疑问讲得越清楚,就越能帮助老师、助教、业界专家、甚至其他同学了解你的疑问,和你讨论并视图解答。 写一篇博客,在自己的 CSDN 博客账号下发表,描述自己目前还不知道答案的五个具体问题。 -注意:是 “还不知道答案” 的问题。 请不要写很宏大的问题,如, “开源的意义“, ”怎么让开源项目成功” 。 而是一个具体的问题。 +注意:是 “还不知道答案” 的问题。 请不要写很宏大的问题,如 “开源的意义“, ”怎么让开源项目成功” 。 而是一个具体的问题。 #### 一个模板可以是这样: 我看了这一段文字 【引用文字】,有这个问题 【提出问题,描述问题】。 @@ -51,7 +51,7 @@ http://t.csdn.cn/ihAJj 大学生应该能写出自己的思考, 而不是摘抄书本内容。 -关于如何提问,也有很多人给了建议,这是其中的一个,他的作者大家可能知道名字: +关于如何提问,也有很多人给了建议,这是其中的一个,他的原作者大家可能有所耳闻: http://tieba.github.io/common/howtoask.html ### 怎么交作业 -- GitLab