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