As a photographer, we wield our trusty camera as a tool to document the natural world. There will be situations in which we require a wide angle lens to capture a beautiful shot of the sunset over Waikiki. Other times we require a telescopic lens to capture an awesome shot of a pod of dolphins breaching the surface of the ocean. Each lens is unique to their particular situation, but in both situations, we can use the same camera to capture the moment.
As a software engineer, we will often come across a multitude of problems that need a well-defined solution. A lot of us newbies will generally see the problem, come up with a specific solution, and move on without considering that we may run into a similar problem in the future. So, what can we do to avoid this problem? We can identify patterns that certain problems have in common and create a solution to fit the generalized pattern! These patterns are design patterns. Design patterns are, if you will, the camera. We can use a particular design pattern to solve a wide variety of situations, and we can add upon them to better fit the solution like we attach the lens to the camera to fit a particular situation.
While working on our final project, we created a set of schemas that allow us to store information to our mongodb. These schemas are basically a template for any datasets we decide to store. We are able to reuse them wherever needed and we can customize them to fit a particular object. The best part about these design patterns is that we generally do not have to edit them too much once we understand the pattern. Right now, we are exposed to a limited about of design patterns, but I would imagine that as we progress and gain more experience we will encounter a plethora of design patterns to add to our tool belt.