Year
2019
Units
4.5
Contact
1 x 120-minute lecture weekly
10 x 50-minute seminars per semester
10 x 2-hour computer labs per semester
Prerequisites
1 of COMP8741, COMP8801
Enrolment not permitted
1 of COMP3722, COMP8722 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
  6. To understand and be able to work with the formalisms of the theory of computations and be able to approach research papers in this area or that assume a basic knowledge of theory of computation
Expected learning outcomes
At the completion of this 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 an advanced understanding and familiarity with the broad range of programming languages, paradigms and libraries/APIs
  3. Have a deep theoretical understanding of computability and complexity capable of being applied practically in 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. Have demonstrated experience and expertise in logical, functional and hybrid paradigms of programming and system development, along with familiarity with a broad range of languages and styles that are knowledge, rule and logic based rather than depending on low level step by step instructions