提交 f7668f06 编写于 作者: SoftwareTeacher's avatar SoftwareTeacher

Merge branch 'master' into 'master'

Master

See merge request !15
...@@ -15,6 +15,80 @@ ...@@ -15,6 +15,80 @@
| 2020 | 2020: 95% 的企业说 开源软件是他们企业 IT 基础建设的重要部分。 | . | . | . | | 2020 | 2020: 95% 的企业说 开源软件是他们企业 IT 基础建设的重要部分。 | . | . | . |
### 开源发展历史的脉络 ### 开源发展历史的脉络
注:关于开源的历史,在网络有很多介绍,我(邹欣)在这里不想做其他文档的复读机,而是主要讲我的理解。 由于我的水平、经历和看问题的角度,我的看法可能有不准确,不符合事实,或者有偏颇之处,希望大家指出这些问题,我们可以展开进一步的讨论和澄清。
1. 1940 - 1950 年代: 开拓阶段
计算机科学的发展,是建立在其他学科的基础上的,自然地,计算机软件的发展也不例外。
在计算机发展的早期(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,这个语言后面被广泛地用于商业领域。
同时,沿着 "更高效地做科学计算“ 的思路, 为了 Formula Tranlating 而设计,诞生了 FORTRAN,当时的 IBM 电脑只有大写英语字母,因此这个语言的字母也全部大写,后来才改为 Fortran。 (早期发明者:John Backus 1953 - 1957)
随着计算机在二战后从科学计算转移到了商业应用,软件工程师开始考虑 “商业利益”, “知识产权” 的问题。
1950 年代, Hopper 主持了 Compiler 的研究,把高级语言编译为针对各个不同电脑的汇编代码,在这个过程中,她坚持了 “源代码共享”:
The fact that Hopper wholeheartedly welcomed non- UNIVAC personnel to learn about the A-2 compiler sheds some light on her beliefs concerning intellectual property. Hopper did not view software as a commodity to be patented and sold. Rather, she took her cue from the mathematics community. Like most other academics, mathematicians shared information universally, in order to advance knowledge. Though individual efforts were acknowledged by colleagues, advancement in the field was contingent on a communal view of information, community validation, and evolutionary advancement based on previous work. In the same way, software, according to Hopper, was a public good to be shared freely among all users. Complicating software development with secrecy would only inhibit innovation.
Beyer, Kurt W.. Grace Hopper and the Invention of the Information Age (Lemelson Center Studies in Invention and Innovation series Book 4) .
总结:在早期的计算机上,“软件” 只是实现把数学公式转化到机器代码中,子程序的出现,让大多数的常用计算公式能够一次写好,多次被调用。随着计算机软件科学和技术的发展,如何分享 “科研成果” vs “保护商业利益” 成为程序员需要面对的问题。
2. 1960 - 1970 年代:
在环境/文化方面: 黑客文化兴起
在计算机/OS 方面: Unix 在大学计算机教育界的兴起和版权纠纷
在应用软件方面:VI,Emacs:
商业创新方面: 个人电脑:Xerox Parc 的 Alto 电脑, Apple I,BASIC 解释器
软件许可证的诞生: EULA: End User License Agreement.
3. 1980 - 1990 年代: 开源的商业萌芽
商业版权: 导致 Unix 的碎片化, 导致商业发展的停滞和版权纠纷。 Macintosh, DOS, Windows, Windows NT, OS/2 ...
自发的开源项目从萌芽阶段发展: MINIX, Linux 等开源 OS 等产生。 MySQL, Apache,PHP。
4. 2000 - now 高速发展阶段
几乎所有的软件都有开源的替代产品。
互联网技术和产业的几次潮起潮落让开源成为一个实用而可以操作的选择。
高端:Sun 的工作站,Cisco 的网络设备,EMC 的存储,Oracle 的数据库。
低端:LAMP: Linux, Apache 网站服务器,MySQL 数据,PHP 脚本语言。
企业 IT 服务: scale-up. 买越来越高级的专用服务器和商用软件 转向 scale-out: 用便宜的硬件和软件取代.
企业 IT 战略: build or buy? 购买专用服务(被锁定) vs 自己构建 (技术和人力成本)。 原来只能二选一,现在 开源可以有一个混合模型,满足企业需要。
2020: 95% 的企业说 开源软件是他们企业 IT 基础建设的重要部分。
### 国内开源的发展现状 ### 国内开源的发展现状
......
...@@ -36,7 +36,7 @@ http://t.csdn.cn/ihAJj ...@@ -36,7 +36,7 @@ http://t.csdn.cn/ihAJj
你既然来学习 ”开源软件开发“ 这个课程,那么你一定对这个领域有不少疑问。 上这门课的所有学生的疑问一定是不一样的,那么,你把你的疑问讲得越清楚,就越能帮助老师、助教、业界专家、甚至其他同学了解你的疑问,和你讨论并视图解答。 你既然来学习 ”开源软件开发“ 这个课程,那么你一定对这个领域有不少疑问。 上这门课的所有学生的疑问一定是不一样的,那么,你把你的疑问讲得越清楚,就越能帮助老师、助教、业界专家、甚至其他同学了解你的疑问,和你讨论并视图解答。
写一篇博客,在自己的 CSDN 博客账号下发表,描述自己目前还不知道答案的五个具体问题。 写一篇博客,在自己的 CSDN 博客账号下发表,描述自己目前还不知道答案的五个具体问题。
注意:是 “还不知道答案” 的问题。 请不要写很宏大的问题,如 “开源的意义“, ”怎么让开源项目成功” 。 而是一个具体的问题。 注意:是 “还不知道答案” 的问题。 请不要写很宏大的问题,如 “开源的意义“, ”怎么让开源项目成功” 。 而是一个具体的问题。
#### 一个模板可以是这样: #### 一个模板可以是这样:
我看了这一段文字 【引用文字】,有这个问题 【提出问题,描述问题】。 我看了这一段文字 【引用文字】,有这个问题 【提出问题,描述问题】。
...@@ -51,7 +51,7 @@ http://t.csdn.cn/ihAJj ...@@ -51,7 +51,7 @@ http://t.csdn.cn/ihAJj
大学生应该能写出自己的思考, 而不是摘抄书本内容。 大学生应该能写出自己的思考, 而不是摘抄书本内容。
关于如何提问,也有很多人给了建议,这是其中的一个,他的作者大家可能知道名字 关于如何提问,也有很多人给了建议,这是其中的一个,他的原作者大家可能有所耳闻
http://tieba.github.io/common/howtoask.html http://tieba.github.io/common/howtoask.html
### 怎么交作业 ### 怎么交作业
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册