Programming Fundamentals I, II, III

Fund I | Fund II | Fund III

Nothing detailed here is intended to take the place of the official college catalog descriptions. Please familiarize yourself with the catalog descriptions as well. Also note that the descriptions here are my approach to the classes listed. Other professors will have a different approach and philosophy.


Programming and computer science can be very challenging for most students. Programming classes will require a higher than average time commitment compared to some other classes.

Expect to commit significant time and effort to these classes.


Programming Fundamentals I

Programming Fundamentals I is designed as an introductory course in computer science, computational thinking, and programming. The language of instruction is Python. It should be noted that the point of the class is not simply to learn Python (i.e. this is not a "Python class"). The point of the class is to learn programming logic and basic computer science concepts. Python is the tool by which we accomplish those goals. That has the effect of also learning Python, and students will be expected to master Python syntax and language concepts, but the emphasis will be placed on computer science, algorithmic thinking, and computational thinking. As such, other languages will be mentioned and compared and contrasted to Python to help students gain a well rounded view of programming and computer science.

To understand this difference, consider the idea of learning carpentry. When you take a carpentry class you will also learn how to use a hammer in the process. You take a carpentry class, not an introduction to hammers class. Hammers are just the tool you will also learn while learning carpentry. In that analogy, computer science is carpentry. Python is the hammer. In other words, languages are not the point of any computer science class. Languages are irrelevant. Languages are just the tools by which we implement computer science. It's computer science that matters.

The topics covered in the course will include but are not limited to:

  • Introduction to computer languages.
  • Introduction to computer science, computational thinking, and algorithmic concepts.
  • Command line usage and interpretation.
  • Code repositories and version control.
  • Basic programming logic including boolean logic, branching, and repetition.
  • Running, testing, and debugging applications.
  • Basic data structures including primitives, arrays, associative arrays, strings, files, and objects.
  • Basic searching and sorting.
  • Procedural programming and modularity.
  • Classes and objects.
  • Production code and best industry practices.
[ back to top ]

Programming Fundamentals II

Building on the concepts in Programming I, Programming II continues with computer science concepts but using the C/C++ programming language. As with Programming I, this second class in Programming Fundamentals is a computer science course where the language of instruction is C/C++. The point of the class is not simply to learn C/C++ (i.e. this is not a "C/C++ class"). The point of the class is to learn more advanced programming logic and intermediate computer science concepts. C/C++, which is the de-facto language of computer science, is the tool by which we accomplish these goals in this class.

This class begins with a review of all Programming I control structures, data types, and abstract data types and their corresponding representation in C/C++. The emphasis of the class will be computer science, proper application architecture, and object oriented programming.

The topics covered in the course will include but are not limited to:

  • Command line usage and compilation.
  • Code repositories and version control.
  • Comparison of languages and strong/weak, dynamic/static typing.
  • Software architecture, modularity, code re-use including the proper use of header files and the difference between interface and implementation. Students will be required to strictly use header files properly - no exceptions.
  • Pointers and dynamic memory allocation.
  • Object-based and object oriented programming.
  • Basic analysis of algorithms.
  • Searching and sorting techniques.
  • An introduction to software engineering.
  • Production code and best industry practices.
[ back to top ]

Programming Fundamentals III: Data Structures


This class is extremely intensive and requires a very serious commitment from the student. Considerably more so than the previous two.

Building on the concepts in Programming II, Programming III continues with computer science concepts, also using the C/C++ programming language. Data Structures is considered by many (including myself) to be the first true computer science course you take in a CS program. Programming III focuses on computer science theory more than the previous two courses, but also includes practical discussion of data structures and their applications. Roughly speaking, programming I and II are 70/30 practice over theory. Programming III is the reverse, 30/70, where we will study algorithmic efficiency, modularity, code reuse, number systems, etc. considerably more than the previous classes.

This course assumes strong competencies in control structures, programming logic, basic software architecture, and basic computer science concepts. From that foundation this course studies abstract data types in depth including algorithm analysis, templating, and recursion. By the time you reach this class you will have had to take and successfully pass at least 3 programming classes and other technical courses. You will be expected to demonstrate that fact in this class.

The topics covered in the course will include but are not limited to:

  • Command line usage and compilation.
  • Code repositories and version control.
  • Software architecture, modularity, code re-use including the proper use of header files and the difference between interface and implementation. Students will be required to strictly use header files properly - no exceptions.
  • Pointers and dynamic memory allocation.
  • Object-based and object oriented programming.
  • Intermediate analysis of algorithms.
  • Intermediate Searching and sorting techniques.
  • Software engineering.
  • Recursion
  • Abstract Data Types including but not limited to:
    • stacks and queues
    • linked lists
    • hash tables
    • trees
    • graphs
[ back to top ]