Index

“Abort, Retry, Ignore,” 106, 107, 272n13

Abstraction, 125, 126, 165

ACM, 186, 228, 240

After the Gold Rush (McConnell), 253

Agile, 194–195, 199, 200, 203, 214, 231, 242. See also Extreme Programming; Scrum; SEMAT; Test-driven development

adoption of term, 194

compared to PSP, 204, 207

estimation and scheduling, 209, 210

limitations, 215

reading code, 211

Agile manifesto. See “Manifesto for Agile Software Development”

Ahl, David, 22

Aleti, Aldeida, 159

Alexander, Christopher, 148, 149

Algol, 128, 185, 242, 255

structured programming in, 33, 36

Algorithms + Data Structures = Programs (Wirth), 120

Allchin, Jim, 168

Andersen, Kurt, 256

Annotated C++ Reference Manual, The (Stroustrup and Ellis), 183

API, 11, 51

communicating across, 54–56, 69, 106, 107

designing, 17, 71, 132, 133, 229, 251, 277n46

APL, 29–31

Apple, 6, 14, 191. See also macOS

Application programming interface. See API

Architects, 157–159

Ariane 5, 77, 118

Armstrong, Joe, 184

Aron, Joel, 224

Arrays, 77–80, 86, 120

Art of Computer Programming, The (Knuth), 29, 241

Art of Software Testing, The (Myers), 115, 116

ASCII, 80–82, 169

Assembly language, 8, 9

Association for Computing Machinery. See ACM

Atari, 6

Backus, John, 242

Bain, Scott, 40

Baird, Henry, 80, 133, 188, 246

Ball, Linden, 131

BASIC, 25, 30, 35, 128, 239. See also IBM PC BASIC; Microsoft BASIC

difference between versions, 22, 23, 191

issues with larger programs, 14–19, 261n17

sample code, 17, 23, 24, 104

strings, 15, 22, 24

Basic Computer Games (Ahl), 22, 24, 35, 120, 191

Basili, Victor, 219, 230

Bauer, Friedrich, 242

BCPL, 79

Beck, Kent, 193, 212

Extreme Programming, 200–203, 209

unit tests, 151, 152

Beedle, Mike, 203, 209, 212, 215

BEGIN (statement), 36, 37, 74, 77

Bell, Kristen, 248

Bell Labs, 73, 74, 80, 110, 113, 128, 248

Bentley, Jon, 73–75, 110, 161

Berlin, Lucy, 139

Bitness, 28, 75–77, 162, 208, 268n11, 268n13

of characters, 81, 82, 172, 173

largest/smallest numbers, 75, 267n9, 268n10

non-8-bit bytes, 267n7

Blank lines, 62, 66

Blaster worm, 168

Bloch, Joshua, 132, 185

Bohl, Marilyn, 220

Böhm-Jacopini theorem, 33–35

BREAK (statement), 34, 35

“Brogrammer,” 243

Brooks, Fred, 54, 62, 134, 219, 222, 242, 251

on creativity in programming, 54–55

on flow charts, 221

“No Silver Bullet,” 237–239

programming systems product, 71, 72, 245

on waterfall development model, 195–199

Buffer overflows, 91–93, 96, 97, 167, 279n5

Bug, The (Ullman), 117

Bugs, 49, 50

taxonomy, 100–104

Burge, Janet, 159

Buxton, John, 224

C, 39, 120, 122, 186, 217

arrays, 77–79

buffer overflows, 83, 84, 167

“desert island language,” 188

negative opinions on, 95–97

performance focus, 74–84

sample code, 89, 90, 101, 104, 105, 121, 176–178

strings, 80–85, 89–91

C++, 124–129, 137, 143, 146, 235, 256

exceptions, 182–184

need to appeal to C programmers, 183, 184

negative opinions on, 185, 187

sample code, 175

strings, 174, 175

C++ Programming Language, The (Stroustrup), 126. See also Annotated C++ Reference Manual, The (Stroustrup and Ellis); Design and Evolution of C++, The (Stroustrup)

C#, 33, 51–54, 66, 97, 122, 191

arrays, 82

exceptions, 180, 181, 184

installing Visual Studio Community, 264n1

no multiple inheritance, 147

numeric overflows, 182, 183

sample code, 33, 34, 51–54, 70, 181

strings, 97

Camel case, 63, 64

Capability Maturity Model, 193

Carnegie Mellon University, 73, 187, 204, 207, 284n38

women in computer science, 41, 243, 244

CATCH (keyword), 181, 182

Certification, 253, 254

Chandler, 213, 214

char (C type), 82, 89, 90

Checklist Manifesto, The (Gawande), 159, 237–240

Checklists, 159, 160, 251

Chemical engineering, 196

Christensen, Bo, 131

Christmas Tree virus, 94, 271n38

Civil engineering, 2, 3, 58, 71, 101, 155, 196, 197, 237

comparison to software, 3

Clean Code (Martin), 159

CloseHandle() (Windows API), 176–178

COBOL, 25, 185, 244, 257

structured programming in, 29–32, 36–38

Cockburn, Alistair, 193

Code Complete (McConnell), 3, 228, 229

Code complete (milestone), 196

Code coverage, 154, 155

Code page, 169–171

Latin US, 170

Turkish, 170, 171

Code Red worm, 167, 168

Code reviews, 59–63, 66, 145, 205, 206

Coders at Work (Seibel), 184, 185

Coding camps, 242

Command line, 139, 140, 189

Comments, 17, 20, 228, 245

Commodore International, 6

Communications of the ACM, 32, 73

Compiler, 10, 54, 66

Computer science (academic major), 27, 249, 250

Cone of Uncertainty, 207–209

CONTINUE (statement), 35

Cornell Commission, 95

Cornell University, 84, 284n38

Courant Institute for Mathematical Sciences, 218

Cox, Brad, 129, 138, 139, 141, 256

C Programming Language, The (Kernighan and Ritchie), 39, 111, 219

Crashes, 104

CreateFile() (Windows API), 175–181, 282n22

Creative Computing, 22, 24

Cunningham, Ward, 193

Cutler, Dave, 227

C with Classes, 124–127. See also C++

Dahl, Ole-Johan, 108, 122, 242

Dardick, Glenn, 19

Data General, 208

Debugging, 50–55, 103, 118, 161, 218

stress of, 50, 97, 232, 233

using printf(), 246

Debugging Techniques in Large Systems (Rustin), 218

Decline and Fall of the American Programmer (Yourdon), 257

Defects. See Bugs, taxonomy

Demeter, Law of. See Law of Demeter

Dendrite Americas, 49, 68, 69, 81, 113, 155

Design, software, 116, 121, 130–133, 136

Design and Evolution of C++, The (Stroustrup), 124

Design patterns, 148–151

Design Patterns (Gamma et al.), 148, 149

Design Patterns Explained (Shalloway and Trott), 154

Developers. See Programmers

Digital Equipment Corporation, 226

Dijkstra, Edsger, 38, 99, 100, 219, 242, 256

on BASIC and Fortran, 25, 28, 29

on GOTO, 32, 33, 111

on performance, 161

on structured programming, 108, 109

on testing, 115

Discipline for Software Engineering, A (Humphrey), 204

Donkey (IBM PC game), 19–21, 75, 221

DRAW (IBM PC BASIC API), 13, 260n13

Dreaming in Code (Rosenberg), 213

Eich, Brendan, 184

Eiffel, 129, 147

Elements of Programming Style, The (Kernighan and Plauger), 111

Elements of Style, The (Strunk and White), 111

Ellis, Margaret, 183

ELSE (statement), 37, 101, 105, 127, 145–148, 153, 155, 164, 165, 177–179

Empirical Software Engineering, 230, 251

Empirical studies of programmers, 134, 137, 213, 214, 230, 251–253

END (statement), 36, 37, 74, 77

Engineering Excellence, 160, 206, 215, 236, 253

Erickson, Vincent, 24

Error handling, 176–180

Errors. See Bugs

Errors versus exceptions, 97, 179–184

Estimation, 157, 203, 207–210, 242

EternalBlue attack, 93

Exceptions, 180–183, 249, 293n35

Exercises in Programming Style (Lopes), 188

Exercises in Style (Queneau), 188

Exploit, 93. See also Virus; Worm

Extensible Markup Language. See XML

Extreme Programming, 200, 201, 203

Fagan, Michael, 205

Failures. See Bugs, taxonomy

Fantasyland (Andersen), 256

Fast Times at Ridgemont High, 258

Faults. See Bugs, taxonomy

Feathers, Michael, 152, 156

fgets() (C API), 92, 270n32

FileStream (C# class), 181

Find the Bug (Barr), 211, 218

finger (UNIX utility), 85, 86, 90–92, 269n26, 270n33

example, 85

Fisher, Allen, 41, 42

Fisher, R. A., 160

Fisher’s fundamental theorem, 160, 161

Fitzpatrick, Brad, 184

Flappy Bird, 19

Flowcharting Techniques (Bohl), 220

Flowcharts, 220, 221

Football (BASIC game), 7

FOR (statement), 16, 17, 33, 34, 77, 104

Fortran, 25, 128, 131, 185, 186, 220, 239, 242. See also Ratfor; WATFIV

structured programming in, 29, 36, 37

Fowler, Martin, 193, 194

Franklin, Benjamin, 237

Fraser, Christopher, 248

Function, 28. See also API

Functional programming, 243

Gaming, 7

Gamma, Erich, 150, 151

Garmisch conference. See NATO conference (1968)

Gates, Bill, 19, 26, 227

Gawande, Atul, 159, 237, 238, 251

Gell-Mann Amnesia effect, 253

Georgia Institute of Technology, 284n38

gets() (C API), 90–93, 270n31

Gilb, Tom, 205

Ginsberg, Allen, 255

Glass, Robert, 239, 252

Global variables, 17, 28, 137, 138, 274n4

Gold, Eric, 136

Goldberg, Adele, 126, 128

Goodenough, John, 183, 184

GOTO (statement), 11, 16, 17, 24, 25, 32–38, 100, 111, 220, 231

“Go To Statement Considered Harmful” (Dijkstra), 32, 33

Grace Hopper Conference, 244

Grady, Robert, 134

Graham, Dorothy, 205

Green, Thomas, 220

Grier, David Alan, 45

Grogono, Peter, 29

Guest, John, 220

Halstead, Maurice, 219

Hangs, 55, 104–106

Hanrahan, Pat, 248, 249

Hanson, David, 248

Hardware companies, 222, 223, 227

Hardware store, 119, 120

Harlan D. Mills Award, 219, 230

Harper, Robert, 187, 189

Harvey Mudd College, and women in computer science, 244

Heap, 81, 87, 89, 93

Heartbleed attack, 169, 186, 234

Henry, Sallie, 137

Hewlett-Packard, 134, 139

calculators, 7–9

Hoare, C. A. R., 108, 242

Hockey (BASIC game), 23, 120

Holland, Ian, 134

Hopper, Grace, 244

Hour of Code, 243

“How Do We Tell Truths That Might Hurt?” (Dijkstra), 25, 28, 29

“Howl” (Ginsberg), 255

HP. See Hewlett-Packard

Human performance improvement, 215

Humphrey, Watts, 204, 207

Humphreys, Greg, 248

Hungarian notation, 63–66, 82, 172, 211, 228

IBM Corporation, 6, 19, 23, 218, 222

creation of Fortran and PL/I, 128

as employer, 29, 54, 108, 134, 136, 151, 204, 205, 226

IBM PC, 5, 6, 13, 73

becoming the standard, 6

IBM PC AT, 73

IBM PC BASIC, 13–22, 28, 76, 81, 137, 138, 241

functions, 261n16

games included, 18, 19, 261n18, 261n21 (see also Donkey [IBM PC game])

manual, 14

sample code, 19, 20

versions, 15

IBM PC DOS, 5, 106, 107, 114

IEEE Computer, 45

IEEE Computer Society, 186, 228

IF (statement), 21, 34, 37, 66, 89, 90, 101, 104, 127, 145–149, 153, 164, 165, 173, 177, 178, 189, 221

Indenting code, 31, 61, 179, 220

Information hiding. See Abstraction

Inspections, 205, 247

Integers, 11, 76–77

overflows (see Numeric overflows)

Interviews, 2, 28, 41, 221, 241

“Kanji backspace” question, 281n16

In the Beginning … Was the Command Line (Stephenson), 139

Introduction to Programming in SIMULA, An (Pooley), 124, 130

Ishikawa, Sara, 149

I Sing the Body Electronic (Moody), 155

James, Bill, 252

Java, 186, 191

no multiple inheritance, 147

Jordan, Michael B., 248

Kaner, Cem, 115, 116

Kaplan, Robert, 220

Karate Kid, The, 194

Kay, Alan, 127, 242

Kemeny, John, 25, 35, 128

Kernighan, Brian, 110, 111

Kidder, Tracy, 208

Kipling, Rudyard, 112

Knob-and-tube wiring, 50, 52, 59

Knuth, Donald, 38, 161, 222, 225, 241, 256

on bugs versus enhancements, 100, 196

literate programming, 247–249

on performance, 161

on structured programming, 29, 30, 108

Kufara, Dennis, 137

Kurtz, Thomas, 25, 35, 128

Languages, choosing computer, 185–190. See also individual languages

“Lather, rinse, repeat,” 55, 105

Law of Demeter, 134–136

Lego, 6, 13

Lewis, John, 137

Lewis, Michael, 255

Liar’s Poker (Lewis), 255

Licensing, 1, 253, 254

Lieberherr, Karl, 134

Lines of code, 178, 206

Line terminal. See Terminal

Linger, Richard, 108

Linux, 167, 186

Literate programming, 247–249

Local variables, 28, 87–89

Lohr, Steve, 255

Loop, infinite. See Hangs

Lopes, Cristina, 188

Lord of the Rings, The (Tolkien), 93

Love, Tom, 220

Lucas, Henry, 220

“Luser,” 94

Machine language, 8, 9, 75

sample code, 8, 9, 260n5

macOS, 167, 186

Mainframe computers, 6, 7, 16

Making Software (Oram and Wilson), 251

malloc() (C API), 89, 90, 175

“Manifesto for Agile Software Development,” 194, 195

Margolis, Jane, 41, 42

Marsalis, Wynton, 241

“Mary Had a Little Lamb,” 13

Massachusetts Institute of Technology, 84, 284n38

Mayer, Richard, 221

mbslen() (C API), 281n16

McConnell, Steve, 207, 228, 229, 249, 253, 254

McGill University, 7–12, 223

Medicine, comparison to software, 44, 250

Memory allocation, 86, 89, 90, 270n28. See also malloc() (C API)

Memory constraints, 15, 16

MessageBox (C# class), 51–57, 66–70

MessageBox() (Windows API), 177, 178

Method, 51, 52. See also API

Meyer, Bertrand, 129–131, 133, 141, 147, 256, 275n22, 283n31

Microcomputers. See Personal computers

Microsoft, 6, 45, 54, 158, 184, 191, 193, 236, 244, 253, 255

as author of BASIC, 23, 25

corporate vision, 6

development process, 113, 114, 197–202, 227, 232, 239

job titles, 27

software quality, 114–118, 167, 168

Microsoft BASIC, 23

Microsoft Office, 168, 184

Microsoft Research, 134

Microsoft Secrets (Cusumano and Selby), 114, 199, 211

Mills, Harlan, 39, 46, 108–110, 211, 219, 222, 240, 250, 257

on GOTO, 36, 37

on management, 195

on “religious” discussions, 62

on structured programming, 33

on testing, 115, 118

on training, 29, 202, 245

Minicomputers, 6, 7

MIT. See Massachusetts Institute of Technology

ML, 243

Modula-2, 97

Moody, Fred, 55

Moore, Gordon, 134

More Basic Computer Games (Ahl), 22, 24

Morris, Robert, 84, 85, 117. See also Morris worm

Morris worm, 84–86, 92–96

MS-DOS, 186. See also IBM PC DOS

Myers, G. J., 115, 116

Mythical Man-Month, The (Brooks), 196, 217

“Myth of Correctness, The” (Shore), 59

NATO conference (1968), 99, 108, 224, 231

NATO conference (1969), 99, 108, 224, 225

Needham, Roger, 224

Network protocol. See Protocol, network

NEW (keyword), 123

Nimda virus, 168

Northeastern University, 135

“No Silver Bullet” (Brooks), 238, 239

Null pointer, 89, 90, 104, 149

Numeric overflows, 76, 77, 81, 182, 183, 268n14

Nygaard, Kristen, 242

Objective-C, 129, 191

Object-oriented programming, 122–131, 133–139, 230, 231

abstract API, 146, 147

base class, 124

class, 122, 123, 144–148

constructor, 123, 124, 148, 154

derived class, 124

destructor, 180, 181

inheritance, 123, 143–147

interface, 146–150

“is-a” versus “has-a,” 144, 146, 147

member, 125

multiple inheritance, 146, 147

object, 122

private access, 125, 145, 277n1

public access, 125

subclass, 123–125

virtual API, 124

Object-Oriented Programming (Cox), 129

Object-Oriented Software Construction (Meyer), 129

“Off by one” errors, 83, 173

Office. See Microsoft Office

Onarheim, Balder, 131

OOPSLA, 128, 151

early object-oriented papers, 133–139

Scrum paper, 195, 198

Open-source software, 231

Optimization, 161, 163–165

premature, 161

Oscar awards, 248

Overflows. See Buffer overflows; Numeric overflows

Overloading, operator, 174, 175, 282n21

Packaged software, 232

Paradox of Choice, The (Schwartz), 56

Parameters, API, 11, 17, 25, 28, 52–57, 87, 127

optional, 70, 71

Parnas, David, 239, 242, 246

on abstraction, 125, 126

on API side effects, 249

on licensing, 254

Pascal, 38, 74, 97, 120, 128, 131, 137, 255

advantages over BASIC, 28

arrays, 77–79

BREAK not allowed, 35

performance not a focus, 84

sample code, 36, 77, 78

strings, 81

structured programming in, 29, 36

Pascal case, 64

original of the term, 265n11

Pattern Language, A (Alexander et al.), 148, 149, 157, 188

example of patterns, 149

Patterns. See Design patterns

Performance, 73–75, 77–79, 279n8

Perl, 189, 190

Personal computers, 6, 7

Personal Software Process. See PSP

Pharr, Matt, 248

Phoenix Technologies, 6

Physically Based Rendering (Pharr and Humphreys), 248

Pike, Rob, 188

Pipeline (UNIX technology), 139–141

sample code, 140

Plauger, P. J., 111

PLAY (IBM PC BASIC API), 13, 260n12

PL/I, 128, 183, 185, 211, 262n12

structured programming in, 31–33, 36

Pointers, 79–82, 96, 97, 123, 176

buffer overflows, 86–92

C performance benefits, 79, 80, 269n18

null (see Null pointer)

stack (see Stack pointer)

Pong, 7

Pooley, R. J., 124

Practical Foundations for Programming Languages (Harper), 187

Pragmatic Programmer, The (Thomas), 159, 193

Princeton University, 27–29, 43–45, 112, 227, 241, 248, 284n38

Bell Labs professors, 80, 110

coding contest, 84, 112, 269n22

computer science curriculum, 27–29, 38–40

women in computer science, 42, 43

Procedural language, 121

Procedure, 28. See also API

Processor, 8–10, 75, 76, 87, 93

Programmers

being self-taught, 40, 111

design tradeoffs, 57–59, 131, 132, 159

difficulties for women, 41–44, 244

job titles, 27

lack of humility, 46, 47

path to industry, 40–41

Programming in Fortran (Zwass), 29, 37

Programming in Pascal (Grogono), 29, 35

Programming Pearls (Bentley), 73, 74, 110

Protocol, network, 86, 234

PSP, 204–207

Psychology of Computer Programming, The (Weinberg), 160, 223

Punch cards, 11, 12, 223

Python, 187

QUA (keyword), 123

Quality. See Testing

Queneau, Raymond, 188

Radio Shack, 5, 6, 9. See also TRS-80

Randell, Brian, 224

Ratfor, 111

Rational Unified Process, 193

Reading code, 211, 245, 247

Record. See Struct

Refactoring, 212

“Religious” arguments, 62, 200, 220, 234

Repro steps, 49, 50, 103, 114

Retargetable C Compiler, A (Fraser and Hanson), 248

Return address, 87

Reuse, software, 130, 136–141, 198, 199

REXX, 94

Riel, Arthur, 134

Right Stuff, The (Wolfe), 237

Rise and Resurrection of the American Programmer (Yourdon), 257

Ritchie, Dennis, 79, 267n1

Ritual of the Calling of an Engineer, 112

Rome conference. See NATO conference (1969)

Rosenberg, Scott, 213, 214

Rosson, Mary Beth, 136

SABRE, 222

Sackman, Harold, 219

Sasser virus, 168

Schulman, Robert, 137

Schwaber, Ken, 195, 201, 202, 209, 212, 215

Schwartz, Barry, 56, 57

Science of Computing, The (Tedre), 99

Scripting languages, 189, 190

Scrum, 194–203, 210, 211

burndown chart, 198

product backlog, 198

sprint, 198

Seabattle (BASIC game), 24

Secure Sockets Layer (SSL), 169, 186

SEI. See Software Engineering Institute

Seibel, Peter, 184

SEMAT, 214, 253, 254

Services, software, 231–237

Shalloway, Alan, 154

Sharone, Ofer, 208

Shaw, Mary, 2, 3, 210

Ship-It Award, 236

Shneiderman, Ben, 220, 221, 225

Shore, John, 59

SIGCHI, 226

Signed numbers, 75, 76

“Signing up,” 208–210

Sigue Sigue Sputnik, 12

Silicon Valley, 265n8

Silverstein, Murray, 149

Sime, Max, 220

Simula, 122–124, 128, 130, 242, 255

sample code, 123

SIMULA Begin (Birtwistle et al.), 124, 130

Singleton pattern, 149, 150

sizeof() (C operator), 173, 174, 281n19

Slammer virus, 168

Smalltalk, 126–128, 130, 131, 152, 242, 255

sample code, 127

Smalltalk-80: The Language (Goldberg and Robson), 126, 128

Smullyan, Raymond, 38

Sniffer, packet, 235

Socrates, 203

Software architects. See Architects

Software crisis, 99

Software Designers in Action (van der Hoek and Petre), 59

Software development engineers. See Programmers

Software engineering (academic major), 27, 249, 250

Software engineering (term), 99, 224, 231

Software Engineering Body of Knowledge. See SWEBOK

Software Engineering Essentials (Thayer and Dorfman), 229

Software Engineering Institute, 204

Software Engineering Methods and Theory. See SEMAT

Software Exorcism (Blunden), 156

Software-IC, 139

Software Process Improvement (Grady), 134

Software Productivity (Mills), 211, 219

Software Psychology (Shneiderman), 220

Software Psychology Society, 225, 226

Software test engineers. See Testers

Software Tools (Kernighan and Plauger), 111, 139

Soul of a New Machine, The (Kidder), 208–210

Spaces versus tabs. See Tabs versus spaces

Spicoli, Jeff, 258

SPLASH, 3, 128, 214, 225

Spolsky, Joel, 158

Stack, 87, 89, 173, 242

diagram, 88

Stack pointer, 88, 89

Stanford University, 241, 284n38

Star Trek (BASIC game), 7, 22

Stephenson, Neal, 139

Strachey, Christopher, 225

Strategy pattern, 149–151, 153

strcat() (C API), 90

strcpy() (C API), 90

Stress tests, 233, 291n1

string (C++ class), 174, 175, 182, 183

Strings, 51–57, 66–71, 140, 141, 189

in BASIC, 15, 22, 24

BSTR, 281n20

C style, 80–85, 89–91, 172–174, 183

Hungarian prefix, 63–65

in object-oriented languages, 122, 174, 175

strlen() (C API), 90, 172

Stroustrup, Bjarne, 124–128, 133, 138, 183–185, 256

Struct, 120, 121

Structure charts, 30, 31

Structured Basic (Teglovic and Douglas), 17, 29, 30

Structured COBOL (Grauer and Crawford), 29–32, 37

Structured programming, 29–33, 96, 111

Structured Programming (Dahl, Dijkstra, and Hoare), 108, 109, 115, 161

Structured Programming (Linger, Mills, and Witt), 108–110, 115, 211

Structured Programming in APL (Geller and Friedman), 29, 31

Structured Programming Using PL/1 and SP/k (Hume and Holt), 29–32

Studying the Novice Programmer (Soloway and Spohrer), 219

Sturgeon’s law, 225

Subroutine, 16, 17, 20, 28, 35. See also API

Sun Microsystems, 191

Sustained engineering, 232

Sutherland, Jeff, 195, 201

Suzuki, Ichiro, 115

SWEBOK, 228, 229, 253

Swift, 191

Tabs versus spaces, 61

Tang, Antony, 159

TDD. See Test-driven development

Team Software Process. See TSP

Tedre, Matti, 99

Terminal, 9, 223

Test-driven development, 212, 251

Testers, 114, 117, 118, 239

Testing, 112–118. See also Unit tests

automated, 152

Testing Computer Software (Kaner), 115, 116

Texas Board of Professional Engineers, 254

Therac-25, 77, 118

Thomas, Dave, 193

Thompson, Ken, 184, 246

“Throw it over the wall” culture, 116, 156, 239

Tichy, Walter, 150

ToUpper() (C# API), 52–54, 57, 58, 66, 70–71, 122

Trott, James, 154

TRS-80, 5, 15

TRY (keyword), 180, 181

TSP, 204, 206

Turkish I bug, 66–70

Type, 126

Ullman, Ellen, 117, 118

Unicode, 171–174

different encodings, 280n13, 281n15

emojis, 172, 280n14

Unit tests, 151–157, 239

University of California at Berkeley, 284n38

University of Illinois at Urbana-Champaign, 284n38

University of Texas at Austin, 284n38

University of Washington, 284n38

UNIX, 73, 84, 85, 186, 189, 217. See also Pipeline (UNIX technology); Year 2038 problem

capitalization of name, 267n1

connection with C, 74, 93, 95

influence on programming, 110–113

UNIX philosophy, 140

Unix Programming Environment, The (Kernighan and Pike), 140

Unlocking the Clubhouse (Margolis and Fisher), 41, 42

Unsigned numbers, 75, 76

Uppercasing, 52–54, 57, 58, 66–70

van Vleit, Hans, 159

Variable names, 60–63, 120, 220, 231, 245. See also Hungarian notation

too short, 14, 15, 21, 24, 120

Vertical slices, 197, 198, 206, 211

Virginia Tech University, 137

Virus, 93–94

Visual Studio, 264n1, 282n26

Volvo, 108

von Neumann (Princeton building), 43, 44

Wang, 7, 9

WannaCry attack, 93

Waterfall development model, 195–197, 203, 204, 211

WATFIV, 10–12, 37, 81

origin of name, 260n8

sample code, 10, 11

wchar_t (C type), 173, 174, 281n17

wcslen() (C API), 172, 174

Weinberg, Gerald, 29, 112, 160, 161, 211

on effect of terminals, 223, 224, 227

on need for humility, 46

on structured programming, 30

Weissman, Larry, 220

What Is the Name of This Book? (Smullyan), 38

WHILE (statement), 37, 104–106

Wilson, Greg, 3, 4, 214, 225

Windows 95, 186, 193

Windows NT, 97, 113, 116, 210, 233, 246

delays in first version, 193, 285n3

milestone scheduling, 199, 201

tabs in source code, 61

use of Unicode, 171

variable names, 63–66

Wirth, Niklaus, 32, 120, 121, 128, 242

on academic computer science, 190, 191

on C, 95–97

Witt, Bernard, 108

Woitach, Richard, 19

Wolfe, Tom, 237

Women in computer science, 41–43, 243, 244

Working Effectively with Legacy Code (Feathers), 156

Worm, 167–169. See also Morris worm

WriteFile() (Windows API), 176, 177

Writing Efficient Programs (Bentley), 74, 161

wstring (C++ class), 175

Xerox PARC, 126, 128

XML, 235

XP. See Extreme Programming

Y2K bug, 100–102, 162, 186, 217, 257, 272n8

YAGNI, 201, 211, 212

Year 2000 bug. See Y2K bug

Year 2038 problem, 162

“You Ain’t Gonna Need It.” See YAGNI

Young, John, 134

Yourdon, Edward, 257

Zachary, G. Pascal, 65

Zawinski, Jamie, 184

Zelkowitz, Marvin, 137

Zotob virus, 168

Zune, 104–106, 110, 152–156, 232