Literate Programming - Emacs, Howard Abrams and Library of Babel
Tags: emacs, programming, literateprogramming, orgmode
Published: 2020-01-22 09:35:50

---
title: Literate Programming - Emacs, Howard Abrams and Library of Babel
published: true
date: 2019-01-25 21:44:00 UTC
tags: Emacs, programming, literate-programming, OrgMode
canonical_url: https://shreyas.ragavan.co/post/6953c104-a8b3-4779-aad3-c33032beb111/
---

I’m an admirer of [Howard Abrams](https://www.linkedin.com/in/howardeabrams/), especially because his posts and videos show the awesome power of doing things in Emacs, and the importance of writing clean and logical code. Watching his videos and reading his posts make me feel like I was born yesterday and I am just getting started. But more importantly, they also fire up my imagination regarding the possibilities out there and the potential to create glorious workflows.

Howard’s tutorial on [Literate Programming](//www.howardism.org/Technical/Emacs/literate-programming-tutorial.html), combined with his [Literate Devops with Emacs video](https://www.youtube.com/watch?v=dljNabciEGg) are among the best ways to get started with understanding the power of using Org Mode and Org-Babel to create complex, inter-connected, multi-language programs / documents / research that are of course well documented (this being one basic tenet of literate programming). Essentially, Org Mode and Org-Babel enable a high quality programming environment in a single Org mode buffer or document. The said environment is significantly more feature rich compared to Jupyter notebooks, especially being supported by it’s foundation in Emacs.

Though I’ve been using Org files for a while now for all my programming explorations, I’ve been bothered about my sub-par workflows. I could not easily reference other code blocks and snippets and recipes for a new document or project. It was inefficient and time consuming to locate the necessary snippet and re-write or re-paste the code in the new source blocks. I was not making much progress plodding through the vast documentation of org-babel.

Therefore, I was thrilled to discover the [Library of Babel](https://orgmode.org/worg/org-contrib/babel/library-of-babel.html) through Howard’s tutorial, which can be used to add files to a global library that is accessible from anywhere! Did I mention that it involves hitting barely 3 keys, and any number of arguments can be passed to these source blocks? I’m not sure such a feature is available with any other IDE.

In addition, the above tutorial clearly elucidates how different languages can be combined together, and the video elucidates typical Devops procedures, which are easily taken care of with appropriate arguments and headers to the source code blocks. For example, all the source code blocks could be tangled into appropriately named and located script files using a single argument. These tutorials tied up bits and pieces of info in my head from various sources and was invaluable in enhancing my understanding of using Emacs and Org-Babel

The Library of Babel can be made persistent across sessions by loading a specified org-file from which the named source code blocks are automatically read in. It is surprising that the internet does not seem to contain more references and examples using the Library of Babel. Perhaps there are some caveats that I am yet to encounter. One question that arises is whether the Library of Babel is automatically updated when the source code block is updated.