“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