This is a tentative syllabus for the course. Links will be added regularly with topics and assignments. Notes will be provided for each class, linked from the date. Make sure to read these pages before each class. Also, make sure to do the weekly reading each week. Finally, assignments are due on the date indicated by the Due column on this page (and on Canvas) at 11:30am Eastern time.
Date | Topics | Techniques | Out | Due |
---|---|---|---|---|
Week 1 | Unix shell and commands | Read: Style guide; Unix shell and commands | ||
Mon Sep 12 | Getting started | Course logistics; ls, cat, ssh, man, pwd, cd, echo, scp | Lab 0 | |
Tue Sep 13 | Intro to bash | Bash; command switches/args; files; bash startup | Lab 0 | |
Wed Sep 14 | Bash 2 | Redirection/pipes; stdin/out/err; tar/zip | Lab 1 | |
Fri Sep 16 | Shell programming | Interactive/shell; exit status; conditionals; loops; variables | ||
Week 2 | Introduction to C | Read: Shell and C Programming | ||
Mon Sep 19 | Intro to C | Program structure; variables; functions; compilation | ||
Tue Sep 20 | C basics | Operators; data types; variable scope; flow control | Lab 2 | Lab 1 |
Wed Sep 21 | Command line args and arrays | argv and argc; arrays | ||
Fri Sep 23 | File operations | open/close; read/write; buffer overflows | ||
Week 3 | Pointers, memory, and data | Read: C programming and stdio | ||
Mon Sep 26 | Pointers, memory, and scope | Pointer declaration/deferencing; memory allocation | ||
Tue Sep 27 | Dynamic memory and linked lists | malloc/free; arrays/structs; linked lists | ||
Wed Sep 28 | Modular data structures | Modularity and reuse; pointers to anything; bags/binary trees | Lab 3 | Lab 2 |
Fri Sep 30 | make and Makefiles | Compiling/linking; dependencies; macros; clean up | ||
Week 4 | Debugging: git and valgrind | Read: Web searching | ||
Mon Oct 3 | git | git vs. github; repos; workflow; tags and branches | ||
Tue Oct 4 | debugging | gdb; frequenly used commands | ||
Wed Oct 5 | debugging 2 | valgrind; memory leaks | ||
Fri Oct 7 | TinySearchEngine (TSE) intro | Web search architecture; URLs, HTML, keywords | Lab 4 | Lab 3 |
Week 5 | TinySearchEngine: crawler | Read: Software design | ||
Mon Oct 10 | Software specifications | TSE requirements, design, implementation specs | ||
Tue Oct 11 | Software testing | Unit, integration, regression, fuzz, and acceptance testing | ||
Wed Oct 12 | Lab time | |||
Fri Oct 14 | TinySearchEngine indexer design | Indexer requirements; design | Lab 5 | Lab 4 |
Week 6 | TinySearchEngine: indexer | Read: Coding and debugging | ||
Mon Oct 17 | Cohesion, coupling, and design | Routines, cohesion, coupling; modules | ||
Tue Oct 18 | Lab time | |||
Wed Oct 19 | TinySearchEngine querier design | Querrier design; fuzz testing; expressions and accumulators | ||
Fri Oct 21 | Day of caring | No class | Lab 6 | Lab 5 |
Week 7 | TinySearchEngine: querier; sockets | Read: Testing and documentation | ||
Mon Oct 24 | Querier design | Expressions; intersection/union | ||
Tue Oct 25 | No class | |||
Wed Oct 26 | Lab time | |||
Fri Oct 28 | Lab time | |||
Week 8 | Project kickoff | Read: Networking and processes | ||
Mon Oct 31 | Project and teams | Project | Lab 6 | |
Tue Nov 1 | Lab time | Git for your project | ||
Wed Nov 2 | Guest speakers | Recent Dartmouth CS grads at Google and Meta | ||
Fri Nov 4 | Lab time | |||
Week 9 | Project design and development | |||
Mon Nov 7 | Lab time | |||
Tue Nov 8 | Lab time | |||
Wed Nov 9 | Lab time | |||
Fri Nov 11 | Project compatibility check | Project | ||
Week 10 | Project demo | |||
Mon Nov 14 | Tournament |