I taught ECS161 (Programming Tools) at UC Davis in Spring 2024.

Course materials are not here yet, I hadn’t yet switched to this course site from Canvas. I will port them over at some point.

This is how I might structure the course topics, if I teach the class again:

  • Programming Tools Intro
    • Why is there a class about this? Who cares what tools I use?
    • Easy tools vs. Powerful tools
    • Were GUIs a mistake? Avoid clicking buttons.
    • Programming is not about programming
    • Paying for Tools
      • Prioritizing access to quality tools is intrinsic to being a craftsperson. Software is no different.
    • Learning Objectives:
      • Question the common mindset: ā€œI cannot afford 200 one-time for a premium toolā€.
      • Question the common mindset: ā€œthis tool is bad because I can’t immediately see how to use itā€.
      • Reflect on what makes a good tool.
      • Understand the arguments for why programmers might prefer to use programmable interfaces.
      • Describe the programming tools you are already familiar with, and what you use them for.
  • Integrated Development Environments
    • IDEs vs. Editors
    • Efficient Navigation
      • Modal Editing
      • Window management
      • Search
      • Structural Navigation
        • Go to Definition
        • …
    • VSCode Practical Tips
    • Language Server Protocol
  • AI Programming Tools
    • Crash Course on Generative AI
      • What is a language model?
      • How are language models trained?
      • How do we get a dialog system from a langauge model?
      • Are language models trustworthy? What influences correctness of LLM outputs?
    • Prompting
    • AI Programming workflows
      • Chat
      • Autocomplete/Copilot
      • Highlight-and-prompt
      • ā€œAgenticā€
      • …?
      • Model Context Protocol
  • Version Control
    • git
    • pre-git VCs
    • git vs. GitHub
  • Build Systems
  • Debugging
    • Breakpoint types
  • Interacting with APIs
    • REST
    • GraphQL
  • Human Factors & The Big Picture