The Beginning
Thomas J. Kennedy
Welcome to CS 350 (Introduction to Software Engineering).
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 Tools of the Trade
In CS 330 (Object Oriented Programming & Design)… I like to start with a table of tools
Example 1: CS 330 Table of Tools
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 ✔ ✔
In this course we will:
- learn the different types of tools
- use selected Java-Centric tools
- incorporate these tools into a project
Let us start by reorganizing the example table.
Tool Type | C++ Tool | Java Tool | Python Tool | Rust Tool |
---|---|---|---|---|
Compiler | g++ | javac | N/A | rustc |
Build | Make | Gradle | N/A | Cargo |
Configuration | CMake | Gradle | tox | Cargo |
Testing / TDD | Too many too list | JUnit | unittest & pytest | built-in |
Documentation | Doxygen | Javadoc | PyDoc | Rustdoc |
Style Check & Lint | CPPLint | Checkstyle, PMD, Spotbugs | Pycodestyle, Pylint, black, isort | cargo check , cargo fix , cargo fmt |
You may also end up using:
- PlantUML for UML Class Diagrams - to show the relationships between classes.
- SDEdit for UML Sequence Diagrams - to visualize communication between objects.
SSH and Linux are general tools with which you are already familiar… unlike emacs (the existence of which I do not recognize). We all know Vim is the correct choice.
You should have used Git in some capacity… even if it was to access my examples on GitHub.
A few tools will be used heavily for office hours and questions…
Tool | Assignments | Lecture | Recordings |
---|---|---|---|
Zoom (Office Hours) | ✔ | ||
✔ | ✔ | ✔ | |
Questions | ✔ | ✔ | ✔ |
4 Lecture Examples
I have a number of examples available on GitHub
- CS 350 (which are also hyperlinked in the course outline) - https://github.com/cstkennedy/cs350-examples
- CS 330 - https://github.com/cstkennedy/cs330-examples
- CS 417 - https://github.com/cstkennedy/cs417-examples
5 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 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).
-
Can I use VSCode, or Eclipse, or Vim and the command line?
Yes. You may use any of the three. However, I strongly encourage you to use VSCode
-
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.
6 Beginning of the Semester Concerns
You will hear me discuss and reference topics from various courses, including:
- CS 330 - Object Oriented Programming & Design
- 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.