AI for Software Engineering
How to use AI to do software engineering (mid 2025 version!)
Learning Outcomes
- be able to explain components of the AI4SE lifecycle:
- prompting
- context and RAG
- tool use with MCP
- evals
- models and pitfalls
- use a modern LLM for software development
- contextualize the places AI can assist in, replace, and/or hinder good SE practices and good SE systems.
Topics and slides
These are the submodules I covered in class.
Readings (before class)
- Simon Willison: How I use LLMs
- Simon Willison: The Last 6 Months in LLMs
- Fowler: Exploring GenAI series;
- Gene Kim/Steve Yegge pairing with Claude Code (watch)
In the previous class we installed a common set of AI tools. Make sure that this works for you on a machine you can bring to class.
Exercises
These are done in class. The source code below is a combo of what I typed and what I prepped before hand.
- Vibe Coding example - no code worth sharing
- Using Gemini to do “data science” (file is AI generated)
- Promptfoo and promptfoo config file
Optional Readings and Activities (so many … send more!)
- Fowler: Patterns for GenAI series
- Kalliamvakou: quantifying GitHub Copilot’s impact on developer productivity and happiness
- Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
- Willison, LLM tutorial - I drew on this a lot for my notes.
- Tim Bray, Claude and Go and pointers
- Thoughtworks Consultants on what works
- Kent Beck on building a library
- helpful prompt suggestions to fix Claude mistakes
- on the transition from craft to oversight in SE
- maybe AI isn’t as great as it is made out to be?
- Guy who has been around protocols for a while talks MCP.
- Context engineering summary
- Model Context Protocol
- Spec for MCP
- Best Practices for Agentic Coding
- Contexts
- AI at Shopify