Overview

Ability to code in differently constructed programming languages is analogous to speaking in different natural languages with varying grammars. Similar to natural languages, programming languages from different paradigms (styles) vary in their expressiveness and efficiency. One programming language may require many screens-full of complex code to accomplish a task for … For more content click the Read More button below. This unit examines a selection of programming languages and paradigms and explores the evolution of language design from low-level paradigms that are closer to the execution model of the machine, to more high-level declarative paradigms that allow programmers to model a problem precisely rather than specify its solution. The unit covers paradigms such as functional and declarative programming styles, comparing and contrasting them to programming styles that students are already familiar with, including object-oriented, imperative and procedural programming paradigms. We compare type systems supported by various languages, from scripting languages like JavaScript with weak type systems, to gradual typing as in TypeScript, to advanced compiled languages with strong type correctness, such as Haskell. We see these applied to data-modeling techniques (covering polymorphism, mutability-versus-purity, state management, and side-effects) and different models of execution such as strict-versus-lazy evaluation. The unit provides practical experience with using modern functional programming techniques, non-procedural, non-object-oriented programming languages and discusses the influence of programming language theory on the design of current main-stream computer languages, and how the theory translates to practice. A focus of the unit is that these techniques are applicable and ubiquitous in a variety of modern languages, for example, we will see how functional programming techniques are used in relatively conventional imperative languages like JavaScript, and compare and contrast this with pure functional languages, such as Haskell.

Offerings

S2-01-CLAYTON-ON-CAMPUS
S2-01-MALAYSIA-ON-CAMPUS

Contacts

Chief Examiner(s)

Dr Tim Dwyer

Unit Coordinator(s)

Dr Ong Huey Fang

Notes

IMPORTANT NOTICE:
Scheduled teaching activities and/or workload information are subject to change in response to COVID-19, please check your Unit timetable and Unit Moodle site for more details.

Learning outcomes

On successful completion of this unit, you should be able to:
1.

Describe the major attributes that differentiate programming paradigms considered;

2.

Describe the major features, strengths and weaknesses of important programming languages in the context of their historical development;

3.

Analyse and critique past, present and future programming languages;

4.

Evaluate the suitability of different paradigms for different problem types;

5.

Design and implement programs in several programming languages of different paradigms and demonstrate an ability to solve more complex problems in at least one non-procedural paradigm;

6.

Describe the theoretical aspects of modern programming paradigms and apply this theory to analysis and design of programs.

Teaching approach

Active learning

Assessment

1 - In-semester assessment

Scheduled and non-scheduled teaching activities

Lectures
Tutorials

Workload requirements

Workload

Availability in areas of study

Advanced computer science
Computational science