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
- Creating files
- Removing files
- 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
- Markup Languages
- 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
- Encryption and decryption
- Hashes
- 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"