Syllabus Computer Science I

 Introduction and Goals
 ======================
 This course is an introduction to the topic of computer science.
 The goals for this course are as as follows:
   - Gain proficiency with the algorithms
   - Gain proficiency with the C++ programming language
   - Introduce software development and computer science skills

 The main thing I want to convey in this class is how to think about
 computer science.  This is not just a course in computer
 programming, this is intended to be a foundation for the exploration
 of a very vast and rewarding field!

 Content Outline
 ===============
 1.  Introduction to CS and Computing
     1.1 Definition of Computer Science
     1.2 Pseudocode and Algorithms
     1.3 Overview of Programming Languages
     1.4 The UNIX command line environment

 2.  Introduction to C++
     2.1 Basic Program Structure
     2.2 The C++ Compilation Process
     2.3 Variable Types
     2.4 Operators

 3.  C++ Basics
     3.1 Invoking Functions
     3.2 Best Practices
     3.3 Block Structure
     3.4 Introduction to Flow Control

 4.  Flow Control
     4.1 Definition of Truth
     4.2 Branching with If
     4.3 Branching with Switch
     4.4 Designing Algorithms With Branches
     4.5 Introducing Repetition Structures

 5.  Flow Control
     5.1 Loop Basics
     5.2 Precondition Loops
     5.3 Post Condition Loops
     5.4 Loop Control Strategies
     5.5 Designing Algorithms with Loops
     5.6 Introduction to Runtime Analysis
     5.7 GOTO:  A privilege, not a right

 6.  Building Abstractions
     6.1 Procedure Oriented Thinking
     6.2 Modular Decomposition
     6.3 Designing With Procedures
     6.4 Function Syntax

 7.  Functions
     7.1 Using Functions in C++
     7.2 Recursive Functions
     7.3 Recursive Problem Solving
     7.4 Evaluating Recursive Runtime

 8.  Functions & File I/O
     8.1 Finishing up Functions
     8.2 Introduction to Objects
     8.3 Streams as Objects
     8.4 Interacting with Files

 9.  Arrays
     9.1 Memory and Addressing
     9.2 Single Dimensional Arrays
     9.3 Multiple Dimensional Arrays
     9.4 Memory Organization of Arrays

 10. Arrays, Pointers, and Strings
     10.1 Arrays and Pointers
     10.2 Array Sorting
     10.3 C Strings
     10.4 C++ String Objects

 11. Pointers, Structures, and Classes
     11.1 Advanced Pointer-Fu
     11.2 Using Structures
     11.3 Designing Classes
     11.4 Pointers to Structs and Classes

 12. Designing Classes
     12.1 Introduction to Object Orient Analysis and Design
     12.2 Pseudocode and Classes
     12.3 Best Practices in Class Design
     12.4 Examples in OOP

 13. Dynamic Memory & Introduction to Data Structures
     13.1 Allocating and Deallocating Memory
     13.2 Dynamic Allocation and Arrays
     13.3 Correct Dynamic Allocation of Multidimensional Arrays
     13.4 An Inefficient Dynamically Resizeable Array

 14. Data Structures & Some Advanced Language Features
     14.1 Linked Lists
     14.2 ListNode Class
     14.3 List Container Class
     14.4 Introduction to Templates
     14.5 Exception Handling

 15. Final Exam


 Copyright (C) 2013 Robert Lowe
 This work is distributed under a Creative Commons
 Attribution-ShareAlike 3.0 Unported License (CC BY-SA 3.0)
 For more information, see http://creativecommons.org