An introduction to computer science: the discipline, computer systems, the theory of problem-solving and computer applications. Practical laboratory work is an important part of this course.
159.103 Introduction to Games Programming and Simulation15 credits
The essentials of designing and constructing computer games; game software architecture; types of games; basic concepts of Artificial Intelligence; basic concepts of computer graphics; platform and performance issues. This course requires a significant practical programming component.
159.171 Computational Thinking and Software Development15 credits
How to structure problems to find computer based solutions to them. This is a practical course with an emphasis on software construction in a high level programming language, such as Python.
159.172 Computational Thinking and Algorithms15 credits
An introduction to computational structures and processes, building on from159.171 by extending programming ability and putting the developed methods into context. This course combines theory and practice with an emphasis on algorithm design and implementation using a high level programming language, such as Python.
A study of programming in a hardware-oriented language such as C and the construction of object-oriented software solutions using C++. The course has a practical focus based on concepts such as pointers, memory allocation, objects, classes, operator overloading, inheritance, and polymorphism. It addresses techniques such as structuring programs, software testing and debugging techniques, and the use of microcontrollers.
159.271 Computational Thinking for Problem Solving15 credits
An in-depth study of data structures and the design and analysis of algorithms to solve real-world problems. The course has a practical focus based on the correct implementation of algorithms in a high level programming language. An introduction to computability, tractability and strategies to address issues related to intractability.
A study of modern programming paradigms with an emphasis on object-oriented and functional languages, such as Java and Haskell, and including hybrid languages, such as Scala and Ruby. The selection of appropriate languages for real-world applications, such as user-interface construction and concurrent programming, is a focus of this course.
AI programming. State space representation and search. Heuristics. Planning. Game playing. Knowledge representation. Knowledge-based systems. Natural language processing. Machine learning. Reasoning under uncertainty. Philosophical issues.
An intensive computer programming project. Students will develop software as a team and design and implement either a new piece of software or upgrade and enhance an existing project. The focus will be on the algorithms and data structures required for efficient operation.
An introduction to mobile application design. Students will gain practical skills designing, creating and testing a mobile application. They will use a commercial software development toolkit and have the option of publishing their applications to an app marketplace.
A study of the programming and scripting languages, frameworks and tools used to develop web and distributed applications with a consideration of security and privacy issues involved in these technologies.
The Internet is a fundamental platform for communication in our world. The architecture and protocols of this network of networks are essential to how they operate. This course focusses on the associated multi-layer protocol structure of the Internet by showing how it is constructed and how protocols underpin the variety of applications developed to support business, education and social networking.
This course builds on concurrency theory giving practical experience in all aspects of concurrent programming, including issues of synchronisation. Operating systems, structures and techniques are presented as examples of complex, concurrent programs.
Management of the software engineering process. A group project will form a significant component of this course.
159.360 Programming for Computer Graphics15 credits
Generating graphical images and animations involves a variety of concepts and tools, starting from basic modeling and algorithms to advanced tools for graphics programming. The course covers theory and underlying algorithms as well as practical programming exercises including games using 3D graphics.
This course introduces fundamental techniques to create intelligent machines, including formalisms for representing knowledge and reasoning about it, methods for searching and planning, and approaches to machine learning.
Internet of Things, general-purpose input/output (GPIO) programming, sensor integration, cloud computing, wireless and mobile networks.
159.707 Advanced Software Design and Construction15 credits
A study of state-of-the art techniques used to design and construct complex, enterprise-level software systems, including: component-based software engineering, dependency injection, frameworks, design patterns, design analysis, aspect-oriented programming, distributed objects, meta programming and multi-paradigm programming languages.
Graphics devices. Interactive graphics systems. Drawing algorithms. Lines and polygons. Curves and surfaces. Representation of 3-D objects. Perspective. Techniques for visual realism. The course will include practical programming work.
A supervised and guided independent study resulting in a published work.
159.888 Computer Science Professional Project60 credits
Candidates will undertake a practical and/or research project including the design and production of a significant software application. This may be conducted either individually or in groups and assessment may be in a variety of ways including written and oral presentations and software demonstrations.