This course is a breadth-first survey of computer science and is required for Computer Science and Computer Studies majors and Computer Science minors. It is a prerequisite for most other courses in the department.
At its core, computer science
revolves around the study of algorithms, which is a central theme and the starting
point of this course. From there, topics display the breadth
of the field as expressed in virtual machines, software,
and application development. Ethics and the rich history of the field
permeates every area of study.
Course Syllabus
The syllabus will be available as
an Adobe PDF document. Sections of the syllabus may be available on this page.
This is a three-semester-hour course. The primary audiences are incoming
majors and minors in computer science and computer studies. However, because the content is general in nature, enrollment is
open to all. If CMPSC 111 is required for some other major, minor,
or concentration, the student must check with the department for
clearance to substitute the course.
Capsule Description
Introduction to Computer Science takes a breadth-first
view of the discipline of computer science, focusing on what computer
are, how they work, and what they can -- and cannot -- do. Major
ideas in the discipline are used as signposts for study: the concepts
of algorithm and data structures, features of common programming
language, computer architecture, numerical computation and number
systems, software engineering, circuits, parallel computation,
language translation, simulation, and artificial intelligence. Ethics and the
rich history of computing are suffused throughout the course.
Philosophy
Introduction to Computer Science takes a very "liberal arts" approach
to the field of computer science and computer studies. Anyone with
a curiosity about computing can benefit from this broad overview.
As computers of all types continue their pervasive incursions into
our daily lives, an understanding of them becomes increasingly important.
Students entering the computing field come to college with little
(if any) comprehension of either the scope of the discipline or the
concepts upon which it is based. Similarly, the general student population
has little understanding or appreciation for the simplicity and potential
of computers. This course fills the needs of both groups.
Objectives
| The student who has mastered the material will
... |
- Know what an algorithm is, be able to trace
througha given (simple) algorithm, give examples of algorithms,
find flaws in poorly-written algorithms, and understand
the importance of an algorithmic solution to a problem
- Be comfortable reading and writing in pseudocode for
moderate algorithms, translating in both directions between
a natural language description of an algorithm and pseudocode
for the algorithm
- Have a good understanding of the uses and pitfalls of
sequential, conditional, and iterative operations
- Be able to explain the concept of order of magnitude,
understand the differences between different orders, and
compute the order of magnitude of an algorithm
- Be able to compare and explain the attributes of two
different algorithms for the same problem
- Understand the use of binary numbers, translate between
decimal and binary systems, and do simple binary calculations
- Know the conditions of a bistable environment
- Be able to determine the truth balue of Boolean expressions
- Be able to construct AND, OR, and NOT gates using transistor
diagrams and then construct circuits using these types
of gates
- Be able to apply the sum of products algorithm to construct
the circuit diagram for any truth table and to write down
the truth table of a circuit diagram
- Understand the purpose and construction of multiplexors
and decoders
- Be able to carefully describe the model of each of the
four subsystems of the Von Neumann architecture
- Know the difference between random access memory, direct
access storage devices, and sequential access storage devices
- Understand the role of the memory decoder unit and the
instruction decoder unit
- Know what a machine language instruction is and understand
its typical format
- Understand the difference between RISC and CISC machines
- Be able to list the four basic classes of machine language
instructions and give examples of each
- Be able to explain how the system software creates a
virtual environment
- Understand the place of assembly language as part of
the continuum of programming languages and how it differs
from machine language and high-level programming languages
- Be able to read assembly language commands and explain
what they do
- Be able to trnslate pseudocode into assembly language
code
- Understand the different roles of the operating system,
the way an operating system manages these roles
- Know the advantages of high-level programming languages
over assembly language
- Understand what virtual data storage means and be able
to declare the necessary data structures for a given task
- Understand the importance of compartmentalization in
programming both with respect to the task and to data,
and how a procedure accomplishes task compartmentalization.
- Know the difference between variable and value parameters
- Be able to write lops using while-do and repeat-until
constructs
- Be able to write Java programs for various types of algorithms
- Appreciate and understand the need for different language
design philosophies, and know the differences between imperative,
functional, logic, object-oriented, and parallel models
of programming languages
- Be able to describe the kinds of applications which various
languages are especially suited to solve
- Understand the general role of the compiler/interpreter
and what gets accomplished during each phase of compilation
- Understand the role of the scanner and the determination
and classification of tokens in a high-level statement
- Be able to read and construct BNF grammars
- Understand the role and use of a parse tree and be able
to creat e the parse tree from a BNF grammar
- Understand the use of semantic records and be able to
generate the code for very basic parse trees
- Understand the difference between local and global code
optimization and be able to perform basic optimizations
- Understand the role of a model, particularly for a computing
agent and algorithm
- Be able to determine what a given Turing machine does
on different input
- Be able to construct Turing machines to solve specified
problems
- Undetstand what it means for a Turing machine to halt
and be able to tell when a Turing machine will run forever
- Understand the difference between binary and unary inputs
- Understand what the Church-Turing thesis says and what
significance it has in computing
- Know what it means to be an uncomputable problem
- Understand the halting problem
- Be aware of the variety of issues facing our computer-based
society
- Understand and be able to describe the great impact computers
have had on our lives
- Understand the use of encryption and its implications
for privacy
- Be able to argue a position on one of the controversial
issues offered in the course
- Build a historical perspective of the development of
computers
- Be sensitive to the ethical, social, and legal implications
of computer use in general and of programming in particular
- Enhance problem-solving skills, including both problem
analysis and algorithm development
- Develop and enhance debugging skills
|
Teaching Methods
- Lectures and Demonstrations: Most class
sessions will consist of lectures, presentations by the instructor,
and directed hands-on exercises.
- Projects: Extensive use of the Lab
Manual will include directed projects
- Quizzes: Exact dates will be announced. For obvious reasons, pop quizzes will not be announced.
- Internet Support: Check Blackboard and
the class web page for additional information about the course.
Blackboard will be the primary Internet tool of the course
and will be used by the instructor to post assignments and
occasionallyh by the students to post their work.
Lectures and slide presentations will be available online within a few days of class.
|
|