Classes of Parallel Hardware 144
Summary 145
Ethical Issues: Is Privacy a Thing of the Past 146
Key Terms 146 Exercises 147
Thought Questions 149
4 The Programming Layer . . . . . . . . . . .150
Chapter 6 Low-Level Programming Languages and Pseudocode 151
6.1 Computer Operations 152
6.2 Machine Language 152
Pep/9: A Virtual Computer 153
Input and Output in Pep/9 159
6.3 A Program Example 159
Pep/9 Simulator 160
Another Machine-Language Example 162
6.4 Assembly Language 163
Pep/9 Assembly Language 164
Numeric Data, Branches, and Labels 166
Loops in Assembly Language 170
6.5 Expressing Algorithms 171
Pseudocode Functionality 171
Following a Pseudocode Algorithm 175
Writing a Pseudocode Algorithm 177
Translating a Pseudocode Algorithm 180
6.6 Testing 182
Summary 183
Ethical Issues: Software Piracy 185
Key Terms 186
Exercises 186
Thought Questions 189
Chapter 7 Problem Solving and Algorithms 191
7.1 How to Solve Problems 192
Ask Questions 193
Look for Familiar Things 193
Divide and Conquer 194
Algorithms 194
Computer Problem-Solving Process 196
Summary of Methodology 197
Testing the Algorithm 198
7.2 Algorithms with Simple Variables 199
An Algorithm with Selection 199
Algorithms with Repetition 200
7.3 Composite Variables 206
Arrays 206
Records 207
7.4 Searching Algorithms 208
Sequential Search 208
Sequential Search in a Sorted Array 209
Binary Search 212
7.5 Sorting 214
Selection Sort 215
Bubble Sort 218
Insertion Sort 220
7.6 Recursive Algorithms 221
Subprogram Statements 221
Recursive Factorial 223
Recursive Binary Search 224
Quicksort 224
7.7 Important Threads 228
Information Hiding 228
Abstraction 229
Naming Things 230
Testing 231
Summary 231
Ethical Issues: Open-Source Software 232
Key Terms 234
Exercises 234
Thought Questions 239
Chapter 8 Abstract Data Types and Subprograms 241
8.1 What Is an Abstract Data Type 242
8.2 Stacks 242
8.3 Queues 243
8.4 Lists 244
8.5 Trees 247
Binary Trees 247
Binary Search Trees 249
Other Operations 255
8.6 Graphs 256
Creating a Graph 258
Graph Algorithms 259
8.7 Subprograms 265
Parameter Passing 266
Value and Reference Parameters 268
Summary 271
Ethical Issues: Workplace Monitoring 273
Key Terms 274
Exercises 274
Thought Questions 279
Chapter 9 Object-Oriented Design and High-Level Programming Languages 281
9.1 Object-Oriented Methodology 282
Object Orientation 282
Design Methodology 283
Example 286
9.2 Translation Process 291
Compilers 292
Interpreters 292
9.3 Programming Language Paradigms 295
Imperative Paradigm 295
Declarative Paradigm 296
9.4 Functionality in High-Level Languages 298
Boolean Expressions 299
Data Typing 301
Input/Output Structures 305
Control Structures 307
9.5 Functionality of Object-Oriented Languages 313
Encapsulation 313
Classes 314
Inheritance 316
Polymorphism 317
9.6 Comparison of Procedural and Object-Oriented Designs 318
Summary 319
Ethical Issues: Hoaxes and Scams 321
Key Terms 322
Exercises 323
Thought Questions 327
The Operating Systems Layer . . . . . . .328
Chapter 10 Operating Systems 329
10.1 Roles of an Operating System 330
Memory, Process, and CPU Management 332
Batch Processing 333
Timesharing 334
Other OS Factors 335
10.2 Memory Management 336
Single Contiguous Memory Management 338
Partition Memory Management 339
Paged Memory Management 341
10.3 Process Management 344
The Process States 344
The Process Control Block 345
10.4 CPU Scheduling 346
First Come, First Served 347
Shortest Job Next 348
Round Robin 348
Summary 350
Ethical Issues: Medical Privacy: HIPAA 352
Key Terms 353
Exercises 354
Thought Questions 359
Chapter 11 File Systems and Directories 361
11.1 File Systems 362
Text and Binary Files 362
File Types 363
File Operations 365
File Access 366
File Protection 367
11.2 Directories 368
Directory Trees 369
Path Names 371
11.3 Disk Scheduling 373
First-Come, First-Served Disk Scheduling 375
Shortest-Seek-Time-First Disk Scheduling 375
SCAN Disk Scheduling 376
Summary 378
Ethical Issues: Privacy: Opt-In or Opt-Out 380
Key Terms 381
Exercises 381
Thought Questions 385
6 The Applications Layer . . . . . . . . . . . .386
Chapter 12 Information Systems 387
12.1 Managing Information 388
12.2 Spreadsheets 389
Spreadsheet Formulas 391
Circular References 396
Spreadsheet Analysis 397
12.3 Database Management Systems 399
The Relational Model 399
Relationships 403
Structured Query Language 404
Database Design 405
12.4 E-Commerce 407
12.5 Big Data 408
Summary 409
Ethical Issues: Politics and the Internet 411
Key Terms 413
Exercises 413
Thought Questions 417
13.1 Thinking Machines 420
The Turing Test 421
Aspects of AI 423
13.2 Knowledge Representation 423
Semantic Networks 425
Search Trees 427
13.3 Expert Systems 430
13.4 Neural Networks 432
Thought Questions 451
Chapter 14 Simulation, Graphics, Gaming, and Other Applications 453
14.1 What Is Simulation 454
Complex Systems 454
Models 455
Constructing Models 455
14.2 Specific Models 457
Queuing Systems 457
Meteorological Models 461
Computational Biology 466
Other Models 467
Computing Power Necessary 467
14.3 Computer Graphics 468
How Light Works 470
Object Shape Matters 472
Simulating Light 472
Modeling Complex Objects 474
Getting Things to Move 480
14.4 Gaming 482
History of Gaming 483
Creating the Virtual World 484
Game Design and Development 485
Game Programming 486
Summary 487
Ethical Issues: Gaming as an Addiction 489
Key Terms 490
Exercises 490
Thought Questions 493
The Communications Layer . . . . . . . . .494
Chapter 15 Networks 495
15.1 Networking 496
Types of Networks 497
Internet Connections 500
Packet Switching 502
15.2 Open Systems and Protocols 504
Open Systems 504
Network Protocols 505
TCP/IP 506
High-Level Protocols 507
MIME Types 508
Firewalls 509
15.3 Network Addresses 510
Domain Name System 511
Who Controls the Internet 514
15.4 Cloud Computing 515
15.5 Blockchain 516
Summary 517
Ethical Issues: The Effects of Social Networking 519
Key Terms 520
Exercises 521
Thought Questions 523
Chapter 16 The World Wide Web 525
16.1 Spinning the Web 526
Search Engines 527
Instant Messaging 528
Weblogs 529
Cookies 530
Web Analytics 530
16.2 HTML and CSS 531
Basic HTML Elements 535
Tag Attributes 536
More About CSS 537
More HTML5 Elements 540
16.3 Interactive Web Pages 541
Java Applets 541
Java Server Pages 542
16.4 XML 543
16.5 Social Network Evolution 547
Summary 548
Ethical Issues: Gambling and the Internet 551
Key Terms 552
Exercises 552
Thought Questions 555
Chapter 17 Computer Security 557
17.1 Security at All Levels 558
Information Security 558
17.2 Preventing Unauthorized Access 560
Passwords 561
CAPTCHA 563
Fingerprint Analysis 564
17.3 Malicious Code 565
Antivirus Software 566
Security Attacks 567
17.4 Cryptography 569
17.5 Protecting Your Information Online 572
Corporate Responsibility 574
Security and Portable Devices 574
WikiLeaks 575
Summary 578
Ethical Issues: Blogging and Journalism 580
Key Terms 581
Exercises 582
Thought Questions 585
In Conclusion . . . . . . . . . . . . . . . . . . .586
Chapter 18Limitations of Computing 587
18.1 Hardware 588
Limits on Arithmetic 588
Limits on Components 594
Limits on Communications 595
18.2 Software 596
Complexity of Software 596
Current Approaches to Software Quality 597
Notorious Software Errors 602
18.3 Problems 604
Comparing Algorithms 605
Turing Machines 612
Halting Problem 615
Classification of Algorithms 617
Glossary 625
Endnotes 651
Index 661
內容試閱:
论题选择
为了制定这本CS0教材的论题大纲,我们利用了许多资源,包括课程目录、教材大纲,并进行了问卷调查。设计调查问卷的目的在于了解我们的同事对这门课程内容的想法。我要求大家(包括自己)列出下列三种清单:
如果CS0这门课是学生在大学阶段学习的唯一一门计算机科学的课程,请列出四种你认为他们应该掌握的论题。
请列出四种你想要学生在进入CS1这门课之前掌握的论题。
请补充四种你想要学习CS1的学生熟悉的论题。
这些资源的交集反映出的大多数人的意见,也就构成了本书的大纲。本书作为核心的CS0教材,对计算领域进行了广泛的介绍,适合作为计算机科学原理先修课程的教材,也可以用于程序设计语言的导论书或参考书。
结构说明
本书从介绍硬件和软件的历史开始,并且用洋葱的结构来类比计算机系统的结构。处理器和它的机器语言构成了洋葱的芯,软件层和更复杂的硬件一层层地裹住了这个芯。下一层是高级语言,包括FORTRAN、Lisp、Pascal、C、C 和Java。在介绍这些语言的同时,还介绍了利用它们进行程序设计的过程,包括自顶向下的设计和面向对象的设计。我们已经深刻地理解了抽象数据类型所扮演的角色及其实现。操作系统及其资源管理技术(包括更大、更快的二级存储介质上的文件)包围着这些程序,并对它们进行管理。
接下来的一层由更复杂的通用或专用软件系统构成,它们覆盖了操作系统。这些功能强大的程序开发由计算机科学中的理论推动。最后一层由网络和网络软件构成,网络软件包括计算机之间通信必需的所有工具。Internet和万维网给这一层画上了最后一笔,而这些章节也会将关于影响我们在线交流的信息安全话题的讨论推向高潮。
当这些层随着时间的推移逐渐出现时,用户对计算机系统的硬件接触得越来越少。每个层都是它下面的计算机系统的抽象。随着每个层的发展,新层的用户和内部层的用户联合起来构成了经济领域高科技部门的生产力。本书的目的是提供各个层的概述,介绍基本的硬件和软件技术,使学生了解和欣赏计算系统的方方面面。
在介绍这种洋葱式结构时,我们有两种选择,一种是从内向外逐层介绍,另一种是从外向内进行介绍。从外向内的方法看起来非常吸引人。我们可以从最抽象的层开始介绍,一次剥掉一个层,直至具体的机器层。但是,研究表明,比起抽象的例子,学生们更容易理解具体的例子。因此,我们选择从具体的机器层开始,按照层的创建顺序进行分析,当学生完全理解了一个层之后,再转移到下一个层就比较容易了。
第7版中的变化
在计划这次改版时,我们咨询了同事以及本书之前版本的一些读者,请求他们给予一些反馈。非常感谢这些有见解的回应。
第7版对全书进行了很多修改,其中之一是我们有意识地加入对特定主题的讨论,这些特定主题会在计算机原理课程的先修课中进行介绍。本书适合和先修课教材一起使用,但是针对更新的内容提出了很多见解。除此之外,在第1章中添加了计算领域的基本思想,这些思想组成了原理课程中的高级框架。
其他的重大改变是,本版加强了对云计算的介绍,并更新了第5章关于计算机描述的案例。第12章讨论了电子表格可视化,并添加了大数据的介绍。第13章添加了对智能语音助手(例如Amazon Echo和Google Home)的讨论。第15章引入了区块链,并且在第17章更新了对信息安全的讨论。
第7版的另一个大的变化是第6章中使用的虚拟机从Pep/8升级到了Pep/9,并对基本系统进行了改进,从而在机器语言和汇编层次对程序设计进行描述。
除了新的章节,本书的特色板块也进行了全面的修订和更新。现在每章结尾部分的“道德问题”都进行了更新。新增了若干个“你知道吗”板块,并且对一些板块进行了更新。除此之外,“名人传记”部分也进行了更新。
对于每一版,我们都力求提高覆盖面,改进措辞和使用的案例,以帮助读者理清楚主题。
摘要
第1章是我们探索计算机科学的基础,描述了本书的组织结构。第2章和第3章则分析包含在物理硬件中的层。这个层称为信息层,它反映了如何在计算机上表示信息。第2章介绍二进制数制以及它与其他数制(如人们日常用的十进制系统)的关系。第3章研究如何获取多种类型(如数字、文本、图像、音频和视频)的信息以及如何用二进制格式表示它们。
第4章和第5章介绍硬件层。计算机硬件包括的设备有晶体管、门和电路,它们都按照基本原理控制电流。正是这些核心电路使专门的硬件部件(如计算机的中央处理器(CPU)和存储器)得以运转。第4章介绍门和电路。第5章介绍计算机的元件,以及在冯·诺伊曼体系结构中这些元件是如何交互的。
第6~9章介绍程序设计层。第6章使用模拟计算机Pep/9介绍机器语言和汇编语言的概念。该章引入了用伪代码编写算法的功能,介绍了循环与选择的概念,并在Pep/9中以伪代码的方式实现。
第7章分析问题求解过程,同时涉及人类和计算机的问题求解方法。引导这个论题的是George Polya的人类问题求解策略。该章介绍了自顶向下的方法来设计简单算法,并在讨论算法时选择经典的搜索和排序算法。因为算法是对数据进行操作,所以在此研究数据的结构,以便更有效地处理数据。该章也介绍了子算法(子程序)语句。
第8章介绍抽象数据类型和容器,容器是只知道其属性或行为的复合结构。该章介绍了列表、有序列表、栈、队列、二叉检索树和图,扩展讨论了子算法,包括引用参数与值参、参数传递。
第9章介绍高级程序设计语言的概念。许多杰出的高级语言包含与面向对象编程相关的功能,我们绕过它们,而是先介绍了设计过程,讨论了语言范型以及编译过程。我们用四种编程语言设计了一些小例子来说明伪代码的概念,即Python、VB.NET、Java和C 。
第10章和第11章介绍操作系统层。第10章讨论操作系统的资源管理任务,介绍一些用于实现这些任务的基本算法。第11章介绍文件系统,包括什么是文件系统,以及操作系统如何管理它们。
第12~14章介绍应用层。这一层由人们用来解决问题的通用应用程序和专用应用程序构成。我们根据这些程序,把这一层分到了计算机科学的几个子学科中。第12章分析信息系统,第13章分析人工智能,第14章分析模拟、图形学、游戏和其他应用。
第15~17章介绍通信层。第15章说明计算机之间通信的理论和应用。第16章介绍万维网和它涉及的各种技术。第17章讨论计算机安全,涵盖了当今信息时代与保护信息安全相关的各个方面。
为何不使用特定的语言
本书中并没有使用特定的程序设计语言(例如,Java、C 或其他语言),而是将选择语言的权利交给了读者。导论章节与本书的设计相一致,它们的代码可以使用Java、C 、JavaScript、Visual Basic .NET、Python、SQL、Ruby、Perl、Alice和Pascal进行编写。
如果学生对于一种编程语言的语义和基本语法有充足的知识,并且掌握了本书背景材料中的内容,那么仅需要对必要的章节进行学习即可。这些章节可以用来丰富那些具有较强知识背景的读者的学习。
特色板块
名人传记
本书具有三个特色板块,用于强调计算的历史、广度以及新技术带来的道德义务。
第一个特色板块是每章都有的简短名人传记,介绍对计算做出杰出贡献的人。这些人包括对数据层做出贡献的George Boole和Ada Lovelace,以及对通信层做出贡献的Doug Engelbart和Tim Berners-Lee。这些传记的目的是让学生了解计算界的历史以及那些对计算界做出贡献的人。
你知道吗
第二个特色板块为“你知道吗”。这部分显示在方框中,是过去、现在和未来的一些逸闻趣事,它们来自历史记录、当今的报纸和作者的见闻。这些小插曲的目的是使学生开心,鼓舞他们,激发他们的兴趣,当然也为了教育他们。
道德问题
第三个特色板块是每章中的“道德问题”小节。这些小节的目的是说明在利用计算的好处时要承担的义务。隐私权、黑客、病毒和言论自由都属于我们的论题。在每章练习的结尾处有一节叫“思考题”,涉及这些道德问题和这一章的内容。
致谢
对于这一版来说,读者是最有用的信息和建议来源。衷心感谢受调查者花时间填写了我们的网络调查问卷。还要感谢前几版的审校者,他们是:
Warren W. Sheaffer,圣保罗学院;
Tim Bower,堪萨斯州立大学;
Terri Grote,圣路易斯社区学院;
Susan Glenn,戈登州立大学;
Simon Sultana,弗雷斯诺太平洋大学;
Shruti Nagpal,伍斯特州立大学
Sandy Keeter,佛罗里达塞米诺尔州立学院
S. Monisha Pulimood,新泽西学院
Roy Thelin,岭角中学
Robert Yacobellis,芝加哥洛约拉大学
Richard Croft,东俄勒冈州立大学
Raymond J. Curts,乔治梅森大学
Mia Moore,克拉克亚特兰大大学
Melissa Stange,费尔法克斯勋爵社区学院
Matthew Hayes,路易斯安那泽维尔大学
Marie Arvi,索尔兹伯里大学
Linda Ehley,艾维诺学院
Keson Khieu,塞瑞亚学院
Keith Coates,杜瑞大学
Joon Kim,布伦特伍德学校
Joe Melanson,康宁—佩恩提德波斯特
Joan Lucas,纽约州立大学布罗克波特学院
Jeffrey L. Lehman,亨廷顿大学
Janet Helwig,加州多明尼克大学
James Thomas Davis,A.克劳福德莫斯利中学
James Hicks,洛杉矶西南学院
Jacquilin Porter,亨利福特学院和贝克学院
Homer Sharafi,北弗吉尼亚社区学院
Gil Eckert,蒙莫斯大学
Gary Monnard,圣安布鲁斯大学
David Klein,霍夫斯特拉大学
David Adams,格罗夫城市学院
Christopher League,长岛大学布鲁克林分校
Carol Sweeney,维拉学院
Brian Bradshaw,特尔学院
Bill Cole,赛瑞亚学院(洛克林)
Aparna Mahadev,伍斯特州立大学
Anna Ursyn,北卡罗来纳州
Ann Wojnar,博蒙特学校
特别感谢凯尼休斯学院的Jeffrey McConnell,他编写了第14章中的图形学部分;感谢里韦学院的Herman Tavani,他参与了修改“道德问题”的工作;感谢波士顿学院的Richard Spinello,他撰写了关于博客的道德问题一文;感谢得克萨斯大学奥斯汀分校游戏开发副主任Paul Toprac对于计算机游戏部分的贡献。
感谢审稿人与同事对第7版的内容给出了意见与建议,他们是:
Tim Bower,堪萨斯州立大学
Brian Bradshaw,特尔学院
Keith Coates,杜瑞大学
Raymond J. Curts,乔治梅森大学
James Thomas Davis,A.克劳福德莫斯利中学
Gil Eckert,蒙莫斯大学
Susan Glenn,戈登州立学院
Terri Grote,圣路易斯社区学院
Matthew Hayes,路易斯安那泽维尔大学
Sandy Keeter,佛罗里达塞米诺尔州立学院
Keson Khieu,塞瑞亚学院
Joon Kim,布伦特伍德学校
David Klein,霍夫斯特拉大学
Christopher League,长岛大学布鲁克林分校
Jeffrey L. Lehman,亨廷顿大学
Joan Lucas,纽约州立大学布罗克波特学院
Joe Melanson,康宁—佩恩提德波斯特
Gary Monnard,圣安布鲁斯大学
Shruti Nagpal,伍斯特州立大学
Jacquilin Porter,亨利福特学院和贝克学院
Homer Sharafi,北弗吉尼亚社区学院
Melissa Stange,费尔法克斯勋爵社区学院
Simon Sultana,弗雷斯诺太平洋大学
Carol Sweeney,维拉学院
Roy Thelin,岭角中学
Anna Ursyn,北卡罗来纳大学科罗拉多分校
Ann Wojnar,博蒙特学校
还要感谢Jones & Bartlett Learning的许多人,尤其是Laura Pagluica(产品管理总监)、Loren-Marie Durr(产品助理)、Alex Schab(项目专家)。
我还必须感谢我的网球朋友使我有一个健康的体魄,感谢我的桥牌朋友使我的头脑十分机敏,感谢我的家人做我的坚强后盾。
——ND
我要感谢我的家人对我的支持。
——JL