Programming is fun You no doubt have a phone, laptop, tablet and so on, your car may have a navigation system, park itself, and have surround-space scanners, and you may be able to control your heating from a mobile. All of these cool devices work using program code. At the heart of coding such systems are state-of-the-art technologies including Android, C, Haskell, Java, JavaScript, Python, PHP, Prolog and R, and programme development environments such as Eclipse. At Leicester you will be taught to program in a selection of these languages, and have opportunities to learn others in project work. Programming will not only include mobile and web applications and technologies, but also new styles of programming such as functional and logic-based languages. The course covers the methods for developing software, following rigorous engineering practices. You will learn how to plan and manage software architectures for practical large-scale development projects, while adopting an academic and rigorous approach which will support you throughout your career. We cover: how to understand customer requirements, specify, design and code a solution, and test and release your solution to your customer. You will learn about mathematical models of computation such as automata and register machines, and formal language theory. Modules in computer architecture, operating systems and networking cover essential knowledge of modern computing systems (mobile computers to world-distributed computation). And, of course, we cover databases and information systems. In optional modules you can learn about a range of advanced topics including user interfaces, web technologies, mobile applications, security, distributed systems and applications, and concurrency theory.