奎克的藏经阁 · 原书印刷页

If...Then Algorithmic Power and Politics · 第 21 页

PDF 物理页索引 31 · IF...THEN

书名
If...Then Algorithmic Power and Politics
作者
未记录
印刷页
21
PDF 物理页
31(从 0 开始)
章节
IF...THEN
UUID
1d3bd28e-c1ba-4af2-8580-60b32ef26053
来源类型
original_book
页面 SHA-256
478b271d3111a92c9a4c8095def5203382b5eeddf03e4ca062f5aaeff35f2225

(2015: 31). During the 17th century, the German philosopher Gotfried Wilhelm Leibniz (1646–1716) added a new dimension to symbolic computation by developing “the vision of calculating truths (true statements)” (Miyazaki, 2012).2 As far as a the prehistory of algorithms goes, Leibniz provided the groundwork for what later became known as Boolean algebra by “arithmetizing logic” and using if/then conditionals for calculating truth (Thomas, 2015). In Thomas’ account, the origin can be traced to Boole (1847) and his theory of Boolean algebra and continues with Frege’s 1879 introduction of a formal language in which mathematical statements could be expressed (see Thomas, 2015). For many historians, however, the history of algorithms proper starts with David Hilbert and what is called the Entscheidungsproblem, the challenge of whether an algorithm exists for deciding the universal validity or satisfiability of a given logical formula (Sommaruga & Strahm, 2015: xi). In 1936, Alan Turing famously solved this problem in the negative by reducing the problem to a notion of symbolic computation, which later became known as the Turing machine. Although Turing himself scarcely made direct reference to the term “algorithm,” contemporary mathematicians such as Alonzo Church (1903–1995) or Stephen C. Kleene (1909–1994) did (Miyazaki,  2012). In tracing the historical origins of the term “algorithm” and its role in the history of computing, Shintaro Miyazaki (2012) suggests that “algorithm” first entered common usage in the 1960s with the rise of scientific computation and higher-level programming languages such as Algol 58 and its derivatives. By the mid 20th century, then, “an algorithm was understood to be a set of defined steps that if followed in the correct order will computationally process input (instructions and/or data) to produce a desired outcome” (Kitchin, 2017: 16).

Perhaps the most common way to define an algorithm is to describe it as a recipe, understood as a step-by-step guide that prescribes how to obtain a certain goal, given specific parameters. Understood as a procedure or method for processing data, the algorithm as recipe would be analogous to the operational logic for making a cake out of flour, water, sugar, and eggs. Without the specific instructions for how to mix the eggs and flour or when to add the sugar or water, for instance, these ingredients would remain just that. For someone who has never baked a cake, step-bystep instructions would be critical if they wanted to bake one. For any computational process to be operational, the algorithm must be rigorously defined, that is, specified in such a way that it applies in all possible circumstances. A program will execute a certain section of code only if certain conditions are met. Otherwise, it takes an alternative route, which implies that particular future circumstances are already anticipated by the conditional construct of the “if. . . then statement” upon which most algorithms depend. The “if. . . then statement” is the most basic of all control flow statements, tasked with telling a program to execute a particular section of code only if the condition is deemed “true.” However, in order to be able to test and compute a “false” condition, the “if. . . then” statements needs to include an “else” statement, which essentially provides a secondary path of executing. In other words, while the “if. . . then” statement can only compute “true” statements, the “if. . . then . . . else” construct will be able to execute an alternate pathway as well.3 An algorithm essentially indicates what should happen when, a principle that programmers call “flow of control,” which is implemented in source code or pseudocode. Programmers usually control the flow by specifying certain procedures and parameters through a programming language. In principle, the algorithm is “independent of programming languages and independent of the machines that execute the programs” (Gofey, 2008: 15). The same type of instructions can be writen in the languages C, C#, or Python and still be the same algorithm. This makes the concept of the “algorithm” particularly powerful, given that what an algorithm signifies is an inherent assumption in all software design about order, sequence, and sorting. The actual steps are what is important, not the wording per se.

Th e M u l tip l icity of A lgo rith ms

21