The Beginning

Thomas J. Kennedy

Contents:

Welcome to CS 330 (Object Oriented Programming and Design).

1 Who am I?

I have taught various courses, including:

Most of my free time is spent writing Python 3 code, tweaking my Vim configuration, or learning a new (programming) language. My current language of interest is Rust (at the time of writing).

Sometimes I find time to play a videogame or two (usually Minecraft). Sometimes I tell jokes. These jokes are not guaranteed to be humorous–unlike my Morris stories.

2 Asking Questions…!

If you have taken a class with me before, you are have heard me emphasize the importance of questions. As we move through the semester, and questions materialize, we have a discussion board, my office hours (which include network conferencing), and email tkennedy@cs.odu.edu.

3 Object Oriented Programming & Design

The title of this course is Object Oriented Programming & Design. Let us start by discussing S.O.L.I.D. My colleagues and I disagree on when this should be introduced. I believe S.O.L.I.D should be discussed now… at the very beginning of the semester. To do so, we will have to split the word:

S.O.L.I.D = (S.O.) + (L.I.D.)
 

This gives us two sub-acronyms. We will start with S.O. If you do not like my puns… you can put a L.I.D on it.


Why are we starting with S.O.? First… we have all the tools we need to understand it:

Second… these emerge naturally out of how we write code. We want to write reusable functions and classes. We want to be able to extend those classes without modifying the underlying code. Think about:

You have used at least one of these in a previous course (most likely std::vector). Did you look at how it was implemented? You probably looked up which functions/methods were available… Throughout the course of the semester we will discuss various best practices, design principles, design patterns, and mechanics that will allow us to build complete, reusable, and extensible ADTs.

4 Tools of the Trade

In this course we will use many tools, including:

Tool Assignments Lecture Recordings
SSH
Linux
g++
Makefiles
Vim Hopefully
Git Hopefully
Unit Testing / TDD
Doxygen Maybe
Javadoc Maybe
Rustdoc Maybe
Pydoc Maybe
Tox Maybe
Gradle
CPPLint Maybe
Checkstyle Maybe
Pycodestyle / Pylint Maybe
PlantUML Maybe
SDEdit Maybe

A few tools will be used heavily for office hours and questions…

Tool Assignments Lecture Recordings
Google Meet (Office Hours)
Email
Questions

5 Lecture Examples

Most of my lectures will be based on my Review (recorded lecture) Examples:

Updates since 01 January 2020

6 Why [insert language here]?

Through your coursework you have focused all but exclusively on C++.

  1. We are continuing with C++ out of familiarity.
  2. We will cover Java based on its similarity to C++.
  3. We will learn Python because you have a solid foundation (and Python is fun).
  4. We will discuss Rust since it provides a different perspective (and Rust is fun).

7 Questions…

  1. Do I need to know all the tools listed in Tools of the Trade?

    No. you do not need to know all the tools. However, you must be familiar with SSH, Makefiles and Linux based on previous coursework.

  2. Why do you use Vim?

    The short answer is that… Vim works. I can write code quickly, compile and run code, and switch between languages. Most importantly, I can do everything completely from the keyboard (without the mouse).

  3. Am I required to use makefiles and SSH?

    Yes. You may write your code using your editor of choice. However, you must compile and run each piece of code on the CS Linux servers at least once per exercise.

  4. Can I use Code::Blocks?

    Yes. You may use Code::Blocks.

  5. What is your favorite language?

    It is currently a tie between Python and Rust.

  6. Will you tell us a Morris story?

    Maybe.

  7. Can I ask you about a topic not covered in lecture?

    Yes.

  8. Who is Raymond Hettinger?

    Raymond Hettinger is one of the Python core developers. He is known for his amazing Python talks/lectures.

8 Beginning of the Semester Concerns

You will hear me discuss and reference topics from various courses, including:

Every semester a few students end up terrified that they have missed a required prerequisite course. Before you start second guessing yourself… take a look at the prerequisites section of the syllabus. If a course is not listed as a prerequisite… you are not expected to have completed it.

Why mention other courses?

Computer Science is a broad field. There are many connections between topics and concepts. One of the biggest mistakes anyone can make (especially students and teachers) is to treat a course as existing in a vacuum. Remember two things:

  1. One of our goals is to learn how to see these connections and use them to solidify understanding in this course and other courses.

  2. I enjoy Computer Science (including this course) and have a penchant to get carried away.