读普林斯顿计算机公开课07软件

1. 应用程序

1.1. application

1.2. “应用程序”是一种统称,表示以操作系统作为平台完成某种任务的各种程序或软件系统

  • 1.2.1. 新买的电脑或手机通常都会预装大量程序

  • 1.2.2. 应用程序可大可小,可以只完成特定的任务,也可以囊括大量功能

  • 1.2.3. 应用程序规模大小各异,从只做一件事的小型独立程序到做一组复杂操作的大型程序

1.3. App一词曾经是计算机程序员的专属词汇,但随着销售iPhone应用程序的苹果应用商店(App Store)取得巨大成功,​“应用”的简写形式(App)已经成为大众词汇

1.4. 代码可以高度保密,也可以开放源码,甚至没有任何限制

1.5. 浏览器是大型、免费、有时是开源的应用程序的一个例子

1.6. 浏览器自身还是一个平台,提供不同层次的扩展

1.7. 多年来的实践表明,把浏览器当成操作系统是可行的

  • 1.7.1. 浏览器本身就是一个独立的系统,与什么操作系统在控制底层硬件无关

1.8. 软件系统很大、很复杂,而且经常有bug,而不断的变化会使这些变得更糟

2. 软件层次

2.1. 软件也是分层组织的

  • 2.1.1. 计算机的最底层是硬件

    • 2.1.1.1. 它几乎可以看成固定的,除非因为总线的原因,使得即使在系统运行时也可以添加和删除设备
  • 2.1.2. 操作系统本身,通常称为内核,以显示其核心功能

    • 2.1.2.1. 操作系统已经成为一种商品;底层的硬件除了价格和性能之外,其他方面都影响不大
  • 2.1.3. 操作系统再往上的一层是一套函数库,它提供通用的服务,这样一来,程序员就不必各自重复实现这些功能

    • 2.1.3.1. 用于图形用户界面的组件,包括对话框、菜单、按钮、复选框、滚动条、选项卡面板等,都需要编写很多代码

2.2. 一个简单但可能不够完美的方法,就是把任何确保一个应用程序不会干扰另外应用程序的代码看成是操作系统的一部分

  • 2.2.1. 内存管理需要决定在程序运行的时候把它们放到内存的什么位置,它是操作系统的一部分

  • 2.2.2. 浏览器不属于操作系统,因为你可以运行任意浏览器,甚至同时运行多个浏览器,都不会干扰共享的资源或者控制

  • 2.2.3. 美国司法部从1998年开始到2011年结束的对微软的反垄断诉讼,就涉及微软的Internet Explorer浏览器到底是操作系统的一部分,还是仅仅是一个独立应用程序的问题

    • 2.2.3.1. Web浏览器和操作系统是相互独立的产品

3. 编程

3.1. 有时候知道并不是所有的编程任务都很困难也是很有帮助的

3.2. 每个浏览器都包含JavaScript,所以不需要下载软件来编程

3.3. JavaScript程序通常作为网页的一部分运行,尽管不在浏览器中运行的应用正在增加

3.4. Python非常适合对大量潜在应用进行日常编程

3.5. 编程语言的某些基本概念是相通的,因为这些概念都是为了表达一系列计算步骤而发明的

3.6. 编程语言具有语法,而语法就是一系列规则,根据它们可以判断什么符合语法,什么不符合

3.7. 语言本身:告诉计算机进行算术运算、测试条件和重复计算的语句

3.8. 可以在自己的程序中使用别人编写的代码库;这些都是预先写好的,你不必自己写

3.9. 可以访问程序运行的环境

3.10. 算法

  • 3.10.1. 算法是一系列精确、无歧义的步骤,可以执行某种任务,然后停止

3.11. 复杂性

  • 3.11.1. 算法的复杂性是对算法要执行的工作量的抽象描述,以基本操作作为度量依据,以计算次数如何依赖数据项的数目来表述

3.12. 库和接口

  • 3.12.1. 编写一个在真正的计算机上运行的程序涉及很多常见操作的接口细节

  • 3.12.2. 库以及类似的机制可以提供预制的组件,供程序员在编写自己的程序时使用

  • 3.12.3. JavaScript作为一种扩展机制在复杂的Web应用中扮演着十分重要的角色

  • 3.12.4. Google Maps就是一个很好的例子,它提供了一个库和一套API,于是地图操作就可以通过JavaScript程序,而不仅仅是鼠标点击来控制了

  • 3.12.5. Python最大的优点之一是有大量的库集合供Python程序员使用

  • 3.12.6. 接口或者API(应用程序编程接口)是提供服务的软件与使用该服务的软件之间的一种约定

    • 3.12.6.1. 库和组件通过应用编程接口提供服务

    • 3.12.6.2. 操作系统通过系统调用接口使硬件看起来更规范且可编程

3.13. Colab是一种被广泛使用的交互式工具—Jupyter Notebook的云版本,Jupyter notebook是一种基于计算机的物理笔记本的模拟

3.14. 编译器检查程序的错误,并将其编译成汇编语言指令

3.15. 算法是抽象的,而程序是对真实的计算机完成真实任务时的所有步骤的具体描述

3.16. 程序必须考虑内存和时间的限制,数值的有限大小和精度,不正常或恶意的用户,以及不断变化的环境

3.17. 抽象和虚拟化

  • 3.17.1. 抽象是计算中的一种基本思想,从硬件到大型软件系统,在所有级别中都可以看到它的作用

4. Bug

4.1. 计算机不懂宽容,因此容易犯错的程序员必须写出某种程度上没有错误的程序来

4.2. 所有大型程序都有bug,并且不能完全按照意图运行

4.3. 某些bug仅仅是惹人讨厌,更像是设计得不好,并不像真正的错误那么严重

4.4. 在个人电脑领域运行的“接受或离开,没有保修”的模式,可能会被更合理的产品保修和消费者保护政策所取代,就像在硬件领域一样

4.5. 根据既往经验,因为程序是基于既有组件构建的,而原有bug都会被消灭掉,所以至少从原理上讲,程序中的错误应该越来越少

4.6. bug可能将永远伴随着我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值