This course is an introduction to the fundamental principles and techniques of software construction that have greatest impact on practice. Topics include capturing the essence of a problem by recognizing and inventing suitable abstractions; key paradigms, including basic concepts of software design and their expression using notations from Unified Modeling Language (UML); concurrent programming, including programming with threads and processes, understanding concurrency problems like deadlock and data race, concurrent program testing, reasoning about concurrent programs using systematic methods and tools. This course includes exercises in software design, implementation and reasoning.
- Develop medium-scale software system from scratch: formulating and analyzing the problem to be solved; exploring and formulating system designs implementing in Java; and using testing and reasoning to ensure quality.
- Apply key software engineering ideas, including invariants, decoupling, and data abstraction.
- Apply key software engineering ideas, including software design, specification, abstraction, verification and correctness.
- Use widely used design concepts and notations (UML diagrams) and patterns in exploring and articulating
problems and designs.
- Learn effective techniques on ensuring quality of concurrent programs.
- Create game prototyping (LO1).
- Formulate solution to design-related questions prior to game development. (LO1).
- Apply game theory in game designs. (LO1).
- Use the most popular game engines and tools to develop games. (LO2).
- Use code libraries to quickly create runnable games. (LO2).
- Design a game with efficient user control and interface (LO3).
- Develop a mobile game using limited computation resources on smartphone. (LO4).
- Analyze the game design, marketing strategy, and promotion skills of successful game (LO5).