Why does it matter: a brief look inside a search engine
Basic Java for the experienced
values
variables
conditionals
indexed variables: arrays
loops
functions/methods
quiz: are you ready?
Java machine model
Data representation
Memory
Data abstraction
Data types
Object = state + change
Object-oriented programming
OO modeling: Abstracting relevant aspects of the world
State
State functions
State change
Objectopia
Objects and classes
Java compromise: primitive types vs object types
Fields (aka instance variables)
Object types: classes
Binding fields to object data
Objects as data in memory
References
Aliasing
Methods
Parameters
Formal vs actual parameters
Method invocation as program rewriting
Method invocation with activation records
The memory layout of activation records
Binding of formal parameters and local variables to activation data
Methods as functions in context
Context-dependent functions: dynamic methods
Context-independent functions: static methods
Example; math functions
Are math functions truly context-independent?
Java compromise: static
Specification vs implementation
Implementation hiding
Public vs private
Subtyping
Interfaces
Inheritance
Abstract classes
Concrete classes
Overriding
Protected
Iterative programming
Indexed collections: arrays
Java compromise: arrays are not full citizens of Objectopia
Computing over collections: iteration
Nested indexing: multidimensional arrays
Accumulation
Searching and sorting (part 1)
linear search
binary search
insertion sort
Sequences
as arrays
as strings
searching in sequences
text processing
Operating limits and failure
Contracts
Pre- and post-conditions
Exceptions
Programming is writing
Requirements
Specifications
Documentation
Programming with collections
What do collections represent?
membership
iteration
Collection types
Lists
Sets
Maps
Generic collections
Java compromises
type casts
generic collections
Data modeling: Entities, attributes, and relationships
Entities as objects
Attributes as fields
Dynamic attributes as maps
Functional relationships as object-valued fields
Non-functional relationships as collection-valued fields
Objectified relationships
Graphs
Relational inverses and doubly-linked data
Search and collections
Keeping track of where you have been
Indexing of collections
Reactive programming
interaction
message passing
model-view-controller patterns
graphical user interfaces
communication
input and output
network I/O
HTTP
Web services
introduction to concurrency
Functional programming
Immutable data
Nested data
Trees
HTML and XML
Structural recursion
Generative recursion
Divide-and-conquer
Searching and sorting (part 2)
Merge sort
Algebra for collections
set operations
Algebra for sequences
regular expressions
Higher-order functional programming
Function objects
Java trick: Anonymous classes
Tree traversals and the visitor pattern
Searching in trees
Dynamic programming languages: Python
Runtime type checking
Methods are just functions
Objects are just dictionaries (maps)
Collection types
List comprehensions
Where did these ideas come from? Introduction to research in computer science
Tentative assignments
simulation (object-oriented programming)
sound processing (iterative programming)
perceptron learning on images (iterative programming)
image processing (iterative programming)
regular expressions (functional and iterative programming)
simple search engine (iterative and collections programming)
dynamic Web pages (functional and reactive programming)
simple chat server (putting it all together, Python)