1.4k likes | 1.58k Views
CT3620 VETENSKAPSMETODIK FÖR TEKNIKOMRÅDET HISTORY OF IDEAS IN COMPUTING Gordana Dodig-Crnkovic Department of Computer Science and Engineering Mälardalen University 2004. Pieter BRUEGEL, the Elder The Tower of Babel, 1563. COMPUTING CURRICULA.
E N D
CT3620 VETENSKAPSMETODIK FÖR TEKNIKOMRÅDET HISTORY OF IDEAS IN COMPUTING Gordana Dodig-Crnkovic Department of Computer Science and Engineering Mälardalen University 2004
Pieter BRUEGEL, the Elder The Tower of Babel, 1563
Technological Advancement within Computing over the Past Decade • The World Wide Web and its applications • Networking technologies, particularly those based on TCP/IP • Graphics and multimedia • Embedded systems • Relational databases • Interoperability • Object-oriented programming • The use of sophisticated application programmer interfaces (APIs) • Human-computer interaction • Software safety • Security and cryptography • …
Hackers & Painters "Everything around us is turning into computers. Your typewriter is gone, replaced by a computer. Your phone has turned into one. So has your camera. Soon your TV will. Your car has more processing power in it than a room-sized mainframe had in 1970. Letters, encyclopedias, newspapers, and even your local store are being replaced by the Internet. So if you want to understand where we are, and where we're going, it will help if you understand what's going on inside the heads of hackers.“ Paul Graham "Hackers & Painters"
Hackers & Painters Hacking and painting have a lot in common. In fact, of all the different types of people I’ve known, hackers and painters are among the most alike. Paul Graham "Hackers & Painters"
Yet there is a whole universe of people contributing to the development of the field of computing rather different from hackers and painters...
Computer Science In practice, computer science includes a variety of topics relating to computers, which range from the abstract analysis of algorithms, formal grammars, etc. to more concrete subjects like programming languages, software, and computer hardware. As a scientific discipline, it differs significantly from and is often confused with mathematics, programming, software engineering, and computer engineering, although there is some degree of overlap with these and other fields. http://en.wikipedia.org/wiki/Computer_science
Church-Turing Thesis The Church-Turing thesis states that all known kinds of reasonable paradigms of computation are essentially equivalent in what they can do, although they vary in time and space efficiency. The thesis is not a mathematical theorem that can be proven, but an empirical observation that all known computational schemes have the same computational power. Now the problem is what is the ”reasonable paradigm of computation” – we will have reason to come back to this point later on in this lecture.
Computer Most research in computer science has been related to von Neumann computers or Turing machines (computers that do one small, deterministic task at a time). These models resemble most real computers in use today. Computer scientists also study other kinds of machines, some practical (like parallel machines) and some theoretical (like probabilistic, oracle, and quantum machines).
Computer Science Computer scientists study what programs can and cannot do (computability), how programs should efficiently perform specific tasks (algorithms), how programs should store and retrieve specific kinds of information (data structures and data bases), how programs might behave intelligently (artificial intelligence), and how programs and people should communicate with each other (human-computer interaction and user interfaces).
CS Body of Knowledge • Discrete Structures • Programming Fundamentals • Algorithms and Complexity • Programming Languages • Architecture and Organization • Operating Systems • Net-Centric Computing • Human-Computer Interaction • Graphics and Visual Computing • Intelligent Systems • Information Management • Software Engineering • Social and Professional Issues • Computational Science and Numerical Methods • ...
Related Fields Computer science is closely related to a number of fields. These fields overlap considerably, though important differences exist • Information science is the study of data and information, including how to interpret, analyze, store, and retrieve it. Information science started as the foundation of scientific analysis of communication and databases. • Computer programming or software development is the act of writing program code.
Related Fields • Software engineering emphasizes analysis, design, construction, and testing of useful software. Software engineering includes development methodologies (such as the waterfall model and extreme programming) and project management. • Information systems (IS) is the application of computing to support the operations of an organization: operating, installing, and maintaining the computers, software, and data. • Computer engineering is the analysis, design, and construction of computer hardware
Related Fields • Mathematics shares many techniques and topics with computer science, but is more general. In some sense, CS is the mathematics of computing. • Logic is a formal system of reasoning, and studies principles that lay at the very basis of computing/reasoning machines, whether it be the hardware (digital logic) or software (verification, AI etc.) levels. The subfield of logic called computability logic provides a systematic answer to the fundamental questions about what can be computed and how. .
Related Fields • Lexicography and specialized lexicography focus on the study of lexicographic reference works and include the study of electronic and Internet-based dictionaries. • Linguistics is the study of languages, converging with computer science in such areas as programming language design and natural language processing.
Debate over Name There is some debate over whether the name of the field should be computer science or computation science or computing. The first name is the original, traditional name; however it implies that CS studies computers. The second name is more recent, and it implies that CS studies what we dowith computers. The third is the most general term including not only what we can do with present-day computers but any computing process that any physical system can perform.
Major Fields of Importance for CS • Mathematical foundations • Theoretical Computer Science • Hardware • Software • Data and Information Systems • Computing Methodologies • Computer Systems Organization • Computer applications • Computing Milieux • ....
Mathematical Foundations • Discrete mathematics (Boolean algebra, Graph theory, Domain theory ..) • Mathematical logic • Probability and Statistics • Information theory • ...
Theoretical Computer Science • Algorithmic information theory • Computability theory • Cryptography • Formal semantics • Theory of computation (or theoretical computer science) • analysis of algorithms and problem complexity • logics and meanings of programs • Mathematical logic and Formal languages • Type theory • ...
Hardware • Control structures and Microprogramming • Arithmetic and Logic structures • Memory structures • Input/output and Data communications • Logic Design • Integrated circuits • VLSI design • Performance and reliability • ...
Software • Computer programming (Programming techniques, Program specification, Program verification) • Software engineering • Optimization • Software metrics • Software Configuration Management (SCM) • Structured programming • Object orientation • Design patterns • Documentation • Programming languages • Operating Systems • Compilers • ...
Computer Systems Organization • Computer architecture • Computer networks • Distributed computing • Performance of systems • Computer system implementation • ...
Data and Information Systems • Data structures • Data storage representations • Data encryption • Data compression • Data recovery • Coding and Information theory • Files • File formats • Information systems • Databases • Information Storage and retrieval • Information Interfaces and Presentation • Data recovery • .....
Computing Methodologies • Symbolic and Algebraic manipulation • Artificial intelligence • Computer graphics • Image processing and computer vision • Pattern recognition • Simulation and Modeling • Document and text processing • Digital signal processing • ...
Computer Applications • Administrative data processing • Mathematical software (Numerical analysis, Automated theorem proving, Computer algebra systems) • Physical sciences and Engineering (Computational chemistry, Computational physics) • Life and medical sciences (Bioinformatics, Computational Biology, Medical informatics) • Social and behavioral sciences • Arts and Humanities • Computer-aided engineering • Human-computer interaction (Speech synthesis, Usability engineering) • Robotics • ....
Computing Aspects (Milieus) • Computer industry • Computers and education • Computers and society • Legal aspects of computing • Management of computing and Information systems • Personal computing • Computer and information security
Computing • CS != Programming • CS >> Programming • Computing != CS • Computing >> CS
Big ideas in Computer Science and Engineering Prof. Gerry Sussman [MIT] said we could write down all the ideas in computer science on 4 pages! CS has added valuable knowledge to our understanding of the world. CS discipline offers some important concepts which it is useful for everyone to understand. Just as there is a utility for everyone to understand a certain amount of math and science, there is a good reason for people to understand a certain amount of computer science. http://www.cs.caltech.edu/~andre/general/computer_science.html
Big ideas in Computer Science and Engineering Hilbert’s program: Mechanical procedures exist for finding the solutions to problems. That is, for many questions/problems, we can write down a series of steps and simple predicates which define precisely how to find the correct solution. This process is completely mechanical, not requiring any "human" judgment to complete. We can build physical machines which implement these procedures and perform the calculations. There are simple, universal models of computing which capture the basic capabilities of these machines (e.g. automata, pushdown automata, Turing Machines).
Big ideas in Computer Science and Engineering The Turing Machine model is "robust" in the sense that "reasonable" additions to it, or alternative formulations of computing models have the same asymptotic power of computability (Church's thesis). “Reasonable" meaning they, for the most part, correspond to things we imagine a real machine could support. In particular, there are stronger models when the machine is allowed to do "unreasonable" things like consult an oracle. Deterministic/guaranteed procedures do not exist for all problems (Halting Problem, uncomputability). An important component of CS theory is to classify problems as computable or uncomputable.
Big ideas in Computer Science and Engineering Of the problems which are computable, tasks have different computational difficulty (complexity). An important component of CS theory allows us to analyze algorithms and assess their complexity. (complexity classes [P,NP,PSPACE, IP, ...], order analysis [O(), Omega(), Theta()]) Common idioms/solution techniques, e.g. • divide-and-conquer • linear programming • dynamic programming • graph algorithms
Big ideas in Computer Science and Engineering There are alternatives to directly solving hard problems optimally. CS theory also tells us what we can give up in the guarantee of solution quality to reduce computational complexity. • approximation algorithms • online algorithms • polynomial heuristic solutions • randomized algorithms
Big ideas in Computer Science and Engineering The desired computation can be captured precisely and unambiguously. Computer science deals with how we construct languages to describe computations, and how we make them convenient for human use. • languages • syntax (grammars) • semantics (denotational, operational)
Big ideas in Computer Science and Engineering We do not have to emulate the user's description of a computation to implement it correctly. We simply need to implement a computation which gives the same visible result (has the same meaning) as the user's computation (compilation, CAD) which means semantic transformations.
Big ideas in Computer Science and Engineering The representation used for data in a computation can have a big effect on efficiency of operation and ease of human comprehension • effects on computational and storage efficiency (e.g. arrays and fixed structures vs. tagged lists, red-black trees; sparse vs. dense representations of data) • easing human comprehension (e.g. rich data structures)
Big ideas in Computer Science and Engineering Our physical world allows us to build very large computer systems. The practical limit to the useful size of a computer system (or at least, the size of the function efficiently supported by a computer system) is almost always human comprehension, not the physical capacity required. Consequently, a major concern of computer science is techniques to manage and reduce complexity (abstractions/information hiding, modularity, problem decomposition, hierarchy, component isolation, invariants, common idioms/paradigms for organization (e.g. procedures, frames, streams, objects, APIs, servers)
Big ideas in Computer Science and Engineering • A computing machine can be implemented out of X. • X=mechanical interactions, relays, tubes, transistors, DNA, molecules... • common/useful abstractions (e.g. digital abstraction, flops, memory, communication channels) • disciplines achieving correctness in the face of noise/uncertainty (e.g. voltage levels, timing models and disciplines)
Big ideas in Computer Science and Engineering We can extend our notion of abstraction/information hiding to machine design. In particular, the machine code and operating environment for a machine represents the abstract interface it provides to the outside world. Any implementation which provides the same semantics to the machine code is viable. Consequently, we have the notion of ISAs or architecture families which all run the same machine code but which admit to a variety of implementations (e.g. IBM 360, VAX, MIPS, SPARC, x86).
Big ideas in Computer Science and Engineering Machine code is just another language specifying precisely the computation to be performed. • a computational engine need only provide the intended semantics, leaving it plenty of freedom as to how it implements the semantics. • like any other language, it can be translated from the input format to another native format (perhaps another machine's native machine format) as long as it provides the original semantics (e.g. softPC, binary translation)
Big ideas in Computer Science and Engineering The engineering side of computer science is about: How do we minimize the resources we use in order to perform a computation (set of computations). Physical machines have finite/limited real resources so time, energy, area (hardware: memory, wires)… must be minimized.
Big ideas in Computer Science and Engineering We can provide the abstraction of more physical resources by virtualizing the physical resources. That is, sharing the physical resource among multiple uses over time. To accomplish this, we store the state of a particular usage of the physical resources in cheaper storage, e.g. virtual memory, virtual channels, multitasking, time-sharing
Big ideas in Computer Science and Engineering Computations occur at different time scales (rates). To minimize work, when possible, hoist a computation out of a high rate region into a slower region. A trivial example: loop invariants/hoisting.
Big ideas in Computer Science and Engineering Feedback is the key to diagnosing discrepancies between one's model of the world and reality. This is really just the heart of the scientific method. It should be used by developers to improve programs (debug functional problems, identify and improve performance problems). Moreover, it can be embedded in programs so that they adapt to their data and environment.
Big ideas in Computer Science and Engineering A data structure or computation can either be dynamic or static. • Static structures and computations can be very efficient when the size and shape of the computation is constant or has little variance. • Dynamic structures/computations are necessary when the size or scope of the problem is unbounded. They cost more per element or item, but they only have to be as large (as complex) as a particular problem instance.
Big Ideas of Engineering There are many big ideas in engineering, e.g. • iterative design • real-world constraints • tradeoffs • feedback • complexity management techniques that are important for understanding not only classical engineered systems but also for understanding social systems and the natural world.
History of Ideas of Computer Science • LEIBNIZ: LOGICAL CALCULUS • BOOLE: LOGIC AS ALGEBRA • FREGE: MATEMATICS AS LOGIC • CANTOR: INFINITY • HILBERT: PROGRAM FOR MATHEMATICS • GÖDEL: END OF HILBERTS PROGRAM • TURING: UNIVERSAL AUTOMATON • VON NEUMAN: COMPUTER http://web.clas.ufl.edu/users/rhatch/pages/10-HisSci/links/H I S T O R Y O F S C I E N C E L I N K S
CS The whole is more than the sum of its parts. Aristotle, Metaphysica
Leibniz: Logical Calculus Gottfried Wilhelm von Leibniz Born: 1 July 1646 in Leipzig, Saxony (now Germany)Died: 14 Nov 1716 in Hannover, Hanover (now Germany)
Leibniz´s Calculating Machine “For it is unworthy of excellent men to lose hours like slaves in the labor of calculation which could safely be relegated to anyone else if the machine were used.”