Labs are where you will work on practical programming skills, under the guidance of experienced tutors.

Read the tasks for the week before you attend the labs, and make a plan on how to approach and solve the tasks ahead of time. The tutors will be are there to help and give you feedback for your ideas (not to do the job for you).

The lab documents are finalised by Monday morning, before the first lab of the week—otherwise they are just a sneak preview (and can still change).

Acknowledgements

Material in these labs was developed in 2019 by Debasish Chakraborty, David Quarel, and Ranald Clouston, building on previous labs developed by Uwe Zimmer, James Barker, Clem Baker-Finch, Tony Hosking, Ekaterina Lebedeva, and many others. Copyright © The Australian National University, All Rights Reserved.

    Schedule and Tutors

    All labs are in either Hanna Neumann Building 145 room HN 1.23, or the ground floor of CSIT Building 108 rooms N112, N113, N114.

    » read more

    15
    Jul
    2019

    Week 0: Before you start

    It is essential that you use StReaMS to enroll in a lab session before Week 1 (this will be available from Week 0).

    » read more

    22
    Jul
    2019

    Week 1: ANU environment, Linux, Haskell

    Welcome to Week 1 lab for Programming as Problem Solving! The aim of this lab is to help you get started in the lab computing environment and introduce tools you will use throughout the course. If you have questions you can ask your tutor for help. If your tutor is busy with another student feel free to work with one of your lab mates to figure things out.

    » read more

    29
    Jul
    2019

    Week 2: Gitlab, IntelliJ and #MoreHaskell

    This week’s lab will introduce you to more important parts of the computing environment of this course, particularly Gitlab, which will be used every time you submit work. We will then further introduce you to programming with Haskell.

    » read more

    5
    Aug
    2019

    Week 3: Algebraic Data Types, Pattern matching, and Guards

    In this lab we will look at algebraic data types, pattern matching with the case command, and guarded expressions.

    » read more

    12
    Aug
    2019

    Week 4: Cabal and CodeWorld

    In this lab, we will meet the Cabal package manager, which helps us work on projects with dependencies between multiple files. We will then program with the codeworld-api library, which provides us with types and functions for drawing and transforming various shapes.

    » read more

    19
    Aug
    2019

    Week 5: Recursion and Lists

    In this lab we learn about the concept of recursion, which gives us the ability to “loop”, or repeat the same instruction many times over. We also investigate our first recursive data type, lists, that can pack many instances of a type together. We will write recursive functions over integers and lists.

    » read more

    26
    Aug
    2019

    Week 6: Recursion and Lists

    This lab covers more recursive functions over lists, the concept of parametric polymorphism, and how it can be used to write functions that operate on more general types than before. We will see some examples of custom recursive data types, and how to write recursive functions over them.

    » read more

    16
    Sep
    2019

    Week 7: Style and Testing

    This lab covers two aspects of code quality: style, which is the way to write readable code; and verifying correctness via testing.

    » read more

    23
    Sep
    2019

    Week 8: Higher Order Functions

    In this lab we cover higher order functions, in particular functions that can take other functions as input. These can be used to avoid rewriting common code patterns, and generalise many patterns of recursion that we’ve already seen.

    » read more

    30
    Sep
    2019

    Week 9: Trees

    In this lab we cover the concept of trees, how they differ to lists, and how we can write recursive functions that operate on trees.

    » read more

    7
    Oct
    2019

    Week 10: Type Classes, Ad Hoc Polymorphism, Binary Search Trees

    In this lab, we cover type classes and ad hoc polymorphism, and how we can use these concepts to generalise functions that require some assumptions about the input type. We also continue the topic of trees from last lab, and introduce binary search trees, which are trees with a special ordering constraint that gives them a great advantage over binary trees in terms of computational efficiency.

    » read more

    14
    Oct
    2019

    Week 11: Complexity

    In this lab we discuss the topic of algorithmic complexity is, and learn how to determine the complexity of a particular algorithm. We also learn how to use big-O notation to describe complexity.

    » read more

    21
    Oct
    2019

    Week 12: Exam Prep

    In this lab we recap the course, and provide lots of exercises for you to work on with your peers to help prepare for the final exam.

    » read more

Updated:  01 Jul 2019/ Responsible Officer:  Director, RSCS/ Page Contact:  Course Convenor