/ics4u-portfolio

A collection of my projects from ICS4U 2019.

Primary LanguageJavaScript

ICS4U Portfolio

This repository contains a portfolio of my projects from ICS4U 2019. The portfolio acts as both an exam and a way to show off what I've done this semester.

Portfolio Access

The portfolio can be accessed here. This portfolio was created December 2019 and January 2020 using React, HTML, JS and CSS along with various libraries.

Contents

  1. About Me: This page details who I am, what I know, and what my intentions are in regards to computer science.
  2. Top Ten Modules: This page contains information about the top ten modules I completed throughout ICS4U and a few projects to show off what I've learned.
  3. Bonus Projects: This page shows off the projects I did pertaining to the in-class coding-challenges we did this semeseter, including my object-oriented refactor from my own coding challenge and some simpler refactors from the challenges taught by other students.

Interview Questions & Answers

1. What does it mean to have good programming practices?

There is no absolute universal method of code that is regarded as “good-practice”, but rather there are small things one can do in order to make their code objectively better. A good rule of thumb is that good code is simple code. It is arguable that any solid, redistributable open source project should have code that has the potential to be understood by another programmer, in that it is concise, well documented and effective to its goals. Thus, the most important thing, in my personal opinion, in regards to having good programming practices, is that code should be able to be universally understood. Code should be clean: it is hard to work with messy code just as it could be difficult to work in a messy office. With clean coding, which can be achieved via paying attention your programming practices, code can be updated and refined and overall is likely more logical.

The first principle of being understandable is conciseness. Concise code is achieved through code that is reusable and free of repetition. For example, this would mean programming functionally or in an object oriented manner, so that the same code can be called without unnecessary rewrites. This makes code more logical, and allows for easier understanding since it becomes easier to tell what each function or prototype on an object is doing, and why it needs to be doing that. Secondly, code should be well documented. Not meaning that every line has to have a comment saying “//this is an if statement to see if x is true”, that would be redundant. Code should have comments that explain WHY something is being done for the greater of the program. So to better the above, “//check if x is true before proceeding to initialize to avoid error with y”. This too, makes code easier to follow. Lastly, code should be effective to its goals. By this, I mean it should do what the author intended it to do by the most accurate and recognizable means possible. A calculator app, for example, should be functional and also recognizable, conventionally, to be a calculator. This allows others to see where the program as a whole can be improved and renders a greater understanding of it. Overall, these methods, which are just some of what can be considered “good programming practices” greatly improve the cleanliness of the development workflow for both the original author and other contributors.

2. How does computer science/programming give you what you need to continue learning?

We live in an increasingly technology oriented world. Knowledge of computers and how to work with them is becoming an absolutely vital skill in order to progress in the professional world. Many must use it to create a website, use the tools their computer has available to them, or to simply code. Additionally, the principles of mathematics and logic which can be learned from programming and computer science are easily translatable into other subject areas and can progress one’s abilities in these other fields. Thus, computer science allows one to not only learn in one area, but to stimulate the brain in order to learn in many others. Algorithms, for example, can arguably be learned best through programming - the idea of having a set of steps in order to solve a problem. However, once learned, this can be used to learn and execute math concepts more easily. In general, learning computer science is important for everyone in today’s society, even if you don’t plan on going into a tech related field.

Personally, I have become much better at math since I learned to program, and as I further develop my computer science skills, my other logic-based skills seem to better as well. This is because I can understand that in certain scenarios I will have to execute one thing whereas in another I would have to do something else. My brain, somewhat works like a program. I must do one thing before I do another, like an algorithm. Additionally, doing things like art using mathematical functions and trigonometry has greatly impacted my understanding of such concepts, and has allowed me to realize that these math functions are not limited to what the math curriculum teaches, and can be used for more purposes than I initially realized. Knowing programming has bettered my ability in math fields. The logic concepts. Even, have translated into my language skills, as I am very familiar with the concept of parent and child - for example I understand that to establish something specifically, the child, you must first establish a parent. This somewhat of an abstract idea, but my point stands that logic, which can be best learned in a programming environment, can be translated into all types of fields. Overall, computer science has given me the skills needed to do things in an organized, logical, and efficient manner, making learning, overall, much easier.

3. How can you productively participate in the open-source community?

Open-source software is a type of development in which the community can choose to view, change and contribute to or distribute source code on a project. It’s essentially like saying “Hey, I’m writing this book that I think could be really helpful to a lot of people. I would really appreciate it if you could write a chapter, or maybe even just check my grammar!” This can be done by companies to a) generate interest and to b) improve their software based on the wants of the people. Additionally, an open source approach to development greatly reduces labour costs, as people essentially ‘volunteer’ to help develop the program, which can make the program much more accessible to the public as it can be made free to use due to the lack of budget it requires. Ultimately, the open-source community exists for people to use it. So in order for the community to continue to thrive, and for the world to continue to develop publicly accessible programs, those who use and rely on these programs should make a conscious effort to participate in this community, even if they are not directly contributing to the code. Opening issues, spreading knowledge of open source projects via social media, and even thanking the people who take time to develop these projects can help strengthen this community.

I personally use a lot of open source libraries, as a lot of the time in web development you’re reinventing the wheel when there’s a super wheel you could use for free. Styled-components is probably my favorite open source library, as it allows me to style react components with CSS right in my javascript files, which makes my workflow a lot easier and more customizable. I have starred the Github repository for this library and if I ever run into an issue or have an idea for an improvement, I will be sure to either make an issue or contribute to the code on my own. But there is much more to open-source than that: you can engage on YouTube, Twitter, Reddit or even make your own open source project. Currently, I have no projects that I would qualify as substantial enough to make them open source, but some projects have been given an MIT license, giving anyone who wants to permission to contribute to my work. On social media, I try my best to engage with open source projects (especially on Reddit) and try to get the word out about these as much as possible. As a person who relentlessly relies on these free community projects, I feel it’s my duty to do my best to contribute to them and to participate actively in their development.