1 Content


1.1 Schedule and due dates

The schedule and due dates will be updated as we progress through the semester (on Canvas).
Please check back regularly for changes.

1.2 Projects

Project 1: Content/project-1.pdf
Project 2: Content/project-2.pdf

1.3 Topic outline

1.3.1 Introduction and setup

What is this class?
List resources, book, website.
How to submit assignments?
Log into: https://git-classes.mst.edu/
VirtualBox pre-setup.

“An apprentice carpenter may want only a hammer and saw,
but a master craftsman employs many precision tools.
Computer programming likewise requires sophisticated tools,
to cope with the complexity of real applications,
and only practice with these tools will build skill in their use.”
~ Robert L. Kruse, Data Structures and Program Design

1.3.2 Virtual machines

Reading: Content/VirtualMachines.html
Assignment: Pre-lab in the book.
Post-lab 00 activity due 24 hours after the start of lab.

From within your new virtual machine,
in your repository for the day (using the Gitlab web interface),
add the answers to the following questions to a text file.

Without using a GUI:
What command do you type to update your software?
What command do you type to search for software to install?
What command do you type to install that software?
What are the version numbers of GCC, Code::Blocks, Qt-creator, Kdevelop, Kdbg, GDB, and Valgrind?

1.3.3 Bash

1.3.3.1 Basics

Reading: Content/LinuxBash.html
Assignment (download and submit using the Gitlab web interface).
Pre-lab 02 (from the book) due right before class starts.
Post-lab 02 due 24 hours after the start of class.

1.3.3.2 Scripting

Assignment (download and submit using the Gitlab web interface).
Pre-lab 04 (from the book) due right before class starts.
Post-lab 04 due 24 hours after the start of class.

1.3.4 Version Control

Slides: Content/VersionControl.html
Assignment (clone and submit using the command line Git interface only!).
Pre-lab 03 (from the book) due right before class starts.
Post-lab 03 due 24 hours after the start of class.

1.3.5 File managers

I strongly suggest an efficient, terminal-based file manager.

ranger is my favorite:
https://ranger.fm/

Though mc comes in handy too:
http://midnight-commander.org/

The nice part about these is that they are fast, efficient, easy,
and can be used on remote machines, without GUIs.

1.3.6 Unix philosophy, text editors, IDEs

Slides: Content/01_Text_IDE.pdf

Reading:
Content/TextEditors.html
Content/tools-for-computer-scientists.pdf Chapter 1, 9, Appendix E
https://en.wikipedia.org/wiki/Comparison_of_text_editors#Programming_features

Assignment:
Pre-lab 01 and 09 (from the book) due before class starts. This is the short worksheet at the end of each chapter.
Post-lab 01 and 09 due 24 hours after the start of class:
Post-lab 01 is at the end of the chapter (answer the questions in a text file and place it in the repository).
Post-lab 09 is in the repository and here: Content/09_IDE-assignment.pdf
Play several levels of https://vim-adventures.com/ and include a screenshot in your repository
Play https://www.shortcutfoo.com/ for vim

1.3.7 Diff tools

Diff tools are helpful for comparing two folders of files,
or comparing two of your output files.
Compare your output to any given sample output to make sure they are the same,
including all newlines and spaces, via bash:

./yourcode.whatever <sample_input.txt >your_output.txt

# or for two-column format (easier to see):
diff -y --color sample_output.txt your_output.txt

# using vim:
nvim -d sample_output.txt your_output.txt

# using git-delta
delta sample_output.txt your_output.txt

# in the Meld GUI:
meld sample_output.txt your_output.txt

1.3.8 Build systems (GNU Make)

Slides: Content/05-build_systems.pdf

Reading:
Content/tools-for-computer-scientists.pdf Chapter 5
https://makefiletutorial.com/
https://learnxinyminutes.com/docs/make/
https://www.gnu.org/software/make/manual/make.html
https://swcarpentry.github.io/make-novice/

Assignment:
Pre-lab 05 (from the book) due right before class starts.
Post-lab 05 due 24 hours after the start of class.

1.3.9 Debuggers

Reading:
Content/tools-for-computer-scientists.pdf Chapter 6, 9

Slides: Content/06-debugging.pdf

Notes: in gdb this prints an array, where len is a number like 6:
p *array@len

A great gdb configuration:
https://github.com/cyrus-and/gdb-dashboard/

Another worth checking out:
https://wiki.gnome.org/Apps/Nemiver
https://en.wikipedia.org/wiki/Nemiver

Assignment:
Pre-lab 06 (from the book) due right before class starts
Post-lab 06 due 24 hours after the start of class:

1.3.10 Code checking

Reading: Content/tools-for-computer-scientists.pdf Chapter 7

Slides: Content/07-code_checking.pdf

Assignment:
Pre-lab 07 (from the book) due right before class starts
Post-lab 07 due 24 hours after the start of class.

1.3.11 Unit testing

Reading: Content/tools-for-computer-scientists.pdf Chapter 8

Slides: Content/08-unit_testing.pdf

Assignment:
Pre-lab 08 (from the book) due right before class starts
Post-lab 08 due 24 hours after the start of class:

1.3.12 Profiling

Reading:
Content/tools-for-computer-scientists.pdf Chapter 10
https://github.com/KDAB/hotspot

Slides: Content/10-code_profiling.pdf

Assignment:
Pre-lab 10 (from the book) due right before class starts
Post-lab 10 due 24 hours after the start of class:

1.3.13 Regular expressions

Reading:
Content/tools-for-computer-scientists.pdf Chapter 8
http://en.cppreference.com/w/cpp/regex
http://www.cplusplus.com/reference/regex/
http://www.grymoire.com/Unix/Sed.html
http://www.rexegg.com/regex-quickstart.html
https://regex101.com/
https://regexcrossword.com/
https://www.gnu.org/software/grep/manual/grep.html
https://www.gnu.org/software/sed/manual/sed.html
https://www.regexone.com/ (this one is good, I suggest completing the activity)
https://www.regular-expressions.info/

Slides: Content/11-regular_expressions.pdf

Assignment:
Pre-lab (from the book) due right before class starts
Post-lab due 24 hours after the start of class:

1.3.14 GUI programming - Qt

Reading:
Content/tools-for-computer-scientists.pdf Chapter 8
https://wiki.qt.io/About_Qt
https://www.qt.io/what-is-qt/
https://showroom.qt.io/
https://en.wikipedia.org/wiki/Qt_(software)
https://wiki.qt.io/Basic_Qt_Programming_Tutorial
https://wiki.qt.io/Qt_for_Beginners
http://zetcode.com/gui/qt5/
https://doc.qt.io/qtcreator/
https://www.youtube.com/watch?v=6KtOzh0StTc&list=PL2D1942A4688E9D63&spfreload=10

Slides: Content/12-GUI_programming.pdf

Assignment:
Pre-lab (from the book) due right before class starts
Post-lab due 24 hours after the start of class.

1.3.15 LaTeX

Reading:
Content/tools-for-computer-scientists.pdf Chapter 13
https://www.latex-tutorial.com/

Slides: Content/13-latex.pdf

Assignment:
Pre-lab (from the book) due right before class starts
Post-lab due 24 hours after the start of class.

1.3.16 Modern C++

Reading:
Content/tools-for-computer-scientists.pdf Chapter 14

Assignment:
Pre-lab (from the book) due right before class starts
Post-lab due 22 hours after the start of class