2. The Context of Cybersecurity: Cyberspace 21 programs can be written to do everything from playing chess to solving math problems to rendering video games. 2.3.1 Algorithms “An algorithm must be seen to be believed.” - Donald Knuth, a pioneer of algorithmic analysis Computer programs are the software of a computer and are what gives computers their general-purpose behavior. Generally speaking, computer programs accept input and produce output, and are composed of algorithms. An algorithm is an abstract, step-bystep recipe for solving a well-defined problem. Abstract in this context means that it is designed to process general, not specific inputs. It is the difference between adding numbers and doing algebra (i.e., 1 + 2 vs. x + y). Algebra is abstract in the same way that algorithms are abstract. For example, an algorithm can be written to sort a list of words alphabetically, and the algorithm would work whether it is fed a few words or millions of words. The only difference would be the length of time it would take for the algorithm to run to completion. What makes algorithms abstract is their use of variables. A variable is a placeholder for data that is provided when the program is run. The limits of what kinds of problems an algorithm can solve are the limits of computing. Alan Turing, a pioneering computer scientist, famously boiled down computers to their essence in research he conducted in the 1930s, and he proved that well-defined problems exist that computers will never be able to solve. Besides these problems, called non-computable problems, there are computable problems that algorithms can solve, but for even modest size inputs, it would take a computer a prohibitively long time to solve them. These are called intractable problems. While algorithms are abstract, they are in a different way highly specific. They solve well-defined problems with well-defined solutions, not problems that require judgment, interpretation, and commonsense. 2.3.2 Computer Programming “The programmer, like the poet, works only slightly removed from pure thoughtstuff. He builds his castles in the air, from air, creating by exertion of the imagination…Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs…The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard and a display screen comes to life, showing things that never were nor could be.” - The Mythical Man-Month by Frederic Brooks, a pioneer of software engineering Algorithms are typically implemented in a high-level programming language such as C++, JavaScript, or Python. These languages allow computer programmers to compose algorithms at a much higher level of abstraction than the 1s and 0s and simple instruc-
RkJQdWJsaXNoZXIy MTM4ODY=