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 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.
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.
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.
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.
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.
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.
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.
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 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.
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?
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.
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.
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?
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.