# Pemrograman

**Pemrograman komputer** atau **pengodean** (bahasa Inggris: *computer programming*code: en is deprecated  atau *coding*) adalah proses penyusunan rangkaian instruksi, yang disebut program komputer, agar dapat diikuti oleh komputer untuk melaksanakan tugas-tugas tertentu. Proses ini melibatkan perancangan dan implementasi algoritma, spesifikasi prosedur langkah demi langkah, dengan menuliskan kode sumber dalam satu atau lebih bahasa pemrograman. Para pemrogram umumnya menggunakan bahasa pemrograman tingkat tinggi yang lebih mudah dipahami oleh manusia daripada bahasa mesin, yang dieksekusi secara langsung oleh unit pemroses sentral (CPU). Pemrograman yang mahir biasanya memerlukan keahlian dalam beberapa subjek yang berbeda, termasuk pengetahuan tentang domain aplikasi, detail bahasa pemrograman dan pustaka kode generik, algoritma khusus, serta logika formal.

Tugas-tugas tambahan yang menyertai dan berkaitan dengan pemrograman meliputi analisis kebutuhan, pengujian, pendebugan (menyelidiki dan memperbaiki masalah), implementasi sistem otomatisasi build, dan manajemen artefak turunan, seperti bahasa mesin dari program tersebut. Meskipun aktivitas ini terkadang dianggap sebagai bagian dari pemrograman, istilah *pengembangan perangkat lunak* sering kali digunakan untuk proses keseluruhan yang lebih besar ini—sementara istilah *pemrograman*, *implementasi*, dan *pengodean* dicadangkan khusus untuk penulisan dan penyuntingan kode itu sendiri. Terkadang pengembangan perangkat lunak juga dikenal sebagai *rekayasa perangkat lunak*, terutama ketika menerapkan metode formal atau mengikuti proses desain rekayasa.

## Sejarah

Ada Lovelace, yang catatan tambahannya di akhir makalah Luigi Menabrea memuat algoritma pertama yang dirancang untuk diproses oleh Mesin Analitis karya Charles Babbage. Ia sering diakui sebagai pemrogram komputer pertama dalam sejarah.
Perangkat yang dapat diprogram telah ada selama berabad-abad. Sejak abad ke-9, sebuah sekuenser musik yang dapat diprogram diciptakan oleh Banu Musa bersaudara dari Persia. Mereka menggambarkan pemain seruling mekanis otomatis dalam *Buku Perangkat Pintar*. Pada tahun 1206, insinyur Arab Al-Jazari menciptakan mesin drum yang dapat diprogram, di mana sebuah automaton mekanis musik dapat dibuat untuk memainkan ritme dan pola drum yang berbeda melalui pasak dan nok (cam). Pada tahun 1801, Alat tenun Jacquard dapat menghasilkan tenunan yang sepenuhnya berbeda hanya dengan mengubah "program" – yaitu serangkaian kartu kertas tebal dengan lubang-lubang yang dilubangi di dalamnya.

Algoritma pemecah kode juga telah ada selama berabad-abad. Pada abad ke-9, matematikawan Arab Al-Kindi menjelaskan algoritma kriptografi untuk memecahkan kode terenkripsi dalam *Risalah dalam Mendekripsi Pesan Kriptografis*. Ia memberikan penjelasan pertama tentang kriptanalisis menggunakan analisis frekuensi, yang menjadi algoritma pemecah kode paling awal dalam sejarah.

Program komputer pertama umumnya berangka tahun 1843, ketika matematikawan Ada Lovelace menerbitkan sebuah algoritma untuk menghitung urutan Bilangan Bernoulli, yang dimaksudkan untuk dijalankan oleh Mesin Analitis milik Charles Babbage. Algoritma tersebut, yang disampaikan melalui catatan pada terjemahan makalah Luigi Federico Menabrea mengenai mesin analitis, sebagian besar dikonseptualisasikan oleh Lovelace, sebagaimana yang dapat dicermati melalui korespondensinya dengan Babbage. Meskipun demikian, Charles Babbage sendiri telah menulis program untuk Mesin Analitis tersebut pada tahun 1837. Lovelace juga menjadi orang pertama yang melihat aplikasi yang lebih luas untuk mesin analitis di luar perhitungan matematika murni.

Data dan instruksi dulunya disimpan pada kartu berlubang eksternal, yang dijaga urutannya dan disusun dalam tumpukan program (program decks).
Pada dekade 1880-an, Herman Hollerith menciptakan konsep penyimpanan *data* dalam bentuk yang dapat dibaca mesin. Kemudian, sebuah panel kendali (plug board) yang ditambahkan ke Mesin Tabulasi Tipe I miliknya pada tahun 1906 memungkinkan mesin tersebut diprogram untuk pekerjaan yang berbeda. Pada akhir dekade 1940-an, peralatan catatan unit seperti IBM 602 dan IBM 604 diprogram dengan panel kendali dengan cara yang serupa, begitu pula dengan komputer elektronik pertama. Namun, dengan diperkenalkannya konsep komputer program tersimpan pada tahun 1949, program dan data dapat disimpan dan dimanipulasi dengan cara yang sama di dalam memori komputer. Kursus pemrograman praktis yang mengintegrasikan perangkat keras dan perangkat lunak terbukti telah meningkatkan retensi dan keterlibatan di antara mahasiswa teknik tahun pertama.

### Bahasa mesin

Bahasa mesin adalah bahasa yang digunakan pada program-program awal, yang ditulis dalam arsitektur set instruksi dari mesin tertentu, sering kali dalam notasi biner. Segera setelah itu, bahasa rakitan (assembly) dikembangkan, yang memungkinkan pemrogram menulis instruksi dalam format tekstual (misalnya, `ADD X, TOTAL`), dengan menggunakan singkatan untuk kode operasi dan nama yang bermakna untuk alamat memori. Namun, karena bahasa rakitan tidak lebih dari sekadar notasi lain untuk bahasa mesin, dua mesin dengan set instruksi yang berbeda juga akan memiliki bahasa rakitan yang berbeda pula.

Panel kendali berkabel untuk Mesin Akuntansi IBM 402. Kabel-kabel menghubungkan aliran pulsa dari pembaca kartu ke penghitung dan logika internal lainnya, dan pada akhirnya ke pencetak.
### Bahasa kompilator

Bahasa tingkat tinggi membuat proses pengembangan program menjadi lebih sederhana, lebih mudah dipahami, dan tidak terlalu terikat pada perangkat keras komputer yang mendasarinya.
Alat bantu terkait kompilator yang pertama, Sistem A-0, dikembangkan pada tahun 1952 oleh Grace Hopper, yang juga mencetuskan istilah 'compiler' (kompilator). FORTRAN, bahasa tingkat tinggi pertama yang digunakan secara luas dan memiliki implementasi fungsional, dirilis pada tahun 1957, dan banyak bahasa lain segera dikembangkan setelahnya—terutama COBOL yang ditujukan untuk pemrosesan data komersial, dan Lisp untuk penelitian komputer.

Bahasa-bahasa terkompilasi ini memungkinkan pemrogram menulis program dengan istilah yang secara sintaksis lebih kaya dan lebih mampu mengabstraksikan kode, sehingga memudahkan target set instruksi mesin yang bervariasi melalui deklarasi kompilasi dan heuristik. Kompilator memanfaatkan kekuatan komputer untuk membuat pemrograman menjadi lebih mudah dengan memungkinkan pemrogram menentukan perhitungan dengan memasukkan rumus menggunakan notasi infiks.

### Entri kode sumber

Program pada awalnya sebagian besar dimasukkan menggunakan kartu berlubang atau pita kertas. Pada akhir dekade 1960-an, perangkat penyimpanan data dan terminal komputer menjadi cukup murah sehingga program dapat dibuat dengan mengetik langsung ke komputer. Penyunting teks juga dikembangkan untuk memungkinkan perubahan dan koreksi dilakukan jauh lebih mudah daripada menggunakan kartu berlubang.

## Pemrograman modern

### Kebutuhan kualitas

Apa pun pendekatan pengembangan yang digunakan, program akhir harus memenuhi beberapa properti mendasar. Properti berikut merupakan beberapa yang paling penting:

* **Keandalan** (*reliability*): seberapa sering hasil dari suatu program benar. Hal ini bergantung pada kebenaran konseptual algoritma dan minimalisasi kesalahan pemrograman, seperti kesalahan dalam manajemen sumber daya (misalnya, buffer overflow dan race condition) dan kesalahan logika (seperti pembagian dengan nol atau kesalahan off-by-one).
* **Ketahanan** (*robustness*): seberapa baik suatu program mengantisipasi masalah yang disebabkan oleh galat (bukan bug). Ini mencakup situasi seperti data yang salah, tidak tepat atau korup, tidak tersedianya sumber daya yang dibutuhkan seperti memori, layanan sistem operasi, dan koneksi jaringan, kesalahan pengguna, serta pemadaman listrik yang tidak terduga.
* **Keterpakaian** (*usability*): ergonomi dari suatu program: kemudahan seseorang menggunakan program untuk tujuan yang dimaksudkan atau dalam beberapa kasus bahkan untuk tujuan yang tidak diantisipasi. Masalah seperti ini dapat menentukan keberhasilan atau kegagalan program terlepas dari masalah lainnya. Hal ini melibatkan berbagai elemen tekstual, grafis, dan terkadang perangkat keras yang meningkatkan kejelasan, kegamblangan, kohesivitas, dan kelengkapan antarmuka pengguna program.
* **Portabilitas** (*portability*): jangkauan platform perangkat keras komputer dan sistem operasi di mana kode sumber suatu program dapat dikompilasi/diinterpretasikan dan dijalankan. Hal ini bergantung pada perbedaan fasilitas pemrograman yang disediakan oleh platform yang berbeda, termasuk sumber daya perangkat keras dan sistem operasi, perilaku yang diharapkan dari perangkat keras dan sistem operasi, serta ketersediaan kompilator khusus platform (dan terkadang pustaka) untuk bahasa kode sumber tersebut.
* **Keterpeliharaan** (*maintainability*): kemudahan suatu program dapat dimodifikasi oleh pengembangnya saat ini atau di masa mendatang untuk melakukan perbaikan atau penyesuaian, memperbaiki bug dan celah keamanan, atau menyesuaikannya dengan lingkungan baru. Praktik yang baik selama pengembangan awal memberikan perbedaan besar dalam hal ini. Kualitas ini mungkin tidak terlihat secara langsung oleh pengguna akhir, tetapi dapat sangat memengaruhi nasib suatu program dalam jangka panjang.
* **Efisiensi/kinerja** (*performance*): Ukuran sumber daya sistem yang dikonsumsi oleh program (waktu prosesor, ruang memori, perangkat lambat seperti disk, lebar pita jaringan, dan sampai batas tertentu bahkan interaksi pengguna): makin sedikit, makin baik. Ini juga mencakup manajemen sumber daya yang cermat, misalnya membersihkan berkas sementara dan menghilangkan kebocoran memori. Hal ini sering dibahas di bawah bayang-bayang bahasa pemrograman yang dipilih. Meskipun bahasa tersebut tentu memengaruhi kinerja, bahkan bahasa yang lebih lambat seperti Python dapat mengeksekusi program secara instan dari perspektif manusia. Kecepatan, penggunaan sumber daya, dan kinerja penting untuk program yang mengalami leher botol sistem, tetapi efisiensi penggunaan waktu pemrogram juga penting dan terkait dengan biaya: menambah perangkat keras terkadang bisa lebih murah.

Penggunaan pengujian otomatis dan fungsi kebugaran dapat membantu mempertahankan beberapa atribut yang disebutkan di atas.

### Keterbacaan kode sumber

Dalam pemrograman komputer, **keterbacaan** (*readability*) mengacu pada kemudahan pembaca manusia dalam memahami tujuan, alur kendali, dan operasi dari kode sumber. Hal ini memengaruhi aspek kualitas di atas, termasuk portabilitas, keterpakaian, dan yang paling penting adalah keterpeliharaan.

Kode sumber dalam lingkungan pengembangan terpadu (IDE).
Keterbacaan itu penting karena pemrogram menghabiskan sebagian besar waktu mereka untuk membaca, mencoba memahami, menggunakan kembali, dan memodifikasi kode sumber yang sudah ada, alih-alih menulis kode sumber baru. Kode yang tidak terbaca sering kali menyebabkan timbulnya bug, ketidakefektifan, dan kode duplikat. Sebuah studi menemukan bahwa beberapa transformasi keterbacaan sederhana membuat kode menjadi lebih pendek dan secara drastis mengurangi waktu untuk memahaminya.

Mengikuti gaya pemrograman yang konsisten sering kali membantu keterbacaan. Namun, keterbacaan lebih dari sekadar gaya pemrograman. Banyak faktor, yang memiliki sedikit atau tidak ada hubungannya dengan kemampuan komputer untuk mengompilasi dan mengeksekusi kode secara efisien, berkontribusi pada keterbacaan. Beberapa faktor tersebut meliputi:

* Gaya indentasi yang berbeda (ruang kosong)
* Komentar
* Dekomposisi
* Konvensi penamaan untuk objek (sekaligus variabel, kelas, fungsi, prosedur, dll.)

Aspek presentasi dari hal ini (seperti indentasi, pemisah baris, penyorotan warna, dan sebagainya) sering kali ditangani oleh penyunting kode sumber, tetapi aspek konten mencerminkan bakat dan keterampilan pemrogram itu sendiri.

Berbagai bahasa pemrograman visual juga telah dikembangkan dengan maksud untuk menyelesaikan masalah keterbacaan dengan mengadopsi pendekatan non-tradisional terhadap struktur dan tampilan kode. Lingkungan pengembangan terpadu (IDE) bertujuan untuk mengintegrasikan semua bantuan tersebut. Teknik seperti Refaktorisasi kode dapat meningkatkan keterbacaan.

### Kompleksitas algoritmik

Bidang akademik dan praktik rekayasa pemrograman komputer berfokus pada penemuan dan implementasi algoritma yang paling efisien untuk kelas masalah tertentu. Untuk tujuan ini, algoritma diklasifikasikan ke dalam *orde* menggunakan Notasi O Besar (Big O notation), yang mengekspresikan penggunaan sumber daya—seperti waktu eksekusi atau konsumsi memori—dalam hal ukuran input. Pemrogram ahli akrab dengan berbagai algoritma mapan beserta kompleksitasnya masing-masing dan menggunakan pengetahuan ini untuk memilih algoritma yang paling cocok dengan keadaan.

### Metodologi

Langkah pertama dalam sebagian besar proses pengembangan perangkat lunak formal adalah analisis kebutuhan, diikuti oleh pengujian untuk menentukan pemodelan nilai, implementasi, dan eliminasi kegagalan (pendebugan). Ada banyak pendekatan berbeda untuk masing-masing tugas tersebut. Salah satu pendekatan yang populer untuk analisis kebutuhan adalah analisis Kasus Penggunaan (Use Case). Banyak pemrogram menggunakan bentuk Pengembangan Perangkat Lunak Agil di mana berbagai tahapan pengembangan perangkat lunak formal lebih terintegrasi bersama ke dalam siklus pendek yang memakan waktu beberapa minggu daripada bertahun-tahun. Ada banyak pendekatan untuk proses pengembangan perangkat lunak.

Teknik pemodelan yang populer meliputi Analisis dan Desain Berorientasi Objek (OOAD) dan Arsitektur Dipandu Model (MDA). Unified Modeling Language (UML) adalah notasi yang digunakan untuk OOAD dan MDA.

Teknik serupa yang digunakan untuk desain basis data adalah Pemodelan Hubungan Entitas (Pemodelan ER).

Teknik implementasi mencakup bahasa imperatif (berorientasi objek atau prosedural), bahasa fungsional, dan bahasa pemrograman logika.

### Mengukur penggunaan bahasa

Sangat sulit untuk menentukan apa saja bahasa pemrograman modern yang paling populer. Metode untuk mengukur popularitas bahasa pemrograman meliputi: menghitung jumlah iklan lowongan kerja yang menyebutkan bahasa tersebut, jumlah buku yang terjual dan kursus yang mengajarkan bahasa tersebut (hal ini melebih-lebihkan pentingnya bahasa yang lebih baru), dan perkiraan jumlah baris kode yang ada yang ditulis dalam bahasa tersebut (hal ini meremehkan jumlah pengguna bahasa bisnis seperti COBOL).

Beberapa bahasa populer untuk menulis jenis aplikasi tertentu, sementara bahasa lain digunakan untuk menulis berbagai jenis aplikasi yang berbeda. Sebagai contoh, COBOL masih lazim di pusat data perusahaan sering kali pada komputer bingkai utama (mainframe) besar, Fortran dalam aplikasi teknik, bahasa skrip dalam pengembangan Web, dan C dalam perangkat lunak tertanam. Banyak aplikasi menggunakan campuran dari beberapa bahasa dalam konstruksi dan penggunaannya. Bahasa baru umumnya dirancang di sekitar sintaksis bahasa sebelumnya dengan fungsi baru yang ditambahkan, (misalnya C++ menambahkan orientasi objek ke C, dan Java menambahkan manajemen memori dan bytecode ke C++, tetapi sebagai konsekuensinya, kehilangan efisiensi dan kemampuan untuk manipulasi tingkat rendah).

### Pengutuakutuan (Debugging)

Kutu (bug) nyata pertama yang diketahui menyebabkan masalah pada komputer adalah seekor ngengat, yang terperangkap di dalam bingkai utama Harvard, dicatat dalam entri buku log tertanggal 9 September 1947. "Bug" sudah menjadi istilah umum untuk cacat perangkat lunak ketika serangga ini ditemukan.
Pengutuakutuan (pendebugan) adalah tugas yang sangat penting dalam proses pengembangan perangkat lunak karena adanya cacat pada program dapat berakibat signifikan bagi penggunanya. Beberapa bahasa lebih rentan terhadap beberapa jenis kesalahan karena spesifikasinya tidak mengharuskan kompilator melakukan pemeriksaan sebanyak bahasa lain. Penggunaan alat analisis kode statis dapat membantu mendeteksi beberapa kemungkinan masalah. Biasanya langkah pertama dalam pendebugan adalah mencoba mereproduksi masalah tersebut. Ini bisa menjadi tugas yang tidak sepele, misalnya seperti pada proses paralel atau beberapa bug perangkat lunak yang tidak biasa. Selain itu, lingkungan pengguna yang spesifik dan riwayat penggunaan dapat mempersulit reproduksi masalah.

Setelah bug direproduksi, input program mungkin perlu disederhanakan untuk membuatnya lebih mudah didebug. Sebagai contoh, ketika bug pada kompilator dapat membuatnya mogok (crash) saat mengurai beberapa berkas sumber yang besar, penyederhanaan kasus pengujian yang menghasilkan hanya beberapa baris dari berkas sumber asli dapat memadai untuk mereproduksi mogok yang sama. Pendekatan berbasis coba-coba/pecah-dan-taklukkan diperlukan: pemrogram akan mencoba menghapus beberapa bagian dari kasus pengujian asli dan memeriksa apakah masalah masih ada. Saat mendebug masalah dalam GUI, pemrogram dapat mencoba melewatkan beberapa interaksi pengguna dari deskripsi masalah asli dan memeriksa apakah tindakan yang tersisa cukup bagi bug untuk muncul. Pembuatan skrip dan penentuan titik henti (breakpoint) juga merupakan bagian dari proses ini.

Pendebugan sering kali dilakukan dengan IDE. Debugger mandiri seperti GDB juga digunakan, dan ini sering kali menyediakan lingkungan yang kurang visual, biasanya menggunakan antarmuka baris perintah. Beberapa penyunting teks seperti Emacs memungkinkan GDB dipanggil melaluinya, untuk menyediakan lingkungan visual. Sebuah studi menemukan bahwa mengajarkan bahasa terstruktur seperti Pascal meningkatkan akurasi pendebugan pemrogram pemula dan pemahaman secara keseluruhan.

## Bahasa pemrograman

Bahasa pemrograman yang berbeda mendukung gaya pemrograman yang berbeda (disebut *paradigma pemrograman*). Pilihan bahasa yang digunakan tunduk pada banyak pertimbangan, seperti kebijakan perusahaan, kesesuaian dengan tugas, ketersediaan paket pihak ketiga, atau preferensi individu. Idealnya, bahasa pemrograman yang paling cocok untuk tugas yang ada akan dipilih. Kompromi dari cita-cita ini melibatkan pencarian pemrogram yang cukup yang mengetahui bahasa tersebut untuk membangun tim, ketersediaan kompilator untuk bahasa tersebut, dan efisiensi eksekusi program yang ditulis dalam bahasa tertentu. Bahasa membentuk spektrum perkiraan dari "tingkat rendah" ke "tingkat tinggi"; bahasa "tingkat rendah" biasanya lebih berorientasi pada mesin dan lebih cepat dieksekusi, sedangkan bahasa "tingkat tinggi" lebih abstrak dan lebih mudah digunakan tetapi dieksekusi kurang cepat. Biasanya lebih mudah untuk membuat kode dalam bahasa "tingkat tinggi" daripada dalam bahasa "tingkat rendah".
Bahasa pemrograman sangat penting untuk pengembangan perangkat lunak. Mereka adalah blok bangunan untuk semua perangkat lunak, dari aplikasi yang paling sederhana hingga yang paling canggih.

Allen Downey, dalam bukunya *How To Think Like A Computer Scientist*, menulis:

Detailnya terlihat berbeda di berbagai bahasa, tetapi beberapa instruksi dasar muncul di hampir setiap bahasa:
* **Input**: Mengumpulkan data dari papan ketik, berkas, atau perangkat lain.
* **Output**: Menampilkan data di layar atau mengirim data ke berkas atau perangkat lain.
* **Aritmetika**: Melakukan operasi aritmetika dasar seperti penambahan dan perkalian.
* **Eksekusi Kondisional**: Memeriksa kondisi tertentu dan mengeksekusi rangkaian pernyataan yang sesuai.
* **Repetisi**: Melakukan beberapa tindakan berulang kali, biasanya dengan beberapa variasi.

Banyak bahasa komputer menyediakan mekanisme untuk memanggil fungsi yang disediakan oleh pustaka bersama (shared libraries). Asalkan fungsi dalam pustaka mengikuti konvensi run-time yang sesuai (misalnya, metode penyampaian argumen), maka fungsi-fungsi ini dapat ditulis dalam bahasa lain apa pun. Peringkat tahunan oleh IEEE Spectrum menganalisis popularitas bahasa pemrograman menggunakan metrik seperti lowongan kerja, tren pencarian, dan aktivitas pengembang.

## Belajar memprogram

Belajar memprogram memiliki sejarah panjang yang berkaitan dengan standar dan praktik profesional, inisiatif akademik dan kurikulum, serta buku-buku komersial dan materi untuk siswa, pembelajar otodidak, penghobi, dan orang lain yang ingin membuat atau menyesuaikan perangkat lunak untuk penggunaan pribadi. Sejak dekade 1960-an, belajar memprogram telah mengambil karakteristik sebagai *gerakan populer*, dengan bangkitnya disiplin akademik, para pemimpin inspirasional, identitas kolektif, dan strategi untuk menumbuhkan gerakan dan membuat perubahan institusional. Melalui cita-cita sosial dan agenda pendidikan ini, belajar membuat kode telah menjadi penting tidak hanya bagi para ilmuwan dan insinyur, tetapi juga bagi jutaan warga negara yang meyakini bahwa membuat perangkat lunak bermanfaat bagi masyarakat dan anggotanya. Partisipasi pendidikan ilmu komputer telah berkembang secara signifikan dalam beberapa tahun terakhir, dengan jutaan siswa memperoleh pengalaman pemrograman pengantar melalui sekolah dan platform daring.

### Konteks

Pada tahun 1957, ada sekitar 15.000 pemrogram komputer yang dipekerjakan di AS, angka yang menyumbang 80% dari pengembang aktif di dunia. Pada tahun 2014, ada sekitar 18,5 juta pemrogram profesional di dunia, di mana 11 juta dapat dianggap sebagai profesional dan 7,5 juta siswa atau penghobi. Sebelum bangkitnya Internet komersial pada pertengahan dekade 1990-an, sebagian besar pemrogram mempelajari konstruksi perangkat lunak melalui buku, majalah, kelompok pengguna, dan metode instruksi informal, dengan tugas kuliah akademik dan pelatihan perusahaan memainkan peran penting bagi pekerja profesional.

Buku pertama yang berisi instruksi spesifik tentang cara memprogram komputer kemungkinan adalah karya Maurice Wilkes, David Wheeler, dan Stanley Gill berjudul *Preparation of Programs for an Electronic Digital Computer* (1951). Buku ini menawarkan pilihan subrutin umum untuk menangani operasi dasar pada EDSAC, salah satu komputer program tersimpan pertama di dunia.

Ketika bahasa tingkat tinggi tiba, mereka diperkenalkan oleh banyak buku dan materi yang menjelaskan kata kunci bahasa, mengelola alur program, bekerja dengan data, dan konsep lainnya. Bahasa-bahasa ini termasuk FLOW-MATIC, COBOL, FORTRAN, ALGOL, Pascal, BASIC, dan C. Contoh primer pemrograman awal dari tahun-tahun ini adalah karya Marshal Henry Wrubel berjudul *A Primer of Programming for Digital Computers* (1959), yang mencakup instruksi langkah demi langkah untuk mengisi lembar pengodean, membuat kartu berlubang, dan menggunakan kata kunci dalam sistem FORTRAN awal IBM. Buku Daniel McCracken berjudul *A Guide to FORTRAN Programming* (1961) menyajikan FORTRAN kepada khalayak yang lebih besar, termasuk siswa dan pekerja kantor.

Pada tahun 1961, Alan Perlis menyarankan agar semua mahasiswa baru di Institut Teknik Carnegie mengambil kursus pemrograman komputer. Sarannya diterbitkan dalam jurnal teknis populer *Computers and Automation*, yang menjadi sumber informasi reguler bagi pemrogram profesional.

Pemrogram segera memiliki berbagai teks pembelajaran yang siap mereka gunakan. *Referensi pemrogram* mencantumkan kata kunci dan fungsi yang terkait dengan suatu bahasa, sering kali dalam urutan abjad, serta informasi teknis tentang kompilator dan sistem terkait. Contoh awal adalah *Programmers' Reference Manual: the FORTRAN Automatic Coding System for the IBM 704 EDPM* (1956) milik IBM.

Seiring waktu, genre *panduan pemrogram* muncul, yang menyajikan fitur-fitur bahasa dalam format tutorial atau langkah demi langkah. Banyak buku panduan awal dimulai dengan program yang dikenal sebagai "Hello, World", yang menyajikan program terpendek yang dapat dibuat oleh pengembang dalam sistem tertentu. Panduan pemrogram kemudian melanjutkan pembahasan topik-topik inti seperti mendeklarasikan variabel, tipe data, rumus, kontrol alur, fungsi yang ditentukan pengguna, memanipulasi data, dan topik lainnya.

Panduan pemrogram awal dan berpengaruh termasuk karya John G. Kemeny dan Thomas E. Kurtz berjudul *BASIC Programming* (1967), Kathleen Jensen dan Niklaus Wirth berjudul *The Pascal User Manual and Report* (1971), serta Brian W. Kernighan dan Dennis Ritchie berjudul *The C Programming Language* (1978). Buku sejenis untuk khalayak populer (tetapi dengan nada yang jauh lebih ringan) termasuk karya Bob Albrecht berjudul *My Computer Loves Me When I Speak BASIC* (1972), Al Kelley dan Ira Pohl berjudul *A Book on C* (1984), dan Dan Gookin berjudul *C for Dummies* (1994).

Di luar buku panduan khusus bahasa, ada banyak buku dan jurnal akademik yang memperkenalkan praktik pemrograman profesional. Banyak yang dirancang untuk kursus universitas dalam ilmu komputer, rekayasa perangkat lunak, atau disiplin ilmu terkait. Karya Donald Knuth berjudul *The Art of Computer Programming* (1968 dan versi setelahnya), menyajikan ratusan algoritma komputasi dan analisisnya. *The Elements of Programming Style* (1974), oleh Brian W. Kernighan dan P. J. Plauger, berkaitan dengan *gaya* pemrograman, gagasan bahwa program harus ditulis tidak hanya untuk memuaskan kompilator tetapi juga pembaca manusia. Karya Jon Bentley berjudul *Programming Pearls* (1986) menawarkan saran praktis tentang seni dan kerajinan pemrograman dalam konteks profesional dan akademik. Teks yang dirancang khusus untuk siswa termasuk karya Doug Cooper dan Michael Clancy berjudul *Oh Pascal!* (1982), Alfred Aho berjudul *Data Structures and Algorithms* (1983), dan Daniel Watt berjudul *Learning with Logo* (1983).

### Penerbit teknis

Ketika komputer pribadi menjadi produk pasar massal, ribuan buku perdagangan dan majalah berusaha mengajar pengguna profesional, penghobi, dan pengguna biasa untuk menulis program komputer. Sampel dari sumber daya pembelajaran ini meliputi *BASIC Computer Games, Microcomputer Edition* (1978), oleh David Ahl; *Programming the Z80* (1979), oleh Rodnay Zaks; *Programmer's CP/M Handbook* (1983), oleh Andy Johnson-Laird; *C Primer Plus* (1984), oleh Mitchell Waite dan The Waite Group; *The Peter Norton Programmer's Guide to the IBM PC* (1985), oleh Peter Norton; *Advanced MS-DOS* (1986), oleh Ray Duncan; *Learn BASIC Now* (1989), oleh Michael Halvorson dan David Rygymr; *Programming Windows* (1992 dan setelahnya), oleh Charles Petzold; *Code Complete: A Practical Handbook for Software Construction* (1993), oleh Steve McConnell; dan *Tricks of the Game-Programming Gurus* (1994), oleh André LaMothe.

Industri perangkat lunak PC memacu penciptaan banyak penerbit buku yang menawarkan pengantar dan tutorial pemrograman, serta buku untuk pengembang perangkat lunak tingkat lanjut. Penerbit ini termasuk Addison-Wesley, IDG, Macmillan Inc., McGraw-Hill, Microsoft Press, O'Reilly Media, Prentice Hall, Sybex, Ventana Press, Waite Group Press, Wiley, Wrox Press, dan Ziff-Davis.

Majalah komputer dan jurnal juga menyediakan konten pembelajaran untuk pemrogram profesional dan penghobi. Daftar parsial dari sumber daya ini meliputi *Amiga World*, *Byte*, *Communications of the ACM*, *Computer*, *Compute!*, *Computer Language (majalah)*, *Computers and Electronics*, *Dr. Dobb's Journal*, *IEEE Software*, *Macworld*, *PC Magazine*, *PC/Computing*, dan *UnixWorld*.

### Pembelajaran digital / sumber daya daring

Antara tahun 2000 dan 2010, penerbit buku dan majalah komputer menurun secara signifikan sebagai penyedia instruksi pemrograman, karena pemrogram beralih ke sumber daya Internet untuk memperluas akses mereka ke informasi. Pergeseran ini memunculkan produk dan mekanisme digital baru untuk mempelajari keterampilan pemrograman. Selama transisi, buku-buku digital dari penerbit mentransfer informasi yang secara tradisional telah disampaikan dalam bentuk cetak ke khalayak baru dan berkembang.

Sumber daya Internet penting untuk belajar membuat kode termasuk blog, buku, wiki, video, basis data daring, jurnal, situs berlangganan, makalah konferensi, dan situs web khusus yang berfokus pada keterampilan pengodean. Dalam beberapa tahun terakhir, platform seperti LeetCode, HackerRank, dan freeCodeCamp telah menjadi populer untuk belajar pemrograman, melatih tantangan pengodean, dan mempersiapkan wawancara teknis. Sumber daya komersial baru termasuk video YouTube, tutorial Lynda.com (kemudian LinkedIn Learning), Khan Academy, Codecademy, GitHub, W3Schools, Codewars, dan berbagai kemah kerja pengodean (coding bootcamp).

Sebagian besar sistem pengembangan perangkat lunak dan mesin permainan (game engine) menyertakan sumber daya bantuan daring yang kaya, termasuk lingkungan pengembangan terpadu (IDE), bantuan sensitif konteks, API, dan sumber daya digital lainnya. Paket pengembangan perangkat lunak komersial (SDK) juga menyediakan kumpulan alat pengembangan perangkat lunak dan dokumentasi dalam satu paket yang dapat diinstal.

Organisasi komersial dan nirlaba menerbitkan situs web pembelajaran untuk pengembang, membuat blog, dan mendirikan umpan berita serta sumber daya media sosial tentang pemrograman. Perusahaan seperti Apple, Microsoft, Oracle, Google, dan Amazon membangun situs web korporat yang menyediakan dukungan untuk pemrogram, termasuk sumber daya seperti Microsoft Developer Network (MSDN). Gerakan kontemporer seperti Hour of Code (Code.org) menunjukkan bagaimana belajar memprogram telah dikaitkan dengan strategi pembelajaran digital, agenda pendidikan, dan filantropi korporat.

## Pemrogram

Pemrogram komputer adalah mereka yang menulis perangkat lunak komputer. Pekerjaan mereka biasanya melibatkan:

* Pembuatan prototipe (Prototyping)
* Pengodean (Coding)
* Pendebugan (Debugging)
* Dokumentasi
* Integrasi sistem
* Pemeliharaan
* Analisis kebutuhan
* Arsitektur perangkat lunak
* Pengujian perangkat lunak
* Spesifikasi

Meskipun pemrograman sering kali disajikan di media sebagai subjek yang agak matematis, beberapa penelitian menunjukkan bahwa pemrogram yang baik memiliki keterampilan yang kuat dalam bahasa alami manusia, dan bahwa belajar membuat kode mirip dengan belajar bahasa asing.

## Lihat pula

* Bau kode (Code smell)
* Jaringan komputer
* Pemrograman kompetitif
* Daftar jurnal pemrograman perangkat lunak
* Daftar paket perangkat lunak bebas dan sumber terbuka untuk pemrograman
* Daftar alat pengembangan perangkat lunak pemrograman
* Praktik terbaik pemrograman
* Pemrograman sistem
* Sumber belajar pemrograman komputer di Wikibooks

## Referensi

### Sumber

* Ceruzzi, Paul E. (1998). *History of Computing*. Cambridge, Massachusetts: MIT Press. ISBN 9780262032551 – via EBSCOhost.
* Evans, Claire L. (2018). *Broad Band: The Untold Story of the Women Who Made the Internet*. New York: Portfolio/Penguin. ISBN 9780735211759.
* Gürer, Denise (1995). "Pioneering Women in Computer Science" (PDF). *Communications of the ACM*. **38** (1): 45–54. doi:10.1145/204865.204875. S2CID 6626310. Diarsipkan (PDF) dari versi aslinya tanggal Oktober 9, 2022.
* Smith, Erika E. (2013). "Recognizing a Collective Inheritance through the History of Women in Computing". *CLCWeb: Comparative Literature and Culture*. **15** (1): 1–9. doi:10.7771/1481-4374.1972.
* Essinger, J., & EBSCO Publishing (Firm). (2014). *Ada's algorithm: How lord byron's daughter ada lovelace launched the digital age*. Melville House.

## Bacaan lanjutan

* A.K. Hartmann, *Practical Guide to Computer Simulations*, Singapura: World Scientific (2009)
* A. Hunt, D. Thomas, dan W. Cunningham, *The Pragmatic Programmer. From Journeyman to Master*, Amsterdam: Addison-Wesley Longman (1999)
* Brian W. Kernighan, *The Practice of Programming*, Pearson (1999)
* Weinberg, Gerald M., *The Psychology of Computer Programming*, New York: Van Nostrand Reinhold (1971)
* Edsger W. Dijkstra, *A Discipline of Programming*, Prentice-Hall (1976)
* O.-J. Dahl, E.W.Dijkstra, C.A.R. Hoare, *Structured Programming*, Academic Press (1972)
* David Gries, *The Science of Programming*, Springer-Verlag (1981)

## Pranala luar

* Media terkait Computer programming di Wikimedia Commons
* Kutipan tentang Programming di Wikikutip