FINAL I2P PROJECT
Group Members: Chloe Li, Selina Li (Me)
Criterias:
- Design Thinking Questionnaire – results
- Design Thinking Sentence to summarise chosen idea
- A list of equiptment needed for project
- Flow chart
- Algorithm and Pseudo Code
- Code project with at least 3 references (sited)
- Screenshot annotations and linked on Git Hub
- Images / video introducing your project and a working prototype (Please include: titles, music/VO and upload to You Tube to share the video)
- Testing Document – showing various tests over the project creation
- Evaluation of final summative project and and your own reflection in I2P this semester
Brainstorming Stage:
In the beginning, we brainstormed many possible ideas for our project. We tried to pinpoint some of the areas in the HKIS community where students might be having trouble with and where we had the potential to solve. Some of the ideas include the following:
1. Choosing classes: A platform that would have quizzes that would ultimately narrow down class choices for users and help them decide which courses they should take in the following years
2. Class Reviews: A platform that has class reviews and everything the teacher wrote in class to help students who missed class
3.Book recommendations: When students borrow a book, this platform would tell the student similar books that he/she might be interested in
4. Overdue Books: Email sent when book is about to be overdue
5. Book reviews: A platform where students can submit book reviews for other students
6. Teacher’s schedules: A platform that students can access to see teacher’s meetings and schedule to know when to find them
7. Pre-ordering lunch: A platform that will allow students to pre-order lunch so they don’t have to queue up when they arrive in the cafeteria.
8. Grades: A program that inputs the student’s grades and looks at trend, provides projected GPA and what they need to obtain a certain grade; colleges that fit your grade
Questionnaire Stage:
We conducted 2 surveys: the first one on a few ideas we came up with, and based on the answers of the first survey, we directed our focus onto one specific area. Out of all our brainstormed ideas, ideas #1, #2, and #8 stood out to us the most, and our questionnaire was mainly comprised of questions that could help us narrow down to one of our three choices.
After we conducted the survey, we found that most people were supportive of the idea of having a survey available to help students target course options that were suitable for their personal interests and passions. The results of the survey will lead students to more information on each of the classes with specific answers by respective teachers of common questions asked about the classes. The survey would be based on what the teachers thought of the course, and what kind of students they think would excel most in the school. The program will also give users a possible four year plan that they can develop upon. This is a link to the form for you to view the results of the survey: https://docs.google.com/a/hkis.edu.hk/forms/d/1zkSRT_eHrmcJczwF5BrvHZ-B3tf8LVFGq1cqbcl4fRc/edit#response=ACYDBNhepvjTHZozfKD0UdOXiTsQ55h3ySW987ITapY0smtucWZw70X2I4fzgg
We designed a separate questionnaire specifically on this idea, and we asked questions such as:
- Are there any classes you are unfamiliar with?
- If you answered yes to the first question: What department are those unfamiliar classes part of?
- If you answered yes to the first question: Do you think your course selections would change if you were aware of all the available classes? Please explain
- What do you consider when you chose your classes for this year?
- Do you think it would be useful to have a survey designed to find courses that are most suited for your interest and passions? Please explain.
- How often do you refer to the students handbook for information on available courses?
- For people who chose 5 or less for the previous question, what is the reason why you don’t refer to it very often?
We found that large majority of the students admitted that there are courses HKIS provides that they are not familiar with.
The classes that students were unfamiliar with are mostly in the arts, religion and humanities departments.
Most students agreed that their course selection would have changed if they had been more informed on the course options, and that a survey designed to help students discover classes suited to their interests and passions would be very useful.
It is also very clear that the student’s handbook is not very commonly used among the students. Even though there is much information on all the courses in the handbook, students find it difficult to scroll through, and that it doesn’t really help them to decide whether or not classes are suitable for them. The information given is vague, and doesn’t apply personally.
Overall students expressed enthusiasm towards the idea of having a survey that recommends a targeted list of classes to each student. The link to the questionnaire is here: https://goo.gl/forms/rZFxAIg7bq6lvzxu2
Design Thinking Statement
Our HKIS students are having difficulty choosing the right courses for themselves because they rarely refer to the student handbook, so we are creating a short quiz that would help them narrow down their options and make their course selection process easier.
Downsizing Process
Interviewing stage:
We soon discovered that despite our eagerness to make our plan become reality, the project was simply too big to complete within a week time. What we originally had in mind was to interview teachers of all classes to gain more insight into classes that they teach. We spent a class interviewing teachers, asking questions such as:
1.What are the common characteristics of students who take your class?
2.What personality leads to excellence in this class?
3.How would you describe this class?
4.What makes this class different from all other classes?
5.What do students take away from this class?
6.How heavy is the workload, and what do they mainly consist of?
I acted as the scribe during the interviews, while Chloe asked the majority of the questions. We interviewed 3 students within the first programming class. Although we were able to obtain very detailed responses from teachers, we found out that this process would simply take too long if we wanted it to do it for every class offered in HKIS, and it would be impossible to complete within a week. We decided that instead of creating a survey that would recommend courses of each topic, we would focus on the math department specifically. However, because we still wanted to gain more insight about each math course (on top of basic information provided in the student handbook), Chloe created a short survey for math teachers to fill in:
In doing so, the responses were standardized.We then spent the next class collecting responses in the Math Department, and by the end of class, we had collected approximately 12 survey responses. However, we realized that since we limited the choices of their answers to few multiple choice questions, we could not use them as determining factors of the student survey. We decided that instead of implementing them in the student survey, we would use it as data to introduce the different classes along with the information given in the student handbook to give students personal insight into each course.
Research:
We realized that like the rest of the student body, we did not know all there is to know about the math courses available in HKIS. Hence, we decided that before we created the student survey, we needed to read into each of the math courses. We studied the information of each class given in the student handbook on dragonnet, then referred to the teachers’ responses from the previous survey, and created an outline of each class:
We realized that we also needed to understand the general four-year curriculum of the high school math department, so we referred to the student handbook and drew a rough sketch of curriculum map:
Pseudo Code
Draft 1: Our first attempt to writing the pseudocode for the program proved to be extremely difficult. There too many anomalies in the system, and the countless possibilities were unimaginable. We wanted the code to first eliminate all the courses that the student has taken in the past, eliminate the ones that are taking now, and then ask for their current grade in their math class. According to their grade, we then distribute them into 3 classes: the honors, the average, the in-between, and the electives. For the students that fall in the cracks between the honors course and the average curriculum, we ask them to rate the difficulty of their current class from 1 to 10. According to their response, we then place them into a more suitable math class. For students that have substantially low grades, we place them in the elective courses, where the classes include aspects of other subjects such as social science, science, and humanities. However, we were very confused as to where to place some of the additional questions we wanted to ask, such as their preferred workload, learning strategies, and assessment format. As shown below, I attempted to write out a detailed version of the pseudo code, but it was ultimately incomplete due to the countless anomalies that we could not place within the system. This led us to our second version of pseudo code.
Draft 2:
Our second draft of the pseudo code was also quite complicated but easier to follow. The pseudo code is written below. The first part of the survey would ask whether or not the student is a rising freshman. If he/she is, then they would move to part 2, where their grades and their current grade 8 math class (8 regular or 8+) would determine which freshman math course they should take. There are anomalies within this section, because some 8th graders take a test to skip Honors Geometry and go directly to Honors Advanced Algebra in their freshman year. If the user is not a freshman, they are asked which current math class they take. If it is anything below Honors PreCalculus, they head to Part 1, where their grades determine whether they should take an Honors or Non Honors class next year. IF they are in Honors Pre Calculus, they would go to Part 3, where their grades determine whether they should go to AP Calculus AB or AP Calculus BC, and whether or not they should take AP Statistics on top of that. Finally, if they are in a class above Honors PreCalculus currently, then depending on whether or not they are interested in continuing math next year, we recommend Advanced Mathematical Topics and AP Statistics (unless they already took it).
As you can probably see, this pseudo code is more clear than the previous one and anyone could follow along, but we knew that it would be extremely difficult to program because there are so many possibilities and exceptions.
We created a google form to go with this pseudo code. We took into account all the different grade levels, workload, preferred assessment format, etc. Here is the google form link: https://docs.google.com/a/hkis.edu.hk/forms/d/e/1FAIpQLSeIyrJT9EXV9UdIKth6UybWbQzz0tKdj1XbfigUOarCrnwHFA/viewform.
Pictures of the google form are attached below:
Although we were successful in creating a pseudo code and google form for the student survey, we failed to program the google script for this complex plan. We seeked help from Ms. Mok and Mr. Lin, and decided in the end to downsize the program even more. We decided that instead of taking into account to all the anomalies and getting bogged down by the miniscule details, we should just focus on creating a rough prototype. This led us to our third and final draft of pseudo code.
Draft 3:
This is a pseudocode of our now very simplified plan. The first question that we would ask the user is whether or not they are currently taking an Honors Course. If they are, we would then ask for their current grade (semester grade). If the grade is a B+ or higher, we would send them an automated email that would give them all the Honors and AP courses available at HKIS. If the grade is a B or lower, then we would send them an automated email recommending them to non honors courses in HKIS. On the other hand, if they are currently not taking an honors courses, and they have an A, then we would send them an email saying that they might want to consider the possibility of moving up to an honors course. If they have a grade within the range of A- to C, then we would recommend that they stay in the normal curriculum. Finally, if they have a D or F, then we would recommend them to repeat their current course and consider taking a math elective if they are interested.
This is the flowchart that I made to go along with our pseudocode, using the different shapes to represent different functions.
Equipment that we used:
Unlike several other groups, the project that Chloe and I did really only required a computer and the Google Scripts program. We also used the student’s handbook along with responses from the math department to create our videos.
Program:
We created a google form that were targeted to rising freshmen, sophomores and juniors. Because we have no previous experience on Google Scripts or Java Script, we decided to keep it relatively simple and go one step at a time. I will go through the function here portion by portion, but the youtube video at the end explains everything as well as an example of it running.
function main() { //opens the spreadsheet var ssId = "1h7PIAAgi8ZrdJdu2cqveEHbv9zHVTsKA399FHHd9n58"; var ss = SpreadsheetApp.openById(ssId); //opens specific sheet which is named Form responses 1 var sheet = ss.getSheetByName("Form responses 1"); ///Logger.log(sheet.getLastRow()); var range = sheet.getRange(1, 1, sheet.getLastRow(), 4); var i = sheet.getLastRow()-1; var grade = range.getValues()[i][2]; ///Logger.log(grade); var honor = range.getValues()[i][1]; var email = range.getValues()[i][3];
This is the first portion of our code, which we named to be the function main(). The first thing that happens is the program opens the spreadsheet of the google form. Screenshots of our google form and the corresponding spreadsheet is attached below.
Therefore, the var ssID, var ss, and var sheet are all directing the program to the specific spreadsheet that contains all the responses. The range specifies which row the program should look at each time, and a variable i is introduced the program would always look at the last row. Then, we declared certain variables, assigning them to a specific cell.
if (honor == 'Yes'){ if (grade == 'A' || grade == 'A-'||grade == 'B+') { SendEmailHonors(email); } if (grade == 'B' || grade == 'C' ||grade == 'D' || grade == 'F') { SendEmailNormal(email); } } if (honor=='No') { if (grade == 'A') { SendBothEmail(email); } if (grade=='A-'||grade=='B+'||grade=='B'||grade=='C') { SendEmailNormal(email); } if (grade=='D'||grade=='F') { SendFailEmail(email); } }
After that, still within our main function, we set up some if statements that would lead to 4 possible automated emails. How this process works is already explained in our pseudo code, but there were definitely technical things that we struggled with, such as setting up the ‘or’ operator. These problems and how we overcame them is further explained in the table attached below. Each of the if statements lead to separate functions, which are different automated emails
function SendEmailHonors(email) { //var doc = DocumentApp.create('Recommended Courses for ' + email); //https://docs.google.com/document/d/1xCUPv0PgBHYcQhIKWcBYXo9kANYCp2SDQIlbfZR7YiA/edit //addEditor(user.email); //var body = doc.getBody(); MailApp.sendEmail({ to: email, subject: 'Course Recommendations', body: 'Thank you for doing our survey. Based on your results, we recommend you to take an Honors or AP course next year.The link attached has descriptions of all the honors and AP courses available at HKIS, but obviously some may not be applicable to you based on your grade level. Please look at this google doc for further information: https://docs.google.com/a/hkis.edu.hk/document/d/1xCUPv0PgBHYcQhIKWcBYXo9kANYCp2SDQIlbfZR7YiA/edit?usp=sharing', //attachments: doc, }); } }
This is the function that sends an email that recommends all the honors and AP courses of HKIS. At the end of the body line, we link it to a google document that has all the links to youtube videos that we created for each course. The document that is attached for this specific email looks like this:
This is repeated for the rest of the code, sending an automated email based on their survey responses, and each linking to a different google doc that contains different links.
function SendEmailNormal(email) { MailApp.sendEmail({ to:email, subject: 'Course Recommendations', body: 'Thank you for doing our survey. Based on your results, we recommend you to take a non Honors course next year. The link attached has descriptions of all the non Honors courses available at HKIS, but obviously some may not be applicable to you based on your grade level. Please look at this google doc for further information: https://docs.google.com/a/hkis.edu.hk/document/d/1DPucRJRTdSVnvJVHPyLU_Kjtbc5nWIehxRMv9Tf-yHQ/edit?usp=sharing', }); } function SendBothEmail(email) { MailApp.sendEmail({ to:email, subject: 'Course Recommendations', body: 'Thank you for doing our survey. Based on your results, we know that you are currently taking a non honours course, but we recommend you to consider the possibility of taking an honors or AP course next year. The link attached has descriptions of all these courses available at HKIS, but obviously some may not be applicable to you based on your grade level. Please look at this google doc for further information: https://docs.google.com/a/hkis.edu.hk/document/d/1E_kvzNGD_9o0rCJ4CvujoNxo31CB6G4gByCmTpBakJk/edit?usp=sharing ', }); } function SendFailEmail(email) { MailApp.sendEmail({ to:email, subject: 'Course Recommendations', body: 'Thank you for doing our survey. Based on your results, we recommend you to repeat your course next year. If you are passionate about math, we also recommend some math elextives for you to take next year. The link attached has descriptions of all the math elective courses available at HKIS that may be of interest to you, but obviously some may not be applicable to you based on your grade level. Please look at this google doc for further information: https://docs.google.com/a/hkis.edu.hk/document/d/16kdUrY4A1_T9l0ihEYZhOCR1Li47e7JqU2RgsGGdQQM/edit?usp=sharing ', }); }
These are the other google documents that a user might receive (some of the screenshots are part of a document, not the full one).
An example of an email that a user might receive would look like this:
The links of on the google doc take the recipient to youtube videos with details on their recommended course(s). We created a video for each of the math classes using the information on the student handbook, and the teacher’s’ responses. Since one of the biggest findings from our original questionnaire was that students dislike referring to the student handbook due to its inconvenience and great amounts of text, we created videos of us drawing key aspects of each course in forms of visual symbols and keywords. We then summarized the learning outcomes, curriculum, workload and prerequisites of each class in under 2 minutes.ounts of text, we created videos of us drawing key aspects of each course in forms of visual symbols and keywords. We then summarized the learning outcomes, curriculum, workload and prerequisites of each class in under 2 minutes. This is a link to the playlist which contains all the videos: https://www.youtube.com/playlist?list=PLNi1s36p6TtmvGeX5uaxD6EELNW0H8lw7 and below is an example of one of them.
This is a video where we talked through our program and coding process.
Problems that we encountered and how we overcame them:
Item to be Tested | Expected outcome | Actual Outcome | Fixed Y/N | How did we fix the error? | Date fixed |
Trigger | We wanted our program to automatically run when a user submitted. We did research online, and found from source 1 that this could be done using onEdit(e). | We added onEdit(e) to our program, but nothing happened automatically when a user submitted something. The program simply read onEdit() as a function with the name onEdit() rather than a trigger. | Yes | We learnt from source 2 that we had to manually add a trigger in google script by going to Edit>Current project’s trigger, and set up a trigger from there. Therefore, the function didn’t actually have to be called onEdit(), it could be called anything-and we kept our main function called main() and simply added a trigger for that. | 25/5 |
Making the script apply to each new response | We wanted our program to work for each new response. | Our program only did it for the same response each time because we set the range to a specific row. | Yes | We changed our range from sheet.getRange(1,1,0,4) to sheet.getRange(1,1,sheet.getLastRow(),4) and we set up the variable ‘i’ that would change in accordance to how many responses we had. This way, it would work for each new response instead of repeating the program for the same response. | 25/5 |
If statement | We had many places where the if statement, and we wanted it to work just like it does in python. | It would not work, there was an error. | Yes | We learnt from source 3 that if statements in java script is written differently. For instance, they are written in the form of: if (honor==’No’) {} | 26/5 |
Compound statement | We expected the program to run, and that the compound statement would run fine. | We had an error, saying we were missing } in compound statement. | Yes | This was a relative easy fix. As we learnt from source 4, because we had a compound statement, we had to close it with an extra ‘}’ because it was essentially a syntax within a syntax. | 27/5 |
Or function | We wanted our if statements to work if either or of some criteria were met. For instance, we wanted our program to automatically send the ‘Honors’ email if a current honors student had grades of A, A-, or B+. | We did not know how to write ‘or’ in google script, so obviously it was unable to work. | Yes | We learnt from source 5 that the or operator is different from python’s. In order to write ‘or’, we had to type ||. For instance, in our code, we now have:if (grade == ‘A’ || grade == ‘A-‘||grade == ‘B+’) { SendEmailHonors(email,grade); } | 27/5 |
Sending automated email function | We wanted our program to automatically send an email to the user with their survey results and our recommendations. | We were unable to program this part, and had to use online resources. | Yes | We learnt from source 6 how to add this automated email syntax, and to our pleasant surprise it was actually quite simple. All we had to do was write MailApp.sendEmail({ to: subject: body:{};In order to do this, we also had to add to our survey, asking for the user’s email in the beginning. We did not consider this when we were doing our pseudo code and flow chart. | 28/5 |
Sending automated email to the user’s email | We wanted our form to collect the user’s email in the beginning, and the program should automatically send an email to that entered email. | The program would not send an email, and the function SendEmail could not get the user’s email. | Yes | We found out that it could not get the user’s email because that was stored in the main function, not the sending email function. To fix this, at the end of the main function, when we directed the program to head onto the sending email function, we called the variable email so that the email function could refer to the user’s email and send an email accordingly. | 28/5 |
Attaching a google document | We wanted to attach a google doc in our automated email that would give the user a deeper insight to the courses that may be fitting to them in the upcoming year. | We tried to use assign a variable doc that would create a document for the specific user each time (var doc = DocumentApp.create(‘Recommended Courses for ‘ + email);), but found that this could not work because we would have to write the entire document inside the google scripts (because it is a new document created for each user) | Yes | Instead of doing that, we decided to pre-create 4 google documents, where each response would land on either one of the 4. Then, we just attached the corresponding google document onto the automated email for the user to access. | 29/5 |
Sources:
- https://developers.google.com/apps-script/guides/triggers/
- https://developers.google.com/apps-script/guides/triggers/installable
- https://stackoverflow.com/qustions/13894057/how-to-write-an-if-and-statement-in-google-apps-script
- https://github.com/FF-Remote-Control/FF-Remote-Control/issues/9
- https://stackoverflow.com/questions/19973134/boolean-operators-and-clienthandler
- https://developers.google.com/apps-script/articles/sending_emails
Final Product- The code!
function main() { //opens the spreadsheet var ssId = "1h7PIAAgi8ZrdJdu2cqveEHbv9zHVTsKA399FHHd9n58"; var ss = SpreadsheetApp.openById(ssId); //opens specific sheet which is named Form responses 1 var sheet = ss.getSheetByName("Form responses 1"); ///Logger.log(sheet.getLastRow()); var range = sheet.getRange(1, 1, sheet.getLastRow(), 4); var i = sheet.getLastRow()-1; var grade = range.getValues()[i][2]; ///Logger.log(grade); var honor = range.getValues()[i][1]; var email = range.getValues()[i][3]; if (honor == 'Yes'){ if (grade == 'A' || grade == 'A-'||grade == 'B+') { SendEmailHonors(email); } if (grade == 'B' || grade == 'C' ||grade == 'D' || grade == 'F') { SendEmailNormal(email); } } if (honor=='No') { if (grade == 'A') { SendBothEmail(email); } if (grade=='A-'||grade=='B+'||grade=='B'||grade=='C') { SendEmailNormal(email); } if (grade=='D'||grade=='F') { SendFailEmail(email); } } function SendEmailHonors(email) { //var doc = DocumentApp.create('Recommended Courses for ' + email); //https://docs.google.com/document/d/1xCUPv0PgBHYcQhIKWcBYXo9kANYCp2SDQIlbfZR7YiA/edit //addEditor(user.email); //var body = doc.getBody(); MailApp.sendEmail({ to: email, subject: 'Course Recommendations', body: 'Thank you for doing our survey. Based on your results, we recommend you to take an Honors or AP course next year.The link attached has descriptions of all the honors and AP courses available at HKIS, but obviously some may not be applicable to you based on your grade level. Please look at this google doc for further information: https://docs.google.com/a/hkis.edu.hk/document/d/1xCUPv0PgBHYcQhIKWcBYXo9kANYCp2SDQIlbfZR7YiA/edit?usp=sharing', //attachments: doc, }); } } function SendEmailNormal(email) { MailApp.sendEmail({ to:email, subject: 'Course Recommendations', body: 'Thank you for doing our survey. Based on your results, we recommend you to take a non Honors course next year. The link attached has descriptions of all the non Honors courses available at HKIS, but obviously some may not be applicable to you based on your grade level. Please look at this google doc for further information: https://docs.google.com/a/hkis.edu.hk/document/d/1DPucRJRTdSVnvJVHPyLU_Kjtbc5nWIehxRMv9Tf-yHQ/edit?usp=sharing', }); } function SendBothEmail(email) { MailApp.sendEmail({ to:email, subject: 'Course Recommendations', body: 'Thank you for doing our survey. Based on your results, we know that you are currently taking a non honours course, but we recommend you to consider the possibility of taking an honors or AP course next year. The link attached has descriptions of all these courses available at HKIS, but obviously some may not be applicable to you based on your grade level. Please look at this google doc for further information: https://docs.google.com/a/hkis.edu.hk/document/d/1E_kvzNGD_9o0rCJ4CvujoNxo31CB6G4gByCmTpBakJk/edit?usp=sharing ', }); } function SendFailEmail(email) { MailApp.sendEmail({ to:email, subject: 'Course Recommendations', body: 'Thank you for doing our survey. Based on your results, we recommend you to repeat your course next year. If you are passionate about math, we also recommend some math elextives for you to take next year. The link attached has descriptions of all the math elective courses available at HKIS that may be of interest to you, but obviously some may not be applicable to you based on your grade level. Please look at this google doc for further information: https://docs.google.com/a/hkis.edu.hk/document/d/16kdUrY4A1_T9l0ihEYZhOCR1Li47e7JqU2RgsGGdQQM/edit?usp=sharing ', }); }
Reflection: Through this entire journey, we really learned the process of Design Thinking. In the beginning, we had a grand idea that we wanted to execute, and we created complicated pseudo codes that we thought could work out perfectly fine, but we never really stopped and considered the fact that we were complete beginners and foreign to Google Script, meaning in reality it is impossible for us to produce a perfect product in one go. I think one of most important lessons learnt that all great creations need to start somewhere, and nobody can create the perfect prototype in the first go. It is important to start small, and edit the errors and imperfections as you proceed. If one is so bogged down by miniscule details in the planning stages of the process, the program will never be completed.
Perhaps one other takeaway from this assignment is just how difficult programming can be. Although we know exactly what we want the program to do, we didn’t know how to turn our words into codes. Since we were only familiar with the python language, having to work with java and google script was very difficult. It was like being lost in a foreign land!
We also learned that online resources can be extremely helpful when we are trying to learn a new language. In the beginning, we were sometimes too determined to figure out everything by ourselves, but through the process of coding our program, we were constantly referring to online resources for help.
Course Reflection:
I think that overall, this course has really helped me understand the Design Thinking Process, which provided a solution based approach to solving problems. Over the course, there have been multiple times where we had to tackle some complex problems (especially coming from a background with no experience on programming whatsoever), but these five steps of empathising, defining the problem, ideating, prototyping, and testing really helped me go through my problems and be successful in my final products. I think this was especially apparent in the last project, where this non linear design thinking process ultimately lead Chloe and I to be resilient and finally succeed. I think that this course also helped me have a good introduction into programming. I learnt a lot from different programs and tools: Scratch, Makey Makey, Python, Pygame, Arduino, and of course Google scripts. This would not have been possible without online resources, which really aided me and my peers in multiple aspects and helped us figure stuff out. I also found that blogging my progress in this class was very helpful in the long run. In the beginning, I honestly thought that blogging after each lesson would be kind of useless and really tedious. However, I realised that it was actually very useful in the sense that it could help me track my progress very easily, and to my surprise I actually found that I would occasionally refer back to my previous posts for guidance. Another thing that I learned to value through this class is teamwork. In the first few weeks of this class, I viewed programming to be completely individual, and often times I would spend the class working by myself despite sitting with friends, not really willing to work together. However, I learned that it is much easier to work together with other people and figure the code collaboratively. By working on pseudo codes, flowcharts, and the codes with other people, it was nice to listen to different ideas and then together stick with one idea that we all thought would work well.