Year one
We want to give you a really strong education in the fundamentals of computer science, so in first year you'll be given an overview of the subject and gain a firm foundation in the principles of algorithms, artificial intelligence and relevant maths. You will also learn computer programming in Java - an invaluable language widely used in business and industry.
We want you to have a chance to follow your own passions whilst studying, so in your first year you are also given a chance to pursue your own interests, via work within robot programming in the Artificial Intelligence module. We encourage group work as part of our commitment to preparing you for the world of employment and you will learn valuable skills.
Like all UAE Ministry Of Education Higher Education Institutions we run the below listed compulsory modules. These modules are designed to support talented graduates in the region, with the skills to aid and further employability.
- Arabic Language 1
- Innovation, Entrepreneurship and Sustainability
Please note these modules must be completed and passed, in addition to your core programme modules, during the course of your degree. For further information on these modules please contacts us on dubai@contacts.bham.ac.uk
Year two
In the second year you move on to study enabling technologies and their application. You will learn about a wide range of subjects from the mathematics for modelling and decision making which underpins much of modern machine learning, to systems-level programming, networks, and cyber security. Your programming repertoire will be broadened by exposure to the C programme language plus further functional programming. You will also be taught professional software engineering techniques and apply them to develop a large team project in Java such as a multiplayer networked game.
You can also apply to spend the second year of your BSc Computer Science course at our campus in the UK.
Year three
In the final year of your BSc computer science course you will obtain a huge amount of training and experience so you can maximise on your degree to achieve your ambitions and interests.
You’ll spend one third of your time on a project, either developed from your own idea or from a wide selection offered by staff members. This usually involves writing a large piece of software and gives you the freedom to extend and demonstrate your skills in your own way. We will also introduce you to Machine Learning and Advanced Networking.
Compulsory
Optional modules
Choose 80 credits, examples of optional modules listed below, each module is 20 credits:
Please note: The modules listed on the website for this programme are regularly reviewed to ensure they are up-to-date and informed by the latest research and teaching methods. Unless indicated otherwise, the modules listed for this programme are for students starting in 2023. On rare occasions, we may need to make unexpected changes to core modules; in this event we will contact offer holders as soon as possible to inform or consult them as appropriate.
Why Study Intensive Programming (for the connected world)?
Programming plays an important role in this modern age. Imagine you walk into your house and your lighting automatically changed according to your mood, your sofa was set to your favourable seating position, your favourite TV channel switched on, and the coffee machine had already prepared your favourite coffee. How could all of this happen? Programming can give life to any computing device. A programming language powers computing devices to collect, control, store and process data accordingly.
There is a continuously increasing number of businesses and industries relying on computer programming. Programming languages, such as Java, JavaScript, C#, C++. PHP, Python, SQL, Perl etc, evidently are the driving force behind the advances in Robots, Voice Recognition, Artificial Intelligence, Block Chain, Virtual Reality, Internet of Things, Cloud Computing, and Big Data, to name a few.
Programming has become a necessity in our digital world, not only in the IT industry, but also in business, engineering, medicine, healthcare, fashion, marketing, gaming, mobiles, websites, multimedia to name only a few.
In our degree programme, we focus on intensive programming in order to develop strong programming skills in our students.
Relevant modules we offer that cover programming
Programming in Java
The Java programming language continues to be one of the most popular languages in industrial software development. The module will introduce you to the Java language. In addition to the language itself, you will learn basic imperative algorithms and data structures along with exposure to principles of object orientation.
Operating Systems and Systems Programming
This module introduces the C/C++ family of programming languages, including programming language design issues arising from the various extensions of C that have been developed. The module assumes some familiarity with programming in Java, and it will emphasise the differences between C-style languages and Java, such as garbage collection vs memory management and pointers.
Robot Programming (in Artificial Intelligence)
In this part of the module, you will will learn how to program and command robots using Java programming while also applying artificial intelligence algorithms. This is a very practical area where you will work in small and big teams to program robots to navigate autonomously and in coordination with other robots.
Data Structures and Algorithms
In order for programs to run efficiently, data must be organised in a structured way and also accessed by algorithms as efficiently as possible. This course will introduce a principled way in which data can be organised. It will also teach how the efficiency of a program can be measured in terms of complexity, and how complexity can be estimated mathematically given a problem. This module has both a theoretical and practical nature.
Why Strong Theoretical Foundations?
The digitally-driven world changes fast, with digital trends raising and fading away in the span of a few years. One example is today's popularity of artificial intelligence, which only 15 years ago was extremely unpopular not attracting much funding from the private and public sector. At the same time, computing skills have an ubiquitous usefulness in society, finding applications much beyond IT, for instance in medicine, biology, finance, banking, businesses, fashion, gaming, and policy-making, among others. An education purely based on practical training would only train a professional that could cope with the current technologies, but unable to cope with changing landscapes (e.g. with the advent of another mainstream technology in 10 years) or unsuitable to cope with a domain that was not represented during training. A strong theoretical foundation along with a balanced mix of practical training is therefore crucial to acquire lifelong cores skills of general applicability, but at the same time it offers the necessary practical skills to enhance employability prospects after graduation.
Relevant modules covering theoretical foundations of computer science
Mathematical and Logical Foundations of Computer Science
Mathematical and logical reasoning underpins almost all of Computer Science, from linear algebra in graphics and machine learning, to algebra in cryptography and logic in verification.
This module introduces essential topics in mathematics and logic including linear algebra; abstract algebra; set theory (a fundamental language of mathematics); and propositional and predicate logic. The key ideas will be illustrated with applications across a range of topics in computer science.
Theories of Computation
This module introduces the quest to solve computational problems, and the analysis of how difficult that may be. Some problems are easy, some are hard (as far as we currently know), and some are impossible. We start by looking at syntactic correctness problems.
They come up so often in computing practice that special languages have been invented for them: regular expressions and context free grammars. We'll look at apparently hard problems, such as solving a Sudoku puzzle of unlimited size, or planning a route for the legendary travelling salesperson. Can they be solved efficiently? Nobody knows! Then there are examples of the baffling P=NP question, which has flummoxed computer scientists for decades.
Finally, we'll look at impossible problems, such as testing whether a program code is correct. How useful it would be to do this automatically! But alas it can't be done, and we'll learn why not. At each stage, we start with an intuitive idea of what a computer is and how it runs, and turn this into a mathematical definition, following in the footsteps of the famous computing pioneer, Alan Turing. This brings the power of mathematical reasoning to bear on these key challenges at the heart of computer science.
Data Structures and Algorithms
Algorithms lie at the heart of computer science and software development. They embody the way in which we solve problems using computers. This module will introduce the fundamentals of data structures and algorithms. Data structures will be formulated to represent information in such a way that it can be conveniently and efficiently manipulated by the algorithms that are developed. The ideas will be presented both abstractly, and via problem-solving and implementations.
Functional Programming
Functional Programming is another way of implementing software, by dividing the programs into pure functions. In simple terms, a functional program focuses on results, not on the process and the emphasis is on what is to be computed? Functional programs avoid the concepts of shared state and mutable data as we typically observe in imperative and Object-Oriented Programming languages.
Functional languages emphasize on expressions and declarations rather than execution of statements. Therefore, unlike other procedures which depend on a local or global state, value output in functional programs depends only on the arguments passed to the function. Some of the key features of functional languages include pure functions, immutability, recursion, higher-order functions, curried functions, monads, dependent types, and type classes.