/drakepedia

Topics and question bank for Peter Drake's computer science courses

GNU General Public License v3.0GPL-3.0

NOTE: As we shift from Java to Python, this site is gradually being supplanted by Pythonorama, created with Alain Kägi. The Java content here is no longer being maintained. My students will have use for pages in the administrivia section.

Drakepedia

This repository holds topic summaries and questions for Peter Drake's computer science courses.

I have three purposes in creating this repository:

  1. To keep my own notes and useful links organized.
  2. To provide a place where I can direct students' frequently-asked questions.
  3. To provide a bank of questions and answers, which both serves as a study guide and makes exam creation easier. Answers are provided, but there should be so many questions that memorizing all of the answers is infeasible.

I list additional online and print resources where applicable, trying to list the most valuable ones first. In general, print resources go into more depth or provide a more gentle explanation.

Questions are rated according to their difficulty:

  • ⭐ By the end of the course in question, you should be able to answer these questions immediately off the top of your head. They often involve terminology or basic concepts.
  • ⭐⭐ These questions may take a bit of thought, close reading, experimentation, or research.
  • ⭐⭐⭐ These questions require even more.

The table below shows which topics I expect people to learn in which courses. (CS1 is taught in C, but for these topics C and Java are very similar.) Links are to existing pages in the Drakepedia.

Topic CS1 CS2 Algorithms Software Development
Development Tools Command Line IntelliJ IDEA Git
Control
Structures
The Main Method
If Statements
Loops
Functional Decomposition
Recursion
Data
Structures
Primitive Types
Operators
Variables
Strings
Arrays
Inanimate Objects
References
Linked Lists
Stacks
Queues
Lists
Sets and Maps
Trees
Graphs
Binary Search Trees
Hash Tables
Priority Queues
Union-Find
Algorithms Analysis of Algorithms
Search
Traversal
Algorithmic Strategies
Sorting
Graph Algorithms
Style Documentation
Omitting Needless Code
Defensive Programming
Object-
Oriented Programming
Constructors
Instance Methods
Wrapper Classes
Access Modifiers
Default Methods
Interfaces
Generics
Inheritance
Packages
Exceptions
Enums
Inner Classes
Libraries java.lang
stdlib
java.util
javax.swing
Software
Development
Iterative Development
Pair Programming
Testing
Debugging
Extreme Programming
Object-Oriented Design
Design Patterns