1 x 120-minute lecture weekly
1 x 60-minute seminar weekly
1 x 120-minute computer lab weekly
1 of COMP2711, COMP2741, ENGR2701
Enrolment not permitted
1 of COMP8722, COMP9722 has been successfully completed
Topic description
This topic is concerned with the concepts and mechanisms that underlie modern programming languages as well as providing insights into the capabilities and limitations of languages, computers and algorithms. The topic combines both theoretical foundations and practical demonstrations of issues relating to programming and algorithm design. It teaches fundamental skills necessary to selection of an appropriate programming paradigm for a problem, whilst highlighting the distinct and overlapping capabilities of three families of programming languages. The topic examines concepts such as types, variables, binding, abstraction, parameterization, encapsulation, generics, polymorphism, inheritance, recursion, iteration, formal languages, automata, logic, proof, decidability, computability and complexity. It uses as vehicles for illustration and exploration multiple languages supporting a variety of programming paradigms, including the procedural, functional, object-oriented and logic programming paradigms. The topic has an emphasis on design and evaluation of efficient, efficacious programs, including analysis and benchmarking of programs, with close integration of the theoretical and practical components, and workshops to assist in application of theory.
Educational aims
  1. To be able to specify and implement algorithms in an appropriate paradigm with an understanding of how to estimate what performance (efficacy and efficiency) can be expected and what resources will be required
  2. To understand and be able to employ Logic Programming, Functional Programming, Object Oriented Programming and von Neumann (Procedural Programming) paradigms
  3. To be able to set up, carry out and appropriately report on theoretical and practical evaluation (analysis and benchmarking) of computer routines and use this information to improve the performance of a program
  4. To be able to write clear portable code that is independent on machine, language and compiler dependencies
  5. To develop an ability to work alone both in a team, including to integrate work and build extensible systems, and to negotiate an ethical solution acceptable to a diverse range of stakeholders

Expected learning outcomes
At the completion of the topic, students are expected to be able to:

  1. Understand the concept of paradigms and the effect of language, paradigm, data structure on the design of algorithms
  2. Have the basic foundations to deal with the broad range of programming languages, paradigms and libraries/APIs
  3. Use both theoretical and practical means of assessing the requirements of a proposed system and analysing the performance of an implemented system
  4. Utilize concepts from one paradigm in a language or context associated with another paradigm, choosing the most appropriate paradigm for the job
  5. Be adept at styles of programming and system development that are knowledge, rule and logic based rather than depending on low level step by step instructions