读普林斯顿计算机公开课05编程(下)

1. 软件开发

1.1. 1950年之前还没有软件

  • 1.1.1. 软件成为经济发展的一个重要产业,还只是近四十年的事

1.2. 现实中的编程往往是大规模的

  • 1.2.1. 确保不同的程序员编写的代码能够在一起运行很有挑战性,而做不到这一点则是错误的主要来源

  • 1.2.2. 先搞清楚要做什么,然后从大概的规程着手,将其一级一级分解为较小的任务,再分别完成这些小任务,同时保证它们能够组合在一起

  • 1.2.3. 需要由程序员、测试人员、文档编写人员组成团队协同工作,具有开发计划、最终期限,层层管理,还有无穷无尽的会议用于保证项目的进展

1.3. 预制件

  • 1.3.1. 库、接口和开发工具包

  • 1.3.2. 所有重要的程序几乎没有从零开始写的,有许多别人已经写好的组件可以拿来直接用

  • 1.3.3. 函数的机制

    • 1.3.3.1. 程序员就可以写出一段执行某个有用操作的代码,然后将它打包成其他程序员可以在他们的程序中使用的形式,而不必知道它是如何工作的
  • 1.3.4. 一组相关的函数集合通常称为库

  • 1.3.5. 函数库提供的服务是采用应用程序编程接口(Application Programming Interface, API)向程序员描述的,API会列出所有函数,说明其用途,如何在程序中使用它们,需要的输入数据,以及生成什么值

  • 1.3.6. API不仅包括简单的语法需求声明,还包括说明文档,以帮助程序员有效地使用函数库

  • 1.3.7. 软件开发工具包(Software Development Kit, SDK),因此程序员可以浏览日益复杂的软件库

    • 1.3.7.1. SDK本身就是大型软件系统

    • 1.3.7.2. Android的开发环境Android Studio有1.6GB,而苹果开发者的SDK Xcode则更是大许多

1.4. bug

  • 1.4.1. 没有多少程序第一次就能正常运行

    • 1.4.1.1. 生活太复杂了,而程序也反映了其复杂性
  • 1.4.2. 缺陷被称为漏洞(bug)

    • 1.4.2.1. 机器、图纸等类似物品中的缺陷或错误
  • 1.4.3. 在实际的编程中,测试是很大一部分工作

    • 1.4.3.1. 软件公司所做的测试工作经常比编写代码还多,并且测试人员比程序员还要多,就是希望尽可能在把产品交给用户之前发现更多的bug
  • 1.4.4. 软件中的漏洞通常允许对手用自己的恶意代码覆盖内存,从而使系统容易受到攻击

  • 1.4.5. 白帽解决问题,黑帽利用问题,中间有一个灰色地带,像美国国家安全局这样的政府机构会利用库存漏洞,稍后再使用或修复

  • 1.4.6. 漏洞的普遍存在解释了为何重要程序要频繁更新

    • 1.4.6.1. 编写健全的程序是很难的,而且坏人总是在寻找机会

    • 1.4.6.2. 对于普通用户来说,更新我们的软件是很必要的,因为安全漏洞会在新版本中完成修补

  • 1.4.7. 外界环境一直在改变

    • 1.4.7.1. 程序必须不断适应新情况

    • 1.4.7.2. 新的硬件被开发出来,它所需要的软件可能得进行系统的改动

    • 1.4.7.3. 新的法律法规出台,程序的规范可能就必须调整

  • 1.4.8. 必须持续不断地稳步更新,这是软件开发和维护的一大问题,但是不得不这样做

    • 1.4.8.1. 程序就会遭遇“比特腐烂”​,一段时间之后,也许就不能用了,或者无法更新,因为重新编译无法通过,或者它所依赖的库已经变化太大

2. 知识产权

2.1. 知识产权一词指的是由于个人创造性努力而产生的各种无形财产,如发明或著作权—书本、音乐、绘画、照片

2.2. 是无形的,但很有价值

2.3. 软件可以无限量复制,并以零成本在世界范围内分发,它很容易修改,最终它是无形的

2.4. 商业秘密

  • 2.4.1. 商业秘密是最明显的

  • 2.4.2. 产权所有人要对专利保密,只有在签订了有法律约束力的合同(如保密协议)之后才能对他人公开

  • 2.4.3. 可口可乐的配方

  • 2.4.4. 在软件领域,像PowerPoint或Photoshop这样的主要系统的代码就是一个商业秘密

  • 2.4.5. 早期,大多数软件由公司开发,源代码是一般人得不到的,那是属于开发者所有的商业秘密

2.5. 商标

  • 2.5.1. 商标是一个词或短语,一个名字,一个标志,甚至是一种独特的颜色,用来区分一个公司提供的商品或服务

2.6. 版权

  • 2.6.1. 版权保护创造性的表达

  • 2.6.2. 在文学、艺术、音乐和影视领域,版权是深入人心的

  • 2.6.3. 版权保护创意产品不被他人抄袭,至少在理论上,保护作者在有限时期内通过自己的作品获益的权利

  • 2.6.4. 保护数字产品的版权是很困难的,任何数量的电子副本都可以在网络世界中免费制作和分发

  • 2.6.5. 版权也适用于程序

  • 2.6.6. 净室开发(clean room development)

    • 2.6.6.1. 程序员完全没有接触或者不了解自己正在仿制软件的代码

    • 2.6.6.2. 法律问题变成了证明洁净室确实是干净的,没有人因为接触过原始代码而被污染

2.7. 专利

  • 2.7.1. 软件的知识产权问题颇具有挑战性,尤其是专利问题

  • 2.7.2. 专利为发明提供法律保护。专利与版权形成鲜明对比,版权只保护表达,即代码是怎么写的,而不保护代码中包含的原创思想

  • 2.7.3. 硬件专利很多,有轧棉机、电话、晶体管、激光,当然还有各种各样的加工方法、设备以及对它们的改进

  • 2.7.4. 软件—算法和程序—是不能申请专利的,因为它被认为是“数学”​,故而不在专利法管辖范围内

  • 2.7.5. 算法要用到数学,但算法并不是数学

  • 2.7.6. 获得软件专利如此容易的缺点之一是所谓的“专利流氓”(patent troll)或“非执业实体”(non-practicing entities)的兴起

    • 2.7.6.1. 专利流氓获得专利的权利,不是为了使用该发明,而是为了起诉他所声称的侵犯了该发明的其他人

    • 2.7.6.2. 专利诉讼的直接成本很高,如果一个人输掉诉讼,其成本可能非常高

    • 2.7.6.3. 特别是对于小公司来说,向“专利流氓”支付许可费是更容易、更安全的做法,即使他们的专利要求很弱,侵权行为也不明确

2.8. 许可

  • 2.8.1. 许可是批准使用某种产品的法律协议

  • 2.8.2. 大多数EULA规定,如果软件对你造成了伤害,你不能就损害赔偿提起诉讼

  • 2.8.3. 软件的使用是有条件的,而且你必须同意不会对它进行逆向工程或者反汇编

  • 2.8.4. 一种被称为“首次出售”的法律原则表示,一旦你买了某样东西,你就拥有了它

  • 2.8.5. API实际上是服务用户与服务提供者之间的契约

    • 2.8.5.1. 它规定了接口两端都该做些什么,不是它的实现细节,而是明确规定每个函数被程序调用时可以做什么

3. 标准

3.1. 标准是对某个工件如何构建或应该如何工作的精确而详细的描述

3.2. 有些标准是事实标准,比如Word的.doc和.docx文件格式

  • 3.2.1. 它们不是官方标准,但每个人都在使用它们

3.3. 得益于各种硬件标准,尽管我们根本没有注意到有那么多硬件标准

  • 3.3.1. 标准规定插头的大小和形状以及它们所提供的电压

  • 3.3.2. 使用标准的HDMI、USB、S-Video数据线和连接器,我还可以把其他设备连接到电视上

  • 3.3.3. 有录像带的Betamax和VHS标准,以及高清视频磁盘的HD-DVD和Bluray标准

3.4. 软件领域也有各种各样的标准,字符集有ASCII和Unicode,编程语言有C和C++,用于加密的和压缩的各种算法,还有通过网络交换信息的各种协议

3.5. 标准对于互操作性和开放的竞争环境至关重要

  • 3.5.1. 有了标准,独立创造的各种东西才能合作,多个供应商才能同台竞技,而专有系统则会把每个人限定死

  • 3.5.2. 专有系统的所有者自然愿意把人们都限制在它的平台上

  • 3.5.3. 如果标准本身质量不高或者已经过时,但所有人又都被迫使用它,那它就会阻碍进步

4. 开源软件

4.1. 程序员编写的代码,无论使用的是汇编语言还是(更有可能)某种高级语言,都被称为源代码

4.2. 编译源代码得到的适合某种处理器执行的结果,叫作目标代码

4.3. 源代码是程序员可以读懂的,尽管可能得费点时间和精力

4.4. 开放源代码则是指另一种做法,即源代码可以被任何人自由阅读、研究和改进

4.5. 1983年,他发起了一个叫GNU(即“GNU's Not Unix”​,gnu.org)的项目

4.6. 自由软件基金会(Free Software Foundation),目标是开发永远“自由”的软件,也就是说这些软件不是专有的、不会受到所有权的限制

4.7. 自由软件是通过获得一个名为GNU通用公共许可证(General Public License, GPL)的独创版权证书来实现的

  • 4.7.1. GPL规定,基于该许可的软件可以被免费使用,而如果再把它分发给其他人,则必须同样遵守“所有用户都可以免费使用”的许可下公开源代码

4.8. 开源软件为专有商业软件设立了标杆

  • 4.8.1. Firefox和Chrome浏览器是开源的

  • 4.8.2. 两个最常用的Web服务器上运行的Apache和NGINX服务器软件也是开源的

  • 4.8.3. Android手机操作系统也是开源的

4.9. 在过去的十年里,谷歌创造并发布了Go,苹果创造并发布了Swift,Mozilla创造并发布了Rust,而微软则发布了C#和F#

4.10. 开源具有启发性

4.11. 红帽(Red Hat)是一家1993年成立,1999年在纽约证券交易所公开上市的公司

  • 4.11.1. 红帽发布的Linux源代码可以在网上免费下载,但公司通过支持、培训、质量保证、集成和其他服务可以赚取利润

4.12. 微软现在是开源软件项目的最大贡献者之一

4.13. 并不是所有开源软件都能独领风骚,开源版本不如它所模仿的商业版本的情况也比比皆是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值