Pemrograman modular
Sejarah

Pemrograman modular, dalam bentuk subsistem (terutama untuk I/O) dan pustaka perangkat lunak, berasal dari sistem perangkat lunak awal, di mana ia digunakan untuk penggunaan kembali kode. Pemrograman modular itu sendiri, dengan tujuan modularitas, dikembangkan pada akhir 1960-an dan 1970-an, sebagai analog skala yang lebih besar dari konsep pemrograman terstruktur (1960-an). Istilah "pemrograman modular" setidaknya berasal dari Simposium Nasional tentang Pemrograman Modular, yang diselenggarakan di Institut Informasi dan Sistem pada Juli 1968 oleh Larry Constantine; konsep kunci lainnya adalah penyembunyian informasi (1972) dan pemisahan kekhawatiran (SoC, 1974).
Modul tidak termasuk dalam spesifikasi asli untuk ALGOL 68 (1968), tetapi dimasukkan sebagai ekstensi dalam implementasi awal, ALGOL 68-R (1970) dan ALGOL 68C (1970), dan kemudian diformalkan.  Salah satu bahasa pertama yang dirancang sejak awal untuk pemrograman modular adalah Modula (1975) yang berumur pendek, oleh Niklaus Wirth. Bahasa modular awal lainnya adalah Mesa (1970-an), oleh Xerox PARC, dan Wirth menggunakan Mesa serta Modula asli dalam penggantinya, Modula-2 (1978), yang memengaruhi bahasa-bahasa selanjutnya, terutama melalui penggantinya, Modula-3 (1980-an). Penggunaan nama yang memenuhi syarat titik oleh Modula, seperti merujuk ke objek dari modul, bertepatan dengan notasi untuk mengakses bidang catatan (dan serupa untuk atribut atau metode objek), dan sekarang tersebar luas, terlihat di C++, C#, Dart, Go, Java, OCaml, dan Python, antara lain. Pemrograman modular menjadi tersebar luas sejak tahun 1980-an: bahasa Pascal asli (1970) tidak menyertakan modul, tetapi versi selanjutnya, terutama UCSD Pascal (1978) dan Turbo Pascal (1983) memasukkannya dalam bentuk "unit", seperti halnya Ada (1980) yang dipengaruhi Pascal. Standar Extended Pascal ISO 10206:1990 tetap lebih dekat dengan Modula2 dalam dukungan modularnya. ML standar (1984)[ memiliki salah satu sistem modul terlengkap, termasuk functor (modul berparameter) untuk memetakan antar modul.
Pada tahun 1980-an dan 1990-an, pemrograman modular dibayangi oleh dan sering digabungkan dengan pemrograman berorientasi objek, terutama karena popularitas C++ dan Java. Misalnya, keluarga bahasa C memiliki dukungan untuk objek dan kelas dalam C++ (awalnya C dengan Kelas, 1980) dan Objective-C (1983), hanya mendukung modul 30 tahun atau lebih kemudian. Java (1995) mendukung modul dalam bentuk paket, meskipun unit utama organisasi kode adalah kelas. Namun, Python (1991) secara menonjol menggunakan modul dan objek sejak awal, menggunakan modul sebagai unit utama organisasi kode dan "paket" sebagai unit skala yang lebih besar; dan Perl 5 (1994) mencakup dukungan untuk modul dan objek, dengan beragam modul yang tersedia dari CPAN (1993). OCaml (1996) mengikuti ML dengan modul dan functor pendukung.
Pemrograman modular sekarang tersebar luas, dan ditemukan di hampir semua bahasa utama yang dikembangkan sejak tahun 1990-an. Kepentingan relatif modul bervariasi antar bahasa, dan dalam bahasa berorientasi objek berbasis kelas masih ada tumpang tindih dan kebingungan dengan kelas sebagai unit organisasi dan enkapsulasi, tetapi keduanya mapan sebagai konsep yang berbeda.