Making Code Kevin Dill Group Technical Staff Lockheed Martin Mission Systems & Training
Everything I’ve Learned in 15 Years (most of it probably wrong) Kevin Dill Group Technical Staff Lockheed Martin Mission Systems & Training
Background Industry Expert on Game AI 9 year game industry veteran Teaching: Harvard, Boston University, Northeastern Technical Editor: Cengage Learning, CRC Press Group Technical Staff, Lockheed Martin
Caveats I come at this as a software engineer, not a project manager I’m really an AI guy at heart
Agenda The Development Cycle o Conventional vs. Game Programmers vs. Software Engineers Modular AI
The Development Cycle Find something somebody needs done o BAA (Broad Agency Announcement) o SBIR (Small Business Innovation Research) Find partners Propose o Talk to customer o Quad Chart o White Paper o Proposal o Award! We need a consistent flow of work! o Being huge actually helps with this
The Development Cycle Conventional Project o Flight Maintenance Trainer Identify & prioritize requirements Design Build Validate Maintain Waterfall o Predefine every requirement o Milestones o Deliverables Agile o Backlog o Sprints o Burndowns
The Development Cycle Game Project o The Mars Game Preproduction o Brainstorm roughly what the game is about o Identify and prototype high risk features Production o Build out the main features o Code complete o Content complete Polish o Find the fun o Fix the bugs Gold Master Candidate One step forward, two steps back Games are never finished (just shipped)!
Context Switch
Programmers vs. Software Engineers That moment when you build the awesomely complex piece of code… and it ALL WORKS! Natural Coder Hacker o Very good at holding complexity in his/her head o Likes clever tricks o Likes intense, hard-to-solve problems “This makes my brain hurt” o Prefers concise, densely meaningful code Why use five keystrokes when three will do?
Programmers vs. Software Engineers “Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?” - Brian Kernighan (author of Unix and C)
Programmers vs. Software Engineers That moment when you realize an amazingly simple way to do express something complex Software Engineer o Very good at reducing complexity o Likes techniques that reduce effort o Likes self-documenting code o Likes design patterns & standard ways of doing things May also be a strong natural coder
Is This Software Engineering? Techniques o Test Driven Development (TDD) o Unit Tests o Pair Programming Code that is… o Well encapsulated o Loosely coupled o Self documenting Maybe… o Is it simpler? o Is it easier to understand? o Is it easier to change? One rule: Death to Duplicate Code!!!
Another Context Switch
Modular AI
Making Code Kevin Dill Group Technical Staff Lockheed Martin Mission Systems & Training