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

《普林斯顿计算机公开课》总结(一) 硬件部分 前几天读到一本非常好的书 ,《普林斯度计算机公开课》 【美】 布莱恩 W.克尼汉(Brian W. Kernighan)著 机械工业出版社 在此总结其中非常好的话语和知识。 前言 本书英文版网站 kernighan.com 第1章 阿达.洛夫莱斯被认为是世界上第一个程序员,Ada语言以其名字命名。 第一个由电器组成的计算机是ENIAC {} 第一个真正将程序和数据存储在一起的计算... 阅读详情

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可能将永远伴随着我们

《普林斯顿计算机公开课》总结(二) 软件部分 第4章 算法 线性算法 二分查找,每次检查或者比较都会把数据项一分为二。 排序,比如选择排序,不断从未经排序的名字中选择下一个名字,复杂度近似为N^2,这个增长率叫二次增长; 快速排序,首先遍历一次所有名字,把介于A和M之间的名字放在一组里,把介于N和Z之间的名字放到另一组里,这样就把所有名字分成了两个组。然后继续迭代分组,排序N个名字的工作量是N 复杂性分析: ... 阅读详情

相关推荐

SAP Business One自定义表与字段实战:从零构建企业专属数据模型

本文详细介绍了如何在SAP Business One中创建自定义表与字段,从零构建企业专属数据模型。通过实战案例和避坑指南,帮助用户掌握业务适配、流程优化和权限隔离等关键技巧,提升系统灵活性和数据管理效率。特别适合需要扩展标准功能的SAP Business One用户。

weixin_28730927的博客 362

读普林斯顿计算机公开课15读后总结与感想兼导读

读普林斯顿计算机公开课15读后总结与感想兼导读

lyingSeven的博客 206

Flutter模块打包AAR集成Android原生项目实践

跨平台开发框架Flutter通过将UI组件渲染为原生代码实现高性能表现,其核心优势在于一套代码可同时运行在iOS和Android平台。在工程实践中,将Flutter模块打包为AAR(Android Archive)进行集成,成为混合开发的主流方案。这种方案既保留了原生项目的稳定性,又能渐进式引入Flutter的高效开发特性。通过配置MethodChannel实现原生与Dart代码通信,开发者可以灵活控制Flutter引擎生命周期,优化内存占用和渲染性能。对于电商、社交等需要快速迭代的业务场景,该方案能显著提

weixin_34025051的博客 399

普林斯顿大学_算法公开课:Part_1_第一部分:并查集

首先,给大家推荐一个平台,Coursera (类比国内的mooc网),你可以在上面学习诸多国外一流大学的公开课视频,各个领域的都有,涉猎范围很广。想要出国留学的小伙伴儿不妨在上面事先感受一波国外授课的氛围与模式。言归正传,作为一名程序猿,算法实在是太重要了!即便不是一名程序员,学习一下算法编程也是很有好处的。因为,在某种层面上讲,算法是你针对计算机进行的解决问题的思想上的映射,代码就是你想法的载体...

GZHarryAnonymous的博客 1987

避坑指南:Cursor AI生成Flutter代码时最容易翻车的5个配置细节

本文深入剖析了使用Cursor AI生成Flutter代码时,因.cursorrules配置文件不当而导致的五大常见问题。重点探讨了如何通过制定清晰、具体的规则,避免状态管理混乱、设计图输入低效、项目架构脱节、性能隐患及规则维护缺失等陷阱,从而将AI转化为高效、可靠的开发伙伴,提升代码质量和团队协作效率。

wdx0123456的博客 415

B站国外大学公开课(持续更新)

BiliBili公开课目录 转载自 https://github.com/wenhan-wu/OpenCourseCatalog 这是一份公开课的目录,这里的视频大多来自 YouTube 等国内无法访问的网站,为了方便国内的朋友观看,我将这些视频搬运到了 Bilibili。 由于某些你懂的原因,台湾地区公开课无法过审,我将这些课程上传到了百度云,你可以查看 淘宝公开课目录,或直接前往 淘宝...

git1314的博客 1万+

simulink可控励磁同步电机模型分析

他励同步电机模型分析

qq_26681609的博客 5552

读普林斯顿计算机公开课14未来

读普林斯顿计算机公开课14未来

lyingSeven的博客 207

QCM6490平台DDR测试:从QDUTT配置到眼图分析的实战指南

本文详细介绍了QCM6490平台DDR测试的全流程,从QDUTT工具安装配置到眼图分析,提供了实战操作指南和常见问题解决方案。通过具体案例分享,帮助工程师掌握DDR测试技巧,确保内存稳定性,特别适用于物联网和边缘计算设备的开发调试。

weixin_33910191的博客 459

别再手动对照了!用Python+ArcGIS Pro一键搞定三调数据转土地三大类

本文介绍如何利用Python和ArcGIS Pro实现三调数据向土地三大类的自动化转换,大幅提升国土空间规划和土地变更调查的工作效率。通过封装分类规则为Python函数并集成到ArcGIS Pro脚本工具中,解决了传统手动操作耗时且易错的问题,适用于大规模数据处理场景。

weixin_29081101的博客 304

读普林斯顿计算机公开课01什么是计算机

读普林斯顿计算机公开课01什么是计算机

lyingSeven的博客 630

【AUTOSAR-COM】-10.5-APP CAN Frame/PDU“发送周期不准“的影响因素

一个Tx PDU在COM模块中的数据流; Tx APP CAN Frame/PDU"发送周期不准"的影响因素;

「汽车电子助手」的博客 2387

计算机公开课推荐 2019.8

欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 编程 哈佛 CS50:计算机科学导论 视频 MIT 6.00.1x:计算机科学和 Python 编程导论 视频 中文版教材 UCB CS61a:计算机程序的构造与解释(Python) 主页 中文版教材 数据结构·算法 ...

龙哥盟 4万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

读普林斯顿计算机公开课03算法

读普林斯顿计算机公开课03算法

lyingSeven的博客 559

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

读普林斯顿计算机公开课12数据

读普林斯顿计算机公开课12数据

lyingSeven的博客 672

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

读普林斯顿计算机公开课02比特

读普林斯顿计算机公开课02比特

lyingSeven的博客 170

计算机大一萌新,要补充哪些计算机基本知识

大学低年级新生的“计算机基本知识”入门指引

来自IT的写字爱好者 3214

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

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

lyingSeven的博客 184

读普林斯顿计算机公开课08网络(上)

读普林斯顿计算机公开课08网络(上)

lyingSeven的博客 230

读普林斯顿计算机公开课06操作系统

读普林斯顿计算机公开课06操作系统

lyingSeven的博客 378

读普林斯顿计算机公开课11万维网

读普林斯顿计算机公开课11万维网

lyingSeven的博客 224

我们世界中的计算机:从大师视角诠释计算常识

有时候我在想:从大师的视角来看计算机常识,会不会有些不一样的地方?

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 1万+

读普林斯顿计算机公开课13隐私和安全

读普林斯顿计算机公开课13隐私和安全

lyingSeven的博客 405

读普林斯顿计算机公开课04编程(上)

读普林斯顿计算机公开课04编程(上)

lyingSeven的博客 196

读普林斯顿计算机公开课10互联网

读普林斯顿计算机公开课10互联网

lyingSeven的博客 189
上一篇: 读普林斯顿计算机公开课06操作系统
下一篇: 读普林斯顿计算机公开课08网络(上)
躺柒
博客等级 码龄4年 7004粉丝 1321原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值