Department of Electrical, Computer, and Software Engineering
SOFTENG 281
Semester 1 (2025)

Main Navigation

  • Home
  • Calendar
  • Connect
  • Assessments
  • Topics
  • Resources
  • Music
  • Search

SOFTENG 281

Welcome to SOFTENG 281!

Important Announcements

  • Edit Wednesday 4th June 2025: Phew! The test is going ahead as planned. It seems that the network outage has been restored. All the best for the test tonight.

  • Friday 30th May 2025: Everything you need to know for the invigilated, closed-book, and in-person Test 2 is now available. There are essential action points you need to prepare for, well ahead of the test. Please read this carefully.





This is the official website for SOFTENG 281, where you will find most of the materials needed to enjoy and do well in the course.

Canvas will still be used for announcements and grading purposes.




Course Outline

(Link to the Digital Course Outline)


Course Overview

This one semester course is the first exposure to key software engineering programming principles, going beyond the basics of coding. We will be using the Java programming language to learn object-oriented programming (OOP). Rather than merely “coding”, the focus will be on designing (and of course writing) beautiful code!

SOFTENG 281 is about teaching you the art of software development. We will take an Engineering approach to develop software. While it involves some technicalities surrounding the coding, developing complex software is more about: (i) Modeling a problem, (ii) Designing a solution, and (iii) Building a quality software product to address that problem.

In addition to learning key OOP concepts, we will be using professional development tools such as an IDE (VS Code), version control (Git with GitHub), build tools (Maven), and testing frameworks (JUnit). There will be a high emphasis on following code style conventions, as this is essential in establishing good habits.

  • Weeks 1 to 6 (Nasser Giacaman)
    • Introduction to development tools (compiling, Maven, Git, GitHub)
    • Programming (in Java)
    • OOP fundamentals: classes, abstraction, encapsulation, inheritance, polymorphism
  • Weeks 7 to 12 (Valerio Terragni)
    • Exception handling
    • Basic design patterns
    • Fundamental data structures
    • Basic algorithms


Learning Outcomes

By the end of the course, you should be able to:

  1. Apply core object-oriented programming concepts, including encapsulation, inheritance, polymorphism, and abstraction, to develop modular and maintainable Java applications.
  2. Design and implement Java programs using classes, methods, control structures, and exception handling to solve computing problems effectively.
  3. Use common design patterns to create flexible and reusable software solutions in Java.
  4. Select and apply appropriate data structures and algorithms, including sorting and searching techniques, to solve computing problems.
  5. Apply code style conventions and use Git version control to manage code effectively, ensuring code quality, maintainability, and systematic tracking of software development progress.




Workload Expectations

This course is a standard 15 point course, and students are expected to spend 10 hours per week involved in each 15 point course that they are enrolled in.

This course will run in a semi-flipped classroom manner:

  • You will be expected to dedicate time before each scheduled lecture to study new material from online resources provided to you (such as pre-recorded videos and readings).
  • We will then use the in-class lecture times to engage with hands-on programming exercises to strengthen understanding.
    • You are encouraged to bring a laptop to lectures. Thanks to some of the online technologies we are using, a tablet or even smartphone might do the trick (but not ideal compared to a laptop).

There will be an expectation of spending:

  • About 2-3 hours a week self-studying new material (such as pre-recorded videos).
  • About 3-4 hours a week attending lectures, and engaging with in-class exercises.
  • About 4-5 hours a week working on assignments and/or test preparation.




Academic integrity

The University of Auckland will not tolerate cheating, or assisting others to cheat, and views cheating in coursework as a serious academic offense. The work that a student submits for grading must be the student’s own work, reflecting their learning. Where work from other sources is used, it must be properly acknowledged and referenced. This requirement also applies to sources on the world-wide web.

All students’ assessed work will be reviewed against electronic source material using computerised detection mechanisms.

Using GitHub also helps demonstrate that you have done your own work, as it will show how you have progressed the assignments throughout the semester.




If you have any questions

The teaching team is excited be here and help!

  • For face-to-face help, pop into one of the Drop-in Labs or ECSE Part II Assistance Centre sessions.
  • For remote help, use Ed Discussion.
  • For personal questions/concerns, email the instructor concerned.
  • For administrative questions/concerns, email the course coordinator.

See the Connect page for more information about these.





Teaching Staff

(Course Coordinator)
Nasser Giacaman

(Instructor)
Valerio Terragni

Teaching Assistants

Amanda Lowe

Dhanushka Jayasuriya

Hoda Yamani

Fares Selwadi

Jamie Lee

John Moore

Ravindu Ramesh Perera

Rebecca Fitzpatrick

Victor Qiu

Zhengdao Li

Department of Electrical, Computer, and Software Engineering,
The University of Auckland,
Auckland, New Zealand

© Copyright 2025. Powered by Jekyll with this theme. Hosted by GitHub Pages.