Skip to content

JA1. Learning Journal 1

Reflection

Describe what you did.

This was the first week of this course; we were introduced to the course syllabus and to each other. We also -optionally- introduced to some background in mathematics that is much needed for this course. I did not do this, but I will go back to the Math book attached to this course whenever I need to.

I started the week by trying the self-quiz which gave me a good idea about what to find in the reading assignment. I then read the reading assignment and took notes. I also watched the video but it was so old, and the mentioned Jeliot tool did not work on my laptop. I then did the self-quiz again and got a better score.

Describe your reactions to what you did.

The reading assignment was very interesting and I enjoyed it, it introduced math forgotten concepts since high school. It took me around 10 hours to read finish the reading assignment and take notes.

The discussion assignment asked to give our own definition of the some of the concept introduced in the reading assignment. and there was no programming assignment for this week.

Describe any feedback you received or any specific interactions you had. Discuss how they were helpful.

The discussion assignment responses were very helpful in giving me more insight about the concepts introduced in the reading assignment, however, I saw some responses misinterpreting the concepts. I do not blame them since the concepts defined are very abstract and it is hard to grasp them, and you usually work with them as they are without thinking about their definition.

Describe your feelings and attitudes.

I am very excited to learn more about data structures and algorithms, and I am looking forward to the next week.

Describe what you learned.

The content of the week falls into two categories, the first is an abstract definition of the concepts of data structures and algorithms, which included examples of scenarios and the preferred data structure to use in each scenario; then it talked a bit about some design patterns used in developing data structures, those patterns included: Flyweight, Visitor, Composite, and Strategy.

The second category is the mathematical background needed to understand the concepts. It included sets, relations, factorial, logarithm, and some other concepts. It also included the mathematical proof techniques with examples.

I want to Describe my understanding of the design patterns mentioned above, and I welcome any feedback on my understanding.

Flyweight

Flyweight pattern encourages reducing the memory usage by sharing the same object that is used in multiple places, instead of each place has its own copy of the object.

Visitor

Visitor pattern encourages reducing complexity and memory usage by lifting the operations up to the top of the hierarchy, instead of each leaf objects has its own copy of those operations. So, operations are defined in the root class (top of the hierarchy) and passed down as an argument to the leaf objects.

Composite

Composite pattern encourages reducing complexity by using polymorphism, where a common interface is defined, and each object in the hierarchy implements that interface. This way, the client code can treat all objects in the hierarchy as the same type of object, but the implementation of each object is different.

Strategy

Strategy pattern encourages increasing customization by allowing end user (client) to define their own implementation of methods, and pass it to the object as an argument. This way, the object can use the passed implementation instead of its own implementation.

References