In week 0, we learned that algorithms were a series of steps to solve a problem, given some inputs and outputs:
box with word "algorithms"
And to represent those inputs and outputs in computers, we needed to understand bits, binary digits, atop which we discovered abstractions like ASCII for text characters, Unicode for emoji, and RGB for pixels in images and videos.
We wrote some algorithms down in pseudocode, and were already able to discuss running time of algorithms in terms of steps required to solve a problem of size n:
chart with: "size of problem" as x-axis; "time to solve" as y-axis; red, steep straight line from origin to top of graph labeled "n"; yellow, less steep straight line from origin to top of graph labeled "n/2"; green, curved line that gets less and less steep from origin to right of graph labeled "log n"
Finally, we were introduced to Scratch, where we practiced using these new programming concepts.
Then, in week 1, we transitioned to learning C, where we used only text to write source code, which was then compiled into machine code, binary that our computer could actually run.
In week 2, we learned more programming features like functions, arguments, and discussed memory, where we could change bytes on the hardware of our computer, to store and work with data:
computer chip with grid overlaid
In week 3, we learned about strings in C, which led us to discover pointers. In week 4, we used pointers to build data structures like a trie:
array with blanks, and letters M, P, T; each letter points to another array, with blanks, and some letters that each point to other arrays and letters in them
In week 5, we learned about (many) web technologies like HTTP, DNS, IP, HTML, CSS, and JavaScript. We looked at request headers and response codes in HTTP, and we looked at HTML’s Document Object Model (DOM) that represents a webpage in the browser:
simple webpage mapped to a tree with each element as a node, nested
And as an aside, in one year’s Harvard-Yale football game, some Yale students actually managed to prank much of the Harvard audience to hold signs that read “WE SUCK”!
In week 6, we learned Python, a higher-level language that includes features like linked lists and hash tables, so we don’t need to implement them ourselves before we start writing more useful programs.
In week 7, we looked at one particular paradigm of web programming, Model-View-Controller, which is just one popular pattern for organizing our code:
request (HTTP, CLI, etc.) from a client goes into a Controller, which demands from a Model (Database, WS, etc) and receives data that it then sends to a View (Templates, layout) which are sent back to the client as a response (HTML, RSS, XML, JSON, etc.)
Finally, in week 8, we looked at SQL and databases more generally, with which we can query data efficiently and cleanly.
Summary of the course in week 9 lecture note as copied in the previous post and in the link: https://cs50.harvard.edu/college/weeks/10/notes
Particularly, In week 6, we learned Python, a higher-level language that includes features like linked lists and hash tables, so we don’t need to implement them ourselves before we start writing more useful programs.
Shortened summary:
Week 0 - algorithms, bits, binary digits, abstractions. Pseudocode, running time of algorithms
Week 1 - C, where we used only text to write source code, which was then compiled into machine code, binary that our computer could actually run.
Week 2- functions, arguments, and discussed memory, where we could change bytes on the hardware of our computer, to store and work with data:
In week 3, we learned about strings in C, which led us to discover pointers.
In week 4, we used pointers to build data structures like a trie:
array with blanks, and letters M, P, T; each letter points to another array, with blanks, and some letters that each point to other arrays and letters in them
In week 5, we learned about (many) web technologies like HTTP, DNS, IP, HTML, CSS, and JavaScript. We looked at request headers and response codes in HTTP, and we looked at HTML’s Document Object Model (DOM) that represents a webpage in the browser:
simple webpage mapped to a tree with each element as a node, nested