Cultures of Programming

Exhibition in the Chodba Gallery, MFF UK

What defines a correct program? What education makes a good programmer? The answers to these questions depend on whether programs are seen as mathematical entities, engineered socio-technical systems or media for assisting human thought.

Cultures of programming

Cultures of Programming shows how programming concepts and methodologies emerged and developed from the 1940s to the present and interprets key historical moments as interactions between five different cultures of programming.

Background graphics

  • Pre-print of the opening dialogue of the first chapter of the book.

Image credits

The Five Cultures of Programming

The different cultures of programming are rooted in disciplines such as electrical engineering, business management, mathematics or psychology. Those disciplines shaped many of their basic assumptions about programming, what kind of a task it is and how it should be done.

Mathematical culture

The mathematical culture sees programs as mathematical entities. They can be formally analyzed and proven correct with respect to a precise specification from a customer. Proponents of the mathematical culture believe that mathematical methods provide the right mechanism for tackling the increasing complexity of software systems.

Background graphics

Image credits

Hacker culture

The hacker culture values direct engagement with the computer and focuses on the nitty-gritty details of program execution. Hackers like to explore the limits of what a machine can do and pride themselves in individual skill, inventing clever tricks to push those limits.

Background graphics

Image credits

Engineering culture

Programming is an applied science of engineering. Engineers emphasize well-documented and rigorous methods and practices, develop and adhere to codes of ethics, and invest in tools that support their work.

Background graphics

Image credits

Humanistic culture

The core concern of the humanistic culture is the relationship of people with computers. Programming is viewed critically with regard to its socio-political implications and impact on education in such areas as literacy, art and creativity.

Background graphics

Image credits

Managerial culture

The managerial culture views software development as a production-like process and believes that the keys to a successful software project are a suitable development process and a team structure. It favors specification, planning and organization over skills of individual programmers.

Background graphics

  • Copies of the diagrams appearing in the panel

Image credits

Collaborations and Clashes

The different cultures of programming clash over the nature of programming, but also contribute to shared programming concepts. Their basic assumptions remain at the core of many questions about programming today.

The invention of a programming language

The idea that a programming language is a standalone object independent of a specific computer came about from the meeting of three cultures of programming. The hacker culture provided the necessary implementation tricks, the managerial culture had a practical need for the idea, and the mathematical culture provided the necessary formal language description tools.

Background graphics

Image credits

Programming with types

Many programming languages use types to make programs easier and safer, but they differ widely in their understanding of the notion of a type. Are types formal mathematical entities, a clever trick, or a software engineering tool?

Background graphics

Image credits

Object-oriented programming

Cultures of programming contribute to shared entities, argue about the nature of programming, but also struggle for control over basic programming methodologies and concepts—like the idea of object-oriented programming.

Background graphics

Image credits

  • Code samples and diagrams as above. Books:
  • Simula BEGIN - Birtwistle et al. Source: eBay photo
  • Structured Programming - Dahl et al. Source: Archive.org
  • Smalltalk-80 - Goldberg et al. Source: ACM
  • Byte Magazine - Source: Archive.org
  • The C++ Programming Language - Stroustrup. Source: Stroustrup
  • Java Chips - BYTE. Source: Archive.org
  • Designing Object-Oriented Software - Wirfs-Brock et al. Source: Archive.org
  • The Unified Software Development Process - Jacobson et al. Source: Archive.org

What code is beautiful?

Beauty is in the eye of the beholder. The various cultures of programming have different ideas about code and write it for different purposes. Their aesthetic judgment differs too.

Background graphics

  • Dark version of code samples, text and diagram from the panel

Image credits

What is the problem of programming?

Different cultures of programming have a different basic assumptions about the nature of programming. Is it a mathematical problem, engineering task, problem of management or an artistic endeavor?

Background graphics

  • Diagrams from the Electronic numerical integrator and computer (ENIAC) patent. Source: U.S. Patent 312 0606

Image credits

  • UNIVAC I - U.S. Census. Source: Wikimedia
  • Dijkstra - ETH Zurich. Source: Wikimedia
  • Xerox PARC - Rolling Stone. Source: Archive.org
  • NATO 1968 - McClure/Randell. Source: NATO 1968
  • SAGE Control Room - IBM. Source: IBM

Programming and computer art

Computers were used in the artistic context since the 1960s. Different ways in which computer programming was used for creating art shows different ways of thinking about programming as a discipline.

Background graphics

  • Graphics used elsewhere in the panel

Image credits

  • Lines - Nake. Source: DAM Museum
  • ALGORAVE - Maren van der Burght. Source: Flickr
  • The Hub - Rich Gold. Source: (personal communication)
  • Sonic Pi - Sam Aaron. Source: Sonic-Pi.net