280 likes | 688 Views
CSCI 1381: Foundations of Computer Science. What is this course? A breadth-first introduction to Computer Science Just what is the field of CS? What types of things will I study? What types of jobs are there?
E N D
CSCI 1381: Foundations of Computer Science • What is this course? • A breadth-first introduction to Computer Science • Just what is the field of CS? • What types of things will I study? • What types of jobs are there? • A brief look at many concepts that you will study in-depth in future courses
Why take this course? • A computer literacy course for CS Majors • If you haven’t had CSCI 1300, you may not know • the history of computers • societal impacts and ethical issues regarding a computerized society • other topics that are not usually part of traditional CS courses but are important for CS students to learn • Reinforce programming experiences from 1380 • Let you know what is to come in your CS career and give you an introduction to it now
What is Computer Science? • Book definition: • “The discipline that seeks to build a scientific foundation for such topics as computer design, computer programming, information processing, algorithmic solutions of problems and the algorithmic process itself” • ACM definition: • “the systematic study of those algorithms which describe and transform information; the underpinning theory, analysis, planning, efficiency, realization and application • Our definition: • “The study of the structure, function, and applications of computers” • CS: a Science field, a Math field, an Engineering field
Components of CS • Central to Computer Science are: • Hardware • Computers and other physical devices • microprocessors, memory, storage, I/O, communication • Software • Programs and Programming Languages, programming techniques and paradigms • Algorithms • creating solutions to problems, defining data structures, analysis of algorithms
In CS, we are interested in the design of computer components this is referred to as Computer Architecture microprocessor design CISC, RISC, pipeline, parallel processing, etc memory layout cache, RAM, ROM, virtual memory I/O layout DMA memory access, memory mapped I/O Ideally, computer architecture would not be limited to our technology, but would be a consequence of algorithms But instead, technology often provides the basis for the architecture consider in the 50’s when vacuum tubes were used so that computers were large, unreliable and slow with very small main memories But sometimes we learn from our algorithms to produce more useful hardware cache -- based on principle of locality of reference parallel processing to more closely match the brain Study of Hardware and Architecture
Algorithms • Definition: • solution to a problem at some level of specificity • recipes, instructions for model building, architectural blueprint, playing music, performing a magic trick • We focus on algorithms because there are • Many ways an algorithm can be realized so we don’t have to learn a specific program to solve a problem • Many algorithms to solve the same problem and we can analyze how efficient each algorithm is • Computers provide a platform for automatically testing an algorithm, but are not necessary for testing an algorithm • In studying algorithms, we need a representation • So, we examine languages: grammar, syntax • We represent algorithms in pseudocode, flowchart, etc • The computer represents programs in binary
How to represent and store data in a natural and efficient way? What algorithms are required to interact with the data structures? Other issues include information hiding and encapsulation Example structures: Lists Queues Stacks Trees Graphs Hashing Tables Implementation methods: Arrays Linked structures with pointers Data Structures
Programming paradigms Procedural Functional Objected-oriented Logical (declarative) Translation processes compiling assembling interpreting Features of PLs data abstraction process abstraction control methods machine independence and standardization Theoretical concepts syntax semantics types of languages Programming Languages
Other Areas of Study • Software Engineering * • Operating systems and system software * • Data storage and retrieval * • Specific Application Areas: • Databases * • Computer Graphics • Numerical Methods • Simulation • Networks and network communications * • Artificial intelligence * • Theory of computation * • * - areas that we will examine in this course
Evolution of Computers • Early computational devices • Abacus • Pascal’s calculator • Leibniz’s calculator • Joseph Jacquard’s programmable loom • Charles Babbage’s Analytical Engine and Lady Ada Augusta Lovelace • Herman Hollerith’s census counter
Into the 1940’s • Earliest computers came out of WWII research • Atansaoff-Berry machine at Iowa State (1937) • George Stibitz at Bell Labs (1940) • Mark 1 at Harvard (1944) • COLOSSUS from England • ENIAC at U. of Penn. (1946) • Very large computers that used phone relay switches and/or vacuum tubes and either were not programmable, or could not store the program
We measure the progress of computers through 4 generations: 1st (1946-1959): vacuum tubes, one-of-a-kind machines, machine language, slow, unreliable, very very large 2nd (1959-1964): transistors, magnetic core memory, high level programming languages, rudimentary OS, mainframes, expensive, slow, large, more reliable 3rd (1965-1974): integrated circuits for CPU and memory, mass production, minicomputers, cheaper, full-blown OSs with time-sharing, networks, disks, monitors, interactive access, IBM mainframes became very popular, Internet 4th (1974-today): LSI, VLSI, VVLSI circuits, PCs and supercomputers, laptop and smaller computers, computer revolution, software revolution, GUIs, WWW and more 5th (????): massive parallel processing, NLP and automatic inferencing Generations
Evolution of CS • This field did not exist 30 years ago! • Today, it is a thriving and very large field • So what happened? • Programming was very difficult early on • Computers were not easily or always available • At the time, there was not enough experience to warrant studying programming techniques • However, as time went on and expertise developed, areas of study arose followed by new paradigms
CS: A study of algorithms? • The book refers to CS as a study of algorithms • CS is more than just the study of algorithms • but just concentrating on algorithms, we have the following questions to answer: • Which problems can be solved algorithmically? • How can the discovery of algorithms be easier? • How can the techniques of representing and communicating algorithms be improved? • How can our knowledge of algorithms and technology be applied to provide better machines? • How can the characteristics of algorithms be analyzed and compared?
The Role of Abstraction • Computer consist of many layers • Each built upon a lower layer that is more detailed • Hardware implemented using gates • Binary code commands gates • Programs compiled from high level code to binary • Programmer writes algorithms and converts to code • End-user sees none of this • It is important in CS to understand abstraction and the idea of tools that have been developed to support abstraction • for the creation of both hardware and software
Ethical/Social/Legal Repercussions • Our society faces many open questions regarding the computerized society • ownership of software • privacy of data • liability when programs crash • who is responsible for Y2K? • understanding technology enough to make informed decisions • We will focus on social issues throughout this course • Consider questions 1 and 2 on page 13