The info given below is from the previous round, as a reference only. Major changes are highly unlikely, however.
CS3281 semester can be divided into three stages: Stage 1: Learning, Stage 2: Contributing, Stage 3: Managing.
MON 1200-1400 in COM1-02-12
Following NUS-OSS projects will be used this semester.
See the Projects/Mentors page for more info on the current focus of each project and the list of mentors.
Duration: Week 1 - 3 (3 weeks)
Objective: Learn the project’s codebase, workflows, tools, etc. under the guidance of the current developers.
You can spend upto 40% of your CS3281 effort on one or more secondary NUS-OSS projects. SE-EDU projects can be selected as a secondary project too.
Duration: Week 4 - 9 (6 weeks)
Objective: Contribute to the project based on the project’s priorities and you role in the project.
Objective: Learn how to play a more senior role in a big project
Duration: Week 10 - 13 (4 weeks)
This stage is optional but highly recommended.
Objective: To keep in touch with the project, accumulate credit for CS3282
Duration: Until you start CS3282
Will be based on the project chosen. Could be subdivided into smaller teams within the project based on the specific areas you work in.
As a general principle, try to do good work and become better software engineers as you do course work, and good grades will follow. Given the small class size, it will be easy to detect attempts to 'game the system' or 'optimize for grades over learning' and such behavior will not earn you high grades. In other words, follow the spirit (rather than the letter) of the grading scheme.
Consistency [5%]: this component is an incentive for you to spread the work across the semester. To earn full marks, you should meet both these criteria.
Learning [5%]: this component is an incentive for you to learn the relevant tools and technologies well.
Achievements [80%]:
Professional conduct and teamwork [5+5=10%]:
While this is not a graded deliverable (it used to be; we made it non-graded recently to reduce the workload), you are encouraged to choose your CS3281&2 work in a way that gives you an 'expertise' in a few areas.
Objective: Gain in-depth knowledge of a few specific areas so that you are considered an expert of those areas compared to your peers.
Just one or two semesters is certainly not enough to become an ‘expert’ of something. Consider these courses as just the initial steps in the journey of becoming an expert. Our expectations are,
Consider picking one from each of the three below.
Learn more about them yourself. While you do that, produce evidence of your knowledge. E.g. blog posts, stackoverflow questions/answers
Share interesting and useful bits of your knowledge with the class by giving short talks, to be done in CS3282 later (refer Lightning Talks deliverables explained below)
Bigger code bases take time to learn. You can set up the project and start contributing before the semester starts. Even prior work can be counted for course grading later.
Dive deeper into the primary programming language of your intended project. Writing code for big projects require a lot more than a basic knowledge of the programming language. If you are weak in any of the main programming languages used in the project, start learning them now.
Project | Languages | Tools |
---|---|---|
MarkBind | JavaScript, CSS | Node.js, NunJucks |
RepoSense | Java, CSS, HTML, JavaScript | Jade, Gradle, Cypress |
CATcher | TypeScript, CSS, HTML, Python | Electron |
SE-EDU | Java, CSS | Gradle, Jekyll |
TEAMMATES | (backend) Java (frontend) HTML, SCSS, TypeScript | (backend) Gradle (frontend) Node.js, Angular (others) Selenium, Docker |
All internal projects use Git. Learn advanced Git features such as rebase, squash, blame, bisect, etc. Other tools you can learn are given in the table above.