David Wright @ NC State

PhD Research

After completing my Master's degree and deciding to continue on for a Ph.D., I met with Dr. Iyer (my advisor) to discuss possible research topics. He gave me some very sound advice - be sure that what I chose as a topic for my dissertation was somethiing that I could be enthusiastic and passionate about for at least seven to ten years. After considering this advice for several months, I did decide to focus my dissertation research in another area of computer science, one that interested me more. However, this decision also meant that I would have to do a great deal of reading to "catch up" in the area of software engineering.

Software engineering encompasses a broad variety of areas of study and research. My interest is in the area of software system design - how software developers create and evolve large software systems. Within this area, I was initially drawn to research into design patterns for software development - relationships between a particular context, problem, and solution. My studies in this area led me to the idea of generative sequences of patterns that represent solutions to larger, more complex problems, e.g., system designs. Simply put, generative sequences are meta-patterns that describe relationships between patterns and/or pattern languages.

Patterns can be an effective aid and tool in software development, but their strength is most evident when individual but related patterns are used together to form larger and more comprehensive solutions within a given problem domain. For large system development, however, developers must resolve problems in multiple domains at the same time. These domains are distinct, but in the context of the system, they become interrelated and interdependent. Using patterns and pattern languages to derive solutions to these system-level problems requires some means of relating and/or integrating pattern languages from the differrent domains into a larger language describing the system under development. While there has been a steady flow of research around design patterns over the past 10 - 15 years, little has been published in the computer science and software engineering literature about pattern languages and generative sequences.

The solution I was preparing to propose was a meta-pattern language for generative sequences, based upon fundamental design principles that describe relationships between design elements. These meta-patterns how different patterns and pattern languages can and cannot be joined together. Furthermore, they would also establish bridges between common software design patterns and patterns & pattern languages in other domains such as architecture, urban planning, organizational development, and organizational & social processes. Based on the academic research literature (searchable via ACM Digital Library, IEEExplore, CiteSeer, & The Collection of Computer Science Bibliographies, for example), this was a unique and novel approach to this problem. I expanded my literature search outside the discipline of Computer Science and Software Engineering to the general literature of design, encompassing architecture, industrial design, graphic arts, etc., and still did not find anyone approaching the problem in this manner.

While doing some research for the CSC495D project, however, I found an online article about pattern solutions in the IBM DeveloperWorks web site. This article pointed me to the Rational Software Architect (RSA) software development tool and an IBM RedBook describing how to use this tool and pattern respositories to build enterprise-scale software systems. I also found through these and other RedBooks, whitepapers, and articles, that the RSA allows developers to use recipes of patterns - sequences and networks of patterns related by their applicability to a particular problem & environment. The structure of these Reusable Assets, as they are called, has also been standardized based on patents and copyrights held by IBM and several other companies. The Rational Software Architect tool (incorporating patterns and recipes) has been on the market since 2004, and the patents, copyrights, and standards were issued earlier.

I had often wondered why no one else had thought about connecting patterns and pattern languages from different domains before, and now I had the answer - someone had! My initial research direction now lacked the novelty and uniqueness that I wanted for my dissertation, but I did not want to throw away any more of the work I had already done than necessary. Opportunities to study research ethics and teaching and learning had also opened for me, and I began to see connections between these areas, my previous work, and my own teaching experiences. In particular, I saw parallels between critical thinking processes and software design processes.

My research has been redirected towards developing an understanding of how software designers and developers make design-related decisions in order to identify common patterns of reasoning. This is still a broad area, so I am limiting my research subjects to novice software developers, and looking for the larger-scale processes and patterns they use. I have presented 2 conference papers on preliminary results of this work, and I am making final revisions on a journal article-type paper that I will present as part of my Preliminary Oral Exam in the summer of 2008. I plan to complete my doctoral work and defend my dissertation in the spring of 2009.