Application to Grad School

I’ve been at UCI for a whole quarter now and it looks like I never posted the application that did so much towards getting me here. Although I am now working on web browser security, rather than parallel computing, my stated interest in languages is still very much applicable; for now I’m fairly sure that any advances in browser security will require language features that promote development and maintenance of secure web applications. It is also especially important that any changes to our languages work in concert with our thinking about security, and not serve as an impediment to, or mental tax on, programmers. So, while my focus is now different, the underlying concerns about expressibility remain.

I have also started to develop greater interest in systems engineering. Some of that interest can be seen in the essay, though it’s heavily downplayed. I’m also working with Franz, rather than Nicolau or Scherson. And I’ve achieved one of my two goals for this academic year by going to ACSAC last week. It’s highly doubtful that I’ll be writing a paper on “compiler optimization in the face of concurrency”, and I have yet to organize my thoughts on browser security to the point that I can author a paper (The best ideas I’ve had so far were only just published last year).



Statement of Purpose

I am extremely interested in studying the intricacies of the relationship between what we think (algorithms) and what we say (programs), and using the results of such study to either improve the existing implementations of concurrency in computer systems, or create new ones. My interest in this topic first started during my final year as an undergraduate, when I found myself inexplicably drawn toward the exploration of notational systems. From my undergraduate mathematics courses I had discerned that there usually exist more than one representation for any particular mathematical object and that the choice of representation had an enormous impact on the ability to calculate. For example, we’d never use Cartesian coordinates for a problem with spherical symmetry. I concluded that this choice of representation must have had an historical impact on the rate of scientific and technological development as a side effect of the simplicity of computation within that representation. This interest has expanded and developed into a personal obsession with studying the problems that arise when implementing and designing large software systems (especially concurrent ones). I’m interested in how a computer language presents to the programmer an abstract model of the computer hardware and how that model affects the assumptions and optimizations that guide both the end programmer and restrict the compiler writer.

“We control complexity by establishing new languages for describing a design, each of which emphasizes particular aspects of the design and deemphasizes others.”[1] The abstractions that are chosen by the language designer have a large impact on software development within that language. Premature optimization can badly hurt a program, but with a programming language it hurts the programmers. A good example being the difference between the implicit iteration in functional languages and explicit iteration found in imperative languages. The imperative family of languages present to the programmer a model of the computer that is much closer to the hardware than is functional model of computation, a side effect being that certain very powerful and useful abstractions are simply not available in the `lower’ languages. These underlying models reveal the inner workings of the minds of language designers, and widespread adoption of the wrong model can restrict the advancement of technology.[2]

Not only does our representation of algorithms reveal our inner conceptualizations, but it also affects our reasoning about those algorithms. “The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.”[3] Our awareness of the relationship of data to its representation and our subsequent abilities to manipulate that data is largely a result of the development of Computer Science and its early focus on the dichotomy between message and meaning, data and program, thought and language. The way in which we describe a software system affects how we go about the design, and that in turn affects the actual performance of the system. So the study of this relationship has many important and broad applications in many areas of Computer Science, including Artificial Intelligence and Machine Learning, Software Systems Engineering, and Language Design and Compiler Techniques.

“The notion that a complex system should be structured as a sequence of levels that are described using a sequence of languages”[4] has long been an undercurrent in the field. Recently, as programmers and researchers alike continue to broaden the scope and applicability of programs, the interest in Domain Specific Languages has started to increase. We begin to notice that the desired extension in functionality is best achieved not with an additional library for a current language, but with an entirely new syntax; one that allows for the natural and elegant expression of primitives and combinations of primitives particular to the new domain. As it begins to surface with greater frequency, we should actively study this phenomenon and its relation to our conception of language as tool of thought.

During the past three years, this private focus on the exploration of cognition, language, and software design have enhanced my abilities as a professional programmer at NAWCWD, China Lake. Though not specifically trained as a programmer, I regularly teach myself new computer languages, as part of my dedication towards an understanding of the larger aspects and concerns of Software Engineering. This past year I’ve had the opportunity to learn GUI programming (C++/Qt) by volunteering to re-implement a targeting application so that it may run on a heavily customized version of GNU/Linux. To support this project, I also read “Design Patterns” (Gamma et.all) and noticed, first-hand, the impact that clean, elegant, and orthogonal class layouts have on reducing system complexity and improved understanding. Though new to both GUI programming and large software projects, I found adapting to the task both fun and challenging. This application is scheduled to be fielded to Army Special Forces in February 2009. As an additional part of my job, I have also specialized in Imagery Analysis, and wrote tools that manipulate 4TiB of imagery to report statistics and other metadata. Most recently, I was able to use the skills and knowledge gained from these projects to prototype a parallelization routine for auto-registering the frames of a movie in order to develop a mosaic in real-time. Throughout my career, I have been fortunate enough to seek out and perform new work with the express purpose of enriching my understanding of software system design and knowledge of new technologies, diligently expanding my skill-set with each passing year.

Away from work, I have continually sought to learn more about the core of Computer Science, and it has grown substantially from the hobby it was when I was an undergrad, to become the core focus of my intellectual and professional life. I’ve read and worked many of the problems in Sipser’s “Introduction to the Theory of Computation” (primarily following Shai Simonson’s ArsDigita course) and especially enjoyed the sections on languages which built up to the computational model of Turing Machines, and the Computational Hierarchy. Additionally, I’ve familiarized myself with several other books in my continuously expanding library, notably Knuth’s “The Art of Computer Programming” and “Selected Papers on Computer Languages”, and MacKay’s “Information Theory, Inference, and Learning Algorithms”, all of which have kept my scholastic skills from becoming too rusty and will ease my career change into academic research. I have also devoted much time to watching lectures and solving problems given in courses available from ArsDigita and the CS section at MIT’s OpenCourseWare. The availability of this type of educational material has allowed me to unofficially continue my education, despite a demanding employment that usurps my time away from research. My dedication to deepen my understanding has been a life-long passion and will never abate; and my interest in computation, both theoretic and practical, has monotonically increased with my knowledge of the science of computation.

My unceasing interest in how our linguistic expressions and cognitive abstractions affect the relative ease of programming, compels me to study how this relates to Parallel Computing, Distributed Computing, and Emergent Behavior. I would like to focus my attention on the design and implementation of parallelism as a linguistic construct, to delve deep into the problems surrounding our current understanding of concurrency and use the fruits of this research to construct a model of computing that is both natural for programmers to think and express themselves in, and that can be implemented to run at least as efficiently as Erlang. I’m impressed with the concern and focus that the Donald Bren School of Information and Computer Science has on the nature of parallelism and its impact on the future of the field, and look forward to working with both Nicolau and Scherson on parallel and distributed architectures. My educational background, together with my more practical experience as a professional software developer working alongside and in support of imagery researchers and dedication toward deeper understanding of concurrent/distributed computational models should allow me to successfully integrate with the existing department. I would love to be granted the opportunity to share and develop this understanding as a PhD student so that I may become a contributing member of the research community and experience the joy of true understanding that comes from fundamental and basic research. During my first year I hope to author, or co-author, a paper on the topic of compiler optimization in the face of concurrency, attend an international conference in order to join the wider research community, and help to formulate a long-term solution to the concurrency problem.

To paraphrase Abelson and Sussman: “The [concurrency] revolution is a revolution in the way we think and in the way we express what we think.”[1]

References
———————-
[1] Abelson & Sussman, “Structure and Interpretation of Computer Programs” (preface, 1st Ed).
[2] J. Backus, “Can programming be liberated from the von Neumann style? A functional style and its algebra of programs.” Commun. ACM 21,8 (Aug. 1978).
[3] Edsger W. Dijkstra, “How do we tell truths that might hurt?” in “Selected Writings on Computing: A Personal Perspective”, pages 129–131. Springer-Verlag, 1982.
[4] Abelson & Sussman, “Structure and Interpretation of Computer Programs” (section 2.2.4).



Personal History Statement

Though I initially chose to major in Physics, and later doubled in Applied Mathematics, I remained steadfastly interested in computers throughout my undergraduate career. This fascination with computation steadily developed into a passion for computer languages. Initially, informed by nothing more than cultural stereotypes, I mistakenly thought that Computer Science was a euphemism for programming, but personally directed research quickly dispelled this notion from my mind. I became enamored with this nascent field, and discovered that it incorporated many of the older mathematical concepts that continued to be the core focus of my academic studies. The more material I read about numerical and algorithmic analysis, computational geometry, and meta-circular evaluators, the more I recognized that this should have been my chosen field.

After completing my undergraduate studies, I accepted employment as a Research Physicist at China Lake Naval Air and Weapons Station, primarily because of my self-taught abilities as a programmer. As part of my first project, I had the opportunity to participate in the construction of a Finite Element Simulation for examining the behavior of optical crystals. Though security concerns prevented publication about the results of this effort, I was able to expand upon my knowledge of computational geometry and learn about the techniques used in simulations. I then moved into the Weapons Engagement Office where I supported a group that statistically analyzes the accuracy and reliability of GPS coordinates obtained from different photogrammetric software packages. I was able to write code that parses the NITF imagery format into a database. Together with various scripts and custom utilities, this database helps to answer queries about imaging sensors and scene geometry specific to the project’s analysis and has vastly improved our efficiency by enabling the automation of many tasks. As part of this process, I was able to see first hand how the underlying representation of a document, and its embedded information abstractions, forms the foundation on which software systems are built; and how this affects the performance, utility and scalability of such systems.

In January of this year, I was selected as lead developer for porting an existing in-house targeting application from Windows to a heavily customized version of GNU/Linux. This project has given me the chance to read Design Patterns[1] and learn the fundamentals of GUI architecture within the Qt framework. As a principal developer for software scheduled for deployment in Iraq/Afghanistan in 1st quarter 2009, I’ve learned how to balance changes in requirements and requests for additional functionality within a tight schedule while maintaining a light memory footprint and efficiency when handling large images. During this time, I also volunteered a month to another project in order to prototype the parallelization of an existing imagery stitching algorithm, complete with real-time visual feedback. I elected to participate in this effort primarily to gain familiarity with parallel and concurrent programming using both OpenMPI and low-level network programming. Ultimately, I was able to prove, via direct demonstration, that the theoretic possibility of real-time mosaicking of images taken from a movie stream can be accomplished with a modest computing cluster. The prototype was well received and helped to secure the project additional funding.

I’ve thoroughly enjoyed the intellectual stimulation, camaraderie, and informative guidance that I receive from being a contributing member in a greater team effort, and have actively sought out tasks and projects with the goal of expanding my skills as a programmer and broadening my practical knowledge of computer software engineering; continually seeking to address any challenges due to a lack of formal training in computer science. My background in Physics and Applied Mathematics together with my practical experience as a programmer will enable me to contribute a broadened perspective to the research community as I continue to deepen my understanding of computation. As part of my working experience, I’ve learned that I love to study and contemplate the abstractions and mental frameworks constructed by the pioneers of Computer Science. I believe that we can increase the diversity and scope of the field through an interdisciplinary focus on lowering the barriers to entry by streamlining some of these abstractions in order to help make the science of computation accessible to a broader range of people. In particular, the area of concurrency seems to be prematurely optimized on the shared-memory model, and an effective solution to this problem requires a cross-fertilization of ideas from both academic researchers and those with practical experience in industry.

References
——————–
[1] Gamma, Erich, R. Helm, R. Johnson, and J. Vlissides. “Design patterns: elements of object-oriented software architecture.” Addison-Wesley, 1994.