# Syllabus for Introduction to Computer Science

**Description**: This course provides a broad introduction to computer science — the empirical study of computation, data, and automation. Students will write computer programs in Python to explore fundamental areas of computer science, including hardware design, data representation, discrete mathematics, abstraction, recursion, fundamentals of programming, algorithm analysis, and more. The course is intended for both students who expect to major or minor in computer science as well as for those who are not planning to take additional course work in CS.

### Learning objectives:

Students will gain knowledge and hands-on skills in:

- The basic components of computer hardware and software
- Fundamentals of data representation in computer systems
- Thinking about and framing problems in computational terms, especially using abstraction and recursion
- Implementing and analyzing basic algorithms

### Units:

**Hardware and software**- Sizes and Units
- Metric prefixes and their relevance

- Sizes and Units
- Capacities versus transfer rates (e.g. network speeds)
- Clock frequency, processor speed, and performance
- Computer Hardware Anatomy
- CPU Architecture
- Arithmetic Logic Unit
- Memory hierarchy
- Memory addressing

- Instruction codes
- Software Life Cycles
- Source code
- Object code
- Library code
- Executable code
- Compiler, Linker, and Loader

**Data representation**- Bits, bytes, and number systems
- Binary, decimal, hexadecimal
- Conversions between systems
- Binary arithmetic
- Negative values in binary
- Maximum values with N digits in different number systems

- Digital logic
- Basic gates
- Truth tables
- K-maps

- Bits, bytes, and number systems
**Algorithm development and analysis**- Recursion
- Searching
- Linear search
- Binary search

- Sorting
- Bubble sort
- Selection sort
- Merge sort

- Special topics and recent advances in computing
- This is a short unit organized around student interests

I am teaching this course in Fall 2023 and Spring 2024, with inspiration from the following sources:

- The Beauty and Joy of Computing (UC Berkeley)
- Learning Conversational Programming by Starting from Code's Purpose
- Dr. Robert England's video series for an online version of the course
- Introduction to Computer Programming at the University of Kentucky
- Computer Science Unplugged ("computer science without a computer")
- Fundamentals of Programming and Computer Science at Carnegie Mellon
- Introduction to Computing Principles at Stanford University