Cunningham’s Fieldstone Yard

H. Conrad Cunningham

13 July 2022

Copyright (C) 2022, H. Conrad Cunningham
Professor of Computer and Information Science
University of Mississippi
214 Weir Hall
P.O. Box 1848
University, MS 38677
(662) 915-7396 (dept. office)

Browser Advisory: The HTML version of this textbook requires a browser that supports the display of MathML. A good choice as of June 2022 is a recent version of Firefox from Mozilla.

Cunningham’s “Fieldstone” Yard

Introduction

A few years ago I read software engineering consultant and writer Gerald Weinberg’s [12,13,15] book Weinberg on Writing: The Fieldstone Method [14]. Weinberg describes his method for writing with the metaphor of builders constructing a stone wall. If the builders have previously collected interesting stones that they discovered lying about in the fields and organized them systematically into piles, then the builder can select from these “fieldstones” and readily fit them together quickly into the new wall.

Weinberg suggests that writers can approach writing in a similar way. In his approach [14], they collect various interesting items discovered or created over time—ideas, insights, quotes, articles, etc.—including their previously and perhaps partially written pieces—and organize these “fieldstones” into piles. Then, when writing new, larger projects, writers can draw on their piles of “fieldstones”, chose appropriate items, adapt them as needed for the new purposes, add missing pieces, apply the needed glue, and “build” the new project.

Weinberg also suggests that writers should have multiple writing projects going at a time. When unable to make progress on one project, they can just shift to another, returning to the first project later.

I was a faculty member in Computer and Information Science at the University of Mississippi from 1989 until I retired in 2019. I created, used, adapted, and reused lots of code examples, assignments, handouts, and lecture notes during that time. Fortunately, I kept much of this work and had put much in digital form. Unfortunately, I did not always collect extensive metadata—on the sources of ideas and the precise intentions and context of the codes examples. And, I did not organize the various pieces of work as well as I wish I had done.

In creating this collection of documents and examples in 2022, I am attempting to “mine” this body of work and organize it—some as partial books, some as loose collections. Unlike physical fieldstones, I can put the same stone in more than one pile. A significant aspect of this effort is the construction of a unified set of bibliographic references and modification of the the collected documents to use this set of references.

This is a work in progress—probably will be such forever. However, I hope to construct larger pieces of work that may be made useful to others.

Programming Language Organization

  1. In-progress Haskell-based textbook Exploring Languages with Interpreters and Functional Programming (ELIFP) [8]

    Chapter index (with supplementary materials):
    as HTML
    as PDF
    Single document:
    as HTML
    as PDF

Domain-Specific Languages

  1. Pile Notes on Domain-Specific Languages [7]

    Chapter index:
    as HTML
    as PDF
    Chapter Introducing DSLs:
    as HTML
    as PDF

Functional Programming

  1. Pile Notes on Functional Programming in Scala [10]

    Chapter index (with supplementary materials):
    as HTML
    as PDF
    Single document for notes on Chiusano & Bjarnason [1] Chapters 3-5:
    as HTML
    as PDF
  2. In-progress Haskell-based textbook Exploring Languages with Interpreters and Functional Programming (ELIFP) [8] — chapters 2 and 4-30 for course on functional programming using Haskell

    Chapter index (with supplementary materials):
    as HTML
    as PDF
    Single document:
    as HTML
    as PDF
  3. Legacy 2014 textbook Notes on Functional Programming with Haskell [5] — mostly merged into in-progress textbook ELIFP

    Single document: as PDF

Abstraction and Modularity

  1. Pile Notes on Abstraction and Modularity

    Chapter index (with supplementary materials):
    as HTML
    as PDF
    Single document for Notes on Data Abstraction[6]
    as HTML
    as PDF

Multiparadigm Programming

  1. Pile Multiparadigm Programming with Python [9]

    Chapter index (with supplementary materials):
    as HTML
    as PDF
    Single document for Chapters 5-9:
    as HTML
    as PDF
  2. Pile Scala

TODO

  1. Pile Elixir

TODO

  1. Pile Lua

TODO

Concurrent Programming

  1. Pile ???

Software Architecture

  1. Pile Notes on Software Patterns

    Chapter index (with supplementary materials):
    as HTML
    as PDF
    Single document for Chapters 1-2:
    as HTML
    as PDF
  2. Pile Notes on Software Families and Frameworks

TODO

  1. Pile architectural mismatch

TODO

  1. Pile object orientation

TODO

Writing

  1. Pile TBD

TODO

Formal Methods in Software Engineering and Programming

  1. Legacy 2006 textbook A Programmer’s Introduction to Predicate Logic [3]

    Single document: as PDF

  2. Legacy 2006 textbook Notes on Program Semantics and Derivation [4]

    Single document: as PDF

  3. Legacy 1994 notes Feijen’s Table of Cubes Problem [2]

    Single document: as PDF

    Slides: as PDF

Models of Computation

  1. Pile Notes on Models of Computation — notes to accompany lectures on the 5th edition of the Linz textbook [11]

    Chapter index:
    as HTML
    as PDF
    Single document:
    as HTML
    as PDF

Acknowledgements

TODO

I retired from the full-time faculty in May 2019. As one of my post-retirement projects, I am continuing work on possible textbooks based on the course materials I had developed during my three decades as a faculty member. In January 2022, I began refining the existing content, integrating separately developed materials together, reformatting the documents, constructing a unified bibliography (e.g., using citeproc), and improving my build workflow and use of Pandoc. I adapted this index page from a portion of my Spring 2019 CSci 555 course notes.

I maintain this chapter as text in Pandoc’s dialect of Markdown using embedded LaTeX markup for the mathematical formulas and then translate the document to HTML, PDF, and other forms as needed.

References

[1]
Paul Chiusano and Runar Bjarnason. 2015. Functional programming in Scala (First ed.). Manning, Shelter Island, New York, USA.
[2]
H. Conrad Cunningham. 1996. Feijen’s table of cubes problem. University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/docs/FeijenCubes/Feijen_Table_of_Cubes.pdf
[3]
H. Conrad Cunningham. 2006. A programmer’s introduction to predicate logic. University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/docs/PredicateLogicNotes/Programmers_Introduction_to_Predicate-Logic.pdf
[4]
H. Conrad Cunningham. 2006. Notes on program semantics and derivation. University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/reports/umcis-1994-02.pdf
[5]
H. Conrad Cunningham. 2014. Notes on functional programming with Haskell. University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/docs/Notes_FP_Haskell/Notes_on_Functional_Programming_with_Haskell.pdf
[6]
H. Conrad Cunningham. 2022. Notes on data abstraction. University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/docs/DataAbstraction/NotesDataAbstraction.html
[7]
H. Conrad Cunningham. 2022. Notes on domain-specific languages. University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/docs/DSLs/NotesDSLs.html
[8]
H. Conrad Cunningham. 2022. Exploring programming languages with interpreters and functional programming (ELIFP). University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/docs/ELIFP/ELIFP.pdf
[9]
H. Conrad Cunningham. 2022. Multiparadigm programming with python (PyMPP). University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/docs/PyMPP/PyMPP_index.html
[10]
H. Conrad Cunningham. 2022. Notes on functional programming in scala. University of Mississippi, Department of Computer and Information Science, University, Mississippi, USA. Retrieved from https://john.cs.olemiss.edu/~hcc/docs/ScalaFP/FPS_index.html
[11]
Peter Linz. 2011. Formal languages and automata (Fifth ed.). Jones & Bartlett, Burlington, Massachusetts, USA.
[12]
Gerald M. Weinberg. 1971. The psychology of computer programming. Van Nostrand Reinhold, New York, New York, USA.
[13]
Gerald M. Weinberg. 2001. An introduction to general systems thinking (Silver Anniversary ed.). Dorset House, New York, New York, USA.
[14]
Gerald M. Weinberg. 2006. Weinberg on writing: The fieldstone method. Dorset House, New York, New York, USA.
[15]
Gerald M. Weinberg and Paul Shay. 1985. The secrets of consulting: A guide to getting and giving advice successfully. Dorset House, New York, New York, USA.