University of Manitoba CS Topics Primer
Stuff that is CS… but not CS? Let’s talk about the ecosystem around programming, and how to do CS well. In university, we talk about programming and we talk about algorithms, but we often don’t talk about all the tooling that is available around programming these algorithms.
Inspired by MIT’s missing semester, a toolkit for students to train students in hard tech skills that will help them succeed. We’ve seen 3rd year students in Operating Systems, Real Time Systems, and other technical courses struggle to use the tools - stumbling with the tools rather than focusing on the assignment at hand.
The welcome video:
Topics
- Different types of languages, ways of interacting
- Compilation
- Scripting
- REPL
- Why REPL is great
- When is it useful
- Shell
- using a shell Well
- unix program structure
- Standard in, standard out, standard error
- piping, file redirection, how that relates to stdin/stdout/stderr
- output redirection
- create a bash script to automate something
- See bash/shell as a scripting language, not just a window
- Environment variables to choose resources
- Remote systems
- ssh
- moving files
- To the system
- From the system (No, you can’t push home)
- Getting around quickly, and pitfalls
- Reading manual pages
- Read man pages
- understand SYNOPSIS syntax
- search them on the command line
- Quality code
- Linters, style checkers
- adding these to makefiles/tests
- profiling - finding slow parts in code
- Debugging
- Why it’s better than print statements
- anti-pattern debugging
- gdb/pdb breakpoints, stepping stack traces
- some guis
- intro this. these change all the time
- Useful Unix Tools
- linux vs unix vs mac
- tools
awk
(alternativelycut
)find
done properlysed
xargs
- wrap with processing a csv/tsv file
- Building programs
- Makefiles
- Library paths?
- Virtual machines
- What are they?
- Why should we use them?
- Source code control
- Git!
- Creating a repository
- Add, check-in, revert
- make a branch, merge, or abandon
- Collisions with yourself (or as a team)
- Maintaining Servers
- The rest
- things that don’t fit into here, and also don’t fit into the program, either.
The above are general UNIX/linux and meta-programming topics. But, what if you need to learn a new programming language?
Check out the Hello world in 14(ish) languages, where we have how to compile (if it’s a compiled language), run, debug, and discuss best practices in a bunch of common languages!
Possible topics
Connecting software to tools:
- How do we connect to databases?
- Using REST APIs?
- File encodings, character sets (ascii/unicode. CRLF/LF). converting between the two
- Virtual environments (python/ruby) for isolation lite(tm)
- CPU vs GPU vs ALU
- Concurrency basics
- Blockchain intro, discussion about contracts (solidity)
Outputs
Videos covering this material on our infrastructure. Students can see this material anywhere, but we can make it real to them here.
UMLearn course, where badges are released. Some “challenges” where the answer can be put into a UMLearn quiz (or similar). Open to all 2nd-grad level students in CS.
Book suggestions
For myself to use, and for the students.