Back to IF5100 Pemrograman untuk Data Analitik

Komputasi, Pengetahuan, dan Bahasa Pemrograman

Questions/Cues

  • Apa dua hal fundamental yang dikerjakan komputer?
  • Apa beda declarative knowledge dan imperative knowledge?
  • Tiga unsur apa yang membentuk sebuah algoritma?
  • Apa perbedaan syntax, static semantics, dan semantics sebuah bahasa?
  • Di mana saja kesalahan program bisa muncul dan seberapa mudah dideteksi?

Reference Points

  • IF5100 — Python Review (Slides 3-9)

Apa yang Dikerjakan Komputer

Secara fundamental komputer hanya melakukan dua hal: melakukan kalkulasi dan mengingat hasil kalkulasi tersebut. Kapasitasnya besar — misal CPU i5-9500 (8 core) @ 3.00 GHz mampu ~33 GFLOP, dengan ratusan gigabyte penyimpanan — tetapi sifat kerjanya tetap sesederhana itu.

Jenis kalkulasi yang bisa dilakukan ada dua: yang built-in pada bahasa (operator dan fungsi bawaan), dan yang didefinisikan oleh programmer. Poin pentingnya: komputer hanya tahu apa yang kita beri tahu — tidak ada “akal sehat” atau pengetahuan implisit.

Dua Jenis Pengetahuan

Declarative knowledge adalah pernyataan fakta. Contoh: “akar kuadrat dari bilangan x adalah y sedemikian sehingga y*y = x”. Ia mendeskripsikan apa yang benar, bukan cara memperolehnya.

Imperative knowledge adalah “resep” atau how-to — urutan langkah untuk mencapai suatu hasil. Contoh: bagaimana cara menghitung akar kuadrat (mis. metode Heron/Newton). Menulis program pada dasarnya adalah menuangkan imperative knowledge.

Resep, Algoritma, dan Bahasa

Sebuah resep tersusun atas: (1) sekuens langkah sederhana, (2) flow of control yang menentukan kapan tiap langkah dieksekusi, dan (3) cara menentukan kapan berhenti. Gabungan 1 + 2 + 3 = algoritma. Resep dirumuskan memakai bahasa.

Aspek Bahasa: Sintaks dan Semantik

  • Primitive constructs — unit terkecil. Bahasa Inggris: kata; bahasa pemrograman: angka, string, operator sederhana.
  • Syntax — kombinasi unit mana yang well-formed. "cat dog boy" tidak valid secara sintaks; "cat hugs boy" valid. Di Python "hi"5 tidak valid; 3.2*5 valid.
  • Static semantics — di antara string yang sintaktis valid, mana yang punya makna. “I are hungry” valid sintaks tetapi salah static semantics. 3 + "hi" valid sintaks tetapi merupakan static semantic error.
  • Semantics — makna yang melekat pada string yang sudah bebas static semantic error. Bahasa alami bisa ambigu (“Flying planes can be dangerous”); bahasa pemrograman hanya punya satu makna, walau belum tentu sesuai maksud programmer.

Di Mana Kesalahan Terjadi

flowchart TD
    A["Syntactic error"] --> A1["Umum, mudah dideteksi"]
    B["Static semantic error"] --> B1["Sebagian bahasa memeriksa sebelum run;<br/>bisa memicu perilaku tak terduga"]
    C["Tanpa error, makna beda dari maksud"] --> C1["Program crash / berhenti"]
    C --> C2["Program berjalan selamanya"]
    C --> C3["Memberi jawaban, tetapi salah"]

Kategori paling berbahaya adalah yang terakhir: tidak ada pesan error sama sekali, tetapi program melakukan hal berbeda dari yang diinginkan programmer.

Summary

Komputer secara fundamental hanya menghitung dan mengingat hasil; kalkulasi bisa built-in atau didefinisikan programmer, dan komputer hanya tahu apa yang diberitahukan. Declarative knowledge menyatakan fakta, sedangkan imperative knowledge menyatakan resep how-to yang menjadi inti pemrograman. Sebuah algoritma = sekuens langkah + flow of control + kriteria berhenti, yang dituangkan dalam bahasa dengan empat aspek: primitive constructs, syntax, static semantics, dan semantics. Kesalahan program muncul sebagai syntactic error (mudah ditangkap), static semantic error (sebagian bahasa memeriksanya sebelum run), atau error semantik tersembunyi — program crash, loop selamanya, atau memberi jawaban salah tanpa peringatan apa pun.