Review of CPSC 310, CPSC 340, CPSC 430, and JAPN 100.
Courses I took this term:
CPSC 310: Introduction to Software Engineering
I had been not looking to this course for the longest time, which is why I kept putting it off. The reason was that I had heard so many terrible stories from people about the project and about their teamwork issues. However, this course ended up being not bad at all for me and I enjoyed working on the project.
Reid was the instructor when I took the course.
Must pass both the project and the final to pass the course.
(taken from course website)
Goal was to take skills/knowledge from CPSC 210 and extend them to design and build non-trivial software systems.
- REST & Async Programming
- Software Specifications
- Agile Development
- Design (this is the primary course focus)
- Information Security
Our lecture was on Thursdays, once a week, 5 – 8 pm.
Lectures were typical Powerpoint presentation based. However, there were plenty of in-class activities where we were given a problem to work on and then discuss as a class.
Although the in-class activities were good, many people including myself did not seem to know where to start sometimes, and many people chose to work on their project instead, although that was their choice.
I would have preferred a mixture of in-class design problems as well as clicker questions so the prof would get more feedback about how the class learned.
Lecture attendance or participation was not graded. Despite this, I’m surprised so many people still showed up to class.
As you probably already know if you’re in CS, the project was a significant part of the course. I wish the lecture material had tied in more into the project. For example, having to implement certain design patterns. At the same time however, I do appreciate the freedom we got to implement the project the way we wanted to, so I admit I’m not sure how to resolve these two conflicting goals.
The project was split up into four deliverables due Oct 10, Oct 24, Nov 14, and Nov 28. We were given much less guidance in terms of specifications and starting code than in CPSC 210, and a lot of people struggled with this.
Here is an unofficial Piazza survey done on how much people were spending on the project per week (there were 141 students registered in the course):
It was asked on Oct 10 which is the due date for the first deliverable. A lot of people spent a lot of time on the first deliverable and I found it to be the most difficult because the project was new and so was the language. Thankfully however, I only spent 6 – 10 hours a week on the project and I felt some people were exaggerating how long they spent.
The project was done in partners and according to the course webpage, would take six hours a week per person on average. The shift from groups of four (in previous terms) to partners was to mitigate people who would slack off.
The project was a NodeJS web application to provide a way for users to query UBC course information by qualifiers such as grade averages, as well as query rooms at UBC by qualifiers such as room size.
The first three deliverables were in the backend, while the fourth was to create a user interface. It seemed like a lot of people used jQuery for this, which was probably the most efficient option, and it seemed like a couple people like myself used ReactJS or AngularJS. We were given the freedom to use whatever front end framework we wanted. Most people had zero experience with front end frameworks.
In terms of how the project was marked, our code was not looked at explicitly, but it was tested using AutoTest, which is similar in function to WebCAT from 210. It was basically a server that would take the code from your repository, build it, execute tests, and then return the pass/fail rate as well as a list of some failing tests.
The grade you got depended on how many tests you passed by the deadline. However, the implementation of the tests was not available to us, which caused much frustration among people. One prominent issue was dealing with asynchronous calls using promises in TypeScript. There are many comprehensive guides/tutorials/videos on promises and I recommend reading them starting with the one available on the course webpage.
Before the deadline, you could run autotest on your code as many times as you wanted, with the constraint that you could only run autotest once every twelve hours, which I felt was very constrained.
Exams were based on the online notes posted on the course webpage, as well as the in-class lectures. I felt that the vast majority of the exam material was covered in the online notes.
Unfortunately, lecture slides were not posted.
Exams were a mixture of multiple choice, true/false, fill in the blank type questions.
CPSC 340: Machine Learning and Data Mining
I took this course because it seemed interesting and I wanted to learn about machine learning; and because the course average was high. However, this course ended up being a lot more difficult than I expected, but I did learn a lot.
Mark was the instructor when I took the course. Next term someone else will be teaching and they’ll be using Python instead of MATLAB.
(taken from course webpage)
- Data exploration, cleaning, and preprocessing.
- Supervised learning with frequencies and distances.
- Data clustering, outlier detection, and association rules.
- Linear prediction, regularization, and kernels.
- Latent-factor models and collaborative filtering.
- Neural networks and deep learning.
- Density estimation and Markov models.
Typical Powerpoint lectures. I would have liked clicker questions or some kind of activity in class.
I was really lost in the latter half of the course in lecture, basically couldn’t pay attention despite sitting near the front and attending all the lectures, and ended up being very far behind in the material.
There were six assignments in total. The assignments were challenging but we were given enough guidance from the assignment description to make progress on our own.
We were given the choice to do the assignments in partners but I chose not to.
Assignments were a mixture of theory questions and MATLAB questions, with most being of the latter type.
Each assignment took me 5 – 10 hours on average.
For some reason, we weren’t given the assignments back, only the grades for each question. So sometimes it was difficult to see what we got marks off for. We were however, given the answer keys for the assignments afterward.
We were also given a lenient late day policy, of four late days for the entire term. Late days were in terms of “lecture days”, so if an assignment was due on Monday, handing it on Wednesday would only be one late day.
The exams were generally straightforward and based off the practice or past exams we were given. Definitely go over the past exams.
Be careful with the wording in the questions, it was tricky at times, especially the ones that were similar to the old exam questions.
We got two cheat sheets for the midterm and four for the final. So keep your two from the midterm. I only needed to use 1.5 sheets for the midterm.
The marking on the midterm was pretty bad. I got 15 marks lower than I should have because the TAs missed my answers or didn’t take enough time to understand what I wrote. My friends had similar issues. Fortunately I got most of the marks back via regrading. The midterm marking was finished in one day but it took almost two weeks to get our grades back.
CPSC 430: Computers and Society
Needed a 400 level elective and this one seemed interesting and not too heavy workload-wise. The course is about information technology in society, focusing on ethical issues. An example would be the self-driving car — if a self-driving car is in a situation where it will hit a crowd of people on the road, should it swerve to avoid the crowd, potentially harming the “driver”, or should it brake as much as possible, sparing the “driver” but potentially harming the pedestrians?
Jessica was the instructor when I took the course.
Participation was raising your hand in class and contributing to the class discussion, as well as in-class worksheets.
(from course webpage)
- History of computing
- networking and information storage
- Ethical theories (Kantianism, utilitarianism, social contract theory)
- Networked communications (spam, censorship, filtering)
- Intellectual property
- Professional Ethics
- globalization and other changes to the workplace.
Some lecturing as well as a lot of in-class discussions and filling in worksheets. I liked that we were given plenty of time to discuss things with our neighbour.
I was lucky enough to have a partner for most of the lectures, but it seemed that there were a fair number of unfortunate people who did not have partners to discuss things with. I think the course staff should have done a better job at facilitating groups if they wanted to make in-class discussions an integral part of the lecture (which they should).
It made it worse that some TAs would not really talk to anyone and just walk around, and the TAs and the instructor who did talk to people, generally talked to groups rather than individuals who were alone.
I didn’t enjoy the in-class discussions. In particular, ethical theories were not well represented and in a confusing manner, and questions like the ethical question with the trolley problem was misconstrued as “Would you kill one person or five people?” which takes away the whole consequentialism vs deontology debate. There were plenty of people who would just parrot each other as well.
I really did not enjoy some of the material we covered. In particular, we spent way too long on history of computing, while on the other hand we only spent 10 minutes on net neutrality.
I did enjoy a lot of the material however, particularly networking, privacy, security, and networked communications.
These were online on Connect almost each week to make sure you did the readings. Some questions were very specific and required either memorizing what you read or going back to the textbook to find the specific phrase the question referred to.
There were four assignments. Each writing assignment was basically a 500-word essay based on a prompt about whether something was morally permissible or not. We had to choose whether it was or not, justifying our response with one ethical theory.
I did not like the marking in the assignments. Having credit for many philosophy courses (PHIL 100/101/433/330), these really short essays seemed more like a high school exercise than an essay in a university course.
The marking seemed fairly arbitrary. Whenever an essay was due, we would have to read a sample essay online and do peer review quizzes, and the marking seemed inconsistent. With respect to my own essays, the feedback I got was very vague. I usually received feedback saying that I needed to “vary my grammatical structures more” and on several occasions I got “you have enough evidence, but more evidence is better” which was unhelpful since I was already at the (really low) word limit, and seemed like a way to take off marks.
Ethics for the Information Age, 7th edition, by Michael J. Quinn.
The textbook is required. The instructor said the 6th edition was not recommended, but I used a 6th edition for the course and found it to be completely sufficient.
A lot of the exam was memorization-based short answer, with one essay question at the end.
JAPN 100: Beginning Japanese IA
Needed an elective and always wanted to learn Japanese. Before taking this class I didn’t know any hiragana/katakana, but I knew some basic phrases like saying “hello”, “sorry”, etc.
The first class was quite intimidating because the instructor started speaking in Japanese right away and a lot of us barely knew any Japanese.
Although I enjoyed the class, it was a lot of work having to study for many quizzes and having a lot of homework. Overall, it was definitely one of the most fun classes I’ve taken and I regret not taking it earlier.
Ihhwa Kim was the instructor when I took the course. I really liked her class.
Syllabus (Course Goals):
(from course outline)
Go shopping and order food in a restaurant
Extend /accept/decline invitations
Describe your daily routine
Ask and describe where things are
Read and write a journal or a restaurant review
Talk about travel
Read and write a vacation postcard
Explain rules and regulations
Additionally, by the end of the course, students should be able to know:
- hiragana, katakana, and about 60 basic Kanji
- basic word order, conjugations of verbs, adjectives, basic particles
- basic vocabulary and expressions
- sentence structure: grammatical subject, direct object, predicate
- how to translate simple sentences between English and Japanese
We would have lessons through Powerpoint about new grammatical structures or vocab, and then we would practice using them with a partner.
Class size was about 25 people.
There was homework almost every day lol. It was usually one or two pages from the GENKI workbook, which took around 20 minutes on average.
We would have two quizzes for each lesson except the last lesson. We would cover six lessons from GENKI I.
The first quiz for the lesson was the vocab quiz, and the second quiz was covered the whole lesson.
There were listening quizzes as well, which were quite difficult.
Eri Banno et al. 2011. Genki I (2nd edition)
The textbook is required and you have to bring it to class.
We had to do a three minute video project in Japanese near the end of the term. It was done in groups of 3 – 4 students. Our group filmed and edited in one weekend.
Definitely use Quizlet (website for flashcards). They already have all of the GENKI I vocab there so you can easily learn it. They also have hiragana, katakana, and Kanji flashcard sets.