Belajar Memrogram dan
Pemrograman
Belajar memrogram tidak sama dengan belajar bahasa
pemrograman. Belajar memrogram berarti mempelajari metodologi pemecahan
masalah, kemudian menuliskan algoritma pemecahan masalah dalam notasi tertentu
. Sedangkan belajar bahasa pemrograman berarti belajar memakai suatu bahasa
komputer, aturan tata bahasanya, instruksi-instruksinya, tata cara
pengoperasian compiler-nya, dan memanfaatkan instruksi-instruksi tersebut untuk
membuat program yang ditulis hanya dalam bahasa itu saja.
Di dalam pemrograman, kita lebih menekankan pada pemecahan
masalah, sementara menulis kode program adalah aktivitas terakhir. Mula-mula
kita pikirkan rancangan pemecahan masalah tanpa bergantung pada bahasa
pemrograman yang digunakan atau computer yang menjalankan program itu nanti. Rancangan tersebut berisi urutan
langkah-langkah pencapaian solusi yang biasanya ditulis dalam notasi-notasi
deskriptif ( notasi ini nanti kita namakan notasi
algoritmik ). Karena belajar memprogram yang baik bukanlah belajar membuat
program “yang penting hasilnya benar” , tetapi perlu dipikirkan membuat program
dengan menggunakan skema yang benar. Hal ini akan membuat proram yang kita buat
dapat bersih dari kesalahan yang timbul pada waktu eksekusi.
Bila rancangan pemecahan masalah sudah dibuat dengan skema
yang benar, maka rancangan tersebut siap dikodekan kedalam bahasa pemrograman
agar program bisa dieksekusi oleh komputer. Di sinilah perlunya kita belajar
bahasa pemrograman. Ada banyak bahasa pemrograman yang tersdia saat ini, tetapi
desain pemecahan masalah harus dapat diterjemahlan ke dalam bahasa apapun.
Hingga saat ini terdapat puluhan bahasa pemrograman. Kita
dapat menyebutkan diantaranya bahasa rakitan (assembly), Fortran, Cobol, Ada,
PL/I, Algol, Pascal, C, C++, Basic, Prolog, LISP, PRG, bahasa-bahasa simulasi
seperti CSMP, Simscript, GPSS, dan masih banyak lagi. Belakangan juga muncul
bahasa pemrograman baru seperti Java dan C#.
Berdasaarkan tujuan aplikasinya, bahasa pemrograman dapat
digolongkan menjadi dua kelompok :
1.
Bahasa pemrograman bertujuan khusus ( specific
purpose programming language ). Yang termasuk kelompok ini adalah Cobol (untuk
terapan bisnis dan administrasi ), Fortran (aplikasi komputasi ilmiah), bahasa
assembly (aplikasi pemrograman mesin), Prolog (aplikasi kecerdasan buatan), bahasa-bahasa
simulasi (Simscript), dan sebagainya.
2.
Bahasa pemrograman bertujuan umum (general
purpose programming language) yang dapat digunakan untuk berbagai aplikasi.
Yang termasuk kelompok ini adalah bahasa Pascal, Basic, C, dan C++.
Tentu saja pembagian ini tidak benar-benar kaku.
Bahasa-bahasa bertujuan khusus tidak berarti tidak bisa digunakan untuk
aplikasi lain. Cobol misalnya, dapat juga digunakan untuk terapan ilmiah,
tetapi tentu kemampuannya sangat terbatas. Yang jelas, bahasa-bahasa
pemrograman yang berbeda dikembangkan untuk bermacam-macam kegunaan yang
berbeda pula.
Berdasarkan “kedekatan” bahasa pemrograman apakah lebih
condong ke bahasa mesin atau ke bahasa manusia, maka bahasa pemrograman juga
dapat dikelompokkan atas dua macam :
1.
Bahasa tingkat rendah.
Bahasa jenis ini dirancang agar setiap instruksi
langsung dikerjakan oleh komputer, tanpa harus melalui penerjemah (translator).
Contohnya adalah bahasa mesin (machine language). Bahasa mesin adalah sekumpulan
kode biner (0 dan 1). Setiap perintah dalam bahasa mesin langsung “dimengerti”
oleh mesin dan langsung dikerjakan. Bahasa tingkat rendah disebut primitif,
sangat sederhana, dan relative sulit dipahami manusia. Bahasa assembly
dimasukkan ke dalam kelompok ini karena notasi yang dipakai dalam bahasa ini
merupakan bentuk “manusiawi” dari bahasa mesin, dan untuk melaksanakan
instruksinya masih diperlukan penerjemahan (oleh assembler) ke dalam bahasa
mesin. Bahasa tingkat rendah merupakan bahasa pemrograman generasi pertama yan
pernah ditulis orang.
2.
Bahasa tingkat tinggi.
Bahasa jenis ini membuat program menjadi
lebih mudah dipahami, lebih “manusiawi”, dan lebih dekat ke bahasa manusia
(bahasa Inggris terutama). Kelemhannya, program dalam bahasa tingkat tinggi
tidak dapat langsung dilaksanakan oleh komputer. Ia perlu diterjemahkan
terlebih dahuluoleh sebuah translator bahasa (yang disebut kompilator atau
compiler) ke dalam bahasa mesin sebelum akhirnya dieksekusi oleh CPU. Tahapan
pemrograman dan pelaksanaan program oleh komputer di gambarkan pada gambar di
bawah ini.
Contoh bahasa tingkat tinggi adalah Pascal,
PL/I, Ada, Cobol, Basic, Fortran, C, C++, dan sebagainya.
Sebenarnya batasan penggolongan bahasa pemrograman itu tidak
selalu jelas. Pengertian tentang apa yang dimaksud dengan bahasa tingkat tinggi
seringkali berbeda pada beberapa penulis. Ada penulis yang mendefinisikan
bahasa tingkat tinggi dari sudut pandang kemudahan pemakaiannya serta
orientasinya yang lebih dekat ke bahasa manusia. Les Goldschlager menuliskan
spectrum bahasa mulai dari bahasa tingkat tinggi (Pascal, Ada, PL/I, Cobol),
bahasa tingkat menengah (Bahasa assembly, Basic, Fortran), sampai bahasa
tingkat rendah (bahasa mesin). Kita tidak mendebatkan perbedaan cara
pengelompokkan bahasa pemrograman itu di sini, Karena buku ini tidak membahas
spesifikasi bahasa pemrograman tetapi, sekali lagi, belajar memprogram..!!!
Notasi Algoritmik
Di dalam bab sebelumnya sudah kita nyatakan bahwa notasi
algoritmik dibuat independen dari spesifikasi bahasa pemrograman dan perangkat
keras komputer yang mengeksekusinya. Notasi algoritmik ini dapat diterjemahkan
ke dalam berbagai bahasa pemrograman. Analoginya seperti resep membuat kue.
Sebuah resep dapat ditulis dalam bahasa apapun, bahasa Inggris, Perancis,
Indonesia, Jepang, dan sebagainya. Apa pun bahasa resep, kue yang dihasilkan
tetap sama, sebab algoritmanya sama (dengan catatan semua aturan dalam resep
diikuti). Mengapa bisa demikian ? Karena
setiap juru masak (yang merupakan pemroses) mampu melakukan operasi dasar yang
sama, seperti mengocok telur, menimbang berat gula, dan sebagainya. Jadi, resep
membuat kue tidak terikat pada bahasa dan juru masak yang mengerjakan.
Demikian pula halnya komputer. Meskipun setiap komputer
berbeda teknologinya,tetapi secara umum semua komputer dapat melakukan
operasi-operasi dasar dalam pemrograman seperti ooperasi pembacaan data,
operasi perbandingan, operasi aritmetika, dan sebagainya. Perkembangan
teknologi komputer tidak mengubah operasi- operasi dasar itu, yang berubah
hanyalah kecepatan, biaya, atau tingkat ketelitian. Pada sisi lain, setiap
program dalam bahasa tingkat tinggi selalu diterjemahkan kedalam bahasa mesin
sebelum akhirnya dikerjakan oleh CPU. Setiap instruksi dalam bahasa mesin
menyajikan operasi dasar yang sesuai,
dan menghasilkan efek netto yang sama pada setiap komputer.
Yang perlu dicatat adalah bahwa notasi algoritmik bukan
bahasa pemrograman, sehingga siapa pun dapat membuat notasi algoritmik yang
berbeda. Hal yang penting mengenai notasi tersebut adalah ia mudah dibaca dan
dimengerti. Selain itu, meskipun notasi algoritmik bukan notasi baku
sebagaimana pada notasi bahasa pemrograman, namun ketaatan terhadap notasi
perlu diperhatikan untuk menghindari kekeliruan.
Di bawah ini kita kemukakan beberapa notasi yang digunakan
untuk menulis algoritma. Masalah yang dijadikan contoh ilustrasi adalah
menghitung pembagi bersama terbesar dengan algoritma Euclidean.
1.
Notasi I
: Menyatakan langkah-langkah algoritma dengan untaian kalimat deskriptif
Program Euclidean
Diberikan dua buah bilangan bulat
tak-negatif m dan n (m >= n).
Algoritma Euclidean mencari
pembagi bersama terbesar, gcd, dari kedua bilangan tersebut, yaitu bilangan
bulat positif terbesar yang habis membagi m dan n.
Algoritma :
1.
Jika n = 0
maka
m adalah jawabannya;
stop.
tetapi jika n bukan 0,
lanjutkan ke langkah 2.
2.
Bagilah m dengan n dan misalkan r adalah
sisanya.
3.
Ganti nilai m dangan n dan n dengan nilai r,
lalu ulang kembali ke langkah 1.
Dengan notasi bergaya kalimat ini, deskripsi setiap langkah
dijelaskan dengan bahasa yang gambling. Proses diawali dengan kata kerja
seperti ‘baca’, ‘hitung’, ‘bagi’, ‘ganti’, dan sebagainya, sedangkan pernyataan
kondisional dinyatakan dengan ‘jika….maka….’. Notasi ini baik buat orang awam,
tetapi terdpat kesukaran menerjemahkannya langsung kedalam notasi bahasa
pemrograman.
2.Notasi II : Menggunakan bagan-alir (flowchart)
Pada masa awal perkembangan
komputer, ilmuwan menspesifikasikan algoritma sebagai bagan-alir (flowchart),
yang mengekspresikan algoritma sebagai sekumpulan bentuk-bentuk geometri
(seperti persegi panjang, lingkaran, jajaran genjang, dan sebagainya) yang
berisi langkah-langkah komputasi. Kotak empat persegi panjang menyatakan proses
, sedangkan pernyataan kondisional dinyatakan dengan bentuk intan (diamond).
Bagan-alir popular pada awal era pemrograman dengan komputer (terutama dengan
bahasa Basic, Fortran, dan Cobol). Bagan-alir tidak digunakan lagi saat ini
karena ia cenderung tidak praktis dikonversi ke bahasa pemrograman, namun beberapa
algoritma sederhana masih sering digambarkan sebagai bagan-alir. Bagan-alir
menggambarkan aliran instruksi di dalam program secara visual. Notasi
algoritmik dengan diagram-alir cocok untuk masalah yang kecil, namun tidak cocok untuk masalah yang
besar karena membutuhkan berlembar halaman kertas. Selain itu, pengonversian
notasi algoritma ke notasi bahasa pemrograman juga cenderung relatif lebih sukar.
3.
Notasi III : Menggunakan pseudo-code
Para ilmuwan komputer lebih
menyukai menuliskan algoritma dalam notasi yang lebih praktis, yaitu notasi
pseudo-code. Pseudo-code (pseudo artinya semu atau tidak sebenarnya) adalah
notasi yang mirip dengan notasi bahasa pemrograman tingkat tinggi, khususnya
(paling sering) bahasa Pascal dan C. Lebih tepatnya lagi pseudo-code adalah
campuran antara bahasa alami dengan bahasa pemrograman. Namun, tidak sepperti
bahasa penrograman yang direpotkan dengan tanda titik koma (semicolon), indeks,
format keluaran, aturan khusus, dan sebagainya, maka sembarang versi pseudo-code
dapat diterima asalkan perintahnya tidak membingungkan pembaca. Jadi, tidaklah
mengherankan jika banyak ilmuwan komputer tidak menyepakati pseudo-code
tertentu, bahkan mereka cenderung membuat “dialek” pseudo-code dengan style
mereka sendiri. Keuntungan menggunakan notasi pseudo-code adalah kemudahan
mengonversinya lebih tepat disebut mentranslasi-ke notasi bahasaa pemrograman,
karena terdapat korespondensi antara setiap pseudo-code dengan notasi bahasa
pemrograman. Korespondensi ini dapat diwujudkan dengan table translasi dari
notasi algoritmik ke notasi bahasa pemrograman apa pun.