A background in engineering, sciences, mathematics or technology. This is evidenced by the content of the first degree. Other students may be considered, depending on space, after discussion with the module tutor. This will be determined by discussion with the tutor.
Overview: The module will cover a broad range of topics from the field of computing, starting from the fundamentals and exploring, in relative detail, more advanced concepts and methods and the design and understanding of algorithms.
Current progress in information technology has meant the majority of organisations are using IT to innovate, and without an understanding of fundamental computing concepts future managers, scientists, engineers will be unable to take strategical decisions and provide critical thinking on most projects in full confidence.
The module is focused around two core themes in computing: algorithms and programming/development. These two concepts go hand in hand and it is understood that to be a good developer, algorithmic concepts need to be comprehensively understood and students should be able to critical apply knowledge from the theoretical aspects towards practical implementations of solutions for complex system designs in business, engineering, science and IT.
The programming focus is based on the C/C++ programming language, considered by many as one of the harder programming languages and still the language of choice in many industries – once mastered the transition to the other popular programming languages Java, C-sharp, Objective C and python are relatively straightforward. Importantly, this is not about teaching programming but about forming a conceptual understanding of computing principles with programming as a vehicle to further grasp these concepts with the added bonus of adding an important skill to the CV. Future editions may adopt other programming languages.
The over-arching aim of this module is:
Give students the ability and confidence to solve problems efficiently using computers.
The sub-aims of this module are:
- Form an understanding of some classic algorithms from the literature
- Develop the understanding of which solutions/algorithmic paradigms work best for certain types of problems
- Design straightforward algorithms for yet unseen problems that have straightforward solutions
- Learn programming methods and how to design good code for a proposed algorithm
Upon successful completion participants will be able to:
- master a sound, conceptual understanding of the theory and concepts of programming and fundamental algorithms and data structures.
autonomously distinguish the right solution for a given problem from amongst a set of algorithmic and programming tools.
have a sound ability to evaluate and make educated choices when problem solving.
program effectively and independently in a high level programming language at an intermediate level.
take, straightforward to complex, algorithmic concepts, whether created or based on literature and implement them correctly.
Sorting as an introduction to algorithms, data structures, complexity and decision making
Brute force and divide and conquer methods for solving problems via exhaustive search and recursion
Graph algorithms – algorithms based on graph theory for solving problems that can be expressed as graphs
Misc. algorithms (eg string matching, spatial data structures etc.) as part of in-class tutorials, introduced throughout the module.
Limitations of algorithms and coping with limitations
Conclusions, recap and next steps
Introduction to programming
Introduction to C/C++
Dealing with pointers
Generics and abstract data types
Concepts of Object Oriented Programming
Brief introduction to multithreading
Demonstrations and group work
- Worksheets solving one/two problems from each lecture - 2 versions of problems one more advanced for more advanced students
- Group project (in class) – learn advantages, pitfalls and practicalities of programming as part of a team
2000 Words report accompanying a programming assignment (100% weighting).
Seminar: 3 hours
Total Learning Hours : 37.5 Hours