Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Book 1: Getting Started with Programming . . . . . . . . . . . . . . . . . . 5
CHAPTER 1: Getting Started Programming a Computer . . . . . . . . . . . . . . . . . . . . . . . . . 7
CHAPTER 2: Different Methods for Writing Programs . . . . . . . . . . . . . . . . . . . . . . . . . . 29
CHAPTER 3: Types of Programming Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
CHAPTER 4: Programming Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Book 2: Programming Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
CHAPTER 1: How Programs Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
CHAPTER 2: Variables, Data Types, and Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
CHAPTER 3: Manipulating Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
CHAPTER 4: Making Decisions by Branching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
CHAPTER 5: Repeating Commands by Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
CHAPTER 6: Breaking a Large Program into Subprograms . . . . . . . . . . . . . . . . . . . . . 197
CHAPTER 7: Breaking a Large Program into Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 215
CHAPTER 8: Reading and Saving Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
CHAPTER 9: Documenting Your Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
CHAPTER 10: Principles of User Interface Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
CHAPTER 11: Debugging and Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Book 3: Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
CHAPTER 1: Structures and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
CHAPTER 2: Sets and Linked Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
CHAPTER 3: Collections and Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
CHAPTER 4: Stacks, Queues, and Deques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
CHAPTER 5: Graphs and Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Book 4: Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
CHAPTER 1: Sorting Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
CHAPTER 2: Searching Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
CHAPTER 3: String Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
CHAPTER 4: Data Compression Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
CHAPTER 5: Encryption Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
,Book 5: Web Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
CHAPTER 1: HyperText Markup Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
CHAPTER 2: CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
CHAPTER 3: JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
CHAPTER 4: PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
CHAPTER 5: Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Book 6: Programming Language Syntax . . . . . . . . . . . . . . . . . . . . . 537
CHAPTER 1: C and C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
CHAPTER 2: Java and C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
CHAPTER 3: Perl and Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
CHAPTER 4: Kotlin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
CHAPTER 5: Swift and SwiftUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
CHAPTER 6: Flutter and Dart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
Book 7: Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
CHAPTER 1: Database Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
CHAPTER 2: Bioinformatics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
CHAPTER 3: Computer Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
CHAPTER 4: Artificial Intelligence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
CHAPTER 5: Mobile and Wearable Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
CHAPTER 6: Game Engines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
CHAPTER 7: The Future of Computer Programming . . . . . . . . . . . . . . . . . . . . . . . . . . 731
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
, Table of Contents
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
About This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Foolish Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Icons Used in This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Beyond the Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Where to Go from Here . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
BOOK 1: GETTING STARTED WITH PROGRAMMING . . . . . . . . 5
CHAPTER 1: Getting Started Programming a Computer . . . . . . . . . . 7
How Computer Programming Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Identifying the problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Defining the steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The History of Computer Programming . . . . . . . . . . . . . . . . . . . . . . . . .10
Talking to a processor in machine language . . . . . . . . . . . . . . . . . . .11
Using assembly language as a shortcut to machine language . . . .12
Hiding the details of a computer with a high-level language . . . . .15
Combining the best of both worlds with the
C programming language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
Weighing the pros and cons of programming languages . . . . . . . .16
Figuring Out Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
Desire beats technical training every time . . . . . . . . . . . . . . . . . . . .19
Picking a computer and an operating system . . . . . . . . . . . . . . . . . .19
Writing programs with an editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
Converting source code with an assembler or compiler . . . . . . . . .23
Translating source code with an interpreter . . . . . . . . . . . . . . . . . . .25
Combining a compiler with an interpreter to create p-code . . . . .25
Taking the time to understand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
CHAPTER 2: Different Methods for Writing Programs . . . . . . . . . . . . 29
Spaghetti Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Structured Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
The three parts of structured programming . . . . . . . . . . . . . . . . . . .34
Top-down programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Event-Driven Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Designing a user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Writing event handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Writing your program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
Object-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
Isolating data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Simplifying modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Table of Contents v