
Daniel Napierski
Bio [2007]
Daniel Napierski studied economics at Duke University before getting his
master's in computer science from Harvard University. Since then, he and
his wife have lived in the Boston area where he works as an independent
software consultant. His work has included agent-based simulations and
online retail recommendation-engines. Currently he spends much of his time
advising clients on software engineering best practices. He is interested
in intelligent agents, software design, complex systems, and game theory,
among other pursuits.
Project Title Programming Sequential Substitution Systems
By Example
Project
The goal of this project was to investigate the ability of sequential
substitution systems (SSS) to perform specified functions.
The approach taken was inspired by the process of test-driven development
(TDD). Within the field of software engineering, TDD is done by formally
specifying how a software component should perform before attempting to
engineer the code. The desired functionality is described by a suite of
unit tests, each asserting that given a particular input the component
will produce the correct predetermined output. When the suite of tests is
initially created, all of the tests should fail, but as the developer
builds the software component, the tests should begin to pass. Once the
component passes all of the tests, the developer may have some confidence
that the component is acting as intended.
In this project, string substitution examples are acting as software
tests. Instead of engineering the desired code, the universe of simple
string replacement rules (or programs) is searched in order to find those
that produce output matching the examples. Of all the simple programs
composed of string replacement rules, only those that can match the output
of the examples can be thought of as passing the tests. By this effort, we
may begin to understand how simple programs, such as SSS, can be used
within a commercial software engineering environment. One may foresee a
future where standard software engineering processes make greater use of
simple programs harvested for their ability to perform recognizable
computations.
Even when searching only the space of very small programs, many sequential
substitution systems were found to be carrying out well defined
mathematical functions. Of the programs that were analyzed, there also
existed a variety of mechanisms, or algorithms, by which they arrived at
their end result. The ability of sequential substitution systems to
execute identifiable computations has been clearly demonstrated. However,
this ability is heavily dependent on how the inputs and outputs to these
systems are encoded and decoded. With more experience, it may be possible
to develop an intuition into how best to encode and decode the data so
that program searches may be done more effectively.
Favorite Outer Totalistic 3-Color Rule
Rule chosen: 8681
I chose rule 8681 because of all the different behavior it displays,
including
different sized triangles and more complex patterns in the middle.
|