一、计算机概述

1.1 计算机简介

计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。

计算机由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。计算机可分为超级计算机、工业控制计算机、网络计算机、个人计算机、嵌入式计算机五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。

计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。

计算机的应用在中国越来越普遍,改革开放以后,中国计算机用户的数量不断攀升,应用水平不断提高,特别是互联网、通信、多媒体等领域的应用取得了不错的成绩。1996年至2009 年,计算机用户数量从原来的630万增长至6710 万台,联网计算机台数由原来的2.9万台上升至5940万台。互联网用户已经达到3.16 亿,无线互联网有6.7 亿移动用户,其中手机上网用户达1.17 亿,为全球第一位。

最近半个世纪以来,世界计算机科学界的重大进步,离不开图灵等人的理论奠基作用和多方面的开创性研究成果。

1.1.1 艾伦·麦席森·图灵

艾伦·麦席森·图灵(英语:Alan Mathison Turing,1912年6月23日—1954年6月7日),英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。

图灵对于人工智能的发展有诸多贡献,提出了一种用于判定机器是否具有智能的试验方法,即图灵试验,至今,每年都有试验的比赛。此外,图灵提出的著名的图灵机模型为现代计算机的逻辑工作方式奠定了基础。

图灵论文中的“用有限的指令和有限的存储空间可算尽一切可算之物”理论让当时所有的科学家震惊。

美国计算机学会(ACM)的年度“图灵奖”,自从1966年设立以来,一直是世界计算机科学领域的最高荣誉,相当于计算机科学界的诺贝尔奖。至今,中国人只有姚期智院士获该奖项。

图灵机:

所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。

图灵机,又称图灵计算机,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人类进行数学运算。

1.1.2 冯·诺依曼

约翰·冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍匈牙利数学家、计算机科学家、物理学家,是20世纪最重要的数学家之一。

冯·诺依曼是罗兰大学数学博士,是现代计算机、博弈论、核武器和生化武器等领域内的科学全才之一,被后人称为“现代计算机之父”、“博弈论之父”。

冯·诺依曼先后执教于柏林大学和汉堡大学,1930年前往美国,后入美国籍。历任普林斯顿大学教授、普林斯顿高等研究院教授,入选美国原子能委员会会员、美国国家科学院院士。早期以算子理论、共振论、量子理论、集合论等方面的研究闻名,开创了冯·诺依曼代数。冯·诺依曼第二次世界大战期间曾参与曼哈顿计划,为第一颗原子弹的研制作出了贡献。

计算机基本工作原理是存储程序和程序控制,它是由世界著名数学家冯·诺依曼提出的。最简单的来说,冯诺依曼理论的要点是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。

同样有着“计算机之父”称号的冯·诺依曼的助手弗兰克尔在一封信中写到:“……计算机的基本概念属于图灵。按照我的看法,冯·诺依曼的基本作用是使世界认识了由图灵引入的计算机基本概念……”

根据冯诺依曼体系结构构成的计算机,必须具有如下功能:
        把需要的程序和数据送至计算机中。
        必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。
        能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。
        能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。
        能够按照要求将处理结果输出给用户。

1.2 操作系统

1.2.1 什么是操作系统

操作系统(英语:operating system,缩写作 OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。

操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。

操作系统也提供一个让用户与系统交互的操作界面。

简而言之: 操作系统(Operating System)是运行在计算机上的最重要的程序,它可以管理和控制计算机的活动。

**硬件、操作系统、应用程序和用户之间的关系:**

操作系统的主要任务:
        控制和监视系统的活动
        分配和调配系统资源
        调度操作

1.2.2 操作系统发展史

操作系统并不是与计算机硬件一起诞生的,它是在人们使用计算机的过程中,为了满足两大需求:提高资源利用率、增强计算机系统性能,伴随着计算机技术本身及其应用的日益发展,而逐步地形成和完善起来的。

1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式。

PC机上的第一个图形界面——Xerox Alto(该系统并未商用,主要用于研究和大学),其于1973年被施乐公司Xerox Palo Alto Research Center (PARC)所 设计,从此,开启了计算机图形界面的新纪元,80年代以来,操作系统的界面设计经历了众多变迁,OS/2, Macintosh, Windows, Linux, Symbian OS ,各种操作系统将 GUI设计带进新的时代。
 
        图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

接下来我们看下Windows操作系统的各个版本界面:

Windows 1.0x (released in 1985):

微软作为一个图形界面的狂热者,在图形界面上的有着执着的热情,1985年,微软终于在图形用户界面大潮中占据了一席之地,Windows1.0是其第一款基于 GUI 的操作系统 。使用了 32×32 像素的图标以及彩色图形,其最有趣的功能是模拟时钟动画图标。

Windows 2.0x (released in 1987):

Windows在这个版本有重大的改进。比如窗口可以重叠,可以改变大小,可以最大化和最小化。

Windows 3.0 (released in 1990):

自从微软和IBM分开后,微软就意识到图形界面对用户的体验会是一个很不错东西,于是他们开始了有意义的改进。操作系统支持386 扩展模式,也就是说可以使用除了640K更多的内存和硬盘空间。并且有能力有更好的显示,如Super VGA 800×600 和 1024×768.

此时,Microsoft 雇佣了 Susan Kare ,她设计了Windows 3.0 的图标并统一了图形界面的风格。

Windows 3.1 (released in 1992):

这个版本的 Windows 引入了TrueType 字体,第一次使 Windows 成为可以用于印刷的系统。整个界面有非常大的改善,Windows 3.0 中,只能通过 Adobe 字体管理器(ATM)实现该功能。

该版本同时包含一个叫做 Hotdog Stand 的配色主题,并且配色还能够照顾有色盲症的人。

Windows 95 (released in 1995):

Windows 3.x 之后,微软对整个GUI被完全重新设计,这是第一个在每个窗口上加上了关闭按钮的GUI。设计团队让图标有了几个状态 (enabled, disabled, selected, checked, etc.) 这也是最著名的“开始”按钮第一次出现的时候。这是Microsoft历史上最大的一步,从此走上了帝国之路。

Windows 98 (released in 1998):

图标风格和 Windows 95 几无二致,不过颜色支持得更多了。支持超过了256色的图标。第一次出现了“Active Desktop”,桌面和IE集成,开始了internet的全面集成。

Windows XP (released in 2001):

每一次微软推出重要的操作系统版本,其 GUI 也必定有巨大的改变,Windows XP 也不例外,这个 GUI 支持皮肤,用户可以改变整个GUI 的外观与风格,默认图标为 48×48,支持上百万颜色。

Windows Vista (released in 2007):

开始3D桌面了。这是微软向其竞争对手做出的一个挑战,Vista 中同样包含很多 3D 和动画,自 Windows 98 以来,微软一直尝试改进桌面,在 Vista 中,他们使用类似饰件的机制替换了活动桌面。不过Linux下的3D桌面可更为夸张。

Windows 7 (released in 2009):

2009年7月14日,Windows 7正式开发完成,并于同年10月22日正式发布。10月23日,微软于中国正式发布Windows 7。2015年1月13日,微软正式终止了对Windows 7的主流支持,但仍然继续为Windows 7提供安全补丁支持,直到2020年1月14日正式结束对Windows 7的所有技术支持。

Windows 10:

Windows 10是美国微软公司研发的跨平台及设备应用的操作系统。是微软发布的最后一个独立Windows版本。

1.3 计算机硬件

硬件(英文名Hardware)是计算机硬件的简称,是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。
 
        简而言之,硬件的功能是输入并存储程序和数据,以及执行程序把数据加工成可以利用的形式。从外观上来看,微机由主机箱和外部设备组成。主机箱内主要包括CPU、内存、主板、硬盘驱动器、光盘驱动器、各种扩展卡、连接线、电源等;外部设备包括鼠标、键盘等。

计算机由运算器、控制器、存储器、输入设备和输出设备等五个逻辑部件组成。

冯·诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯·诺依曼计算机的组织结构,只是作了一些改进而已,并没有从根本上突破冯体系结构的束缚。冯·诺依曼也因此被人们称为“计算机之父”。

1.3.1 中央处理器

中央处理器(central processing unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。
 
        CPU由运算器和控制器组成,分别由运算电路和控制电路实现,是任何计算机系统中必备的核心部件。

简而言之:CPU是计算机的大脑。它从内存中获取指令,然后执行这些指令

运算器

运算器由算术逻辑单元(ALU)、累加器、状态寄存器、通用寄存器组等组成。
 
        算术逻辑运算单元(ALU)的基本功能为加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、求补等操作。

简而言之:用于完成数值运算(+、-、*、/)和逻辑运算(比较)。

控制器

控制器(Control Unit),是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。
 
        控制器从存储器中逐条取出指令,分析每条指令规定的是什么操作以及所需数据的存放位置等,然后根据分析的结果向计算机其它部件发出控制信号,统一指挥整个计算机完成指令所规定的操作。

简而言之:用于控制和协调其他组件的动作。

赫兹

赫兹是国际单位制中频率的单位,它是每秒钟的周期性变动重复次数的计量。
 
        每台计算机都有一个内部时钟,该时钟以固定速度发射电子脉冲。时钟速度越快,在给定的时间段内执行的指令就越多。速度的计量单位是赫兹(Hz),1Hz相当于每秒1个脉冲。随着CPU速度不断提高,目前以千兆赫(GHz)来表述。
 
        国际单位制符号衍生单位
                1千赫 (kHz 103 Hz) =1 000 Hz
                1兆赫 (MHz 106 Hz) =1 000 000 Hz
                1吉赫 (GHz 109 Hz) =1 000 000 000 Hz
                1太赫 (THz 1012 Hz) =1 000 000 000 000 Hz  
                1拍赫 (PHz 1015 Hz) =1 000 000 000 000 000 Hz 
                1艾赫 (EHz 1018 Hz) =1 000 000 000 000 000 000 Hz

内核

内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分。
 
        最初一个CPU只有一个核(core)。核是处理器中实现指令读取和执行的部分。一个多核CPU是一个具有两个或者更多独立核的组件。可提高CPU的处理能力。

1.3.2 存储器

存储器是用来存储程序和各种数据信息的记忆部件。存储器可分为主存储器(简称主存或内存)和辅助存储器(简称辅存或外存)两大类。和CPU直接交换信息的是主存。

比特(bit)和字节(byte)

在讨论存储器前,先清楚数据是如何存储在计算机中的。

计算机就是一系列的电路开关。每个开关存在两种状态:关(off)和开(on)。如果电路是开的,它的值是1。如果电路是关的,它的值是0。

比特是英文 binary digit的缩写。比特是表示计算机中最小的存储单位,是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量。只有两种状态:0和1。这两个值也可以被解释为逻辑值(真/假、yes/no)、代数符号(+/-)、激活状态(on/off)或任何其他两值属性。

字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。一个字节(byte)为8个比特,一个英文字母通常占用一个字节,一个汉字通常占用两个字节。普通计算机系统能读取和定位到最小信息单位是字节(byte),也就是说实际上普通的计算机系统是无法精确读取和定位到比特(bit)级的信息。
 
        计算机的存储能力是以字节和多字节来衡量的。如下:
        1字节(Byte)=8位(bit)
        1KB( Kilobyte,千字节)=1024B
        1MB( Megabyte,兆字节)=1024KB
        1GB( Gigabyte,吉字节,千兆)=1024MB
        1TB( Trillionbyte,万亿字节,太字节)=1024GB
        1PB( Petabyte,千万亿字节,拍字节)=1024TB
        1EB( Exabyte,百亿亿字节,艾字节)=1024PB
        1ZB(Zettabyte,十万亿亿字节,泽字节)=1024EB
        1YB( Yottabyte,一亿亿亿字节,尧字节)=1024ZB 
        1BB( Brontobyte,千亿亿亿字节)=1024YB

内存

内存(Memory)是计算机的重要部件之一,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。

一个程序和它的数据在被CPU执行前必须移到计算机的内存中。

实测发现:内存存取数据的速度比硬盘的存取速度快10倍,在某些环境里,硬盘和内存之间的速度差距可能会更大。而CPU的速度比内存不知还要快多少倍。当我们把程序从硬盘放到内存以后,CPU就直接在内存运行程序,这样比CPU直接在硬盘运行程序就要快很多。

内存解决了一部分CPU运行过快,而硬盘数据存取太慢的问题。 提高了我们的电脑的运行速度。内存就如同一条“高速车道”一般,数据由传输速度较慢的硬盘通过这条高速车道传送至CPU进行处理!

内存由一个有序的字节序列组成,用于存储程序及程序需要的数据。
 
        每个字节都有一个唯一的地址。使用这个地址确定字节的位置,以便于存储和获取数据。

内存的运行也决定计算机整体运行快慢的程度。

一个计算机具有的RAM越多,它的运行速度越快,但是此规律是有限制的。

内存与CPU一样,也构建在表面嵌有数百万晶体管的硅半导体芯片上。但内存芯片更简单、更低速、更便宜。

但内存是带电存储的(一旦断电数据就会消失),而且容量有限,所以要长时间储存程序或数据就需要使用硬盘。

内存在这里起了两个作用:
        1. 保存从硬盘读取的数据,提供给CPU使用。
        2. 保存CPU的一些临时执行结果,以便CPU下次使用或保存到硬盘。

存储设备

外储存器是指除计算机内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等。

内存中的信息在断电时会丢失。那我们可以考虑将程序和数据永久的保存在存储设备上。当计算机确实需要这些数据时,再移入内存,因为从内存中读取比从存储设备读取要快得多。

存储设备主要有以下三种:
                硬盘驱动器、光盘驱动器(CD和DVD)、USB闪存驱动器。

硬盘驱动器:

硬盘驱动器(Hard-Disk Drive)简称硬盘,是一种主要的电脑存储媒介,由一个或者多个铝制或者玻璃制的碟片组成。这些碟片外覆盖有铁磁性材料。绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。现在可移动硬盘越来越普及,种类也越来越多。

每台计算机至少有一个硬盘驱动器。硬盘(hard disk)用于永久的保存数据和程序。

光盘驱动器:

光盘驱动器就是我们平常所说的光驱,是一种读取光盘信息的设备。因为光盘存储容量大,价格便宜,保存时间长,适宜保存大量的数据,如声音、图像、动画、视频信息、电影等多媒体信息,所以光驱是多媒体电脑不可缺少的硬件配置。

随着多媒体电脑的盛行,光盘(CD-ROM)的应用越来越普及,大家对多媒体光盘软件的需求也越来越大,因此,在自己的电脑上配备一台驱动器,可以说是再平常不过的事情。然而,由于其体积较大,以及闪存盘等的普及,越来越多便携式计算机不再内置光驱,以腾出空间予其它硬件。

USB闪存驱动器:

USB闪存驱动器,俗称U盘,是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,通过USB接口与电脑连接,实现即插即用。

1.3.3 输入设备

输入设备:向计算机输入数据和信息的设备。是计算机与用户或其他设备通信的桥梁。

输入设备是用户和计算机系统之间进行信息交换的主要装置之一。键盘,鼠标,摄像头,扫描仪,光笔,手写输入板,游戏杆,语音输入装置等都属于输入设备。

输入设备(InputDevice)是人或外部与计算机进行交互的一种装置,用于把原始数据和处理这些数的程序输入到计算机中。计算机能够接收各种各样的数据,既可以是数值型的数据,也可以是各种非数值型的数据,如图形、图像、声音等都可以通过不同类型的输入设备输入到计算机中,进行存储、处理和输出。

1.3.4 输出设备

输出设备(Output Device)是计算机硬件系统的终端设备,用于接收计算机数据的输出显示、打印、声音、控制外围设备操作等。也是把各种计算结果数据或信息以数字、字符、图像、声音等形式表现出来。常见的输出设备有显示器、打印机、绘图仪、影像输出系统、语音输出系统、磁记录设备等

1.3.5 通信设备

通信设备,英文简称ICD,全称Industrial Communication Device。用于工控环境的有线通讯设备和无线通讯设备。计算机可以通过通信设备进行联网。
 
        常见的设备有:
                拨号调制解调器:使用的是电话线,传输速度可达56 000bps(bps:每秒比特)
                DSL(数字用户线):使用的也是电话线,但传输速度叫上面的快20倍
                电缆调制解调器:利用有线电视电缆进行数据传输,通常速度比DSL快。
                网络接口卡(NIC):将计算机接入局域网(LAN)的设备。局域网通常用于大学、商业组织和政府组织。速度甚至可达1000Mbps。
                无线网络:在家庭、商业和学校中极其常见。计算机可通过无线适配器连接到局域网或internet上。

1.4 计算机软件

计算机软件( Software,也称软件)是指计算机系统中的程序及其文档,程序是计算任务的处理对象和处理规则的描述;文档是为了便于了解程序所需的阐明性资料。程序必须装入机器内部才能工作,文档一般是给人看的,不一定装入机器。

软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,为了使计算机系统具有较高的总体效用,在设计计算机系统时,必须通盘考虑软件与硬件的结合,以及用户的要求和软件的要求。

1.4.1 程序设计

程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。专业的程序设计人员常被称为程序员。
 
        定义:创建(或开发)软件。软件包含了指令,告诉计算机做什么。 
 
        应用场景:软件遍布我们周围。除了个人计算机,飞机、汽车、手机甚至烤面包机中,同样运行着软件。

1.4.2 程序设计语言

程序设计语言是用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。

程序设计语言有3个方面的因素,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。

软件开发人员在称为程序设计语言的强大工具的帮助下创建软件。

1.5 IT定律之计算机行业发展规律

1.5.1 摩尔定律

摩尔定律是英特尔创始人之一戈登·摩尔的经验之谈,其核心内容为:集成电路上可以容纳的晶体管数目在大约每经过18个月便会增加一倍。换言之,处理器的性能每隔两年翻一倍。
 
        摩尔定律是内行人戈登·摩尔的经验之谈,汉译名为“定律”,但并非自然科学定律,它一定程度揭示了信息技术进步的速度。

1.5.2 安迪-比尔定律

安迪-比尔定理 (Andy and Bill’s Law)是对IT产业中软件和硬件升级换代关系的一个概括。原话是 “Andy gives, Bill takes away.(安迪提供什么,比尔拿走什么。)” 安迪指英特尔前CEO安迪·格鲁夫,比尔指微软前任CEO比尔·盖茨,这句话的意思是,硬件提高的性能,很快被软件消耗掉了。

摩尔定理给所有的计算机消费者带来一个希望,如果我今天嫌计算机太贵买不起,那么我等十八个月就可以用一半的价钱来买。要真是这样简单的话,计算机的销售量就上不去了。需要买计算机的人会多等几个月,已经有计算机的人也没有动力更新计算机。其它的 IT 产品也是如此。

事实上,在过去的二十年里,世界上的个人微机销量在持续增长。2004 年,英特尔公司估计,五年内,即到 2009 年,世界上PC(包括个人机和小型服务器)的销量会增长 60%,远远高于经济的增长。那么,是什么动力促使人们不断地更新自己的硬件呢?IT 界把它总结成安迪-比尔定理,即比尔要拿走安迪所给的(What Andy gives, Bill takes away)。
 
        安迪是原英特尔公司 CEO 安迪·格鲁夫(Andy Grove),比尔就是微软的创始人比尔·盖茨。在过去的二十年里,英特尔处理器的速度每十八个月翻一番,计算机内存和硬盘的容量以更快的速度在增长。但是,微软的操作系统等应用软件越来越慢,也越做越大。所以,现在的计算机虽然比十年前快了一百倍,运行软件感觉上还是和以前差不多。而且,过去整个视窗操作系统不过十几兆大小,现在要几千兆,应用软件也是如此。虽然新的软件功能比以前的版本强了一些,但是,增加的功能绝对不是和它的大小成比例的。因此,一台十年前的计算机能装多少应用程序,现在的也不过装这么多,虽然硬盘的容量增加了一千倍。更糟糕的是,用户发现,如果不更新计算机,现在很多新的软件就用不了,连上网也是个问题。而十年前买得起的车却照样可以跑。

这种现象,乍一看来是微软在和大家作对。实际上,盖茨本人和其它厂商也不想把操作系统和应用程序搞得这么大。据了解,盖茨本人多次说,他过去搞得 BASIC 只有几十 K,你们(微软工程师们)搞一个.NET 就要几百兆,其中一定可以优化。当然,我们知道微软现在的.NET 比二十年前的 BASIC 功能要强的多,但是否强了一万倍,恐怕没有人这么认为。这说明,现在软件开发人员不再像二十年前那样精打细算了。我们知道,当年的 BASIC 解释器是用汇编语言写成的,精炼得不能再精炼了,否则在早期的 IBM-PC 上根本运行不了。但是,要求软件工程师使用汇编语言编程,工作效率是极低的,而且写出的程序可读性很差,不符合软件工程的要求。今天,由于有了足够的硬件资源,软件工程师做事情更讲究自己的工作效率,程序的规范化和可读性等等。另外,由于人工成本的提高,为了节省软件工程师写程序和调程序的时间,高级的语言越来越好用,同时效率却越来越低。比如,今天的 Java 就比 C++ 效率低得多,C++ 又比二十年前的 C 效率低。因此,即使是同样功能的软件,今天的比昨天的占用硬件资源多是一件在所难免的事。

1.5.3 反摩尔定律

反摩尔定律是Google的前CEO埃里克·施密特提出的:如果你反过来看摩尔定律,一个IT公司如果今天和18个月前卖掉同样多的、同样的产品,它的营业额就要降一半。IT界把它称为反摩尔定律。
 
        反摩尔定律对于所有的IT公司来讲,都是非常可怕的,因为一个IT公司花了同样的劳动,却只得到以前一半的收入。反摩尔定律逼着所有的硬件设备公司必须赶上摩尔定律所规定的更新速度,而所有的硬件和设备生产厂活得都是非常辛苦的。曾经引领风骚的太阳公司就是受反摩尔定律影响的著名例子,其由于无法跟上整个行业的速度,被IT生态链上游的软件公司甲骨文并购了。AMD要不是因为政府对英特尔反垄断的限制,恐怕也已经不存在了。

二、软件开发概述

2.1 软件开发

软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。
 
        软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。软件分为系统软件和应用软件,并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。

2.1.1 系统软件

系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。

一般来讲,系统软件包括操作系统和一系列基本的工具(比如编译器,数据库管理,存储器格式化,文件系统管理,用户身份验证,驱动管理,网络连接等方面的工具),是支持计算机系统正常运行并实现用户操作的那部分软件。

系统软件一般是在计算机系统购买时随机携带的,也可以根据需要另行安装。

2.1.2 应用软件

应用软件(Application)是和系统软件相对应的,是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合。

应用软件是为满足用户不同领域、不同问题的应用需求而提供的那部分软件。 它可以拓宽计算机系统的应用领域,放大硬件的功能。

2.1.3 人机交互方式

图形化界面(Graphical User Interface GUI)这种方式简单直观,使用者易于接受,容易上手操作。
 
        命令行方式(Command Line Interface CLI):需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录住一些命令。

2.2 软件结构模式

2.2.1 C/S结构

服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
 
        在C/S结构中,应用程序分为两部分:服务器部分和客户机部分。服务器部分是多个用户共享的信息与功能,执行后台服务,如控制共享数据库的操作等;客户机部分为用户所专有,负责执行前台功能,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。
 
        C/S结构在技术上已经很成熟,它的主要特点是交互性强、具有安全的存取模式、响应速度快、利于处理大量数据。但是C/S结构缺少通用性,系统维护、升级需要重新设计和开发,增加了维护和管理的难度,进一步的数据拓展困难较多,所以C/S结构只限于小型的局域网。

2.2.2 B/S结构

B/S架构即浏览器和服务器架构模式,是随着Internet技术的兴起,对C/S架构的一种变化或者改进的架构。

在这种架构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层结构。

B/S架构是WEB兴起后的一种网络架构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server同数据库进行数据交互。 这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

2.3 应用软件的发展

在操作系统还是文字界面的时代,大家用电脑的主要作用就是文字处理、计算,没什么娱乐。玩游戏都是字符形式的:你输入一个命令,然后电脑在黑白界面显示个文字或者数字,表示结果,想想就没什么乐趣。

在90年代末,国内开始使用互联网。那个时候用电话线上网,网速非常慢,大概16~256千字节(K),现在我们都是兆(M)这中间差别是1000倍。

从数字上看就知道那个时候网速有多慢了。但是那个时候大家也不觉得慢,为什么?因为那个时候大家上网只能看新闻,而且刚开始的时候所有的新闻都是文字新闻,连没有图片都没有,到后面慢慢网速快了,新闻中才有图片,不像现在,新闻中都有视频。

我记得当时的浏览器还有一项功能,就是不显示图片,只显示文字,这样可以减少流量,增加显示速度。

所以在2000年左右出现了很多网站,专门显示新闻的,例如搜狐、新浪、雅虎、网易等等。大家上网除了看新闻,没别的事情可以做。

在这个时候,游戏兴起了。但是也都是单机版游戏,不用联网。游戏的发展,也催生了一大批电脑用户,人们用电脑的用户又扩大了,也越来越有趣了。

2002年左右,是互联网的低谷,因为前几年大家的热情,各路投资、各个公司纷纷投入互联网,但是除了做新闻网站,没别的事情可以做,没有内容,没有应用,做来做去也就看看新闻,不知道在互联网上还能做什么?所以大家都认为互联网就是个泡沫,纷纷撤出。

马云最初创业的时候也是做的企业黄页,类似企业的信息查询网站,也以失败告终。

2003年的非典,可以说从另外一个方面极大的推广了互联网应用。大家都不能出门,既不用上班,也不能逛街,那干什么?只能在家玩了。这个时候淘宝出现了。大家在家也能逛街了,购物了。非典极大的推广了淘宝的使用。

刚开始淘宝还只局限在某些商品的购买,但是现在,大家看到了,几乎无所不能。

和大家讲这么多,其实是想说:这个社会是有很多行业的,而现在互联网已经融入到这个社会的各行各业,没有哪个行业不涉及互联网。

今后的企业都会是互联网企业,不利用互联网的企业必然会被淘汰。为什么?互联网其实就是个工具,就是个平台,它能极大的减少人和人之间的距离,减少沟通成本,提高沟通效率。

我们90年代上学的时候,相互的交流都靠写信,一来一回需要几个月。你这封信写的问题,等对方回答,等收到回信之后几个月过去了,你都忘了上封信说的啥问题了。

而现在,几乎都是在进行实时沟通。所以说互联网就是一个工具,一个具备先进生产力的工具。别人都在用互联网提高生产率,你不用,那么你就会落后,就得挨打!举个例子:就好像我们去北京,人家都坐高铁,你非得坐大巴,走国道,你说你打赢别人吗?

所以,今后的企业都会是互联网企业,所有的企业都会,都必须使用互联网。互联网会涉及到我们的方方面面。

现在互联网解决了我们的购物,餐饮,今后会进一步涉及到金融、教育、医疗,下一步重点发展就是智能设备、无人驾驶汽车,等等等等。
 
        其实我们国家的互联网的发展已经超过欧美发达国家了。我们现在出门可以只带手机,连钱包都不用。这在欧美也是做不到的。

随着互联网应用的普及,会需要越来越多的软件开发人员。因为所有的功能都需要软件来完成,没有软件的硬件,是没有任何用处的。例如一台笔记本,不装软件,那基本就没什么用处。

所以软件人才的需求量会越来越大!这是科技的发展,是时代的要求,是人类社会发展的潮流,是必然趋势,而不会是昙花一现。

这也就是解释了为什么总理会提出“互联网+”,并且把互联网作为国家战略。“互联网+”简单来说就是用互联网改造所有行业,改造所有企业。

这样的话,互联网的开发人才需求会小吗?

2.4 Java应用层面

第一点:第三方交易系统。回答Java的使用在金融行业使用的是比较广泛的,很多银行,证券他们的服务软件,还有交易平台 Murex ,都是 Java 编写,并与许多的银行前台所连接,提供服务。

第二点:网站建设。Java以强大的前端能力和各种厉害的框架在网站开发领域,占据着很大的份额。并且我们可以运用许多不同的框架来创建web项目。像政府机构,医院,保险以及其他的很多的部门网站都是以Java为基础来开发。

第三点:移动互联应用。可以说Java的另一个强大的领域莫过于安卓系统和手机app了,当你打开手机,随便一个app应用就是由Java来编写的。

第四点:大数据技术。Java大数据可以说是现在比较火热的职业,而且薪资待遇都是万元起步的,但是Java大数据的要求比较高,学历也更加看重,如果这方面学的好话,找工作也是比较容易的。

第五点:嵌入式开发领域。一些产品已经把大量Java标准版库的高生产率引入到嵌入式开发领域。从Java切入嵌入式系统的领地算起的大约5~7年之后,针对硬实时和深度嵌入式系统的Java产品已经呈现一片生机盎然的景象。

三、开发岗位概述

3.1 软件工程师的工作

接下来我们说一下软件开发工程师都干什么?

笼统的来说,需要他们写代码,开发软件,实现某个功能,完成某个任务。例如定个餐,叫个车等等。你使用的软件的所有功能,都是通过软件开发工程师,一行一行的编写出来的。

总结如下:
                1、根据项目具体要求,承担开发任务,按计划完成任务目标。
                2、配合系统分析人员完成软件系统及模块的需求调研与需求分析。
                3、配合系统分析人员完成软件系统及模块的设计。
                4、独立完成软件系统及模块的编码。
                5、协助测试人员完成软件系统及模块的测试。
                6、负责编制与项目相关的技术文档。

3.2 Java软件工程师就业前景和待遇

3.2.1 编程语言排行榜

对于编程界的初学者来说,最大的困难是决定从何处入手,或者应掌握哪种语言才能在职场上平步青云。有时,专业程序员也面临学习一门新语言似乎更卓有成效的情形。

无论是什么原因,下面列出了世界上最流行的编程语言,以便了解哪些语言占主导地位。此列表基于源自TIOBE编程社区指数的数据,该指数是表明编程语言受欢迎程度的常用指标。

TIOBE通过分析谷歌、雅虎、必应、维基媒体、亚马逊、百度和YouTube的数据来排名次。全球专业开发人员数量、培训课程和第三方供应商等变化因素也考虑在此列表中。

近几年全球十大编程语言:

01、Java:无可争议的赢家
        与一年前一样,Java仍然是最流行的编程语言。据TIOBE的数据显示,几十年来,Java比其他语言更常名列榜首。许多知名公司使用Java来开发软件和应用程序,所以如果你碰巧使用Java,绝对不必为找工作而苦恼。Java受欢迎的主要原因是它拥有可移植性、可扩展性和庞大的用户社区。

02、经典的C语言
        作为最古老的编程语言之一,C依然高居榜首,这归功于其可移植性以及微软、Oracle和苹果等科技巨头采用它。它与几乎所有系统兼容,很适合操作系统和嵌入式系统。由于运行时环境相对小巧,因此C是保持这种系统精简的完美选择。强烈建议初学者学C,它实际上是编程语言的通用语言,已催生出了同样很受欢迎的衍生语言,比如C++和C#。

03、C++继续占主导地位
        这种面向对象编程语言在20世纪80年代开发而成,现在仍应用于从桌面Web应用程序到服务器基础设施的众多系统。由于灵活性、高性能以及可用于多种环境,C ++依然很吃香。以C++为业的工作通常需要开发面向性能密集型任务的桌面应用程序。掌握C++可以更深入地了解编程语言,帮助获得低级内存处理方面的技能。

04、Python:不断上升
        过去15年来,Python的受欢迎程度稳步上升。过去这几年,它一直能够跻身TIOBE指数前5名的位置。作为如今人工智能、机器学习、大数据和机器人等一些最有前途的技术背后的主要语言,Python近年来积累了庞大的粉丝群。你会惊讶地发现学习Python很容易,这就是为什么许多经验丰富的开发人员选择Python作为第二或第三语言的原因。

05、C#:游戏开发人员的宠儿
        C#是一种现代的面向对象编程语言,由微软开发,与当时商业软件开发人员广泛使用的Java相抗衡。它专为在微软平台上开发应用程序而设计,需要Windows上的.NET框架才能工作。与前一年一样,C#保持稳定的位置,名次没有重大变化。可以使用C#开发几乎所有应用程序,但它尤其擅长于Windows桌面应用程序和游戏开发。

06、Visual Basic .NET
        Visual Basic .NET与去年一样,在指数中继续保持第六位。它是微软的OOP语言之一,结合了基于.NET框架的类和运行时环境的强大功能。它自VB6衍生而来,擅长开发GUI应用程序,为程序员简化了任务,并提高生产力。对于程序员来说,除了Web服务和Web开发外,VB.NET还为针对Windows平台开发桌面应用程序提供了一种快速简单的方法。

07、用于Web开发的PHP
        据TIOBE显示,PHP在TIOBE最受欢迎的编程语言排行榜中位居第七,取代JavaScript成为更受欢迎的脚本语言。 PHP主要用在服务器端上用于Web开发,约占网站总数的80%。 Facebook最初使用的就是PHP,PHP在WordPress内容管理系统中扮演的角色让它很受欢迎。PHP提供了几个框架,比如Laravel和Drupal,帮助开发人员更快地构建应用程序,拥有更高的可扩展性和可靠性。因此,如果你在找Web开发方面的职位,PHP是不错的选择。

08、JavaScript必不可少
        今年JavaScript的使用量有所下降,名次比去年有所下滑。但是现在所有软件开发人员都以某种方式使用JavaScript。与HTML和CSS一起使用,JavaScript对于前端Web开发来说必不可少,以便创建交互式网页,并向用户动态显示内容。超过90%的网站使用这种语言,它也是初学者开始上手的最友好的编程语言之一。所以,如果你掌握JavaScript,根本不缺机会。然而,你需要学习其他支持性的语言和框架,才能成为主攻桌面和移动应用程序或游戏开发的专业的前端开发人员。

09、SQL
        SQL夺得第九名,实现了显著的增长,毕竟去年它未能跻身于TIOBE指数20大编程语言。尽管存在其他数据库技术,但用于管理数据库的这种标准查询语言在过去四十年一直处于主导地位。原因在于它具有简单性、可靠性、无处不在,以及对保持这种开源语言活力大有帮助的活跃社区。与其他语言相比,初学者通常更容易学习SQL;就职业发展而言,像数据分析员这类高薪职位要求SQL非懂不可。

10、程序员喜欢R
        近些年来,R编程语言的需求和使用它的人数在迅速增加。从TIOBE排名可以明显看出,R的名次上升了四位:从第14上升到了第10。对于数据科学家来说,R是统计、图形表示和数据可视化分析的首选。它已变成了一种大数据工具,应用于机器学习以及科学计算的一些领域。R编程语言的范围和前景大有希望,对于有志于数据科学的人来说,它绝对是一种稳定、有钱景的职业选择。

国内开发语言占比:

3.2.2 就业前景和待遇

开发岗位需求占比:

一线城市薪资待遇:

3.3 职业发展路线

E-雇员
        工薪阶族,用劳动换取收入,很少会有多余的钱和多余的时间。

S-自由职业者
        小企业主,为自己工作,自己承担经营风险,有点闲钱。

B-企业所有人
        此区域内聚集着事业的创造者,有自己的企业,可以用企业赚钱。

I-投资者
        理性投资者清楚财富积累的前路,学会让钱为自己工作,发挥钱的最大作用。

3.4 互联网公司职级及薪资范围

3.4.1 亚信级别认定

专业职级:

管理职级:

3.4.2 阿里级别认定

一套体系是专家路线 【P序列=技术岗】,程序员、工程师,某一个专业领域的人才,一共分为 14 级,从 P1 到 P14。
 
        一套体系是M路线,即管理者路线 【M序列=管理岗】,从M1到M10。
 
        阿里的非管理岗职级分为10级,需求量最大的职级范围分布在 P6-P8,这也是阿里集团占比最大的级别。

目前阿里巴巴集团大部分的校招最低级别也是 P5、P6。一般来说,应届毕业生刚入职到阿里为P5,工作1-3年之后升职到 P6,阿里一般到 P7 才给配股票。

阿里P7是级别的分水岭,P6晋升到P7是一个坎,越往上晋升会越难。

P6阿里年薪 = 月薪×16(12+1+3)

年底的奖金为0-6个月薪资,90%人可拿到3个。

阿里股票:股票是工作满2年才能开始拿,满两年可以拿50%,第3年25%,第4年25%,4年拿完。一般P7以上都有股票。

3.4.3 腾讯级别认定

在腾讯,技术线在此之前属于 T 序列,腾讯大部分员工集中在T2.3 和 T3.1在腾讯的职级体系里,T3 级别已经是很多人的上限,从2.3升3.1是非常困难的。

腾讯薪资架构: 12 + 1 + 1 = 14薪,腾讯标准薪资是14薪,但是通常能拿到 16-20薪。腾讯年终奖非常吸引人。

腾讯目前用的是4-17的新级别,实习生和应届毕业生基本是4级,最高级,原来的T6.1-6.3,统称为16级。对于校招入职的新人来说,加入“鹅厂”拿到的年薪在20万-40万之间。

更多:https://www.sohu.com/a/391624466_463974

3.5 职业提升

四、学习经验探讨

4.1 学习方式

锻炼“双核”处理,边听讲思考,边做“笔记”。

纸上得来终觉浅,绝知此事要躬行!
                第一层次:看得懂(依赖于视频、书、贴子)。
                第二层次:练的熟(每天代码必须实现2-3遍)。
                总结:三分看,七分练

建立行之有效的学习方法:
                学习编程的捷径:敲,狂敲。
                “模仿”好的编码习惯。
                整理、回顾:每天花30min整理。

4.2 四种心态

不是“没听懂”,而是“记不住”;

要为成功找理由,不为失败找借口;

战略上藐视”对手”,战术上重视”对手”;

“代码虐我千百遍,我视代码如初恋”。

4.3 温故知新

遗忘曲线由德国心理学家艾宾浩斯(H.Ebbinghaus)研究发现,描述了人类大脑对新事物遗忘的规律。人体大脑对新事物遗忘的循序渐进的直观描述,人们可以从遗忘曲线中掌握遗忘规律并加以利用,从而提升自我记忆能力。该曲线对人类记忆认知研究产生了重大影响。

【Java基础系列教程】第一章 编程入门相关推荐

  1. Electron系列教程——第一篇:入门

    Electron系列教程--第一篇:入门 一.楔子 想要学习Electron,跟着官网或者中文网,仔细阅读,并实践,其实是够了,不必要重复.那为什么还要写这个系列呢?大概有两方面原因,其一:我使用el ...

  2. 【Java基础系列教程】第二章 Java语言概述、配置环境变量

    一.计算机编程语言概述 1.1 语言 语言(英文:Language)是人类进行沟通交流的表达方式.例如:中国人与中国人用普通话沟通.而中国人要和英国人交流,就要学习英语.              语 ...

  3. 【Java基础系列教程】第三章 Java变量与运算符

    一.Java程序基本结构 1.1 基本结构 Java程序基本结构示例代码: /** * 这里是文档注释 * 这是一个HelloWorld程序 */ public class HelloWorld {p ...

  4. java基础案例教程第二章_第2章Java编程基础_补充案例教程.doc

    第2章Java编程基础_补充案例教程 博学谷--让IT教学更简单,让IT学习更有效博学谷--让IT教学更简单,让IT学习更有效 PAGE \* MERGEFORMAT34PAGE \* MERGEFO ...

  5. 【Java基础系列教程】第十五章 Java 正则表达式详解

    一.正则表达式概述 什么是正则表达式 正则表达式:用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在在编程语言中有广泛的应用.正则表达式通常被用来检索.替换那些符 ...

  6. 【Java基础系列教程】第十四章 Java 包装类、日期与日期格式化类、数值格式化等常用类详解

    一.包装类 1.1 什么是包装类 Java中的数据类型分为基本数据类型和引用数据类型,其中基本数据类型是不具有对象特征的,也就是说它们不能像对象一样拥有属性和方法,以及对象化交互.           ...

  7. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.1 为什么要学习Qt

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1334y1776z Qt 是一个跨平台的 C++ 图形用户界面应用程序框架 Qt 为应用程序开发 ...

  8. 【Java基础系列教程】第八章 Java面向对象详解(三)_抽象类、接口、内部类、深拷贝与浅拷贝

    一.JavaBean规范 1.1 什么是JavaBean JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中.特点是可序列化,提供无参构造器,提供getter方法和 ...

  9. python基础系列教程——python面向对象编程全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python面向对象编程全解. 面向对象技术简介 一个类占有一个独立的空间,类中的属性叫做类变量,类中的函数,叫做类的方法. 类(Class) ...

最新文章

  1. 如何选专业选课题?姚期智院士:首先成为一名科学家
  2. 微信小程序_组件学习_001
  3. 《JS设计模式笔记》 5,适配器模式
  4. 图解匈牙利算法(含python代码)
  5. 下载丨8月数据库技术通讯:不合理业务设计导致CPU飙升
  6. Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
  7. 海康相机回调方式理一下
  8. MySQL 5.7安装(多实例)最佳实践
  9. 文件服务器 共享 端口,共享文件服务端口设置
  10. DO447诠释红帽Ansible Tower架构
  11. 我的android手机在哪里打开,USB调试在哪里打开 手机USB调试模式设置大全
  12. 使用PS软件修改图片的尺寸
  13. Mysql—— order 和 limit 的用法
  14. 2020牛客国庆集训派对day1 ------ ABB(马拉车裸题 + 条件判断)
  15. C.Lorenzo Von Matterhorn(思维+朴素lca思想)
  16. 三阶齐次线性方程求通解_三阶常系数齐次线性差分方程解的分类
  17. 【图深度学习】简单图的定义以及各类衍生图
  18. 双拼域名价格高吗?关于双拼域名的几种解读
  19. 04. Redis 环境搭建-单实例
  20. Node的数据库编程

热门文章

  1. Flash游戏的衰败原因
  2. Java Base64加密解密编码解码
  3. Linux命令对应英文全称
  4. MathJax基础教程和快速参考
  5. 炸翻AI和生化环材圈!GPT-4学会自己搞科研,手把手教人类做实验
  6. 贝壳上市背后的秘密武器-ACN
  7. 2016年度最受欢迎中国开源软件评选 - 开源中国社区
  8. OANDA被评为全球最佳散户外汇平台
  9. 常用数据清洗方法大盘点
  10. vue3 状态管理工具 pinia 使用