UBC is a big place, and involves a large number of people doing a variety of tasks. The goal of this project is to enable effective querying of historical data regarding the university's sections and rooms.
This will be a full stack web development project split into four checkpoints. In the first three checkpoints, you will build a backend to manage (add, remove and list) datasets and to query datasets. In the final checkpoint, you will build a frontend for users to interact with your query engine.
Checkpoint 0: You will develop a test suite for the IInsightFacade interface.
Checkpoint 1 & 2: Develop your backend so that datasets can be managed and queried. The query language is a domain specific language described by an EBNF.
Checkpoint 3: Design and develop your frontend so users can interact with your backend.
Project overview.
The project is an integral part of this course. The project will be difficult and time consuming. Projects will be completed in pairs (everyone must have a partner, and you must work with the same partner for the duration of the term). Your partner needs to be in the same lab section as you. The project will proceed in 4 checkpoints; the requirements for each checkpoint is detailed in a deliverable document.
You should expect the project to take ~6 hours / week / person (13 weeks * 2 people * 6 hours = 156 hours).
It is extremely important you not leave project deliverables until the last moment. It is impossible to stress strongly enough how important this is; 36h over three weeks is no problem, but over a weekend is impossible. These time estimates are based on effective effort, if you are multitasking or just randomly trying to cobble something together without a plan or tests, the project may take much longer.
Your project is automatically graded by AutoTest every time you push or merge to your project's main branch on GitHub with the command git push. Your grade on the checkpoint is the maximum grade you received from all submissions made before the hard deadline. Make sure you push your work to GitHub before any deadline and know that any pushes after the deadline (even if some commits within that push appear to come from before the deadline) will not be considered.
While working on a project checkpoint, AutoTest will report your progress using one of the following bucket grades based on the range (shown in brackets) where your actual score falls:
Beginning [0--54%] Submission has just been started, or is otherwise incomplete.
Acquiring [55--71%] Submission demonstrates support for basic or rudimentary functionality.
Developing [72--84%] Submission demonstrates support for basic and some complex functionality.
Proficient [85--94%] Submission demonstrates support for basic and complex functionality.
Extending [95--100%] Submission passes most or all of our acceptance tests and is functional and robust.
You can interpret the reported bucket as an indication of the minimum score your solution has obtained with your actual score being reported after the deadline.
The project will rely heavily on self-learning. The course content is necessarily broad to provide coverage that will be applicable to most software development projects. It is important to remember that the project is a single software project instance that will utilize only a subset of the in-class material; the lectures will not serve as a tutorial for the project, it is expected that you will have to use your own creativity to reason about the project requirements, design a solution, and build and validate it yourself. To help you get started, some useful resources are provided below.
TypeScript. Your project will be constructed in TypeScript, which you will learn independently. While it might seem daunting to learn a new language on your own, the fluid nature of software systems requires that you are able to quickly learning new languages, frameworks, and tools. The syntax of TypeScript is similar to Java, which you used in 210. Google will be your friend for this project, as there are thousands of free tutorials and videos that can help you with this technology stack, including this video created by a former TA. TypeScript has many great resources, but the TypeScript Handbook or the TypeScript Deep Dive would be good places to start. If you are starting from scratch, it is really important that you do not just read a bunch of code but actually write some, too! Consider using TypeScript or JavaScript REPLs as a lightweight way to do this.
One language feature that is used throughout the project are Promises. The Async Cookbook can help you learn about promises and the differences between synchronous and asynchronous code.
Git. All of your project development will take place on GitHub. You will not be able to change your GitHub ID during the term, so do not change your CWL until after the final exam. Being familiar with Git is essential. Please take a look at the 'getting started' part of the Atlassian Git Introduction before the first lab if you are not familiar with Git. A shorter, less formal, guide is also available, as well as our Git Cookbook.