Thinking Of Software Engineering: An Essay On Eyes-Free Computing

Table of Contents

1 Abstract

Expressing one's thoughts in the form of a logically structured document is an effective means of organizing ideas and communicating them effectively to the human reader; this essay expresses the art of programming as a means of effectively communicating one's intention to the machine.

In 2007, I wrote a chapter on Emacspeak for the book Beautiful Code from OReilly. About a year later, I wrote an article called Thinking Of Mathematics. This article is being written over 10 years later as a consolidated follow-up to the afore-mentioned publications. The goal is to further crystalize some of the lessons learnt over the duration of project Emacspeak, while stepping back to think more broadly about

the lessons learnt over 25 years of Software Engineering in the context of eyes-free interaction.

2 Emacspeak: High-Level Goals

This section enumerates the high-level goals that motivated Emacspeak at its inception. These goals derived from my use of screen-readers during my time as a graduate student at Cornell and the insights gleened from developing Audio System For Technical Readings (AsTeR). These goals have remained constant over the duration of the project, with very few additional requirements creeping in over time.

  1. Treat auditory feedback as a first-class output modality.
  2. Audio formatted output consists of text-to-speech (TTS) and synchronized non-speech auditory icons.
  3. Auditory feedback is context-sensitive and designed to reduce cognitive load on the listener while increasing the overall band-width of man-machine communication.
  4. Rich auditory feedback is generated by audio formatting structured information objects along with their surrounding context.
  5. Leverage all aspects of the auditory display to efficiently and effectively communicate information along with its underlying structure and semantics.
  6. As a follow-on to (5), all content being authored/browsed shall be accessible via a consistent UI that facilitates information interchange across different activities; e.g., email a code fragment; cut-and-paste a code fragment from an e-book to a source file.
  7. Speed of task-completion shall be the over-riding goal with response latency reduced to a minimum.
  8. Writing prose ↔ communicating with humans; Writing code ↔ communicating with machines. Design a user interface that treats these consistently.
  9. Editing and browsing content (prose and code)shall both use structure-based navigation using a consistent set of key-bindings.
  10. The auditory interface shall enable hierarchical views of all forms of content with the ability to expand and collapse different types of content.

3 Leverage Structure To Create And Organize Information

4 Developing Robust Software Over Time

5 Avoiding The Least Common Denominator Effect

6 Defensive Coding To Maintain Long-Term Sanity

7 References

Date: 2017-01-03 Tue 00:00

Author: T.V Raman

Email: raman@google.com

Created: 2020-06-27 Sat 12:23

Validate