COMP3900 - Computer Science Project
Difficulty: 3/10 · Time Commitment: 5/10 · Enjoyability: 6/10 · Mark: 94
Summary
I did COMP3900 (Computer Science Project) in Term 3 2023. This course is a group project following Agile Principles and spanning three 2-week sprints. When I did this course, the content was quite outdated and the course was transitioning to client-based projects which created a set of challenges for course tutors. However, there have been many steps taken over the past few months to refactor the course and introduce much more relevant content and skillsets to students.
Positives
- Course content is useful in learning project management principles and some software development tools (Docker and Git)
- There is an emphasis on design - both in creating a product aimed around the target users of the product and in designing an extensible system architecture
Negatives
- The course has adopted a client-project structure where clients from industry and academia propose projects and provide students with regular feedback throughout the term. This is very positive, however, since this has been newly introduced there are still issues related to client communication and involvement that need to be accounted for in future offerings.
In-depth
Project Objectives
This course is project-based. Students spend the first few weeks picking a project, communicating with their client on fleshing out that project and its specific requirements, and then creating a project proposal where they conduct research, planning and project design to demonstrate that their project will be successful, useful, novel, and technically adept. A lot of emphasis is put on evolution of design and iterating on changing requirements. This teaches students to take initiative in clarifying requirements and developing extensible code.
Sprints
The remainder of the term consists of a few sprints in which the development occurs. Having a strong team is essential and consequently, the course constantly checks in with students to ensure equal participation of group members. This development teaches students how to write code within a large team, estimate their feasible workload, iterate on architecture design, and present their progress. Feedback is given through a project demo which occurs after each sprint.
Final Assessments
Final assessment submission includes a longer demo, software submission, and a report. These also assess all course outcomes and ensure students leave this course confident to work on a team and with common development tools. The most important focus for these is to show that you have developed an application that satisfies the requirements of your client, that you have iterated on your design, and that your system is technically robust.
Baselines
This course takes students with a diverse range of skillsets and matches them with real-world projects. Difficulties arise when students do not have a baseline set of skills that allow them to be a strong contributor to their team. In order to ensure that every student who joins this course has a set of skills that are deemed essential to work effectively with their team, this course has a set of individual exercises that are compulsory and due early in the term. The three skills that are essential are (1) programming (2) collaboration and (3) containerisation. Consequently, every student must complete a set of exercises requiring them to write Python, work with Git and Github (to commit code, work with branches, submit pull requests etc), and run Docker.
The introduction of these individual exercises has resulted in an increase in students seeking help early in the course and a decrease in issues arising later on.
If you are a student who wants to prepare themselves for this course, the best skills you can acquire prior are (1) basic web development skills (2) design skills (similar to what is learnt in COMP2511) (3) understanding on Docker and how to write Dockerfiles (4) revising Git skills such as how to commit code, create a new branch, merge and rebase, and fix merge conflicts.
Participation
Due to the project-based nature of this course, there have been several new course elements added to ensure that students are rewarded for their participation towards the group and heavily penalised if they chose to not actively participate. Participation is evaluated weekly and consequently, attendance to weekly labs is mandatory. There are multiple peer assessments and opportunities to raise concerns. Overall, should reduce the impact of having group members who are not willing to contribute as they will be caught early on within the term.
Advice
- Focus on your users - Many computer science students believe that the best software uses the newest frameworks, complex algorithms, and rust. However, one of the core principles of developing great software is to think about the user. Just because a feature is cool doesn’t mean it’s a good feature for your application. On the other hand, if you focus on your user and then later on your software design, you will end up with much better design.
- Constantly iterate on your design - It’s great to be ambitious but the most effective projects build a usable application within the first sprint, get feedback from their client and tutor after the first demo, and then they iterate on their design and repeat. Feedback is crucial throughout the development process and a lot of groups compromise on iteration by spending too long perfecting something than building a base product and modifying it over time.
- Be independent - This is your final course before you graduate so you are expected to debug your issues yourself. When asking questions, try to research and experiment beforehand. Your tutor is there to help but they are just going to take the same debugging steps that you could so it’s much more effective to bypass this process and try it yourself first.
Comments