the primary document used for the first gadfly writers workshop series.
this document contains references to documents in different technology and humanities timelines.
we learn to tangle and weave theory together from these histories to design new computational
media for ourselves and others.
%%thewritersworkshopisacreativeworkshoptobuildandpracticewritingmusclesover6weeks.we'll learn to write progressive technical content with computational and literary qualities. we'lllearnhowtocomposehypermediaintoaccessiblesensoryexperiences.we'll become enjoy writing and sharing our work.togetherwe'll become more fluent in our ability to discuss software through discourse and critique.NOTE:theschedulebelowifforafridayclassfrom9am-11am.weneedtobearoundthistimetoteachatimezonefriendlycourse.|course|day|topic||-----|--------|-----------------------------------||1|10/18|writingaccessibleliterateprograms||2|10/25|tellingstorieswithhypermediainmanylanguages||3|11/02|collaginghypermediatotellstories||4|11/09|critiquing,testing,andpublishingaccessibleprograms||5|11/16|sharingyourbrandandwork||6|11/23|fiveminute<dfn>lightningtalks</dfn>toshareyouandyourwork||-|11/28|nationaldayofmorning||7|12/-|[optional]writersworkshopzinelivestreamdryrun||8|12/-|writersworkshipzinelivestream||-|12/25|christmas/hanukkah|following6weeksofcourseworkandwritingpracticewe'll break for a few weeks. during that time gadfly will work asynchronously with the class torefinetheirauthorbio's (ie github profiles) and edit their works for the zine. members of the course will leave this course with portfolio material andsharedauthorshipwiththerestofthecourse.itiscriticalthatfolkscancommittobeingpresentduringtheweeklycourses.thesearethetimeswhenourcommunitycomestogethertoplayandwewanttofosterabetterenvironmentofthecohorttowritein.
the writers workshop is a creative workshop to build and practice writing muscles over 6 weeks. we'll learn to write progressive technical content with computational and literary qualities. we'll learn how to compose hypermedia into accessible sensory experiences. we'll become enjoy writing and sharing our work.
together we'll become more fluent in our ability to discuss software through discourse and critique.
NOTE
the schedule below if for a friday class from 9am-11am.
we need to be around this time to teach a time zone friendly course.
course
day
topic
1
10/18
writing accessible literate programs
2
10/25
telling stories with hypermedia in many languages
3
11/02
collaging hypermedia to tell stories
4
11/09
critiquing, testing, and publishing accessible programs
5
11/16
sharing your brand and work
6
11/23
five minute lightning talks to share you and your work
-
11/28
national day of morning
7
12/-
[optional] writers workshop zine live stream dry run
8
12/-
writers workship zine live stream
-
12/25
christmas / hanukkah
following 6 weeks of course work and writing practice we'll break for a few weeks. during that time gadfly will work asynchronously with the class
to refine their author bio's (ie github profiles) and edit their works for the zine. members of the course will leave this course with portfolio material and
shared authorship with the rest of the course.
it is critical that folks can commit to being present during the weekly courses.
these are the times when our community comes together to play and we
want to foster a better environment of the cohort to write in.
# boiler plate code to install the literate programming environment on different services.COLAB=Truetry:importgoogle.colabexcept:COLAB=FalseifCOLAB:try:importmidgyexceptModuleNotFoundError:# we only automatically install on colab. # use the pip installation command below to install midgy otherwise.!pipinstallgit+https://github.com/deathbeds/midgyifnotget_ipython().has_trait("tangle"):%reload_extmidgy
first, thanks for giving a look.
this document is written in a markdown forward literate programming language
tony wrote called midgy. he needs to make it easier for y'all to develop with.
TODO - indicates content that needs to be added.
NOTE - content that should be presented to the class.
STUB - a region that needs more exposition and editting.
rendered text contained in square braces indicate a placeholder for a missing link
please add generic references and how-to's to the marginalia
this draft is meant to be a backbone to build a decolonized, accessible computational course from.
it needs more voices. please suggest more references that would create a more age and cultural diversity.
we develop a theme of literacy - the ability to read and write - in computer programming. [2]
this lecture explores different systems of thought for assessing the quality of a computational work.
we pull from design and literary theory while looking computer and art history to experiment with contemporary works
%%## donald knuthdonaldknuthisoneofthemostcriticalfiguresinthiscourse.in1984,hepublishedhisprescientconceptof"[literate programming]".atechniqueheusedtowriteanddocumentlargersystemshedeveloped(eg[tex]and[metafont]).allofthiswhilewritingseveralvolumesofthe[artofcomputerprogramming].thisherculean,severaldecadelongartprojectofknuth's hasaptlyearnedhimareferenceas<q>thepatronsaintofyakshaves</q><figure><blockquote>*Yakshave-2:Writeabookofthecentury*Yakshave-1:Inventyourowncomputerforillustrationpurposes*Yakshave1:Somewherealongtheroad,implementyourownprogramminglanguage…*Yakshave2:Inventyourownprogrammingparadigmforit*Yakshave3:Inventyourownlayoutalgorithmforit*Yakshave4:Designafont*Yakshave5:Writeanauthoringtoolforfonts*Yakshave6:Comeupwithyourownversioningscheme*Yakshave7:Avoidadoptionofitforgreatergood*Yakshave8:Implementacustomlanguageforprintabledocuments</blockquote><figcaption>alistofyakshavesextractedfromtheoriginaldocumentforaccessibility</figcaption></figure>{{iframe("the patron saint of yak shaves","https://yakshav.es/the-patron-saint-of-yakshaves/")}}{{iframe("1980 the letter s","https://gwern.net/doc/design/typography/1980-knuth.pdf")}}<figure><figcaption>1980donaldknuthdiscussingtypographywithfamouscalligrapherhermanzapfreferencedfrom<q><ahref="https://www.quantamagazine.org/computer-scientist-donald-knuth-cant-stop-telling-stories-20200416/">TheComputerScientistWhoCan’tStopTellingStories</a></q></figcaption></figure>TODO:addsomehermanzapfdrawingscausetheygorge
donald knuth
donald knuth is one of the most critical figures in this course.
in 1984, he published his prescient concept of "[literate programming]".
a technique he used to write and document larger systems he developed(eg [tex] and [metafont]).
all of this while writing several volumes of the [art of computer programming].
this herculean, several decade long art project of knuth's has
aptly earned him a reference as the patron saint of yak shaves
Yak shave -2: Write a book of the century
Yak shave -1: Invent your own computer for illustration purposes
Yak shave 1: Somewhere along the road, implement your own programming language…
Yak shave 2: Invent your own programming paradigm for it
Yak shave 3: Invent your own layout algorithm for it
Yak shave 4: Design a font
Yak shave 5: Write an authoring tool for fonts
Yak shave 6: Come up with your own versioning scheme
Yak shave 7: Avoid adoption of it for greater good
Yak shave 8: Implement a custom language for printable documents
a list of yak shaves extracted from the original document for accessibilitythe patron saint of yak shaves1980 the letter s
donald knuth introduced the concept of literate programming as a new style for writing computational literature.
in his approach, both the literary and computational aspects of a program cooperate to tell a story.
My purpose in the present paper is to
propose another motto that may be appropriate for the
next decade, as we attempt to make further progress
in the state of the art. I believe that the time is ripe
for significantly better documentation of programs, and
that we can best achieve this by considering programs
to be works of literature. Hence, my title: “Literate
Programming.”
donald knuth, literate programming, 1984 visit source
WEB = "http://www.literateprogramming.com/knuthweb.pdf"
%%### literate programming coursesthiscourseisoneofthefewclassesonliterateprogramming.donaldknuthhastaughtthiscourseandtherearelessonsavailableonyoutube.we're going to listen to two clips from his lectures to contextualize our goals.1.{{iframe("knuth discusses <q>groping with finding a style when using a new form of expression</q> in his early yak shaves","https://www.youtube.com/embed/JxVQFQlfS7w?si=GN2YdbBSdTIEYwQk&clip=Ugkxpo2i1_uvQlJEKtTDXlSOuzmzW74_KmRi&clipt=ELacDxjQyBI",)|indent(4)}}2.{{iframe("knuth discusses the position of the computer program in literature","https://www.youtube.com/embed/JxVQFQlfS7w?si=oZItsWLTr7ddBmos&clip=Ugkxc6qe5NvLhUJq1GCc5zi8gP3pIuE-hrvd&clipt=EMr0TBjZwVA",)|indent(4)}}
literate programming courses
this course is one of the few classes on literate programming.
donald knuth has taught this course and there are lessons available on youtube.
we're going to listen to two clips from his lectures to contextualize our goals.
knuth discusses groping with finding a style when using a new form of expression in his early yak shaves
knuth discusses the position of the computer program in literature
comments on literate programming and non-literate programming¤
in traditional (ie. non-literate) programming we measure the computational quality of the work,
and in literature we measure the literary qualities. any attempt to measure the
quality of code in traditional literature or the literary qualities of code in programs
is ill-posed outside of the literate programming framework. non-literate programs will
prioritize coding style over literary style; they are not equitable.
STUB: we do observe the need to document code in programs so much so that we observe literate programming
aesthetics in different languages. python has docstrings which are documentation containing executable
code snippets. mdx offers a popular literate style of programming specifically useful for blogging.
the practice of literate programming unifies much of our work as writing or composition.
we measure all works from both their literary and computational qualities. in literate programming,
narrative and code cooperate to bring meaning to otherwise abstract objects like functions, classes,
or data. forevermore, the narrative and code are inextricably linked, neither language takes priority rather
the composition of cooperative languages.
the original [WEB] literate programming language - [yak shave number 1] - chose [TeX] and [Pascal] are the respective document and programming language targets. in literate programming, knuth describes his choice of pascal because it is a popular systems programming language
> I chose PASCAL as the programming language because it has
received such widespread support from educational institutions all over the world; it is not my favorite language for system programming, but it has become a
“second language” for so many programmers that it
provides an exceptionally effective medium of communication
flowchart LR
WEB -- WEAVE --> TEX -- Tex --> DVI
WEB -- TANGLE --> PAS -- Pascal --> REL
%%### modern literate computing{{quote("We compare mass ability to read and write software with mass literacy, and predict equally pervasive changes to society. Hardware is now sufficiently fast and cheap to make mass computer education possible: the next big change will happen when most computer users have the knowledge and power to create and modify software.",'introduction of the "[computer programming for everybody]", a proposal that provided early funding for python development.',"https://web.archive.org/web/20220407180531/https://www.python.org/doc/essays/cp4e/")}}thingshavechangedsince1984.pythonhasbecomeadoptedasa[populargluelanguage](https://numpy.org/doc/stable/user/c-info.python-as-glue.html)forsystemsprogramming.TeXstillremainsadarlingofthescientificcommunity,butisfindingTeXcommonlyembeddedindigitalwebsystemsandtheroleofprintmediawavers.TODO:addTIOBEindex[computationalnotebooks]providenaturalsubstratesforliterateprograms.infact,[fernandoperez]-co-founderofthe[jupyternotebooks]-uses<dfn>[literatecomputing]</dfn>todifferentiatetheactofwritinginsideofacomputationalloop.thedefactolanguagesofnotebookshasbeenpythonandmarkdown.thereare[otherkernels]butwesticktothesebecausetheyarethemostflex(ieofferthemostglue)tootherlanguageinterfaces.markdownisourprimaryprogramminglanguageforthepurposesofthiscourse,andweinvokepythontosupplementourliteraryneedsbeyondmarkdown.{{iframe("a history of the design and adoption of computational notebooks in science, education, and more.","https://web.archive.org/web/20240502184602/https://www.theatlantic.com/science/archive/2018/04/the-scientific-paper-is-obsolete/556676/")}}
modern literate computing
We compare mass ability to read and write software with mass literacy, and predict equally pervasive changes to society. Hardware is now sufficiently fast and cheap to make mass computer education possible: the next big change will happen when most computer users have the knowledge and power to create and modify software.
introduction of the "[computer programming for everybody]", a proposal that provided early funding for python development. visit source
things have changed since 1984. python has become adopted as a popular glue language for systems programming.
TeX still remains a darling of the scientific community, but is finding TeX commonly embedded in digital web systems and the role of print media wavers.
TODO: add TIOBE index
[computational notebooks] provide natural substrates for literate programs.
in fact, [fernando perez] - co-founder of the [jupyter notebooks] - uses
[literate computing] to differentiate the act of writing inside of a
computational loop.
the de facto languages of notebooks has been python and markdown.
there are [other kernels] but we stick to these because they are the most flex (ie offer the most glue)
to other language interfaces.
markdown is our primary programming language for the purposes of this course,
and we invoke python to supplement our literary needs beyond markdown.
a history of the design and adoption of computational notebooks in science, education, and more.
%%--mdTODO:combinethiscellwiththepriorcell#### literate computing in computational notebooks...```mermaidflowchartLRIPYNB--WEAVE-->MD--WEAVE-->HTML--print-->PDFIPYNB--TANGLE-->PY--python-->PYC```STUB:theoriginsofliterateprogrammingpointbacktothe1980s.since,literateprogramminghasbecomeafeatureofdifferentprogramminglanguagesandtechnologies.in1999,timpetersintroducedthe`doctest`modulethatprovidedsyntaxforincludingteststhatcouldbeexecutedwithinyourdocument.wetalkabouttestinginlecture4.https://groups.google.com/g/comp.lang.python/c/DfzH5Nrt05E/m/Yyd3s7fPVxwJ?pli=1thedifferencebetweenliterateprogrammingandliteratecomputingisthatLPareauthoredandexecutedasanentiredocumentwhileliteratecomputingisaninteractivestyleofauthorshipinparts.
mermaid
flowchart LR
IPYNB -- WEAVE --> MD -- WEAVE --> HTML -- print --> PDF
IPYNB -- TANGLE --> PY -- python --> PYC
STUB: the origins of literate programming point back to the 1980s.
since, literate programming has become a feature of different programming
languages and technologies. in 1999, tim peters introduced the
doctest module that provided syntax for including tests that could
be executed within your document. we talk about testing in lecture 4.
the difference between literate programming and literate computing is that
LP are authored and executed as an entire document while literate computing
is an interactive style of authorship in parts.
%%### ambiguity of signsTODO:includeRenéMagritte:Fromarbitrarysignstoelectiveaffinitieshttps://www.researchgate.net/publication/327653152_Rene_Magritte_From_arbitrary_signs_to_elective_affinities_Painting_against_the_imaginary_bounds_of_the_imaginationthisisnotaprogram#### semiotics: the study of signsferdindandsaussurebroughtacriticalobservation<q>thereisnologicalconnection</q>betweenthesignifierandthesignifiedinasystemofsigns.thisobservationestablishesthefundamentalresearchquestionsforthefieldofsemiotics-thestudyofsigns.semioticsisanotaliterarytheory,butformsformuchofliterarytheory.{{iframe("1916 wikipedia entry on saussure's <q>signifier and signified</q> withmultipledescriptionsoftheambiguitiesobserveinsignsystems.","https://en.m.wikipedia.org/wiki/Signified_and_signifier#Relation_between_signifier_and_signified",True)}}{{iframe("paul fry lecture for introduction to theory of literature yale 300 on semiotics and structuralism","https://www.youtube.com/embed/VsMfaIOsT3M?si=yewdJ4oI7PXuC3WL")}}
ferdindand saussure brought a critical observation there is no logical connection between the
signifier and the signified in a system of signs. this observation establishes the fundamental research questions for the field of semiotics - the study of signs.
semiotics is a not a literary theory, but forms for much of literary theory.
1916 wikipedia entry on saussure's signifier and signified
with multiple descriptions of the ambiguities observe in sign systems.paul fry lecture for introduction to theory of literature yale 300 on semiotics and structuralism
CLASS: discord thread: please share some of your favorite author's and quotes.¤
this section presents writers talking about the importance or writing.
this section is always incomplete. please add suggestions you find inspiring
and educational.
STUB: i would love ideas and broad representation
annalee newitz is a contemporary science fiction and nonfiction writer.
recently they authored a book called "stories are weapons"
Through it all, I was trying to write my way out of the terror and confusion. I knew that I had to stop living in the moment, stop feeling the dread, and put what was happening to the United States in a deeper context. I turned to history for answers, researching American ideological conflicts of the past two hundred years—from formal military psychological operations to messy domestic culture wars—hoping to find precedents that would explain why our democracy was devolving into what felt like madness. As a science journalist, I was frustrated that there were no scientific instruments, no objective measures I could use to prove that people’s lives were being destroyed by words and ideas. But as a fiction writer, I knew there were other ways to get at the truth, to make sense of a world gripped by absurdity and chaos. I had to tell a story.
"Indeed, no woman writer can write ‘too much’… No woman has ever written enough."
ursula le guin
toni morrison
[sunny singh's writing rules](https://x.com/ProfSunnySingh/status/1423335297245454345)

1. why do you want to write this? what is your motivation?
1. what is your personal emotional, psychological, ethical investment in writing it?
1. can someone else tell this story better? is it someone else's story to tell?
1. what does YOUR telling of the story do? does it replicate prior violence, oppression/injustice? does it provide new understanding or insight?
1. what is your power balance/imbalance as a writer of the subject matter?
1. finally, should you write/pubish this at all? as with most ethical questions, the key is not can one but should one.
we're going to experiment with making more cognitively accessible
computational literature during this course. we'll write primarily for
ourselves and then we'll write for our class.
cognitive accessibility
writing for yourself
writing for each other
NOTE: after the first 6 weeks we will consider a wider audience outside the class.
%%### cognitive accessibility<figure><blockquote>foranytasktobesuccessful,motivationmustequalorsurpasscognitiveload.</blockquote><figcaption>{{iframe("microsoft inclusive design: cognitive exclusion","https://inclusive.microsoft.design/tools-and-activities/InclusiveDesignForCognitionGuidebook.pdf")}}</figcaption></figure>thisclassroomisaneurodiversebecauseweallhavedifferentbrains.we'll respect and reflect on these differences to discover accomodations thatmaysupportourcommunity's access needs. we'lllearnouraccessneedsandadvocateforthem.ineffect,weareallpartofco-designefforttobuildourwritingskills.
cognitive accessibility
for any task to be successful, motivation must equal or surpass cognitive load.
microsoft inclusive design: cognitive exclusion
this classroom is a neurodiverse because we all have different brains.
we'll respect and reflect on these differences to discover accomodations
that may support our community's access needs. we'll learn our access needs and advocate for them.
in effect, we are all part of co-design effort to build our writing skills.
“Throw up into your typewriter every morning. Clean up every noon.”
TODO: add raymond chandler reference
first and foremost, these writing tasks are for you to find joy and pleasure.
donald knuth demonstrates an ability to insert emotion and feeling into his scientific literature,
so much so that you don't even notice his work is transmitting science.
there is passion and intrigue that can be felt in most paragraphs.
> My hope is that the ability to make explanations more natural will cause
> more programmers to discover the joys of literate programming,
> because I believe it’s quite a pleasure to combine verbal and mathematical skills;
> but perhaps I’m hoping for too much.
similary, semiologist [roland barthes] discovers a similar remedy for science writers.
in [science vs literature] he states, There is, finally between science and literature, a third margin
which science must reconquer, that of pleasure.
NOTE: the course writing assignments are meant to find time for yourself and your thoughts.
you the writer contain multitudes, you have many audiences, and most attempts
to write to an idealized audience will hamper the connection between you and your work.
while writing,
write for yourself,
write something you want to read,
write the documentation you think is needed,
write the blog post you wish was written.
CLASS: discord thread: what are tasks that are NOT writing?¤
writing assignment #1: write a notebook or markdown document about a piece of code or media¤
it is hard to know our audience, but we can learn about ourselves. we tasked with creating a work for these programs focus on writing what you may want to read in the future. be your best audience.
learning goals
practice markdown by using order emphasis and hierarchy
write a notebook
a prior example of mars
practice writing markdown. markdown is a critical communcation tool for participating in open source.
often early contributions are to documentation, and markdown is the most popular modern language choice.
a good check for bounding your work is does it restart and run all? we will not impose this constraint
on our essays just yet. a writer always knows there is more they want to write, with time, you'll get there. for now, try to write about one small idea at a time, if you start adding ideas as if they are needed.
please use discord if you need support in coming up with a writing goal.
use your teacher, TA, and classmates to get through these challenges supported.
%%## STUB: you can't smoke a pipeusethisisnotapipeasanexampleofwritingaboutmedia.specifically,weconnectwithcalligramsaspreviewoffuturework.<details><summary>MichelFoucault-Thisisnotapipe</summary><iframeheight="600"src="https://monoskop.org/images/9/99/Foucault_Michel_This_Is_Not_a_Pipe.pdf"width="100%"></iframe></details>
STUB: you can't smoke a pipe
use this is not a pipe as an example of writing about media.
specifically, we connect with calligrams as preview of future work.
for the purposes of this course we all program in markdown. markdown is our programming language. it lets us combine all programming languages into one document.