Back to Modules
SE301

Advanced Programming and Design

1 CreditsTerm 1

Description

Advanced Programming and Design is an intensive course aimed at equipping students with the skills and knowledge required to become proficient and efficient software developers. Building on a solid foundation in object-oriented programming and Java, students will explore advanced language features not covered in earlier courses, including generics, memory management, and JVM performance tuning. The course introduces functional programming paradigms, with a focus on Streams, functional interfaces, and lambda expressions. Principles of multi-threaded programming will be examined to prepare students for concurrent application development. Emphasis is placed on professional software engineering practices, including clean code, continuous refactoring, test-driven development, object-oriented and architectural design patterns, and adherence to SOLID principles. Throughout the course, students will engage in extensive hands-on programming exercises to reinforce theoretical concepts and cultivate best practices in software design and development.

Requisites

Prerequisites: CS102/IS442 - Pre-req

Co-requisites: None

Anti-requisites: None

Attributes

Department: SCIS

Course Level: Undergraduate

Tracks: IS/T4BS: Product Development Track

Areas: Business Options IS Depth Electives IT Solution Development Electives Software Engineering Core (Intake 2022 to 2023) Software Engineering Core (Intake 2024 onwards)

Learning Outcomes

1. Understand multi-threaded programming in Java and related principles such as using locks to protect critical sections from race conditions, deadlocks and deadlock avoidance strategies; Demonstrate competence in writing multi-threaded code in Java and be able to debug multi-threaded code with existing race conditions and yet ensure liveness.  2. Understand SOLID principles and apply clean coding practices.  3. Critique code in terms of maintainability and adoption of good programming techniques 4. Apply common object-oriented design patterns; critique the usage of patterns in specific contexts. 5. Contrast and compare the object-oriented paradigm with the functional programming paradigm. 6. Demonstrate competence with advanced Java programming features including streams, lambdas and generics, and how certain features support the usage of Java as a functional programming language. 7. Be familiar with main themes in the software engineering body of knowledge (SWEBOK).

Graduate Learning Outcomes

Disciplinary Knowledge, Critical thinking & problem solving, Collaboration and leadership, Communication, Self-directed learning, Resilience

Competencies

Software Design, Agile Software Development, Applications Development, Software Testing