Design Patterns  «Prev  Next»
Lesson 2 Design Patterns Course Requirements
Objective Discover what you need to take this course.

Design Patterns Course Requirements

Software

Since you will be writing either C++ or Java, you will need at least a text editor and a compiler for your language of choice.
If you prefer to use an (IDE) Integrated Development Environment like Microsoft Visual C++ or code.visualstudio.com then do so.
However, we will not be designing a graphical user interface, so a simple character mode environment like Oracle's JDK or emacs is all that is required.
  1. For those of you experienced with Java you can download the latest version of Eclipse eclipse-packages
  2. To download the JDK visit Oracle JDK
  3. To download the C++ compiler from Microsoft visit visualstudio.com Downloads

Concrete examples and exercises will all be pure character mode, using the basic I/O facilities common to all languages and operating systems.
You should be able to complete this course using a Windows or Linux operating Stick to pure ANSI C++ or 100% pure Java.

Before Embarking on the Voyage of Design Patterns: Prerequisites of the Heart and Mind

Venturing into the realm of Design Patterns is akin to embarking upon a grand and profound journey. It's not a mere meander into the technicalities of software development, but rather a deep dive into its soul and essence. But as with any transformative journey, there are certain prerequisites, both of the heart and of the mind, that one must possess to ensure not just comprehension but a profound resonance with the subject. Analyzing these requirements reveals the following insights:
  1. Passion for the Craft: Above all, a burning passion for software development acts as the primordial fuel for this journey. Without a deep love for the craft, design patterns might appear as mere abstract constructs, devoid of life. It is this emotional connection that turns the study from a mere academic exercise into a life-altering experience.
  2. Solid Foundations in Object-Oriented Programming (OOP): At the cerebral level, before one dances with the intricate choreography of design patterns, a firm grounding in OOP is indispensable. Concepts like encapsulation, inheritance, polymorphism, and abstraction are the cornerstones upon which the majestic edifice of design patterns stands. Only with a deep understanding of these can one truly appreciate the analytical beauty and symmetry of patterns.
  3. Analytical Problem-Solving Skills: The heart of design patterns lies in solving recurring software design challenges. Hence, an inherent ability—or at the very least, a cultivated skill of analytical problem solving is paramount. It's not just about understanding the solution, but about feeling the pain of the problem, analyzing its facets, and then marveling at the elegance of the pattern that addresses it.
  4. Experiential Understanding of Real-World Software Development: While theoretical knowledge has its place, there's an emotional depth and analytical clarity that comes from hands-on experience. Having grappled with the complexities of real-world software projects, one is better poised to appreciate the true value of design patterns. They cease to be abstract solutions and become living, breathing answers to the developer's heartfelt challenges.
  5. Openness to Continuous Learning: The world of design patterns is vast and ever-evolving. It demands a certain humility and openness to continuous learning. One must come with an analytical mind, but also with an emotional readiness to accept that there's always more to learn, more to assimilate, and more to apply.

In summation, the journey into design patterns is a confluence of emotional passion and analytical rigor. It is a voyage that demands both a heartfelt connection to the craft and a keen analytical mind ready to dissect and comprehend. So, before one takes the leap, it is essential to ensure that both the heart and the mind are adequately prepared, for it is this combination that will lead to true enlightenment in the realm of design patterns.

Which Prerequisites should a Software Engineer understand before studying Design Patterns?

Before studying Design Patterns, a software engineer should have a good understanding of:
  1. Object-Oriented Programming (OOP) concepts, such as classes, objects, inheritance, and polymorphism.
  2. Basic data structures, such as arrays, linked lists, trees, and graphs.
  3. Fundamental algorithms, such as sorting and searching algorithms.
  4. Familiarity with at least one programming language, such as Java, Python, or C++.
  5. Familiarity with software development methodologies, such as Agile or Waterfall.
Having these fundamentals in place will make it easier to understand and apply design patterns in real-world software development projects.

The purpose of this course is to record experience in designing object-oriented software as design patterns. Each design pattern systematically names, explains, and evaluates an important and recurring design in object-oriented systems. Our goal is to capture design experience in a form that people can use effectively. To this end we have documented some of the most important design patterns and present them as a catalog. Design patterns make it easier to reuse successful designs and architectures while expressing proven techniques as design patterns makes them more accessible to developers of new systems. Design patterns help you choose design alternatives that make a system reusable and avoid alternatives that compromise reusability. Design patterns can improve the documentation and maintenance of existing systems by furnishing an explicit specification of class and object interactions and their underlying intent. In addition, design patterns help a designer obtain the correct design faster.

The following book is highly recommended for the successful completion of this course.
Gang of Four Patterns