A long time ago, in a galaxy far, far away…. 1-1 Chapter I THE BIG PICTURE The Empire is bad, mmkay? But we’re not here to talk about that. We’re here to learn computer science! So lets get started! 1-2 Chapter Goals • Abstraction • Layers of a computer system • History • Future Trends 1-3 25 Chapter Goals • Changing role of the user • Computing as a tool • Computing as a discipline • Computational Thinking (CT) as a universal skill • Skills for Computer Professionals 1-4 25 COMPLEXITY and ABSTRACTION 1-5 Our First Question? How do we handle complexity? Answer: • We Slice it up! • This is called “ABSTRACTION” • Aka “Decomposition”, “Layering”, “Encapsulation”, “Data Hiding” 1-6 Ways to Slice Stuff 1-7 MORE Ways to Slice Stuff Raise your pencil if you like cake 1-8 Slicing the Computing Onion • Computers are so complex we need to “chop them up” to understand them • We slice them into layers • This is called “abstraction” 1-9 2 Slicing the Onion • We can (and will) slice them in many different ways • For example: One way is to slice them into – Hardware – Software 1-10 2 Example: 2 Easy Slices Hardware and Software Hardware The physical elements of a computing system (printer, circuit boards, wires, keyboard…) Software The programs that provide the instructions for a computer to execute 1-11 3 Is it That Easy? But this is college! We can be more sophisticated slicers! Hardware and Software are nice abstractions, but too simplistic We will continue this slicing process all semester, with increasing sophistication 1-12 3 Layers of a Computing System Communication Application Operating System Programming Hardware Information 1-13 4 Abstraction • This is a key concept. Abstraction will reappear throughout the text – be sure to understand it! • A mental model that hides complex details • A way to group many things into one thing 1-14 5 Abstraction • A tool to help humans handle complexity • A method to build (and understand) large systems that are built from layers • Each Onion Layer is an abstraction 1-15 5 Our Second Question? • So…. What is a GOOD abstraction?? CHARACTERISTICS OF A GOOD ABSTRACTION: • Is simple to understand from the outside • Has a simple and well defined interface • Is self-contained and independent 1-16 I n t e r f a c e Some Abstraction “Logical” Layer (user POV) “Physical” Layer (creator POV) 1-17 Can build complex systems 1-18 HISTORY 1-19 History • Another way to slice the onion: chronologically! • Many strange devices have existed over history… • Many people have contributed… What was the enigma machine? 1-20 Early History of Computing • Joseph Jacquard’s Loom – Used punchcards 1-21 Early History of Computing • Charles Babbage’s Analytical Engine • Ada Lovelace – “first programmer” • Only recently have attempts been made to actually fabricate Babbage’s design 1-22 Birth of “Modern” Computing World War Two Alan Turing WW2 cryptographer Turing machine Turing AI test Harvard Mark I, ENIAC, UNIVAC I Early computers launch new era in mathematics, physics, engineering and economics 1-23 7 IMPORTANT HARDWARE GENERATIONS 1-24 First Generation Hardware (1951-1959) Vacuum Tubes A type of “automatic” switch, either ON or OFF Large, not very reliable, generated a lot of heat 1-25 8 Second Generation Hardware (1959-1965) Transistor Replaced vacuum tube, fast, small, durable, cheap Still, basically a switch: Either ON or OFF 1-26 9 Third Generation Hardware (1965-1971) Integrated Circuits Contain MILLIONS of transistors Smaller, cheaper, faster, more reliable. Moore’s Law: Number of transistors on a chip doubles every 12 to 18 months – Basically why we are all here in this room today. 1-27 10 IMPORTANT SOFTWARE GENERATIONS 1-28 First Generation Software (1951-1959) Machine Language Computer programs were written in binary (1s and 0s) Assembly Languages Translators Programs were written in assembly language, then translated into machine language 1-29 13 Second Generation Software (1959-1965) High Level Languages Introduced Use English-like statements and make programming easier. Fortran, COBOL, ADA, Lisp are examples. High-Level Languages Assembly Language Machine Languag e 1-30 14 Third Generation Software (1965-1971) • Separation of Types of Programs Begins • Programs Written for Non-Programmers – Systems Software • utility programs • language translators • The operating system – Applications Software • Usually application-specific at that time. Written to perform a specific task. • Example: Calculate monthly interest on all customers bank accounts 1-31 15 Third Generation Software (1965-1971) Application Package Systems Software High-Level Languages Assembly Language Machine Language 1-32 16 USERS 1-33 Another Way to Slice the Onion • Computing as a Tool • What can a computer help me do? • Computing as a Discipline • What can be (efficiently) automated? 1-34 Computing as a Tool – Key Issues • What can a computer help me do? • Main Concerns 1. 2. 3. 4. What tasks can be done with a computer? What SW tools are available to do this task? Can I write a program to do this? Can I get someone else to write a program for this? 1-35 21 Computing as a DISCIPLINE • What can be (efficiently) automated? • Four Necessary Skills 1. 2. 3. 4. Algorithmic Thinking Representation Programming (Systems) Design 1-36 21 More Computing as a TOOL • Computing is UBIQUITOUS • Computing affects EVERY FIELD • Computing affects EVERY area of human endevour 1-37 MORE Computing as a TOOL • This Ubiquity requires: – EVERYONE must have some fundamental computing knowledge – Computing is the “Forth R” – This concept is sometimes called “Computational Thinking” 1-38 MORE Computing as a Discipline •Modern Computing is Only 60 years old •It is still rapidly evolving •Computing is a HUGE and DIVERSE field 1-39 22 Computing as a Discipline “The Identity Crisis” Another Question What is Computer Science? Is Computer Science a mathematical, scientific, or engineering discipline? What about Information Technology, MIS, CIS, and related computer fields??? 1-40 22 Computing Education Levels A.S. Degree and Certificate Level (typically) • • • • Networks Web Database Programming B.S. Degree and above (typically) • Computer Science • Computer Engineering • Information Technology (Emerging) 1-41 Some Sub-Areas of Computer Science • • • • • • • Algorithms and Data Structures Programming Languages Hardware Architecture Software Architecture Operating Systems Software Methodology and Engineering Human-Computer Communication 1-42 23 Application Areas of Computer Science • • • • • • • Networks and Distributed Systems Numerical and Symbolic Computation Databases and Information Retrieval Artificial Intelligence and Robotics Graphics Organizational Informatics Bioinformatics 1-43 24 ONE MORE way to look at Computing • Using Tools – Driving a car – using a computer M O R E • Maintaining Tools – Fixing a car – fixing/modifying computer systems C T • Creating Tools – Developing NEW SW and HW tools 1-44