Skip to main content

Schedule

Week 1: Overview and Setup

  • Goals of the course
  • Why missing skills are important
  • Common applications: file manager, terminal, etc.
  • WSL and SSH setup
  • The UNIX file system
  • Navigating the file system

Week 2: Navigating the Shell

  • Description of a shell
  • Interacting with the shell
  • Current working directory
  • Interacting with the file system
    • pwd, cd, ls, mv, cp, rm, chmod, tree
  • Relative vs. absolute paths
    • ., .., /, ~
  • Commands
  • Running commands
    • Arguments
    • ^C, ^Z, ^D
    • Manual Pages
    • Command practice

Week 3: Editing Files and Redirection

  • Viewing content
    • cat, less, nano
  • Creating files
    • mkdir, touch
  • Removing files
    • rm, rmdir
  • Piping
    • To and from files
    • To and from other commands
  • Practice with piping
  • echo, which, (h)top, sudo
  • Flags
  • PATH

Week 4: Git

  • Version control
  • Git trees
  • Branching and merging
  • init, add, commit, status, log, branch, diff, merge
  • Practice with git
  • VSCode Git integration

Week 5: Remote Git

  • Github, Gitlab, and Bitbucket
  • Remote repositories
  • push/pull/remotes/stash
  • Forks
  • Continuous integration
  • Authenticating with Github
  • Signing into Github on VSCode

Week 6: LaTeX

  • Overleaf
  • Documents
  • Formulas
  • Commands
  • TiKz
  • Templates

Week 7: Package and Version Managers

  • Why install with a package manager instead of off the internet?
  • Programming package managers: pip and npm
  • System package managers: brew, apt

Week 8: Editors

  • Vim
    • Practice with vimtutor
    • Commands
    • Searching and substituting
    • NeoVim
  • Emacs
    • Practice with Emacs Tutorial (C-h t)
    • Org mode
  • VSCode
    • Extensions
    • Vim and Emacs emulation

Week 9: Programming Languages

  • Data formats
    • CSV
    • JSON
  • Markup Languages
    • YAML
    • TOML
    • XML
  • Survey of common programming languages, including:
    • Bash
    • Python
    • JavaScript/TypeScript
    • Java/Kotlin
    • C/C++
    • Rust/Go
  • Resources and applications of various languages
  • Strengths and limitations of specific languages
    • Interpreted vs. JIT vs. Compiled Languages
    • Memory management, garbage collection, borrow checking

Week 10: Debugging and Profiling

  • Reading error messages and stacktraces
  • Configuring VSCode's visual debugger
  • Breakpoints
  • Step over, step into, continue, restart
  • Practice debugging
  • Logging
  • Reading profiler results

Week 11: Pattern Matching

  • Regular expressions
  • grep, wc
  • Globbing
  • Wildcard characters

Additional topic 1: Cryptography

  • Cryptography
    • OpenSSL
  • Encryption and decryption
  • Hashes
    • md5sum, shasum
  • UUID
  • ssh and ssh-keygen
  • Setup keys locally and on Elnux
  • Setup remote development in VSCode

Additional topic 2: Fields of CS, Personal Projects, and Research

  • What are the various fields of CS?
  • How do you get started with personal projects?
  • How do you reach out to research advisors?

Additional topic 3: Seeking Help and Asking Questions

  • How to Google
  • ChatGPT
  • How to ask questions and communicate
    • Stackoverflow "How to write a good question"