The Shape of a Program
The problem
“Code graph” sounds like a single representation, but the readings expose a more difficult design problem: which aspects of a program deserve first-class structure? Files and symbols are useful for navigation; syntax trees support structural matching; compiler-derived relations support definitions and references; generalized intermediate representations promise portability across languages.
Beyang Liu’s account of LSP frames code intelligence as a systems-boundary problem. Separating language analysis from editors turns an otherwise multiplicative integration problem into a more manageable one, but the protocol does not eliminate the underlying question of what information a language server should expose. GitHub’s CodeGen approaches the issue from another direction: a scalable language-support pipeline needs representations that can normalize diverse languages without erasing their important differences.
SCIP then makes the trade-off operational. Search-based navigation can be available immediately but imperfect, while precise navigation can be compiler-accurate and cross-repository but requires language-specific indexing infrastructure. The session begins here because every later use—querying, security analysis, ranking, or AI retrieval—depends on what the representation preserves and what it discards.
Readings