6.001 Structure and Interpretation of Computer Programs. Copyright o 2004 by Massachusetts Institute of Technology Slide ll18 bing How to” knowledge One of the things we will see is that it does not take long to describe the rules for connecting elements together, nor to Need a language for describing processes describe the rules for determining meanings associated with Vocabulary expressions in our language of procedures Rules for writing compound expressions-syntax Our real goal is to use this language of procedures and g meaning to constructs- semantics processes to help us control complexity in large systems-that Rules for capturing process of evaluation-procedures is, to use the language and its elements to design particular procedures aimed at solving a specific problem. We will spend much of the term doing this, both from scratch, and by looking 903 6 001 SICP at examples from existing procedures Slide 1.1.19 In order to capture imperative knowledge, we are going to Using procedures to control reate languages that describe such processes. This means we complexity will need to specify a set of primitive elements --simple data and simple procedures, out of which we will capture complex Create a set of primitive clements in language-simple data and simple procedures procedures. We will also need a set of rules for combining Create a set of rules for combining elements of langunge primitive things into more complex structures. And once we have those complex structures, we will want to be able to abstract them --give them name so that we can treat them as primitives 6001 SIC? Slide 1.1.20 Using procedures to control We will see, as we go through the term, that this cycle of complexity creating complex processes, then suppressing the details by Goals abstracting them into black box units, is a powerful tool for reate a set of primitive elements in Language -simple dat and simple procedures designing, maintaining and extending computational systems Create a set of rules for combining elements of langunge Create a set of rules for abstracting clements-treat complex things as primitives Allows us to eate complex procedures while 1001 SICP
6.001 Structure and Interpretation of Computer Programs. Copyright © 2004 by Massachusetts Institute of Technology. Slide 1.1.18 One of the things we will see is that it does not take long to describe the rules for connecting elements together, nor to describe the rules for determining meanings associated with expressions in our language of procedures. Our real goal is to use this language of procedures and processes to help us control complexity in large systems -- that is, to use the language and its elements to design particular procedures aimed at solving a specific problem. We will spend much of the term doing this, both from scratch, and by looking at examples from existing procedures. Slide 1.1.19 In order to capture imperative knowledge, we are going to create languages that describe such processes. This means we will need to specify a set of primitive elements -- simple data and simple procedures, out of which we will capture complex procedures. We will also need a set of rules for combining primitive things into more complex structures. And once we have those complex structures, we will want to be able to abstract them -- give them name so that we can treat them as primitives. Slide 1.1.20 We will see, as we go through the term, that this cycle of creating complex processes, then suppressing the details by abstracting them into black box units, is a powerful tool for designing, maintaining and extending computational systems
6.001 Structure and Interpretation of Computer Programs. Copyright o 2004 by Massachusetts Institute of Technology Slide 1.1.2 Indeed, that is precisely the goal of understanding computation How can we create methodologies that make it easy to describe USing procedures to control complex processes without getting lost in the details? Clearly a complexity well-designed methodology for thinking about computation Create a set of primitive elements in language-sumple data and simple procedures should enable us to build systems that robustly and efficiently Create a set of rules for combining elements of language compute results without error, but also should enable us to Create a set of rules for abstracting elements- treat complex things as primitives easily add new capabilities to the system. Thus, our goal is to gain experience in thinking about computation, independent of Allows us to rente complex procedures while suppressing details language details and specifics, in order to control complexity in Target arge, intricate systems Create complex systems while maintaining: robustness, efficiency, extensibility and flexibility 6001 sICP Key Ideas in 6.001 hus our goal in 6.001 is to use the ideas of how to' knowledge, the ideas of describing processes throug Management of complexity procedures, to control complexity of large systems. We don't just want to write small programs, we want to understand how the ideas of procedures and their pieces can be used to construct large systems in well-engineered ways his means we need tools for handling complex systems, and we are going to see a range of such tools, built on the language of procedures 601 SICP Slide 1.1.23 The first tool we will use for controlling complexity is the idea Key Ideas in 6.001 of an abstraction, a black box, if you like. Take the method we just described for computing square roots. While it is useful to know how to do this, one can easily imaging problems in which Procedure and data abstraction one simply wants the square root, and one doesn't care how it is derived. Imagine creating a black box that captures the idea of square root--one simply puts values in the correct slot, and out come appropriate square roots. This idea of isolating the use of a procedure from its actual implementation or mechanism is a central idea that we will use frequently in controlling 6m: SICP complexity of large systems
6.001 Structure and Interpretation of Computer Programs. Copyright © 2004 by Massachusetts Institute of Technology. Slide 1.1.21 Indeed, that is precisely the goal of understanding computation. How can we create methodologies that make it easy to describe complex processes without getting lost in the details? Clearly a well-designed methodology for thinking about computation should enable us to build systems that robustly and efficiently compute results without error, but also should enable us to easily add new capabilities to the system. Thus, our goal is to gain experience in thinking about computation, independent of language details and specifics, in order to control complexity in large, intricate systems. Slide 1.1.22 Thus our goal in 6.001 is to use the ideas of "how to" knowledge, the ideas of describing processes through procedures, to control complexity of large systems. We don't just want to write small programs, we want to understand how the ideas of procedures and their pieces can be used to construct large systems in well-engineered ways. This means we need tools for handling complex systems, and we are going to see a range of such tools, built on the language of procedures. Slide 1.1.23 The first tool we will use for controlling complexity is the idea of an abstraction, a black box, if you like. Take the method we just described for computing square roots. While it is useful to know how to do this, one can easily imaging problems in which one simply wants the square root, and one doesn't care how it is derived. Imagine creating a black box that captures the idea of square root -- one simply puts values in the correct slot, and out come appropriate square roots. This idea of isolating the use of a procedure from its actual implementation or mechanism is a central idea that we will use frequently in controlling complexity of large systems
6.001 Structure and Interpretation of Computer Programs. Copyright o 2004 by Massachusetts Institute of Technology Slide 1.1.24 Key Ideas in 6.001 Not only are black boxes a useful tool for isolating components of a system, they also provide the basis for connecting things together. a key issue is providing methods for connecting together basic units into components that themselves can be Conventional interfaces programming paradigms treated as basic units. Thus, we will spend a lot of time talking about conventional interfaces -- standard ways of Interconnecting simpler pieces This is much like hooking up parts of a stereo system. One has standard interfaces by which components can be intertwined and this can be done without worrying about the internal 6 001 SICP ae?aspects of the components. Similarly in programming, we will describe conventions for interfacing simpler components to create new elements that can further be connected together Slide l1.25 n fact, here are three particular kinds of conventional interfaces Key Ideas in 6.001 that we will explore in some detail during the term Management of complexity Procedure and data abstract Conventional interfaces prograrmming paradigm Slide 1.1.26 Key Ideas in 6.001 We will see as we go through the term that ideas of capturing procedures in black box abstractions, then gluing them together through conventional interfaces will give us considerable power Procedure and data abstraction in creating computational machinery. At some point, however, Conventional interfaces programming paradigms even these tools will not be sufficient for some problems. At manifest typing will generalize these ideas to languages specifically oriented at some problem domain. This Metalinguistic abstraction idea of meta-linguistic abstraction will provide us with a powerful tool for designing procedures to capture processes especially as we focus on the idea of what it means to evaluate
6.001 Structure and Interpretation of Computer Programs. Copyright © 2004 by Massachusetts Institute of Technology. Slide 1.1.24 Not only are black boxes a useful tool for isolating components of a system, they also provide the basis for connecting things together. A key issue is providing methods for connecting together basic units into components that themselves can be treated as basic units. Thus, we will spend a lot of time talking about conventional interfaces -- standard ways of interconnecting simpler pieces. This is much like hooking up parts of a stereo system. One has standard interfaces by which components can be intertwined, and this can be done without worrying about the internal aspects of the components. Similarly in programming, we will describe conventions for interfacing simpler components to create new elements that can further be connected together. Slide 1.1.25 In fact, here are three particular kinds of conventional interfaces that we will explore in some detail during the term. Slide 1.1.26 We will see as we go through the term that ideas of capturing procedures in black box abstractions, then gluing them together through conventional interfaces will give us considerable power in creating computational machinery. At some point, however, even these tools will not be sufficient for some problems. At this stage, we will generalize these ideas, to create our own languages specifically oriented at some problem domain. This idea of meta-linguistic abstraction will provide us with a powerful tool for designing procedures to capture processes, especially as we focus on the idea of what it means to evaluate an expression in a specifically designed language