The Beginning
Thomas J. Kennedy
Welcome to CS 330 (Object Oriented Programming and Design).
1 Who am I?
I have taught various courses, including:
- CS 300T - Computers in Society
- CS 333 - Programming and Problem Solving
- CS 330 - Object Oriented Programming and Design
- CS 350 - Introduction to Software Engineering
- CS 410 - Professional Workforce Development I
- CS 411W - Professional Workforce Development II
- CS 417 - Computational Methods & Software
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. 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:
- S - Single Responsibility Principle
- O - Open/Closed Principle
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:
std::vector
std::list
std::unordered_map
std::iterator
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 |
---|---|---|---|
Zoom (Office Hours) | ✔ | ||
✔ | ✔ | ✔ | |
Questions | ✔ | ✔ | ✔ |
5 Lecture Examples
Most of my lectures will be based on my Review (recorded lecture) Examples:
6 Why [insert language here]?
Through your coursework you have focused all but exclusively on C++.
- We are continuing with C++ out of familiarity.
- We will cover Java based on its similarity to C++.
- We will learn Python because you will have a S.O.L.I.D. (get it? puns!) foundation (and Python is fun).
- We will discuss Rust since it provides a different perspective (and Rust is fun).
7 Questions…
-
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.
-
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).
-
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.
-
Can I use Code::Blocks, VSCode, or Eclipse?
Yes. You may use any of the three IDEs.
-
What is your favorite language?
It is currently a tie between Python and Rust.
-
Will you tell us a Morris story?
Maybe.
-
Can I ask you about a topic not covered in lecture?
Yes.
-
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:
- CS 361 - Data Structures & Algorithms
- CS 381 - Discrete Structures
- CS 417 - Computational Methods & Software
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:
-
One of our goals is to learn how to see these connections and use them to solidify understanding in this course and other courses.
-
I enjoy Computer Science (including this course) and have a penchant to get carried away.