Skip to main content

Fundamentals of Computing and Programming

Introduction

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 with a particular focus on 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.

The over-arching aim of this module is to:

  • Give students the ability and confidence to solve problems efficiently using computers.

The sub-aims of this module are:

  • Form an understanding of classic algorithms from the literature
  • Develop the understanding of which solutions/algorithmic paradigms work best for certain types of problems
  • Design such algorithms for yet unseen problems
  • Identify what the limits of given algorithms are
  • Learn programming methods and how to design good code for a proposed algorithm

Objectives

Upon successful completion participants will be able to:

  • Master a sound, conceptual understanding of the theory and concepts of algorithms and data structures.
  • The ability to distinguish the right solution for a given problem from amongst a set of algorithmic tools.
  • Demonstrate substantial knowledge in finding the complexity and efficiency of algorithms from a reading/study of the algorithm.
  • A sound ability to make educated choices when problem solving.
  • Ability to program effectively at an intermediate to advanced level.
  • The ability to take algorithmic concepts, whether created or based on literature and implement them correctly.
  • An understanding of the C/C++ programming languages.
  • The ability to be able to understand what can currently be achieved by computing, what can be achieved in the future and what cannot be achieved at all.

Syllabus

Lectures (further detail of lectures can be provided as of now if required):

  1. Introduction
  2. Sorting as an introduction to algorithms, data structures, complexity and decision making
  3. Brute force methods for solving problems via exhaustive search
  4. Divide and conquer algorithms for recursively solving problems by dividing them into sub-problems
  5. Data structures
  6. Dynamic programming and greedy methods
  7. Graph algorithms – algorithms based on graph theory for solving problems that can be expressed as graphs
  8. Misc. algorithms (eg string matching, spatial data structures etc.)
  9. Limitations of algorithms and coping with limitations
  10. Conclusions, recap and next steps

Tutorials:

  1. Introduction to programming
  2. Introduction to C/C++
  3. Types
  4. Commands
  5. Dealing with pointers
  6. Generics and abstract data types
  7. Concepts of Object Oriented Programming
  8. Inheritance
  9. Polymorphism
  10. Brief introduction to multithreading

Demonstrations and group work:

  1. Worksheets solving one/two problems from each lecture - 2 versions of problems one more advanced for more advanced students
  2. Group project (in class) – learn advantages, pitfalls and practicalities of programming as part of a team

Assessment

Type of assessment :100 % weighting of essays/coursework 2000 Words

Note: the assessment will be based around solving set problems and will constitute a programming assignment. A 2000 word report will accompany the submission to help explain student choices in the solution design.

Marks returned as a single consolidated mark following post-module assignment.

Pre-Requisites

Attendance on the ES9H5-10 (CRPO) Computer Programming module, or equivalent experience using basic programming constructs in any programming language.

Duration

Module duration: (weeks) 1
Lectures:15 (hours)
Seminar: 3
Tutorials:19.5
Total Learning Hours : 37.5 Hours