Programming Ground Up

Postingan kali ini saya pelajari isinya materi dari:

Programming from the Ground Up Chapter I
by Jonathan Bartlett
Copyright(c)2003 by Jonathan Bartlett

Berikut ini pembelajaran yang setidaknya bisa kita ikuti dan teladani dari sosok Jonathan Bartlett.. Semoga bermanfaat bagi teman-teman dan juga saya sendiri
Bab 1.Pengenalan

Saya suka pemrogramman. Saya menikmati tantangan tidak hanya membuat program berjalan tetapi saya melakukannya dengan gaya. Pemrogramman seperti puisi, menyampaikan sebuah pesan, tidak hanya untuk komputer tetapi juga untuk orang yang mengubah atau menggunakan program. Dengan suatu program, kamu membuat dunia kamu sendiri dengan aturanmu sendiri. Kamu membuat dunia berdasarkan gambaran kamu tentang permasalahan dan solusinya. Programer yang handal membuat dunia yang jelas dan ringkas dengan programnya, lebih seperti syair atau karangan.

Salah satu dari programer yang handal, Donald Knuth, menggambarkan pemrograman tidak hanya menceritakan bagaimana komputer untuk melakukan sesuatu, tetapi menceritakan juga bagaimana seseorang memerintahkan komputer untuk melakukan sesuatu. Maksudnya ialah program yang dapat dibaca oleh orang, tidak hanya komputer. Program kamu akan diubah dan di perbaharui oleh orang lain setelah lama kamu beralih ke proyek yang lain. Jadi, pemrogramman tidak hanya bicara banyak tentang komunikasi dengan komputer melainkan komunikasi dengan orang yang melanjutkan setelah anda. Seorang programer adalah pemecah permasalahan, seorang penyair dan juga seorang pelatih. Tujuan kamu yaitu memecahkan permasalahan yang ada dengan memperhitungkan dan selera, dan mengajarkan solusi anda ke programer yang akan datang. Saya harap buku ini dapat mengajari paling tidak beberapa puisi dan sihir yang membuat komputasi menggairahkan.

Kebanyakan pendahuluan pada buku-buku pemrogramman membingungkan ku. Pada akhirnya kamu masih bertanya "Bagaimana sebenarnya komputer bekerja?" dan tidak mempunyai jawaban yang bagus. Buku-buku tersebut cenderung melewati topik-topik yang sulit meskipun itu penting. Saya akan membawa anda melewati persoalan yang sulit karena merupakan satu-satuya jalan untuk menjadikan anda programer yang handal. Tujuan saya yaitu membuat anda dari tidak tahu apapun tentang pemrogramman ke pemahaman bagaimana untuk berpikir, menulis, dan belajar seperti programer. Kamu tidak ingin tahu segalanya, tetapi kamu harus mempunyai dasar bagaimana semuanya bekerja sama. Pada akhir buku ini, anda seharusnya dapat melakukan berikut ini:
Bab 1. Pendahuluan
-Memahami bagaimana program bekerja dan interaksi dengan program yang lain
-Membaca program orang lain dan mempelajari cara kerja program tersebut
-Mempelajari bahasa pemrograman yang baru dengan cepat
-Mempelajari konsep lanjutan ilmu komputer dengan cepat

Saya tidak akan mengajari anda semuanya. Ilmu komputer merupakan bidang yang sangat luas, terutama ketika anda mengkombinasikan teori dengan praktek pemrogramman komputer. Bagaimanapun, saya akan mencoba untuk memberikan dasar-dasar jadi anda dapat dengan mudah pergi kemanapun anda inginkan sesudah itu.

Ada seperti permasalahan ayam dan telur dalam pengajaran pemrogramman, terutama bahasa assembli. Ada banyak yang harus dipelajari - terlihat hampir terlalu banyak untuk dipelajari, tetapi tiap bagian bergantung dengan bagian yang lain. Oleh karena itu, anda harus sabar dengan diri anda sendiri dan komputer ketika mempelajari membuat program. Jika kamu tidak paham sesuatu untuk pertama kali, bacalah lagi. Jika kamu masih tidak memahaminya, terkadang yang terbaik percayai hal itu dan kembali lagi kemudian. Seringkali setelah lebih mempelajari pemrogramman ide menjadi lebih berguna. Jangan berkecil hati. Ini pendakian yang panjang, tetapi sangat bermanfaat.

Pada akhir setiap bab ada tiga kumpulan latihan tinjauan. Kumpulan pertama kurang lebih pengulangan - untuk mengecek apakah anda bisa memberikan kembali apa yang telah anda pelajari pada bab tersebut. Kumpulan soal kedua berisi pertanyaan terapan - untuk mengecek apakah anda dapat menerapkan yang anda pelajari untuk memecahkan masalah. Kumpulan soal yang terakhir untuk mengecek apakah anda dapat meluaskan horison anda. Beberapa pertanyaan mungkin tidak dapat dijawab sampai kemudian pada buku, tetapi akan memberi anda sesuatu untuk dipikirkan. Pertanyaan yang lainnya membutuhkan beberapa penyidikan sumber lain untuk menemukan jawabannya. Masih yang lain membutuhkan analisa ringkas opsi-opsi yang ada dan menerangkan solusi yang terbaik. Banyak pertanyaan yang tidak mempunyai jawaban benar maupun salah, hal ini tidak bermaksud pertanyaan ini tidak penting. Belajar persoalan yang ada dalam pemrogramman, belajar bagaimana untuk meneliti jawaban, dan belajar bagaimana untuk melihat kedepan semua bagian besar dari kerja programmer.

Jika anda mempunyai masalah yang anda dapatkan, ada milis untuk buku ini sehingga pembaca dapat berdiskusi dan mendapatkan bantuan. Alamatnya di pgubook-readers@nongnu.org. Milis ini terbuka untuk apa saja tipe pertanyaan atau diskusi sepanjang buku ini. Kamu dapat berlangganan di list ini dengan pergi ke http://mail.nongnu.org/mailman/listinfo/pgubook-readers.

Alat Anda
Buku ini mengajari anda bahasa assembli untuk prosessor x86 dan operating sistem GNU/Linux. Oleh karenanya kami akan memberikan contoh menggunakan GNU/Linux peralatan standar GCC. Jika kamu tidak akrab dengan GNU/Linux dan GCC, maka akan dijelaskan dengan ringkas. Jika kamu pemula di Linux, kamu seharusnya cek buku pedoman yang tersedia di http://rute.sourceforge.net/. Saya bermaksud untuk memperlihatkan kepada anda tentang pemrogramman yang umum daripada menggunakan peralatan spesifik pada platform spesifik, tetapi standardisasi pada sesuatu membuat tugas menjadi lebih mudah.

Untuk mereka yang pemula Linux juga coba untuk terlibat dalam Kelompok pengguna GNU/Linux lokal. Anggota kelompok pengguna pada umumnya sangat suka menolong orang baru, dan akan membantu kamu dari semuanya mulai menginstall Linux sampai belajar bagaimana menggunakannya dengan efisien. Daftar kelompok pengguna GNU/Linux tersedia di http://www.linux.org/groups/

Semua program telah diuji menggunakan Red Hat Linux 8.0, dan seharusnya bekerja di GNU/Linux distro yang lain. Tidak akan bekerja pada sistem operasi non-Linux seperti BSD atau sistem yang lain. Namun, semua ketrampilan yang sudah dipelajari pada buku ini dapat ditransfer dengan mudah ke sistem yang lain.

Jika kamu tidak memiliki akses ke mesin GNU/Linux, kamu dapat mencari penyedia hosting yang menyediakan akun Linux Shell, dimana menggunakan Command-line untuk penghubung ke sebuah mesin Linux. Ada banyak penyedia akun shell yang murah, tetapi anda harus memastikan cocok dengan syarat diatas (seperti x86 linux). Seseorang di kelompok pengguna lokal GNU/Linux mungkin dapat memberimu akun shell. Akun Shell hanya memerlukan koneksi internet dan program telnet. Jika kamu menggunakan Windows, kamu sudah mempunyai telnet client - hanya klik pada start, kemudian run, kemudian ketikkan telnet. Bagaimanapun, pada umumnya lebih baik untuk mengunduh PuTTY dari http://www.chiart.greenend.co.uk/~sgtatham/putty/ karena telnet Windows mempunyai masalah yang aneh. Ada banyak opsi lain untuk Machintos. NiftyTelnet adalah faforit saya.

Jika kamu tidak mempunyai GNU/Linux dan tidak menemukan layanan akun shell, anda dapat mengunduh Knoppix dari http://www.knoppix.org/ Knoppix adalah GNU/Linux disro yang melakukan boot dari CD dan anda tidak harus menginstallnya. Ketika anda selesai menggunakannya, anda tinggal me-reboot dan melepas CD dan anda kembali ke sistem operasi anda.

Jadi apa itu GNU/Linux? GNU/Linux adalah sistem operasi yang memperagakan UNIX. Bagian GNU datang dari proyek GNU(http://www.gnu.org/), yang memasukkan banyak program yang akan anda jalankan, termasuk peralatan GCC yang akan kita gunakan untuk memprogram. Peralatan GCC berisi semua program yang dibutuhkan untuk membuat program di berbagai bahasa komputer.

Linux adalah nama dari kernel. Kernel adalah bagian inti dari sebuah sistem operasi yang mengatur segalanya. Kernel seperti pagar dan jembatan. Seperti jembatan, kernel mengijinkan program untuk mengakses hardware dengan cara yang seragam. Tanpa kernel, anda harus menulis program yang cocok dengan semua model perangkat yang pernah dibuat. Kernel menangani semua interaksi perangkat spesifik sehingga anda tidak harus menanganinya sendiri. Kernel juga menangani akses file dan interaksi antar proses. Sebagai contoh, ketika anda mengetik, ketikan kamu pergi melewati beberapa program sebelum sampai ke editor anda. Pertama, Kernel menangani hardware anda, jadi pertama kali menerima pemberitahuan tentang tekanan key. Keyboard mengirimkan kode pindaian ke kernel, yang akan diubah menjadi huruf, angka, dan simbol yang sebenarnya yang direpresentasikannya. Jika kamu menggunakan windowing system(seperti Microsoft Windows atau X Window System), kemudian windowing system membaca tekanan key dari kernel, dan menyampaikannya ke program manapun yang saat ini difokus oleh pengguna pada tampilan.

Contoh 1-1. Bagaimana komputer memproses sinyal keyboard
Keyboard -> Kernel -> Windowing System -> Application program

Kernel juga mengatur aliran informasi antar program. Kernel adalah jembatan program-program yang ada di sistem operasi. Setiap kali data berpindah antara proses-proses, kernel mengatur pesan yang akan dikirim/diterima. Pada contoh keyboard diatas, kernel terlibat dalam komunikasi windowing system dengan application program untuk menyampaikan keypress yang didapatkan.

Sebagai pagar, kernel menjaga program dari overwriting tiap-tiap data program yang ada dengan tidak sengaja dan dari pengakessan file dan perangkat yang program tersebut tidak mempunyai akses. Dan juga membatasi kerusakan dari program yang dibuat dengan kurang baik yang dapat mempengaruhi program lain yang sedang berjalan.

Pada kasus kita, kernelnya Linux. Adapun, kernel itu sendiri tidak dapat berbuat apapun. Anda bahkan tidak dapat menghidupkan komputer hanya dengan kernel. Bayangkan kernel sebagai pipa air sebuah rumah. Tanpa pipa, keran tidak dapat pekerja, tetapi pipa agak tidak berguna jika tanpa keran. Bersama-sama, user application(dari proyek GNU dan yang lain) dan kernel(Linux) membuat semua komponen Sistem Operasi, GNU/Linux.

Kebanyakan bagian terbesar dari buku ini menggunakan bahasa tingkat rendah assembly. Ada tiga jenis bahasa utama/dasar yang ada:

Bahasa Mesin
Bahasa yang komputer benar-benar melihat dan menggunakannya. Setiap perintah yang komputer lihat berupa angka atau rentetan angka.

Bahasa Assembly
Bahasa ini seperti bahasa mesin, tetapi angka perintah diganti dengan rentetan huruf yang lebih mudah untuk diingat.

Bahasa tingkat tinggi
Bahasa tingkat tinggi menjadikan pemrogramman lebih mudah. Bahasa assembly mengharuskan anda untuk bekerja dengan mesin itu sendiri. Bahasa tingkat tinggi mengijinkan anda untuk menulis program dalam bahasa yang lebih natural/wajar. Satu perintah dalam bahasa tingkat tinggi biasanya sama seperti beberapa perintah dalam bahasa assembly.

Dalam buku ini kita akan belajar bahasa assembly, meskipun kita akan membahas sedikit bahasa tingkat tinggi. Semoga dengan mempelajari bahasa assembly, pemahaman anda bagaimana pemrograman dan komputer bekerja akan menjadikan anda satu langkah kedepan.

nah naah silahkan teman-teman berkomentaar sekarang...

No comments:

Post a Comment