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
- Crash Course on Generative AI
- Version Control
- git
- pre-git VCs
- git vs. GitHub
- Build Systems
- Types of build systems
- Practical Examples
- What is a Dependency?
- Debugging
- Breakpoint types
- Interacting with APIs
- REST
- GraphQL
- Human Factors & The Big Picture
- Not treated in depth here, hopefully treated in more depth in
- Why Canāt We Make Simple Software? - Peter van Hardenberg
- The Death of the Stubborn Developer