CSSE2002 — Programming in the Large
Overview
Working on large and complex software systems, and keeping those systems maintainable, requires disciplined individual practices: software must be well-specified, well-implemented, and well-tested. This course covers concepts and techniques in modern programming languages that support good practice — OO concepts, genericity, and exception handling — with specific application to file IO and GUIs, taught in Java.
Higher-level language constructs (classes with robust, compact interfaces) are needed to manage the complexity of large software systems. The course uses Java to introduce object-oriented programming, data abstraction, design, refactoring, and unit testing, aimed at making an individual’s code contributions fit for integration into a larger codebase.
What this course isn’t: not just a Java-syntax course — knowing Java is a means to the actual goal of individual programming discipline at scale.
Assumed background / prerequisites
- Prerequisite: CSSE1001 or ENGG1001 (or equivalent). Incompatible with COMP2500, COMP7908, CSSE7023.
- Assumed Python skills: variables; control flow (for/while/if); defining and calling functions; recursion; fundamental data structures (arrays, lists, strings, dictionaries); instantiating and defining classes; inheritance.
Staff
- Dr Thilina Halloluwa — course coordinator & lecturer — CSSE2002@eecs.uq.edu.au — office 78-318, consultation via email.
Course structure
- 2 units (~10 hours/week).
- Lecture (2 hours/week) — theory and demonstrations. Lectures begin in Week 1.
- Applied Class (1 hour/week) — theory exercises; critical for the final exam. Starts Week 2.
- Practical (2 hours/week) — programming practice; bring your own laptop. You can get help, but assessment must be solo work. Starts Week 2.
- CodeCamp sessions (~30 min) — sign up via
signon@eait.uq.edu.auif you have issues. - Ed Lessons — weekly Java programming exercises (the “Problem Sets” assessment item below).
Learning outcomes
After successfully completing this course you should be able to:
- Implement object-oriented programs according to their specifications.
- Test components of object-oriented programs (using a testing framework).
- Write, document and analyse code which uses language features such as inheritance, interfaces, exceptions and I/O.
- Judge whether a program follows good practice.
- Write, interpret and critique specifications for program modules (e.g. classes or interfaces).
Assessment
| Assessment | Weight | Due | Notes |
|---|---|---|---|
| Ed Lessons / Problem Sets | 10% | Weekly Wednesdays 1pm — Weeks 2, 3, 4, 5, 8, 9, 12, 13 (best 6 of 8 count) | Online (Ed Lessons); no extensions (answers released quickly); 100% late penalty |
| Assignment 1 | 20% | 2/04/2026, 1:00pm | Hurdle: A1 Practical result caps/reduces this mark (fail practical → ≥50% reduction) |
| Assignment 1 Practical | Pass/Fail | 13–17/04/2026, during your assigned practical session | Secure, identity-verified, in-person; contributes to Assignment 1 |
| Assignment 2 | 25% | 15/05/2026, 1:00pm | Implementing/reviewing/debugging/refactoring Java software |
| Final Exam | 45% | End-of-semester exam period, 6/06/2026 – 20/06/2026 | Hurdle: exam ≥ 45% required for Grade 4 and above. Closed book except one double-sided A4 notes sheet; Casio FX82 series or UQ-approved calculator; paper-based, 120 min + 10 min planning |
Final mark \(M\) (out of 100, rounded before grade cutoffs apply):
\[M = \text{ROUND}(0.1 \times PE + 0.2 \times A1 + 0.25 \times A2 + 0.45 \times E)\]
where \(PE\) = Problem sets, \(A1\) = Assignment 1 (capped by the A1 Practical), \(A2\) = Assignment 2, \(E\) = Final Exam.
Grading cutoffs
| Grade | Cutoff | Hurdle |
|---|---|---|
| 1 (Low Fail) | 0–19 | |
| 2 (Fail) | 20–46 | |
| 3 (Marginal Fail) | 47–49 | Final exam ≥ 40% |
| 4 (Pass) | 50–64 | Final exam ≥ 45% |
| 5 (Credit) | 65–74 | Final exam ≥ 60% |
| 6 (Distinction) | 75–84 | Final exam ≥ 70% |
| 7 (High Distinction) | 85–100 | Final exam ≥ 80% |
Academic integrity
- All submitted work must be your own (or explicitly-permitted/referenced AI, MT, or third-party code) — checked for plagiarism/collusion, and a subset of students may be interviewed about their submissions to establish genuine authorship.
- Misconduct — things not to do: don’t show your code to other students; don’t look at other students’ code; don’t reuse code from other semesters/courses; don’t get someone else to write code for you; don’t store your code in any online repository others could access (e.g. GitHub, BitBucket) — this counts as showing your code.
How to learn (course philosophy)
- Take notes (handwritten recommended), experiment with coding (try compiling/running examples, tweak them and check the effect), ask questions (lectures, Ed forums, practicals), use online resources (Stack Overflow, AI — responsibly).
- Independent learning is emphasised: muddy cards, HW cards, and CodeCamp sessions support self-directed study alongside staff support.