Preface

Program pada dasarnya hanyalah kumpulan instruksi yang ditulis menggunakan bahasa yang dimengerti oleh manusia dan yang akan diterjemahkan menjadi bahasa yang dimengerti oleh mesin.

Dan mesin tersebut bernama komputer.

Instruksi tersebut beragam. Dari instruksi untuk menggambar tombol, memanipulasi konten dan menyimpannya, sampai ke berkomunikasi dengan komputer lain yang berada dalam sebuah jaringan. Terlepas ditulis menggunakan bahasa apapun dalam menulis instruksinya, pada akhirnya bahasa tersebut akan diterjemahkan menjadi kumpulan instruksi yang hanya dimengerti oleh mesin yang sedang dibicarakan tadi.

Sebuah program pasti berjalan diatas sebuah sistem operasi; seperti Windows, GNU/Linux, Mac OS, *BSD, dan semacamnya. Bagian menariknya adalah sistem operasi sendiri merupakan sebuah program, lalu dimana sistem operasi tersebut berjalan?

Singkatnya adalah diatas Kernel.

Kernel sederhananya adalah... sebuah program juga. Yang mana bertugas untuk menjembatani perangkat keras dan perangkat lunak. Seperti, untuk membuat "speaker" agar "membisukan suara" ketika pengguna menekan tombol F10 maka kita bisa menggunakan  ioctl(2), yang mana disediakan oleh kernel yang digunakan oleh sistem operasi tersebut.

Yang jika digambarkan, ilustrasinya kurang lebih seperti ini:

Infrastruktur adalah padanan dari kata Prasarana yang artinya menurut Kamus Besar Bahasa Indonesia (KBBI) adalah Segala sesuatu yang merupakan penunjang utama terselenggaranya suatu proses. Instruksi, pada dasarnya adalah sebuah proses. Jika kita misalnya memiliki program yang bertugas untuk menampilkan "hello world" di layar, apa sajakah "segala sesuatu" tersebut sehingga instruksi/proses penampilan tulisan tersebut dapat terselenggara?

Di buku ini, kita akan membahas "segala sesuatu" yang berkaitan dengan pembuatan program untuk platform web. Karena bila untuk spesifik devices seperti Desktop dan Mobile, kata "System Programmer"  lebih relevan daripada "Software Developer" yang mana menjadi bagian dari judul buku ini.

Tujuan dari buku ini adalah untuk melihat hal-hal yang (seharusnya) tidak (perlu) dilihat oleh seorang Software Developer. Harapannya adalah agar bisa mengetahui lapisan-lapisan yang ada dibawah program yang dibuat tersebut. Sehingga, jika terjadi masalah yang tidak berkaitan dengan aplikasi yang dikembangkan, kita bisa menganalisa lapisan-lapisan lain yang berada dibawah aplikasi tersebut.

Jika aplikasi diibaratkan sebuah gedung, ketika lampu di gedung tersebut mati, kita sebagai pengembang gedung pasti mengetahui bahwa  alasan utamanya adalah karena masalah listrik. Pertanyaan-pertanyaan seperti "apakah konslet?", "apakah kurang daya?" dan lain sebagainya hanya bisa dijawab oleh seseorang yang mengembangkan gedung plus yang mengetahui/mengerti "segala sesuatu" yang berkaitan dengan gedung tersebut.

Alias, yang mengetahui infrastruktur bangunan pada umumnya dan yang mengetahui infrastuktur pada gedung tersebut spesifiknya.

Dan di buku ini, kita akan membahas bagian "infrastruktur" pada umumnya tersebut.