This course provides an introduction to computer programming. The language is C++ which is a "real world" language heavily used in games, real-time applications and the control of devices. The course guides students through all the steps needed to write, compile and debug simple C++ programs with lots of practical examples. No previous programming experience is required.
This course introduces the technical aspects of programming using the C language. It is an essential preparation for the advanced courses in C++. The course includes an introduction to number systems and twos complement. The focus is on problem solving and the design of logical and efficient programming solutions.
This course follows 159.101 and continues the technical aspects of programming using the C language. It is an important preparation for the advanced courses in C++. The course includes an overview of the circuits and components of a computer system and an introduction to assembler programming. It advances the programming knowledge obtained in 159.101 to include structures, pointers and bitwise operations. The focus is on problem solving and the design of logical and efficient programming solutions.
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 Programming 115 credits
The focus of this course is on problem solving and the design of logical and efficient computer-based solutions to real-world problems. This is a practical course with an emphasis on software construction using basic data structures and algorithmic methods that are common to many programming languages. The programming language used will be a high level, multi-paradigm, programming language, such as Python. The course is intended as preparation for advanced courses in object-oriented, functional and scientific programming. Students will gain an appreciation of simple software design principles and the ability to create useful custom-built programs.
159.172 Computational Thinking and Programming 215 credits
This course follows on from 159.171 by extending programming ability and putting the developed methods into context. It advances the programming knowledge obtained in 159.171 to include recursion, abstract data types and basic foundations of functional and object-oriented programming. It introduces elements of algorithm design and analysis. The programming language used will be a high level, multi-paradigm, programming language, such as Python. The course is intended as preparation for advanced courses in object-oriented, functional and scientific programming. Students will gain an appreciation of aspects of computer science theory and the ability to program using a range of computational techniques and data structures.
An introduction to the analysis and implementation of algorithms and data structures including abstract data types, linear data structures, trees, graphs, hash tables, searching algorithms, sorting algorithms, optimisation problems and complexity analysis. The course includes a significant practical component covering the implementation and application of important data structures and algorithms.
This course continues the study of computer programming with an introduction to declarative programming languages. The principles of the declarative programming paradigm are explored through practical examples. Key topics include recursion, list processing, lazy evaluation and higher-order functions.
A key course that introduces the principles of object-oriented programming. It covers both object-oriented programming techniques and their application to program design including classes, objects, abstraction, encapsulation, inheritance, polymorphism and generic programming. The course includes a significant practical component involving the implementation of object-oriented programs in Java and C++.
An introduction to the programming principles, methods and techniques of computer graphics. The course covers general graphics methods and techniques alongside the practical considerations for developing graphical applications and includes programming graphical user interfaces with event-driven models, graphics transformations, drawing algorithms and 3D rendering.
A study of embedded programming using low-level programming languages. The course covers the hardware architecture of an embedded system and the techniques needed to write programs for simple peripherals such as switches, LEDs, timers and accelerometers.
159.251 Software Engineering Design and Construction15 credits
A study of techniques, methods and tools used to design and construct high-quality software systems.
An exploration of a range of essential topics for implementing computer games including fundamental computer graphics, games software architecture and game physics systems. The course contains a significant practical computer lab component where students are guided through the games development process.
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.
An advanced study of the principles and techniques used in developing Artificial Intelligence applications. The course includes the implementation and application of a range of AI methods including state-space representation and search, knowledge representation, constraint satisfaction, game playing, logic systems and machine learning.
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.
The course covers many practical aspects of designing, creating, testing and publishing mobile applications. Students will develop mobile applications using a real software development toolkit and have the option of publishing their applications to an app marketplace.
An advanced study in programming Internet applications and modern web technologies including scripting, HTML, client- and server-side programs, web request/response mechanism and Internet security.
159.341 Programming Languages, Algorithms and Concurrency15 credits
Advanced study in models of computation, programming languages and algorithms with a specific focus on concurrent programming. The course includes models of computation, programming language paradigms, programming language design, algorithm analysis, processes, threads, synchronisation and parallel programming.
A detailed study of operating systems and network communication protocols. The course covers the technologies that underpin modern computer systems including the architecture of operating systems and their structures and methods along with computer network design, protocols and associated 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 continues the study of games programming by exploring the development of computer games using a modern game engine. The development of games and specific game systems within a modern architecture are covered with a significant practical component.
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.