本篇目录

接上)

十一、软件工程

1.面向对象编程

2.软件开发工具

十二、集成电路&摩尔定律

1.数字暴政

2.集成电路IC

3.印刷电路板

3.光刻技术

4.摩尔定律

5.技术瓶颈

总结


接上一篇 学习笔记(七)

十一、软件工程

为了写各种大型程序,程序员需要用到各种编程方法和工具,这些构成了“软件工程”学科。

1.面向对象编程

1.对象

大型程序一般有很多个函数,具有相关性的函数还可以继续向上抽象,打包成“对象”Object。比如汽车对象中可能包含了“启动引擎”这个函数,也包含了“熄火”这个函数。同时,汽车对象中还包含了“车身颜色”、“座椅数量”等变量。一个程序员负责写好对汽车对象的描述(代码),其它程序员就可以建立一个汽车对象,并且调用其中的功能,而不需要了解汽车对象内部的功能是如何实现的。对象中也可以包含对象,比如一个铅笔对象中可能包含有铅笔芯对象,而一个文具盒对象中可能包含有铅笔对象、钢笔对象等。将变量、函数打包抽象为对象,是按照事物的内在逻辑来进行的,而不是随意的。

2.面向对象

通过这样的将函数打包成对象的编程思想就是“面向对象编程”。程序员在调用对象中的某一个函数时,通常是通过“.”来由外而内层层写出对应的对象名、函数名等,直到找到最内层想要调用的那个函数或者变量。面向对象编程能够封装内部组件,隐藏复杂度。

面向对象编程,有利于将大型项目分成一个个小的单元,让不同程序员方便地协作完成一个大项目,每个人的代码都具有相对独立性。

3.程序编程接口API

有时一个程序员要调用其它程序员写好的对象中的函数,这时就需要“文档”来帮助理解这些代码的功能,以及定义好的“程序编程接口”,即API。API帮助不同程序员合作,不用管代码的具体实现细节,只需要知道这些功能怎么使用就可以了。

一个对象中,有些函数是提供给外部访问的,这些函数的权限就是Public,另外一些函数是只允许对象内部的函数进行调用的,这些函数的权限就是Private。这样做的目的是为了避免外部函数错误地使用内部函数而带来危险。

面向对象编程能够选择性地对外公开功能,做大型项目非常有用。常见的面向对象编程语言有C++、C#、Java、Python等。

2.软件开发工具

1.集成开发环境IDE

程序员可以在记事本或者其它文字编辑器中写代码,但是专业的软件可以提供更多功能,比如代码高亮(提高可读性)、拼写检查、编译工具、源代码管理等。因为这样的软件集成了开发所需要的一切,因此叫集成开发环境,即IDE。

2.调试

程序员会将大部分时间花在代码调试而不是写代码上。IDE可以提供代码调试功能,帮助程序员定位到出错的代码,并提供信息来帮助修改。

3.文档和注释

程序员的另一项重要工作是给代码写文档以及注释。文档一般放在一个“README”文件里,里边说明了这些程序的功能以及使用方法。也可以代码中写注释,使用注释标记就可以在编译的时候让编译器绕过这些注释文本。注释很重要,能帮助程序员自己理清思路、几个月后回来还能理解自己的代码,以及帮助其它程序员理解这些代码(而不是让其它程序员通读代码来理解功能)。

4.版本控制

如果是团队合作的大型项目,那么还需要一个负责“源代码管理”的软件,也叫“版本控制”。大型软件公司会将所有代码放到一个中心服务器上,即“代码仓库”。程序员可以从这个服务器上下载(check out)一段代码,然后修改、增加新功能、测试等,等到测试无误后再“提交”,更新代码仓库中的代码。

当这段代码被check out 并且重新提交了,这说明这段代码可能被改过了,那么其它程序员就不会再来改动这段代码,这避免了重复劳动。如果一些新改动的代码中出现了bug,导致整个软件出现了不稳定性,源代码管理软件可以跟踪所有变化(谁改了什么代码),并且能够使全部或者部分代码回滚到之前的某一个稳定版本。

5.质量控制

写好的代码需要测试,代码的测试可以统称为“质量保证测试”,即QA。通过测试模拟各种情景,尽可能找出所有存在的bug,以保证软件的稳定性。

6.Beta、Alpha版本

beta版本是指软件接近完成,公司有时会向公众发布beta版本,以便让公众帮助公司发现潜在的问题。Alpha版本,一般只是具有雏形,还有许多问题,经常只在公司内部测试。


十二、集成电路&摩尔定律

软件与硬件的发展是相辅相成的。

1.数字暴政

1949-1960年代,计算机都由独立部件(即“分立元件”)组成,然后再用线连接在一起。如果想要更好的性能,就要增加更多的部件,使用更多的线路,计算机变得更复杂,这个问题叫“数字暴政”。

1950年代中期,晶体管开始商业化,用在计算机里。晶体管比电子管更小更快更可靠,但依然是分立元件。晶体管标志着“计算2.0时代”的到来。但是它仍然没有解决数字暴政的问题,越来越复杂的计算机难以设计、难以生产。解决的方法就是,提升新一层抽象,隐藏复杂度。

2.集成电路IC

1958年Jack Killby 演示了一个电子部件,将电路的所有组件都集成在一起,简单说就是将多个组件打包在一起,变成一个新的独立组件。这就是集成电路(IC)。Killby使用锗元素来做集成电路,但是地球中锗元素稀少且不稳定。1959年 Robert Noyce 的仙童半导体使用硅元素来做半导体(硅元素是地壳中含量第二高的元素,且稳定可靠),这让集成电路成为现实。因此,Noyce被公认为现代集成电路之父,开创了电子时代,创造了硅谷(仙童公司所在地,之后许多半导体企业都出现在硅谷)。

3.印刷电路板

起初,一个IC(集成电路)只有几个晶体管,其中集成了一些更小的部件。但这样做仍然需要将这些小的IC连接组装成为计算机。后来工程师们发明了印刷电路板PCB,它通过蚀刻金属线的方式,将零件连接到一起。因此PCB可以大规模生产,无需焊接或者使用一大堆线路。通过PCB与IC的组合使用,工程师们可以大幅减少独立组件和电线,制造更小、更便宜、更可靠的计算机。

3.光刻技术

初级的IC只能集成很少的几个晶体管,为了实现更加复杂的设计,工程师们发展出了光刻技术。

光刻技术简单来说就是用光将复杂图案印到半导体材料上,它通过重复执行几个基础的步骤,来制造出复杂的电路。

① 初始,准备一片硅(像一片硅饼),这叫“晶圆”。硅是半导体,适合制作晶体管,因此可以将复杂的电路都集成到一片晶圆上。

② 在硅片顶部加一层氧化层。

③ 在氧化层顶部加一层光刻胶,这种化学物质在被光照射后会变得可溶。溶解之后的光刻胶可以被特定的化学试剂洗掉。光刻胶一般与光掩模配合使用。

④ 在光刻胶层顶部加一层光掩模。光掩模就像胶片一样,上边有要转移到晶圆上的图案。这些有图案的地方就能够透光。

⑤ 强光照射。光掩模上图案的地方,会透光,于是下一层的光刻胶会溶解。

⑥ 用特定化学试剂溶解的光刻胶之后,这些地方会暴露出氧化层。

⑦ 再用另一种化学物质(通常是一种酸)可以洗掉露出来的氧化层部分,进而蚀刻最下层的硅层。这就是在晶圆上刻下了所需要的图案(电路)。

⑧ 现在晶圆上还有一部分氧化层,这部分氧化层上面还有未溶解的光刻胶作为保护。这时再用一种特定的试剂洗掉这些未溶解的光刻胶。

⑨ 现在有一部分硅是暴露出来的,用“掺杂”(doping)这种化学过程来优化这部分硅的导电性。这一步通常用高温气体(比如磷)来做,渗透进暴露出的硅,从而改变其电学性质。

⑩ 回到②,重复光刻法的步骤,只是光掩模上的图案会有所不同,“掺杂”过程的感温气体也有所不同,蚀刻硅层的深度也有所不同。这样,可以在硅层上制造出晶体管。

①① 最后,在氧化层上做通道,这样可以用细小金属导线,连接不同的晶体管。这一步再次使用光刻胶和光掩模,蚀刻出小通道,接着用一种新的处理方法,“金属化”,在氧化层之上放一层薄薄的金属(比如铝或铜)。之后再次用光刻胶+光掩模,然后强光照射,然后溶解掉暴露的光刻胶、暴露的金属。

①② 这样,晶体管终于做好了,它有三根线连接着硅的三个不同区域,每个区域的掺杂方式不同(电气性质也就不同),这就是双极型晶体管。

这个1962年的真实专利,使得工程师们可以利用光刻技术,制造出晶体管、电阻、电容等各种电子元件,这些元件都集成在一片硅(晶圆)上,并且相互连接的电路也做好了。光刻法一次会做上百万个细节,光可以聚焦到非常小的区域,从而制作出非常精细的细节。一片晶圆可以做很多集成电路,整块晶圆都做好后,可以切割然后包进微型芯片。芯片(chip)的核心都是一小片IC。

4.摩尔定律

随着光刻技术发展,晶体管变小,密度变高。1965年,戈登·摩尔提出了集成电路的发展趋势:每两年左右,同样大小的空间内,晶体管的数量将翻倍。这就是摩尔定律。与此同时,芯片的价格也在急剧下降。晶体管越小,要移动的电荷量就越少,能更快速地切换状态,更省电;电路更紧凑,延迟就进一步降低,时钟速度提高。

1968年,Robert Noyce(仙童半导体公司的创始人)和戈登·摩尔联手成立了一家新公司,名称取自Integrated(集成)的int 以及Electronics(电子)的el,即Intel,这是如今最大的芯片制造商。微型处理器,使用的就是半导体集成电路制作的处理器。集成电路的出现,尤其是用来做微处理器,开启了“计算3.0”时代。

随着技术发展,光刻的分辨率从约一万纳米,发展到如今的7纳米。其它的电子器件(如内存、显卡、固态硬盘等)也在呈指数式发展。超大规模集成(VLSI)软件,用来自动生成芯片设计,有人认为这是“计算4.0”时代的开始。

5.技术瓶颈

但这样的发展可能最终会面临瓶颈,晶体管进一步做小会面临两个大问题。

① 因为光的波长有限,将光掩膜的图案刻到晶圆上的精度已达极限。因此科学家在研制波长更短的光源,以投射更小的形状。

② 当晶体管非常小,电极之间可能只距离几个原子,这时电子会跳过间隙,即发生“量子隧道贯穿”。这相当于是晶体管漏电,这样的元件是不可靠的。科学家在努力寻找解决方法。


总结

本篇内容:

1.软件工程

2.集成电路与摩尔定律

计算机基本原理 学习笔记(八)相关推荐

  1. 计算机基本原理 学习笔记(五)

    本篇目录 接上) 七.中央处理器CPU 1.CPU的结构 2. 提高CPU的速度 (1)硬件 (2)指令集 (3)缓存 (4)指令流水线 (5)超标量处理器 (6)多核处理器 3.超级计算机 4.小结 ...

  2. 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影)

    接上文 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等 通过三维图形变换,可由简单图形得到复杂图形,三维图形变化则分为三维几何变换和投影变换. 6.1 三维图形几何变换 三维 ...

  3. 评价微型计算机总线的性能指标,计算机组成原理学习笔记(3):总线

    文章目录 课程笔记导览 附录:英语解释 第三章 总线 3.1 总线的基本概念 使用总线的原因: 总线的定义 总线上信息的传送 总线结构举例 单总线结构 面向CPU的双总线结构 以存储器为中心的双总线结 ...

  4. 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等

    接上文 计算机图形学 学习笔记(六):消隐算法:Z-buffer,区间扫描线,Warnock,光栅图形学小结 在图形学中,有两大基本工具:向量分析,图形变换.本文将重点讲解向量和二维图形的变换. 5. ...

  5. 计算机组成原理学习笔记(上)

    计算机系统概论 计算机发展历程 原始计算工具 中国人的智慧之光 机械式计算机 西方人的智慧 机电式计算机 电子计算机 1,最古老的计算工具:算筹 2,冈特计算尺 3,达芬奇机械式计算机 4,1642年 ...

  6. 黑马程序员_java自学学习笔记(八)----网络编程

    黑马程序员_java自学学习笔记(八)----网络编程 android培训. java培训.期待与您交流! 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无 ...

  7. 计算机图形学 学习笔记(九):曲线曲面(一):参数曲线、参数几何代数形式

    接上文 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影) 计算机图形学三大块内容:光栅图形显示(前面已经介绍完了 1-8).几何造型技术.真实感图形显示.光栅图 ...

  8. 计算机组成原理学习笔记第1章 1.3——实验一 计算机性能测试

    计算机组成原理学习笔记第1章 1.3--实验一 计算机性能测试 本篇笔记整理:Code_流苏(CSDN) 目录 计算机组成原理学习笔记第1章 1.3--实验一 计算机性能测试 0️⃣思维导图(自制) ...

  9. ReactJS学习笔记八:动画

    ReactJS学习笔记八:动画 分类: react学习笔记 javascript2015-07-06 20:27 321人阅读 评论(0) 收藏 举报 react动画 目录(?)[+] 这里只讨论Re ...

最新文章

  1. hive 字段不包含某个字符_hive之面试必问 hive调优
  2. linear model课程笔记
  3. Calendar的那些神坑
  4. linux slub分配器浅析
  5. 关于腾讯云丢数据事件的一些看法
  6. 如何在Ubuntu 18.04上安装Django
  7. 使用event.keyCode来判断是否为数字
  8. Class字节码文件结构总结
  9. Matlab 除法取整
  10. CS5211|EDP转LVDS方案介绍|CS5211电路设计
  11. Win10:回收站删除文件找回
  12. FFmpeg视频剪辑常用命令
  13. (解决)PHP GD 插入PNG图片后透明背景变灰色
  14. mysql中幻读出现的原因及解决方案
  15. 3GPP协议 25.105
  16. 中国移动CMnet和CMwap两种网络的区别?
  17. 深度分析:服务器租用与服务器托管的区别-蓝队云
  18. 解决问题:SpringMvc中转发的html文件中文是乱码
  19. 《口吃者的自我治疗》(8. 缓慢而专注地说话)
  20. SQL Developer Unable to create an instance ...解决方法

热门文章

  1. 国家一级建造师——工程经济——第一章——第二节
  2. 最强大脑记忆曲线(12)-- 录入数据修改
  3. 矩阵的Kronecker积、Khatri-Rao积、Hadamard积
  4. Linux系统内核优化
  5. excel怎么把竖排变成横排_PS虚线字怎么制作-PS虚线字绘制教程详解
  6. 知乎上那些简短却非常深刻的回答
  7. 玩转控件DTPicker
  8. 终点条件下的轨迹预测:It is not the Journey but the Destination: Endpoint Conditioned Trajectory Prediction
  9. Python在线办公系统毕业设计源码071116
  10. HTML+CSS+JS零食官网网站设计——美食零食官网(6页) html网页制作期末美食作业成品_小吃类网页设计期末作业