Appendix A: Project Complexity¶
If you are thinking of suggesting a project topic, please read these general notes about possible complexity in what you propose. If these notes do not address your questions, please speak to the Module Coordinator.
The following discussion will consider projects for games and internet applications. These are for illustration and we could equally say similar things about other types of project.
For example, it is not uncommon to receive a games proposal such as “A 2D game, similar to X”, where X is a game from 5 to 10 years ago. There are other variants of this statement, but the core of the proposal is a game with sprites, rectangle-based collision detection, some levels read in from a file and probably some sound.
For internet applications, an example proposal is “An internet site to show product information”. There would typically be some server-side code that generates HTML for each page. Data is stored in a small number of tables in a relational database.
Such projects are less exciting for a major project. The 2D games may be fun to play and the internet sites are a starting point, but we need to keep an eye on the technical challenge for the project. It isn’t uncommon for us to think that the proposed 2D game or internet application is something that is already well described in books and on websites; if you wanted to learn how to undertake such work, you could just buy the book or read the site and work through it.
Sometimes a student is influenced by the availabilty of a tutorial that covers how to do such a project. Following a tutorial might be relevant for small parts of a project, but it is not acceptable if a student only does a little extra original work beyond the tutorial.
So, whatever project you are interested in, we will ask what makes it interesting and provides the opportunity for you to demonstrate the skills you have developed. How will you show how you have taken an idea, analysed the problem, made deliberate design choices and developed a solution? We will ask what is computationally interesting about the idea with respect to your degree scheme.
To help provide some guidance about how you can enhance projects, here are some suggestions for games and internet projects. Whatever your project idea, think about questions suitable for your own topic.
For game-based projects, you might consider:
The use of alternative sensors to drive some or all of the game. Including touch, accelerometers, compass, or camera / video.
Peer-to-peer multi-player apps that communicate over wifi/bluetooth on mobile devices. How do you keep the game play synchronized? Are there performance issues? If so, what are they and how do you overcome these?
Can it be a game that uses augmented reality as part of the gameplay? Is it a case of the player in the real world against monsters in the digital world?
Rather than having configured levels loaded from config files, could the game automatically generate levels - maybe taking into account the location of the player or some other input relevant to the game?
What role could cloud technologies play if you were having a larger scale game with many players? How would you test this without having lots of people available?
Is there a business aspect, where the game is one aspect but you also need tools to help manage the game?
You may also take on work in a language this is relatively new to you, e.g. C++ or C#.
For internet projects, you might consider:
How can you separate the display of data from the code the controls the data? How do you process user accounts? At the least, you might use a template engine such as Mustache on a PHP project; for more advanced use you may use a framework such as Laravel or one of the many others available. The same would apply for systems developed in other languages.
How will the data be structured and stored? In most cases this may mean using a database, e.g. PostgreSQL or MySQL, but other choices are available. Think about these choices and evaluate the relevance of them to your project.
Is there any relevance for data interaction between your application and other data providers? Alternatively, could your application provide data to others? At a basic level, this may mean the use of RSS feeds, but maybe technologies such as RESTful web services are also relevant.
Is it appropriate to experiment use other approaches, such as JavaScript applications where the majority of the application is managed in the client rather than on the server? Are there JavaScript libraries that can be evaluated during the project before selecting something appropriate for the task?
Will you make use of asynchronous data loading (Ajax/Fetch) when building your application and interacting with the server?
Is there any relevance of cloud technologies for your project? If so, how can these be used?
Are there technologies you could learn, e.g. a new programming language or platform, as part of the work?
These lists aren’t exhaustive. They are there to prompt you to consider other aspects that will enhance an idea and its suitability as a project topic.
No matter what your degree scheme is, think creatively about the project suggestions from supervisors. For example, there are web-oriented applications that link to bio-informatics work; such applications will allow you to explore items such as the semantic-web and web services, or vision projects that need a web front-end to manipulate data.
Above all, remember that the project suggestions are the starting point for a discussion with supervisors about topics. It may be that for some suggestions, there are other related projects that are a good fit for you.