CIS518 Advanced Software Engineering: Application Frameworks, Theory and Practice

Posted on 16th June 2009 by Ryan Somma in Geeking Out

A PDF of this Paper is available here.

Slides accompanying this paper available here.

Introduction

The evolution of programming languages over the last 70 years has shown a clear trend towards reducing complexity and improving efficiency of software development. From first generation machine languages that used binary strings representing programming instruction being replaced with assembly languages that provided mnemonics representing CPU instructions, to third, fourth, and fifth generation programming languages (3GL, 4GL, 5GL) providing programming statements that implemented increasing ratios of machine instructions to each programming statement, to object-oriented languages which combined programming statements and variables into integrated objects, developers have striven to make programming easier to understand while simultaneously architecting development environments where programmers may write fewer instructions to accomplish tasks (Burd, 2006).

Frameworks represent a natural extension of this evolution, sequestering even more complexity away from the programmer and providing a head start in their development efforts:

A frequently used definition is “a framework is a reusable design of all or part of a system that is represented by a set of abstract classes and the way their instances interact.” Another common definition is “a framework is the skeleton of an application that can be customized by an application developer.” These are not conflicting definitions; the first describes the structure of a framework while the second describes its purpose (Fayad, Schmidt, and Johnson, 1999).

Just as the third through fifth GL’s took chunks of machine instructions and combined them into single programming statements that were easier to understand, frameworks take chunks of scripting and object-oriented programming language functionality and wrap them up into reusable tools for development.

Frameworks can encompass a whole application, providing an entire suite of tools for information systems development, or just a sub-component, providing a specific solution to a related set of problems, environment, or layer-specific programming needs (Fayad, Schmidt, and Johnson, 1999). For example, web templating frameworks, or “template engines,” provide reusable web-design functions and the capability to standardize user interface content through interface-layer objects (Smarty, 2008). Cascading Style-Sheet (CSS) frameworks also provide web-design functionality, but do so strictly through client-side scripts rendering content in a web browser (Stenhouse, 2005). Semantic web frameworks tie together a variety of “bleeding-edge” technologies such as RDF, OWL, and SPARQL so that developers can focus on business functionality rather that the syntactic-specifics of working with these resources (Open Channel, 2008). Similarly, JavaScript frameworks help developers easily implement newer technologies, like AJAX and dynamic HTML, while hiding the complexity of having these solutions work properly in all web browsers (Reindel, 2008).

In many of the above examples, a well-designed framework should insulate the complexity of software development from the programmer, allowing them to focus on programming to the business requirements. Additionally, frameworks encourage best practices in software development, such as the “Don’t Repeat Yourself” (DRY) principle, philosophically stated, “Every piece of knowledge must have a single, unambiguous, authoritative representation within a system (Hunt and Thomas, 1999),” where reusing framework solutions means that modifying the code in the single place it occurs modifies every instance of it’s implementation throughout the application. Such reuse standardizes coding and development practices.

Combining the traits of reduced complexity with frameworks taking “the tedium out of writing all the program code for an application from scratch (PCMag, 2009),” a properly realized framework can provide the benefit of improving productivity and accelerating development. Maximizing this advantage is the focus of Rapid Application Development frameworks (RADF) (Spatial, 2009) , some of which implement RAD software development life cycle (SDLC) best practices and others even go so far as to automate the generation of software code for developers.

Common Framework Design Patterns

Architect Dr. Christopher Alexander is considered the “father of the Pattern Language movement in computer science,” thanks to his 1977 book on architecture, A Pattern Language: Towns, Buildings, Construction (PatternLanguage, 2001), which emphasizes the need for implementing standard solutions to common architectural problems. Alexander defined a format for describing patterns that included a statement of the problem, its context, solution pattern, diagram of the pattern, and how the pattern relates to others (Schummer and Lukosch, 2007). Alexander’s “pattern language,” also known as the “Alexandrian pattern form,” was used by the “Gang of Four” software developers, Gamma, Helm, Johnson, and Vlissides, to structure their classic book on software development, Design Patterns: Elements of Reusable Object-Oriented Software, which provides 23 object-oriented solutions to common software architectural problems. In this Design Patterns, the authors define three major classifications for software design patterns: creational patters, which “concern the process of object creation,” structural patterns, which “deal with the composition of classes or objects,” and behavioral patterns, which “characterize the ways in which classes or objects interact and distribute responsibility (Gamma, et al. 1995).”

One of the questions raised by Fayad, Schmidt, and Johnson’s Building Application Frameworks is the conceptual issue of whether frameworks are actually a large-scale pattern or simply another kind of programming component? Similar to developers working in the same framework, “Developers who share a set of patterns have a common vocabulary for describing their designs;” however, “frameworks are more than just ideas—they are also code;” therefore, because of this “different level of abstraction,” design patterns are distinguished as “the architectural elements of frameworks (Fayad, Schmidt, and Johnson, 1999).”

A framework constitutes a collection of interacting design patterns, and design patterns are based on common solutions implemented in frameworks. While many design patterns apply to solving problems that may occur in a wide variety of programming situations, there are several design patterns for solving challenges faced specifically in application framework implementations:

Inversion of Control (IoC)

While it is true that “Object-oriented application frameworks… are structured as a class library (PCMag, 2009),” conceptualizing frameworks in this manner gives the impression that its classes are meant to accessed by the developer as if they were checking out books from a library; however, “The major difference between an object-oriented framework and a class library is that the framework calls the application code. Normally the application code calls the class library (Mattsson, 1996).” This is known as the “Inversion of Control” pattern, where programmers write application components that the framework will reference. The framework is in control, and the programmer is simply supplementing its existing functionality with the specific business logic he or she needs it to perform. This “gives frameworks the power to serve as extensible skeletons (Johnson and Foote, 1988).”

Front Controller

When the framework serves as the center of control, accessing components supplied by a programmer, it is useful to have a central point in the application for handling interface layer requests. The Front Controller pattern “defines a single component that is responsible for processing application requests. A front controller centralizes functions such as view selection, security, and templating, and applies them consistently across all pages or views (Sun Microsystems, 2002).” The front controller handles functionality common throughout the application, or references objects that provide the common functionality, standardizing implementation and discouraging programmers from writing their own nonstandard classes to handle functionality already covered in the framework.

Stephen R. Jones refers to a pattern that shares characteristics of both IoC and Front Controller, which he titles “Application Is a Class,” in 1999, and, although this pattern is so simple that it is rarely mentioned as a pattern at all, failure to include it in a framework can be disastrous, as Jones discovered early in his career when he worked on a framework that allowed for multiple controls:

In these situations, each development team invented its own idea of what shape their application would take and, as a result, there was no consistency among the various approaches. This made introducing new services common to all applications next to impossible and required new developers to learn the individual semantics of each group’s approach (Fayad, Schmidt, and Johnson, 1999).

Model View Controller (MVC)

On one end of the framework is the user accessing the application through a user interface (UI). The UI renders graphically the actions the user can perform in the system and the data from the persistence structures, such as the database or XML file, organized according to the business purposes or domain. Objects that encapsulate how the user should see this information, how the business should logically organize it, and what rules need to be in place for retrieving and updating it, would require dramatic changes should any one of these aspects change; therefore, a solution that loosely couples these three aspects of what the user is seeing into three separate objects, is optimum.

As it was defined originally for the Smalltalk-80 system in 1988, the MVC pattern separates the UI into a set of “View” objects, which are strictly focused on presenting information to the user and accepting request inputs. These inputs are then passed to the “Controller” objects, which encapsulate the logic to handle both the user inputs and responses from the domain objects. The “Model” objects encapsulate the business logic, a “domain-specific simulation or implementation of the application’s central structure (Krasner and Pope, 1988).”

Depending on the development environment in which the framework is operating, what constitutes the objects interacting within the pattern can change quite dramatically. This is because the MVC is a metaphor for how to separate logic and classify functionality. For instance, in the example of a simple web page, the model would be the HTML, the page source, the view the CSS, defining how the model should be displayed, and the web browser serving as the controller, determining how to handle the input of a user clicking on a hyperlink. In a web application, where data is served up to the user dynamically, the model consists of the “classes which are used to store and manipulate state, typically in a database of some kind (Atwood, 2008).”

Object-Relational Mapper (ORM)

At the other end of the framework is the relational database or other persistent data source, like XML, where the application is performing create, read, update, and delete (CRUD) operations. Also, in the interest of application performance, the more recent frameworks also implement caching strategies, where more static data may be stored for quicker access, bypassing the database. Because databases store data in normalized form, using relational tables, while modern programming languages work with data encapsulated in objects, a framework operating in such an environment should provide functionality for translating data between the two organizational methods. The ORM pattern provides such functionality, which would normally reside in the Model portion of the MVC, but can also be a framework unto itself (Ambler, 2009).

Application Framework Strength and Weaknesses

Adopting a framework is adopting a software development methodology. Frameworks don’t just provide reusable classes, but reusable analysis as well. The objects in the framework provide, “a vocabulary for talking about a problem (Fayad, Schmidt, and Johnson, 1999).” A survey of multiple sources finds a variety of core considerations in evaluating frameworks, including extensibility, integrateability, metrics/benchmarks, maturity, learning curve, documentation and support ((Reindel, 2007), (Fayad, Schmidt, and Johnson, 1999), and (Cliff, 2006)). These characteristics of the framework are characteristics of the software methodology as well:

Extensibility

A framework must provide developers the flexibility to handle a wide range of issues that may arise within the framework’s domain. For an applications framework, this includes being flexible enough to allow programmers to develop solutions to problems so unique and wide in possibility that no framework could possibly provide the necessary functionality built-in to account for them all. For this reason, framework extensibility is of crucial importance, not only must the framework be extensible to meet a wide variety of situations, but framework’s strategy for extensibility should be taken into consideration as well.

Frameworks may be “classified by the techniques used to extend them, which range along a continuum from whitebox frameworks to graybox frameworks to blackbox frameworks (Fayad, Schmidt, and Johnson, 1999).” In terms of software reuse, black box reuse refers being able to use components “as is,” without having to know anything about their internal workings, only the inputs and outputs expected from them. In this context, white-box reuse refers to modifying the software or component to fit specific needs, which requires some understanding of how it works internally (Pfleeger and Atlee, 2006). Blackbox reuse allows for easier implementation, but whitebox allows for greater customization.

In OOP, black-box versus white-box reuse is classically framed in terms of “Composition vs. Inheritance,” where objects are defined in either “has-a” or “is-a” relationships (Brown, 1998). In this context, black-box reuse refers to composing objects “to achieve more complex functionality,” which “requires that the objects have well-defined interfaces since the internals of the objects are unknown,” while white-box reuse involves class inheritance, allowing “a subclass’ implementation to be defined in terms of the parent class’ implementation (Rajlick, 1998).” In the context of object-oriented frameworks:

Whitebox frameworks rely heavily on OO language features like inheritance and dynamic binding in order to achieve extensibility. Existing functionality is reused and extended by (1) inheriting from framework base classes and (2) overriding predefined hook methods using patterns like the Template Method. Blackbox frameworks support extensibility by defining interfaces for components that can be plugged into the framework via object composition. Existing functionality is reused by (1) defining components that conform to a particular interface and (2) integrating these components into the framework using patterns like Strategy and Functor… a good graybox framework has enough flexibility and extendibility, and also has the ability to hide unnecessary information from the application developers (Fayad, Schmidt, and Johnson, 1999).

Thus, in a blackbox framework, developers create new classes, which they provide to the framework through thoroughly defined interfaces, and in a whitebox framework, developers extend existing classes, overriding the appropriate methods with functionality specific to the instance of the object.

William Wake talks about black and white box solutions in the context of Java applications frameworks, observing that they tend to evolve in their reuse strategies with maturity:

Frameworks tend to change over their lifetime. When a framework is new, it tends to be white-box: you change things by subclassing, and you have to peak at source code to get things done. As it evolves, it becomes more black-box, and you find yourself composing structures of smaller objects. Johnson and Roberts point out that frameworks can evolve beyond black-box, perhaps becoming visual programming environments, where programs can be created by interconnecting components selected from a palette (Wake, 2009).

Integrateability

“Application development will be increasingly based on integration of multiple frameworks (GUIs, communication systems, databases, and so on), together with class libraries, legacy systems, and existing components (Fayad, Schmidt, and Johnson, 1999).” The framework does not operate in a bubble at the organization level, but will operate as one system among a variety of other information systems. As such, it must have the capability or extensibility to integrate with other systems both within and external to the organization. Does the framework “play well with others?”

The ability to have different applications running on different platforms be able to exchange and synchronize data provides “one version of the truth (Schmidt and Lyle, 2005).” The purpose of Service-Oriented Architecture (SOA) is to unify disparate systems operating within different business domains so that they may exchange information or be brought under a single system without losing their individual operations (Channabasavaiah, Holley, and Tuggle, 2003). XML and Web 2.0 innovations provide some strategies for implementing SOA, but there is no specific technology required for integration; therefore, frameworks must provide sufficient decoupling of presentation and control layers so that the application may interface with either a human user, or another application requesting data.

Metrics

Another consideration when choosing or implementing a framework is the way the architecture of that framework will skew OO size and design measures. For example, applications using the Smalltalk/V system’s ViewManager class requires subclassing a class that is already three levels deep, so that the classes the developer implements extending it will be subject to the framework’s existing nesting levels (Lorenz and Kidd, 1994). The same holds true for other measures such as the application’s specialization index (SI), as this is dependent on nesting level and total class methods (Pfleeger and Atlee, 2006).

“Frameworks enhance extensibility by employing additional levels of indirection… However, the resulting generality and flexibility often reduce efficiency (Fayad, Schmidt, and Johnson, 1999).” All application frameworks present a tradeoff between functionality and performance. Benchmarks of a selection of some of the most popular PHP web application frameworks found basic HTML serving up 1,327.9 requests per second, with baseline PHP serving 331.8 requests, and none of the three PHP frameworks serving more than 22 requests per second on average (Ekerete, 2008).

Maturity

Michael Mattsson and Jan Bosch at the Unversity of Karlskrona in Sweden gathered a variety of metrics on Ericsson Software Technology’s Mediation framework, comparing the depth of inheritance (DOI), number of ancestors (NOA), number of children (NOC), and numerous others between the framework’s four versions:

Framework generally evolve to maturity through a number of iterations due to the incorporation of new requirements and better domain understanding. Since changes to frameworks have a large impact due to the effects on the applications build based on the asset, it is important to assess the maturity of a framework [sic] (Mattson and Bosch, 1999).

They reference J. Bansiya as formulating four statements about frameworks as they mature:

(1) framework maturity is achieved generally in the third to fifth version, (2) evolving frameworks change between 30% and 50% of the maximum number of changes between version, whereas this figure is below 10% for mature versions, (3) the average number of changes per class in mature frameworks is about 50% less than in evolving frameworks and (4) mature frameworks have an average depth of inheritance above 2.0 and an average width of inheritance below 0.8 (Mattson and Bosch, 1999).

Mattson and Bosch’s own research found that changing framework requirements should be taken into consideration in considering at what version it will mature, as the framework they studied continued to have changes of about 20% between versions after reaching maturity. Although the researchers could not support Bansiya’s findings, which attributed a much higher level of stability to mature frameworks, they did find that mature frameworks did reach an “absolute low figure” in changes, which indicated maturity (Mattson and Bosch, 1999).

Learning Curve

According to PC Magazine, “although the purpose of a framework is to eliminate a certain amount of programming drudgery, programmers must first learn the structure and peculiarities of the framework in order to use it (PCMag, 2009).” While it is true that adopting a framework involves a great deal time and money invested into learning how to use it, it must also be taken into consideration that, “the suitability of a framework for a particular application may not be apparent until the learning curve has flattened (Fayad, Schmidt, and Johnson, 1999).” This presents a chicken and egg dilemma, as a framework needs to be chosen for how well it can meet the demands placed by the requirements, but it is nearly impossible to assess the framework’s effectiveness at meeting these demands until the developers have made the immense investment of effort into learning the framework. Another way to state this is:

Many developers In order to choose a framework one needs to understand each framework’s, conceptual and logical designs in addition to comparing their promised features. Anyone who can’t or won’t perform this level of analysis before choosing a framework is hoping to get lucky. The catch is that most developers, particulary developers new to OOAD, can’t perform this level of analysis [sic] (Miller, 2007).

An interesting example of this was found in a comparison of the PHP frameworks CodeIgniter (CI) and Symfony by DevTrench. The reviewer found that, while Symfony provided far more features, there was a much greater level of effort to get it up and running initially. By contrast, CI was much easier to get up, running, and start developing (DevTrench, 2007). While many of the commenters for the article agreed with the author’s assessment and preferred CI for its easy interface, one commenter related their experience spending three months coding in Symfony, and then being forced to use CI. “I am frustrated all the time,” the comment read, “I have to do everything myself (dazz, 2009).” While this evidence is anecdotal, it does show that there are tradeoffs between framework sophistication and learning curve so that leaning to either side will always please some developers, yet frustrate others.

Documentation and Support

Finally, documentation is crucial to the success of a framework for use by the general public. In the CI versus Symfony comparison, both frameworks were credited for their extensive documentation. The Zend framework’s documentation not only covers the details of developing in its environment, but also thoroughly covers the design features and methodologies at work within the framework (Zend, 2009).

While documentation provides a reference for developers using the framework, no documentation can be thorough enough to meet every possible idiosyncratic problem a programmer might encounter working with it. For this reason, an active community of developers is key to keeping the framework up to date, developing ways around new developmental obstacles and quickly responding to peers who are stumped on how to implement a solution within the framework’s methodologies. “As frameworks invariably evolve, the applications that use them must evolve with them (Fayad, Schmidt, and Johnson, 1999),” and an active core of developers provides the user support to ease the pain of this evolution.

Framework “Make or Buy” Analysis Considerations

The word “Buy” in this section’s title is a bit misleading, as most frameworks are free and open-source, which is also why they are so successful. A more accurate title would be whether to develop the framework in-house or use an existing solution. In fact, building a framework from scratch is far more costly, making an in-house solution seem more like the “buy” side of the equation. There are advantages and disadvantages to developing a framework in-house or adopting an existing framework. The following considerations are based on Carl Karsten’s make or buy analysis in the context of Visual Fox Pro (Karsten, 2009); however, the conclusions are based on the research presented in this paper thus far:

Advantages of Adopting an Existing Framework

Existing frameworks, especially mature frameworks with significant mindshare, provide a collection of established practices that have been peer-reviewed and tested in every organization that has implemented it. There is no “reinventing the wheel” and having to program through issues that the framework community has already identified and worked through. Additionally, an established framework comes with that framework’s community of support, which will include forums, faqs, and documentation. Rather than being limited to the organization’s resources, the adoption of a framework means adopting the community resources that fashioned it. This encourages an “egoless programming” environment, where responsibility is shared by everyone, and the focus is on solutions to problems rather than assigning blame (Pfleeger & Atlee, 2006).

Existing frameworks also provide a much more cost-effective solution, as developing a framework from scratch could take years, which equates to hundreds of thousands of dollars in programmer hours. If the existing framework is open-source and free to use, then the only costs are the amount of time it takes the organization’s developers to learn the framework and how to program within it, which should only take months in comparison.

Advantages of Developing a Framework In-House

Developing an applications framework in-house provides the organization with total customization of the solution to fit their needs. They may use existing frameworks as models, choosing the features best-suited to the requirements rather than having to take an all-or-nothing approach to buying into a specific framework. Also, the organization doesn’t have to write code for features it does not need, such as interfacing with databases it does not use.

This customization allows for streamlining the framework to just those features the organization will use. As a result, the performance of the in-house framework would be far superior to a framework built to support a wide range of environments and backwards compatibility with older systems. A from-scratch framework has the advantage of being able to adopt all the latest innovations in software development.

Organization-Dependent Considerations

It is important to take into consideration the capabilities of the organization when performing this analysis. For instance, does the organization have the proven capabilities to develop a framework that has the same level of quality as one developed by a community of developers from around the world? Does the organization have a proven track-record of writing thorough documentation so that new developers can quickly learn how to begin programming in the organization’s framework? If not, is the organization willing to accept the need to committing personnel to mentoring new developers in this?

The choice to go with an in-house solution should also consider whether this may be a case of “not invented here” syndrome (NIHS):

Most developers would rather be known as the hero who developed the UI framework that the whole company now relies on than simply the guy who made the suggestion to use Tapestry, for instance (Nash, 2009).

NIHS can occur at the organizational-level, as a matter of the business culture, or it can be the result of personal pride at the individual-level.

When considering a framework of component-sized scope, analysis should ask questions specific to the organization’s needs, such as: Does the existing solution solve at least 90% of the problem, allowing, via open source licensing or vendor willingness, customization to solve the remaining 10 percent? Is the existing solution appropriately licensed? Is the component built for reuse or easily customized for reuse? Is the existing solution compatible with existing development standards, platform, and programming languages? If the answer is “yes” to each of these questions, then there is no reason not to adopt the existing framework (Nash, 2009).

Conclusions

Software frameworks represent the next logical step from object-oriented programming to maximize reuse, standardize development, and improve productivity within the scope of producing numerous projects or an information system among multiple teams within an organization. A mature applications framework that is extensible and integrateable, which has an architecture that provides features without overly impacting performance can provide a solid, stable solution to an applications service provider. The decision to construct an applications framework should e taken with care to ensure there are sufficient resources and controls in place to ensure the final product will meet all of the organizations needs, and that the framework implements the standard design patterns that make existing frameworks so successful.

References

Atwood, Jeff 2008. Understanding Model-View-Controller. Coding Horror: Programming and Human Factors. May 5, 2008. Retrieved from codinghorror.com June 20, 2009 at: http://www.codinghorror.com/blog/archives/001112.html

Ambler, Scott W. 2009. Mapping Objects to Relational Databases: O/R Mapping in Detail. Agile Data. Retrieved from agiledata.org June 20, 2009 at: http://www.agiledata.org/essays/mappingObjects.html

Brown, Lawrence M. 1998. Composition vs Inheritance. Dec 31, 1998. Retrieved from apl.jhu.edu May 20, 2009 at: http://www.apl.jhu.edu/Notes/LMBrown/resource/Composition.pdf

Burd , Stephen D., Systems Architecture Fifth Edition, Thomson Course Technology, 2006.

Channabasavaiah, Kishore; Holley, Kerrie, and Tuggle Jr., Edward 2003. Migrating to a service-oriented architecture. IBM Technical Library, Dec 16, 2003. Retrieved from ibm.com May 20, 2009 at: http://www.ibm.com/developerworks/library/ws-migratesoa/

Cliff, 2006. How Do You Decide Which Framework to Use? Slashdot. Feb 24, 2006. Retrieved from ask.slashdot.org May 20, 2009 at: http://ask.slashdot.org/article.pl?sid=06/02/24/0148201

DevTrench 2007. PHP Application Framework Battle Royale: CodeIgniter vs. Symfony. DevTrench. Sep 5, 2007. Retrieved from devtrench.com Jun 20, 2009 at: http://www.devtrench.com/codeigniter-vs-symfony/

Ekerete 2008. PHP Framework Comparison Benchmarks. AvnetLabs Jun 30, 2008. Retrieved from avnetlabs.com Jun 20, 2009 at: http://avnetlabs.com/php/php-framework-comparison-benchmarks

Gamma, Erich; Helm, Richard; Johnson, Ralph; and Vlissides, John 1995. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. Westerford, MA.

Hunt, Andrew and Thomas, David 1999. The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley Professional, Boston, MA.

Johnson, Ralph E. and Foote, Brian 1988. Designing Reusable Classes. Journal of Object-Oriented Programming, June/July 1988,Vol. 1, No. 2, pg 22-35. Department of Computer Science, University of Illinois, Urbana, IL.

Karsten, Carl 2009. Frameworks Build or Buy. Visual Foxpro. Retrieved from fox.wikis.com May 12, 2009 at: http://fox.wikis.com/wc.dll?Wiki~FrameworkNotInventedHere~SoftwareEng

Krasner, Glen E. and Pope, Stephen T. 1988. A Description of the Model-View-Controller User Interface Paradigm in the Smalltalk-80 System. ParcPlace Systems, Mountain View, CA.

Lorenz, Mark and Kidd, Jeff, 1994. Object-Oriented Software Metrics. Prentice Hall, Englewood Cliffs, NJ.

Mattsson, Michael, 1996. Object-Oriented Frameworks: A Survey of Methodological Issues. Department of Computer Science, Lund University, Lund Institute of Technology, Lund, Sweden.

Mattsson, Michael and Bosch, Jan 1999. Assessing Object-Oriented Application Framework Maturity – A Replicated Case Study. Department of Software Engineering and Computer Science, University of Karlskrona/Ronneby, Ronneby, Sweden.

Miller, John 2007. Framework Not Invented Here. Visual Foxpro. Retrieved from fox.wikis.com May 12, 2009 at: http://fox.wikis.com/wc.dll?Wiki~FrameworkNotInventedHere~SoftwareEng

Nash, Michael 2009. Overcoming “Not Invented Here” Syndrome. Developer.com. Retrieved from developer.com May 12, 2009 at: http://www.developer.com/open/article.php/3338791

Open Channel Foundation, 2008. Semantic Web Framework. Open Channel Foundation, Mitre Corporation. Retrieved from openchannelsoftware.com June 18, 2009 at: http://www.openchannelsoftware.com/projects/Semantic_Web_Framework/

PatternLanguage 2001. Christopher Alexander. Retrieved from PatternLanguage.com on May 5, 2009 at: http://www.patternlanguage.com/leveltwo/ca.htm

PCMag 2009. Encyclopedia entry for Applications Framework. Pcmag.com. Retrieved from pcmag.com May 18, 2009 at: http://www.pcmag.com/encyclopedia_term/0,2542,t=application+framework&i=37907,00.asp

Pfleeger, S., & Atlee, J. (2006). Software Engineering: Theory and Practice. New Jersey: Prentice Hall.

Rajlick, Paul John 1998. Object Composition vs. Inheritance. Retrieved from brighton.ncsa.uiuc.edu May 20, 2009 at: http://brighton.ncsa.uiuc.edu/~prajlich/T/node3.html

Reindel, Brian 2007. How to Choose a JavaScript Framework. d’bug, Oct 30, 2007. Retrieved from blog.reindel.com May 20, 2009 at: http://blog.reindel.com/2007/10/30/how-to-choose-a-javascript-framework/

Reindel, Brian 2008. Will You Need a JavaScript Framework on Your Next Project? . d’bug, Aug 18, 2009. Retrieved from blog.reindel.com May 20, 2009 at: http://blog.reindel.com/2008/08/18/will-you-need-a-javascript-framework-on-your-next-project/

Schmidt, John and Lyle, David 2005. Integration Competency Center: An Implementation Methodology.

Schummer, Till and Lukosch, Stephan 2007. Patterns for Computer-Mediated Interaction. John Wiley and Sons, West Sussex, England.

Smarty, 2008. Is Smarty Right for Me? Smarty Template Engine. Retrieved from smarty.net June 20, 2009 at: http://www.smarty.net/rightforme.php

Spatial, 2009. Rapid Application Development Framework (RADF) . Spatial Corporation. Retrieved from spatial.com June 18, 2009 at: http://www.spatial.com/products/radf-3d-development

Sun Microsystems, 2002. Front Controller. Sun Microsystems Inc. Retreived from java.sun.com June 20, 2009 at: http://java.sun.com/blueprints/patterns/FrontController.html

Stenhouse, Mike, 2005. A CSS Framework. Content with Style, May 22, 2005. Retrieved from contentwithstyle.co.uk on June 13, 2009 at: http://www.contentwithstyle.co.uk/content/a-css-framework

Wake, William C. (2009). Growing Frameworks in Java. Retrieved from xp123.com June 2, 3009: http://xp123.com/wwake/fw/ch12-bb.htm

Zend 2009. Zend Framework Quick Start. Zend Technologies Ltd. Retrieved from framework.zend.com Jun 19, 2009 at: http://framework.zend.com/docs/quickstart


Other assignments from CIS518 Advanced Software Engineering:

CIS518 Advanced Software Engineering: 20090414 Discussion

CIS518 Advanced Software Engineering: 20090426 Discussion

CIS518 Advanced Software Engineering: 20090428 Discussion

CIS518 Advanced Software Engineering: 20090504 Discussion

CIS518 Advanced Software Engineering: 20090518 Discussion

CIS518 Advanced Software Engineering: 20090518 Discussion 2

CIS518 Advanced Software Engineering: 20090529 Discussion

CIS518 Advanced Software Engineering: 20090602 Discussion

CIS518 Advanced Software Engineering: 20090612 Discussion

CIS518 Advanced Software Engineering: 20090619 Discussion

No More Kings: Iran and the Importance of Separating Church and State

Posted on 15th June 2009 by Ryan Somma in Enlightenment Warrior

I’ve been glued to the Internet all weekend after riots broke out in Iran over the theocracy’s blatant disregard for the will of the people. The election results announced were so preposterously weighted in Mahmoud Ahmadinejad’s favor that one column I saw mocking it was titled Ahmadinejad Wins Stanley Cup. No modern event more clearly demonstrates the dangers of mixing church and state than what has been transpiring in Iran since Friday’s farce of an election.

There are many people out there who argue that “America is founded on Christian Principles,” but the Federalist Papers, the founders main defense of the Constitution, never mention the Bible, instead they reference Greece and Rome as republics to model after. No, democracy isn’t the mode of government founded on Christianity, for that, you would have to look to the monarchy, where there is a king appointed by god to rule the people. This was exactly what America’s founders were trying to end forever in crafting our Constitution.

Iran is a theocracy, just like the monarchies of old Europe, and Mahmoud Ahmadinejad is the king appointed by the word of god, as only the Ayatollah Ali Khamenei is able to hear it. The protests in Iran may likely be crushed, and that may reaffirm the theocracy’s power, but such self-destructive governance will eventually collapse. Just ask any of old Europe’s kings today.




For a very entertaining, first-person account of someone who lived Iran’s history I highly recommend taking in Marjane Satrapi’s Persepolis, available as either two graphic novels or an animated film:



Virginia Living Museum: Chesapeake Bay Discovery Center and Virginia’s Coastal Plain

Posted on 14th June 2009 by Ryan Somma in Adventuring

Striped Burrfish

Striped Burrfish

The Virginia Living Museum reminds me very much of the North Carolina Museum of Natural Sciences, where the focus is on the natural world specific to the state. Like NCMNS, the VLM divides its exhibits into ecosystems found in Virginia, from the coast all the way up into the Appalachian Mountains, and the incredible wealth of biodiversity found between them.


Sting Ray

Sting Ray

I’ve started this collection off with the Chesapeak Bay and Coastal Plain, and will work my way into the Mountains next week. If you ever want to be enchanted by the world of life in your own local, find a museum like one of these to peruse.

Check out the complete flickr set here and here.

From Learners to Researchers

Posted on 11th June 2009 by Ryan Somma in Enlightenment Warrior

The scandal of education is that every time you teach something, you deprive a child of the pleasure and benefit of discovery. – Seymour Papert

I graduated from Virginia Tech with a BA in English in 1996. With that degree, I was able to qualify for a car loan, but that’s all the use I’ve ever gotten out of it. Instead of going to work for a newspaper or public school like my peers, I went into web design, and then computer programming, all self-taught. I am now a senior software engineer, developing an application framework that my peers who have official degrees in Computer Science will be using for rapid application development.

One of my friends majoring in Computer Science dropped out of Virginia Tech after he was told the classes he had taken his freshman year were no longer valid. He was working while attending classes, and had spent too many years working on his degree as a result, what he had learned six years earlier was no longer current and had to be relearned. After dropping out, he went ahead and claimed a BS degree in Computer Science on his resume anyway, promptly got a job making six figures, and continues to be highly successful a decade later.

So much of University life is the art of gaming the system that a formal degree is a dubious credential anyway. Track the history of how Universities administer tests, and you will discover an arms race between students trying to cheat on exams and research papers using online services, and administrators trying to prevent them from doing so with increasingly sophisticated software. Clearly I remember my regular Monday-morning visits to the University bookstore to purchase the Cliff Notes editions of books I had failed to read on my own time; I was part of that arms race.

I recently had several professors complain to me about the new generation of students who were publicly educated under the Virginia Standards of Learning (SOL), the state’s strategy for complying with the very important, however poorly-implemented No Child Left Behind Act (NCLB). These students, who have spent their educational careers being taught that the purpose of all learning is to pass a standardized test, review their professors based on how well the lectures prepared them for the tests, not for how the course content prepared them for life when the course was over.

John Seely Brown, director emeritus of Xerox PARC and a visiting scholar at USC, best articulates why this strategy poorly serves our young scholars:

The whole notion of passively sitting and receiving information has almost nothing to do with how you internalize information into something that makes sense to you. Learning starts as you leave the classroom, when you start discussing with people around you what was just said. It is in conversation that you start to internalize what some piece of information meant to you.

I’m not bashing the SOL’s or NCLB. Enforcing standards and gathering metrics are a vast improvement over not standardizing education, but these strategies fail to empower students with the skills and willpower for self-directed learning. Students have been taught that the purpose of education is to memorize facts out of context long enough to earn high marks on a multiple choice test, and then promptly forget 99 percent of what they just learned to make room for the next test. We aren’t training students to win on the show Jeapordy, so why do Universities and Public schools insist on pumping their heads full of useless trivia?

Don Tapscott’s essay The Impending Demise of the University confronts this antiquated teaching strategy and argues for why the digital generation could subvert traditional academia’s grip on higher-learning:

Growing up digital has changed the way their minds work in a manner that will help them handle the challenges of the digital age. They’re used to multi-tasking, and have learned to handle the information overload. They expect a two-way conversation. What’s more, growing up digital has encouraged this generation to be active and demanding enquirers. Rather than waiting for a trusted professor to tell them what’s going on, they find out on their own on everything from Google to Wikipedia.

If students have the entire world of human knowledge within a few clicks of their web browsers, then how do Universities account for their ever-increasing enrollment statistics? What does the University offer students with lecturing professors that cannot be obtained more quickly and with greater interactivity online?

Credentialism. You can be a lifelong learner in a field of expertise, demonstrate your knowledge through you career, and earn the admiration of your immediate peers, but without the University seal of approval, the rest of the world won’t recognize your accomplishments. The best you can hope for is that an honorary degree be bestowed upon you.

And yet, the lifelong, self-motivated learner is exactly the ideal society aspires to produce through education. Nobody wants rote-memorization robots to come out of the school system, we want people enthralled with education, who will be inspired to spend the rest of their lives immersed in new subjects and fields of knowledge.

We can see this natural inquisitiveness in children:

[John Seely Brown] noticed that when a child first learns how to speak, she or he is totally immersed in a social context and highly motivated to engage in learning this new, amazingly complex system of language. It got him to thinking that “once you start going to school, in some ways you start to learn much slower because you are being taught, rather than what happens if you’re learning in order to do things that you yourself care about… Very often just going deeply into one or two topics that you really care about lets you appreciate the awe of the world … once you learn to honor the mysteries of the world, you’re kind of always willing to probe things … you can actually be joyful about discovering something you didn’t know … and you can expect always to need to keep probing. And so that sets the stage for lifelong inquiry.”

Total immersion in the subject matter is key. It’s like that famous essay, If We Taught English the Way We Teach Mathematics…, or art, or music, we would force kids to learn sentence structure, note theory, and color theory before ever allowing them to write, sing, or finger-paint. Instead, we throw kids into these subjects, let them go freeform, and only later begin to instill form and structure to refine them. With computers providing an environment of total immersion, there’s no reason children can’t play with math and science the same way they experiment in art and literature.

Extending this principle to institutions of higher learning, professors would serve, less as an authority bestowing knowledge on the students, but more as an expert, guiding the students to find the answers themselves. This is exactly how I approach my online courses, never bothering with the professor’s lecture MP3s and Power Point presentations, rather I use the syllabus as a guide for what I need to learn and figure it out myself through the text. From there, I exercise this knowledge in class discussions, where the interactions with and perspective of my peers prompt me to do additional research. On average, I write five to ten pages worth of researched content for class each week, and I’ve internalized far more subject matter this way than I ever did in a real-life college lecture.

In 1988, Isaac Asimov saw the computer as the means to set learning free of the constraints schools imposed, and produce lifelong learners who were empowered to research anything they desired, and, through such freedom, they would come to love learning:

Once we have outlets, computer outlets in every home, each of them hooked up to enormous libraries, where anyone can ask any question and be given answers, be given reference material… no matter how silly it might seem to someone else–that’s what you’re interested in, and you ask, and you can find out, and you can follow it up, and you can do it in your own home, at your own speed, in your own direction, and your own time, then everyone will enjoy learning

Nowadays what people call learning is forced on you, and everyone is forced to learn the same thing on the same day at the same speed in class, and everyone is different. For some it goes too fast, for some too slow, for some in the wrong direction, but give them a chance, in addition to school–I don’t say we abolish school–but in addition to school, to follow up their own bent from the start.

Carl Sagan once said, “When you make the finding yourself – even if you’re the last person on Earth to see the light – you’ll never forget it.” Learning facts isn’t so important now as learning how to find the facts ourselves. Stick that in your paradigm and shift it.

Luminaries for Scientists at the Relay for Life

Posted on 9th June 2009 by Ryan Somma in Ionian Enchantment

Vicky introduced me to the Relay for Life this year, an all-night fundraising event where teams raise money for the American Cancer Society. We brought some of the neighborhood kids to the event, and much fun was had by one and all. The most impactful moment of the night for me was the Luminaria Ceremony, where a seemingly endless list of the names of people who have died from or are currently surviving cancer is read. The names Patrick Swayze and Farrah Fawcett both came up, and that added to the impact, but also a name I that took me by surprise; although, it shouldn’t have:


Carl Sagan Luminary

Carl Sagan Luminary

Carl Sagan, my biggest hero, died of pneumonia after a two-year battle with bone marrow cancer on December 20, 1996. There is a memorial to Sagan on the planet Mars, where the marker displays a quote from him that reads, “Whatever the reason you’re on Mars, I’m glad you’re there, and I wish I was with you.” I envy the future humans who will get to see that monument in person.


Rosalind Franklin

Rosalind Franklin
Credit: MRC Laboratory of Molecular Biology

This very thoughtful luminary made me think of another scientist who died of cancer who I would like to see honored. Rosalind Franklin, who’s 1952 Photo 51 captured the basic structure of the DNA molecule, performed her research spending long hours directly in front of an X-ray beam, which almost certainly led to the ovarian cancer that ultimately killed her and prevented her from receiving the Nobel Prize with Francis and Crick for deciphering the molecule1.


Marie Curie

Marie Curie
Credit: Dibner Institute for the History of Science and Technology

Physicist and chemist Marie Curie also deserves a note here. She was awarded two Nobel prizes, one for her research into radiation (she coined the term “radioactivity”), and another for her discovery of the elements radium and polonium. She was the first woman to win a Nobel prize, the first person to win two of them, and one of only two people to have been awarded two Nobels in two different fields. Curie died of aplastic anemia, an illness where bone marrow does not produce sufficient new cells to replenish blood cells, a condition certainly brought on by her over-exposure to radiation; however, she deserves mention here because it was under her direction that the world’s first studies were conducted into the treatment of cancers using radioactive isotopes. Today the United Kingdom charitable organization Marie Curie Cancer Care bares her name in honor of her achievements.

Even if you don’t have anyone close to you who has died of cancer or is currently wrestling with the disease, you could donate money toward a luminary for one of these visionary pioneers whose lives were cut short by it.


1 It is unknown if she would have actually received the prize, but she did deserve to share in it; unfortunately, they do not award the Nobel posthumously.

Note: The Carl Sagan Appreciation Society (this is a staging version of the site) works to maintain Sagan’s incredible legacy.

The Great Dismal Swamp

Posted on 7th June 2009 by Ryan Somma in Adventuring

Devil's Walkingstick

Devil’s Walkingstick

The Great Dismal swamp sits on the Virginia-North Carolina border, surrounded by miles and miles of farmland on all sides. There is some sense of wonder as to how this 111,000 acres of swampland didn’t suffer the same fate as its surroundings. It wasn’t for lack of trying, as developers, like George Washington, carved deep canals through the swamp in an attempt to drain it and provide transportation routes. Canals that still run through the swamp today, one of which even remains in use, connecting the Albemarle Sound to the Chesapeake Bay.

The Dismal Swamp survived, not because it was a beautiful place that prescient minds wanted to preserve, which it is today, but because it was indomitable. The swamp could not be converted to farmland, so thick was its foliage and untamable its wetlands. Robert Frost came to the swamp to commit suicide by getting lost and starving to death, but was rescued by hunters who found him. The swamp served as a refuge for slaves before and during the Civil War, as few would brave the inhospitable place.

The Dismal Swamp serves as a natural monument to the fact that sometimes nature preserves itself.

20th Anniversary of Tank Man

Posted on 4th June 2009 by Ryan Somma in Enlightenment Warrior

Twenty years ago, a crowd gathered in Tiananmen Square to mourn the death of pro-market, pro-democracy and anti-corruption official, Hu Yaobang. Students had been gathering in the square off and on since April 14th. Soon one million people had gathered, but without a common cause, rather they were an emergent phenomenon. Some were free-market reformers, others anti-authoritarianism, and democratic reformers. On June fourth, Chinese tanks cleared Tiananmen Square, resulting in between 241 and 2,600 deaths, including soldiers, and thousands wounded.

On June fifth, amid the burning buses put up as blockades and fighting between protesters and soldiers, a column of tanks was brought to a sudden halt by a single man in a white shirt.


Tank Man

Tank Man
Credit: Jeff Widener

When the tanks tried to drive around him, he moved to block them again. Then he climbed up on the tank and began talking to the soldier driving it.

No one knows what happened to Tank Man. Some accounts claim he was pulled down from the tank by the crowd, which absorbed him, others that he was taken away by soldiers. Some accounts claim he was arrested and executed, others claim he is alive and in hiding.

When my mother visited China in the late 1990s, the citizens she met assured her the protests were against local government corruption and had nothing to do with democracy. In an amazing demonstration of information control, university students at Beijing University were unable to recognize this image, so thoroughly was the Chinese government able to censor the historical accounts, media coverage, and Internet access.

The photograph of this incredible act of passive resistance has become iconic. I like to set it as my desktop background from time to time as an inspiration. Even if China does not remember what happened on June 4th, 1989, the rest of the world does, and we still admire this brave man’s act of peaceful defiance.

Human history will remember him.

Putting Away Magical Thinking

Posted on 2nd June 2009 by Ryan Somma in Enlightenment Warrior,Ionian Enchantment



The movement of troops through the islands of the South Pacific in World War II had a profound, unintended consequence for the native cultures living in them. These isolated aboriginal peoples were suddenly exposed to soldiers in the Japanese and Allied Forces, who brought incredible amounts of manufactured clothing, medicine, canned foods, tents, weapons, and other goods with them. These supplies, some of which were shared with the islanders, were even dropped miraculously from the sky.

Then the war was over, the airbases were quickly abandoned, and the wonderful cargo stopped falling from the heavens. The islanders, in an attempt to persuade their gods and ancestors to bring more cargo to them in planes, ships, and parachutes, began ritualistically imitating the behaviors of the soldiers. They waved landing signals while standing on the abandoned runways, now lit with torches. They carved wooden headphones and sat in replicas of control towers, all in an attempt to bring the wonderful riches from beyond.

From our technologically-advanced perspective, we may fall into the trap of looking down on these “Cargo Cults,” as they are known, but a bit of introspection finds that we may all be guilty of such magical thinking. In my own profession, we have the term cargo cult programming, where a novice programmer includes code that serves no purpose in their software simply because they don’t understand what it does. I know that I have been guilty of such a logical fallacy in my own coding as a novice, where I would incorporate a large block of another programmer’s code into my work because I lacked the skills to identify the smaller portion of it that I actually needed. I didn’t know how the code worked; I just knew that copying and pasting it into my software solved my problems.

Richard Feynman coined the term “Cargo Cult Science” in his 1974 commencement address at Caltech to describe scientific ideas that we accept because they are established dogma rather than because they provide evidentiary proof of their effectiveness:

There are big schools of reading methods and mathematics methods, and so forth, but if you notice, you’ll see the reading scores keep going down–or hardly going up in spite of the fact that we continually use these same people to improve the methods. There’s a witch doctor remedy that doesn’t work. It ought to be looked into; how do they know that their method should work? Another example is how to treat criminals. We obviously have made no progress–lots of theory, but no progress–in decreasing the amount of crime by the method that we use to handle criminals.

Yet the true essence of science is to perpetually challenge the dominant paradigm. Someone once told me they didn’t trust science because it was, “One guy saying he saw something and some other guy agreeing with him;” but this is the very antithesis of the scientific process.

Science doesn’t say “This is what I saw, worship me!” Science says, “This is what I saw, this is how I saw it, now go see for yourself.” The whole purpose of peer-review is to have others try and replicate your experiments, and if they don’t get the same results? Well, isn’t that interesting?

Feynman has a word of warning to scientists who will compromise scientific truth for personal gain:

We’ve learned from experience that the truth will come out. Other experimenters will repeat your experiment and find out whether you were wrong or right. Nature’s phenomena will agree or they’ll disagree with your theory. And, although you may gain some temporary fame and excitement, you will not gain a good reputation as a scientist if you haven’t tried to be very careful in this kind of work. And it’s this type of integrity, this kind of care not to fool yourself, that is missing to a large extent in much of the research in cargo cult science.

The cargo cults of the south pacific mostly vanished when their newfound rituals failed to procure the favor of the gods, but one of these religions, the John Frum Cult, still exists today, and the inhabitants of Tanna island in Vanuatu still hold a parade every year, waiting for their god to return. In the meantime, the cult believes it has some empirical evidence validating their faith, as the influx of tourists to the island bring with them some of the legendary riches of the past.

Which societies are better off, the ones who abandoned their magical thinking, or the ones still living the illusion?