On completion of this module students should be able to: 0. understand the need for, and key components of, working in teams. 1. show expertise in the basic and intermediate concepts, purpose, and use of the core tools of the trade in software development including several of the following topics: operating systems, build systems, version control, bug tracking, process, system design, assertions and specifications, code standards, and metrics. 2. have a broad knowledge of the programming language(s) used in the course. 3. have a broad knowledge of the operating system(s) used in the course. 4. have a broad knowledge of the technologies used in the course. 5. define and defend a project proposal. 6. give a demonstration of a project to their peers and other School staff. 7. be able to write specifications of programs and algorithms in a clear and concise fashion.