The motivation for SOFTENG 701 is to make you a better object-oriented programmer, by teaching you some advanced Software Engineering development topics. These topics are considered advanced because a certain degree of experience in software development is needed to fully appreciate their value; being aware of these topics will prove invaluable in the development of complex applications. The course covers two themes to address this goal, as outlined below.
Theme 1: Good Design
It is an article of faith among many software developers that "Design Matters" - that the choice of design of the software can make a difference to various aspects of a software system. This belief is indicated by slogans such as "Gotos considered harmful", "Favor object composition over class inheritance", and "Design Patterns Rule!" (to paraphrase many things said about Design Patterns). The problem is, mostly these slogans aren’t followed: everyone uses gotos all the time, many use inheritance when they could use composition, and very little code that’s written follows a design pattern. So what’s going on? The problem with slogans is that they are necessarily simple and the truth is almost always very complex so the slogans are not enough to really help us do "Good Design". The primary goal of this part of the course is to go beyond the slogans to investigate what good design might mean, and improve our understanding of what it should mean. More specifically, we will:
- Learn a little bit of history of thinking on good design - where did some design ideas come from and are they still valid
- Learn some new ideas about how to do good design - what other cool ways are there to do designs
- Learn a little bit on how to evaluate how good a design is - we have a design, but how do we know it is any good
- See a few bad designs - how to recognise known bad designs.
Coursework for this theme will consist of some or all of the following: writing code, reading lots of code, reading research papers and writing reports on all of the above.
Theme 2: Developing Software with Educational TheoryIt is an important skill in a Software Engineer’s toolkit to be able to develop artifacts that are well supported by educational theory to ensure their users can learn effectively. Users are constantly learning; how do they navigate a website, how do they perform a task in an app, how can they teach others to use the software. These are all aspects that can be enhanced by applying a good understanding of educational theory. This is particularly important for education-based applications, however, much of this theory is applicable across a broad range of projects. You will also learn about the importance of incorporating Sustainability and Ethics principles into your design. In this section, your learning will be applied in a group project to design and develop your own software artifact. In particular we will:
- Learn about different educational theories and why they are important in a Software Engineering context.
- Learn how to analyse existing software.
- Work in medium to large groups to develop a tool using the educational theory you have studied.
- Learn and apply effective ways to discuss and present your outputs.