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