

TS
santoh
Alam Semesta Dalam Kacamata Seorang Programmer
MICHAEL
Saat ngobrol santai beberapa waktu lalu, saya sempat berjanji kepada beberapa teman untuk membahas tentang "past life" dan "deja vu". Tentu sebagian besar teman-teman sudah cukup akrab dengan istilah ini, dan sudah banyak sekali tulisan yang membahas kedua fenomena ini. Tapi kali ini saya ingin membahas dari sudut pemahaman yang sedikit berbeda.
Dari sejak mengenal komputer pertama kali, cinta saya sudah bulat pada dunia programming/coding, dan tidak pernah berubah hingga sekarang. Saya bersentuhan langsung dengan komputer sejak jaman PC-XT, PC-AT, Intel 386, 486, Apple Quadra, lalu generasi awal Pentium 586, hingga secanggih saat ini. Saya sempat mengalami jaman floppy disk 5.25 dan 3.5 inch. Jaman monitor CGA, EGA, VGA. Jaman DOS, Wordstar, Lotus 123, Wordperfect, dBASE-III+, Clipper.
Bahasa pemrograman kala itu masih sangat terbatas, mulai dari Basic/GwBasic, Cobol, Fortran, kemudian baru berkembang Pascal dan C/C++. Selain "high level" programming languages ini, saya mulai menggemari Assembly language yang lebih dekat ke "low level" language. Dulu yang terkenal adalah Macro Assembler dari Microsoft dan Turbo Assembler dari Borland. Melalui pintu assembly language ini saya mulai memahami bagaimana data disusun dan dicatat di semua bagian komputer, apa itu FAT, Boot sector, register, interrupt, port dan bagaimana memory dialokasi. Jaman itu adalah jaman populernya aneka virus komputer, baik yang menyerang file maupun boot sector. Masih ingat virus yang "nongol" waktu kita pencet tombol "Ctrl-Alt-Del"? Masih ingat apa bedanya virus, trojan dan worm?
Saya bersama beberapa teman kuliah waktu itu sempat aktif sebagai penulis reguler di majalah Mikrodata dan Infokomputer. Tentu saja sebagian besar tulisan kami tentang programming, baik itu konsep, tutorial maupun tips & tricks. Secara teratur juga kami membahas virus-virus komputer terbaru, bagaimana mengatasinya dan menyediakan source code anti-virusnya agar pembaca bisa menulis sendiri program anti-virus tersebut. Masa-masa belajar yang "seru" banget.
Kedekatan saya dengan assembly membawa saya lebih jauh menyelami dunia komputer ini, hingga ke hardware-nya. Saat kuliah, saya sengaja mengambil jurusan yang mendalami hardware, yang pakai solder-menyolder, bukan cuma ketik-ketik. Dari situ saya paham apa itu transistor, dan mengapa komponen itu sangat penting. Tanpa ditemukannya transistor, tidak mungkin ada dunia komputer seperti saat ini. Apa yang membuat transistor begitu penting? Karena transistor memiliki 2 input dengan 1 output. Mengapa itu penting? Karena dengan mengkombinasikan beberapa transistor akan membentuk aneka gerbang logic, seperti AND, OR atau XOR. Adanya gerbang logic memungkinkan dibentuknya unit-unit seperti counter dari arithmatic processing. Dari hanya 0 dan 1, akhirnya mampu menjadi menghasilkan aneka warna, suara, video, dan segala jenis dokumen.
Perlahan pemahaman saya tentang komputer ini menjadi dasar yang kuat dalam perkembangan spiritual saya, khususnya dalam usaha memahami apa dan bagaimana alam semesta ini. Ternyata inilah arti "panggilan" saya dalam dunia 0 dan 1 ini. Benar-benar saya menemukan kemiripan demi kemiripan yang menakjubkan. Ternyata komputer adalah "jalan" saya memahami sang pencipta.
Sebelum saya lanjutkan, tulisan ini adalah bagian ke-3 dari rangkaian "Alam Semesta Dalam Kacamata Seorang Programmer", dengan bagian pertama dan kedua ada pada tulisan di hari ke-5 dan ke-6.
Dalam setiap bahasa pemrograman dikenal adanya "variabel" yaitu sebuah nama tempat menambung sebuah nilai tertentu. Ini persis seperti yang kita pelajari di dunia matematika. Misalnya A = 5, berarti A adalah sebuah variabel yang "diisi" dengan nilai "5".
Setiap bahasa pemrograman juga mampu mendefinisikan sebuah "function" atau "subroutine", yaitu sebuah bagian program yang dapat dipakai berulang-ulang dengan menggunakan input yang bervariasi. Dalam matematika (geometri), kita mengenal ada fungsi sin, cos dan tangent (tan). Nah persis seperti itu. Misalnya A = sin(90), maka nilai A adalah 0,89. Apa tepatnya yang dilakukan/dihasilkan dari sebuah fungsi, bisa kita definisikan sendiri.
function Show_Memory1
A = 100
display A
Maka dapat ditebak hasil dari fungsi Show_Memory1 yang ditulis dalam pseudo-code di atas, adalah angka 100 yang muncul di layar (atau printer). Variabel A berada di dalam "scope" fungsi Show_Memory, maka biasa disebut "local variable". Bandingkan dengan yang berikut ini:
A = 200
function Show_Memory2
display A
Hasil dari program atas adalah angka 200, tetapi variabel A yang ini berada di luar scope fungsi Show_Memory2. Variabel A di sini kita sebut sebagai "global variable".
A = 200
function Show_Memory3
A = 100
display A
Dalam contoh di atas dengan fungsi Show_Memory3, berapakah ouput yang akan dihasilkan? 100 atau 200? Ya benar, hasilnya adalah 100, sesuai dengan nilai "local". Nilai dengan "scope" terdekat atau terkecil yang selalu diutamakan, dan dalam hal scope local A = 100 adalah yang terdekat.
Hal ini pula yang terjadi dalam dunia kita sehari-hari. Dimana "local scope" kita adalah conscious mind kita. Setiap hari kita berpikir dan menganalisa dengan conscious mind kita. Apapun informasi dan pengalaman yang kita serap dengan panca indera, adalah seperti baris program A = 100 dalam scope lokal tersebut. Apa yang kita "terima" yaitu A = 100, maka itu pula yang akan kita proyeksikan kembali dalam bentuk menampilkan angka 100 itu pula. Apa yang kita lihat, dengar dan rasakan, itulah yang akan kita "sadari" dan dari situ kita akan menentukan apa respon kita.
Namun kadang kala dapat terjadi kondisi seperti di contoh fungsi Show_Memory2. Dimana sebelum sempat kita "memproses" di conscious mind, unconscious sudah lebih dahulu memproses dan "mencocokkan" dengan nilai global. Nilai global ini dapat terisi secara unconscious pula yaitu melalui mimpi, melalui rangkaian pengalaman yang sebelumnya kita tidak sadari/perhatikan, ataupun yang ada hubugannya dengan kehidupan "past life" (kita bahas lagi di bawah nanti).
Inilah "deja vu", dimana nilai lokal tidak (terlambat) diproses, maka nilai global sudah muncul terlebih dahulu. Kita merasa "pernah" mengalaminya, karena memang variabel globalnya sudah berisi nilai, bukan kosong seperti contoh dengan Show_Memory1.
A = 200
function Show_Memory4
display A
A = 100
display A
Mungkin lebih tepat dengan contoh seperti dengan Show_Memory4 di atas. Dalam contoh ini, akan ditampilkan 2 angka sekaligus, yaitu 200 dan 100. Dalam pengalaman "deja vu" kita sering merasa berada dalam "dua dunia" sekaligus. Dunia dari conscious mind bercampur dengan dunia hasil dari unconscious mind kita.
Bila berbicara tentang "time" kita sering menganggap time adalah sesuatu yang "linear" atau "sequential", dalam arti suatu hal harus selesai lebih dahulu, baru kita memulai sesuatu yang baru. Apakah semua memang harus berurutan seperti itu? Dalam arti "past life" memang harus terjadi sebelum ini? Dan "next life" harus sesudah ini? Jawaban sederhana: Ya sekaligus Tidak.
Dalam teknik programming kita mengenal sebuah metode bernama "recursive", yang secara sederhana berarti "memanggil diri sendiri". Jadi untuk menyelesaikan "tugasnya", sebuah fungsi mampu memanggil diri sendiri, dengan nilai parameter dan kondisi yang berbeda-beda.
Mari kita lihat contoh sebuah fungsi sederhana untuk menghasilkan angka fionacci pada posisi tertentu. Deret fibonacci adalah deretan angka yang masing-masing merupakan jumlah 2 angka sebelumnya. Dengan pengecualian posisi pertama dan kedua, sudah pasti masing-masing angka 1.
fibonacci ( position )
if position = 1 or position = 2 then result = 1
else result = fibonacci ( position - 1 ) + fibonacci ( position - 2 )
Dalam contoh pseudo-code di atas, kita akan melihat bahwa:
1. fibonacci ( 1 ) = 1
2. fibonacci ( 2 ) = 1
3. fibonacci ( 3 ) = fibonacci ( 2 ) + fibonacci ( 1 ) = 1 + 1 = 2
4. fibonacci ( 4 ) = fibonacci ( 3 ) + fibonacci ( 2 ) = ....
5. fibonacci ( 10 ) = fibonacci ( 9 ) + fibonacci ( 8 ) = .....
6. fibonacci ( 100000 ) = fibonacci ( 99999 ) + fibonacci ( 99998 ) = .....
Kita lihat dengan sebuah "rumus" sederhana yang kita definisikan dalam fungsi fibonacci itu, sudah bisa menghasilkan angka fibonacci di posisi manapun, tanpa batas (hanya dibatasi memory dan kecepatan komputernya). Bila "formula" fibonacci sederhana ini saja mampu menghitung hingga tanpa batas, tentunya makin terbuka pemahaman kita akan dahsyatnya alam semesta ini. Sedikit ini saja sudah unlimited, apalagi alam semesta sebesar ini. Dan ini sekaligus membuktikan, alam semesta kita dibangun berdasarkan "formula", bukan "matter".
Fenomena "recursive" ini pula yang menurut saya terjadi dalam rangkaian "past life" kita. Untuk "menyelesaikan" sebuah fibonacci, kita masuk ke fibonacci lainnya. Untuk "menyelesaikan" sebuah "life", kita masuk ke "life" lainnya. Pada saat kita berada di "life" yang sekarang, bukan berarti life yang lalu telah selesai, dan bukan berarti tidak ada life baru yang bisa "dimasuki" dari titik ini.
Demgam recursive ini, paralel dan sequential dapat terjadi sekaligus. Berurutan sekaligus bersamaan. Bersamaan sekaligus tetap berurutan.
Bukan hanya masa lalu menentukan masa depan kita, tapi saat ini pun kita bisa "mengubah" masa lalu kita. Kita bisa mendefinisikan ulang masa lalu kita. Yang pada gilirannya akan mempengaruhi lagi masa depan kita. Sambung-menyambung, kait-mengkait. Dan fenomena ini pun terbukti benar secara fisika quantum.
Past-life, present-life dan future-life bukan hanya terjadi secara sequential berurutan, tapi juga terjadi secara berlapis-lapis dari dalam keluar, dan dari luar ke dalam. Dan semuanya bersamaan secara recursive.
Catatan kecil: semua fungsi fractal image sudah pasti recursive.
Dear friends... be recursive today! Call and go inside yourself today. Layer by layer.
Saat ngobrol santai beberapa waktu lalu, saya sempat berjanji kepada beberapa teman untuk membahas tentang "past life" dan "deja vu". Tentu sebagian besar teman-teman sudah cukup akrab dengan istilah ini, dan sudah banyak sekali tulisan yang membahas kedua fenomena ini. Tapi kali ini saya ingin membahas dari sudut pemahaman yang sedikit berbeda.
Dari sejak mengenal komputer pertama kali, cinta saya sudah bulat pada dunia programming/coding, dan tidak pernah berubah hingga sekarang. Saya bersentuhan langsung dengan komputer sejak jaman PC-XT, PC-AT, Intel 386, 486, Apple Quadra, lalu generasi awal Pentium 586, hingga secanggih saat ini. Saya sempat mengalami jaman floppy disk 5.25 dan 3.5 inch. Jaman monitor CGA, EGA, VGA. Jaman DOS, Wordstar, Lotus 123, Wordperfect, dBASE-III+, Clipper.
Bahasa pemrograman kala itu masih sangat terbatas, mulai dari Basic/GwBasic, Cobol, Fortran, kemudian baru berkembang Pascal dan C/C++. Selain "high level" programming languages ini, saya mulai menggemari Assembly language yang lebih dekat ke "low level" language. Dulu yang terkenal adalah Macro Assembler dari Microsoft dan Turbo Assembler dari Borland. Melalui pintu assembly language ini saya mulai memahami bagaimana data disusun dan dicatat di semua bagian komputer, apa itu FAT, Boot sector, register, interrupt, port dan bagaimana memory dialokasi. Jaman itu adalah jaman populernya aneka virus komputer, baik yang menyerang file maupun boot sector. Masih ingat virus yang "nongol" waktu kita pencet tombol "Ctrl-Alt-Del"? Masih ingat apa bedanya virus, trojan dan worm?
Saya bersama beberapa teman kuliah waktu itu sempat aktif sebagai penulis reguler di majalah Mikrodata dan Infokomputer. Tentu saja sebagian besar tulisan kami tentang programming, baik itu konsep, tutorial maupun tips & tricks. Secara teratur juga kami membahas virus-virus komputer terbaru, bagaimana mengatasinya dan menyediakan source code anti-virusnya agar pembaca bisa menulis sendiri program anti-virus tersebut. Masa-masa belajar yang "seru" banget.
Kedekatan saya dengan assembly membawa saya lebih jauh menyelami dunia komputer ini, hingga ke hardware-nya. Saat kuliah, saya sengaja mengambil jurusan yang mendalami hardware, yang pakai solder-menyolder, bukan cuma ketik-ketik. Dari situ saya paham apa itu transistor, dan mengapa komponen itu sangat penting. Tanpa ditemukannya transistor, tidak mungkin ada dunia komputer seperti saat ini. Apa yang membuat transistor begitu penting? Karena transistor memiliki 2 input dengan 1 output. Mengapa itu penting? Karena dengan mengkombinasikan beberapa transistor akan membentuk aneka gerbang logic, seperti AND, OR atau XOR. Adanya gerbang logic memungkinkan dibentuknya unit-unit seperti counter dari arithmatic processing. Dari hanya 0 dan 1, akhirnya mampu menjadi menghasilkan aneka warna, suara, video, dan segala jenis dokumen.
Perlahan pemahaman saya tentang komputer ini menjadi dasar yang kuat dalam perkembangan spiritual saya, khususnya dalam usaha memahami apa dan bagaimana alam semesta ini. Ternyata inilah arti "panggilan" saya dalam dunia 0 dan 1 ini. Benar-benar saya menemukan kemiripan demi kemiripan yang menakjubkan. Ternyata komputer adalah "jalan" saya memahami sang pencipta.
Sebelum saya lanjutkan, tulisan ini adalah bagian ke-3 dari rangkaian "Alam Semesta Dalam Kacamata Seorang Programmer", dengan bagian pertama dan kedua ada pada tulisan di hari ke-5 dan ke-6.
Dalam setiap bahasa pemrograman dikenal adanya "variabel" yaitu sebuah nama tempat menambung sebuah nilai tertentu. Ini persis seperti yang kita pelajari di dunia matematika. Misalnya A = 5, berarti A adalah sebuah variabel yang "diisi" dengan nilai "5".
Setiap bahasa pemrograman juga mampu mendefinisikan sebuah "function" atau "subroutine", yaitu sebuah bagian program yang dapat dipakai berulang-ulang dengan menggunakan input yang bervariasi. Dalam matematika (geometri), kita mengenal ada fungsi sin, cos dan tangent (tan). Nah persis seperti itu. Misalnya A = sin(90), maka nilai A adalah 0,89. Apa tepatnya yang dilakukan/dihasilkan dari sebuah fungsi, bisa kita definisikan sendiri.
function Show_Memory1
A = 100
display A
Maka dapat ditebak hasil dari fungsi Show_Memory1 yang ditulis dalam pseudo-code di atas, adalah angka 100 yang muncul di layar (atau printer). Variabel A berada di dalam "scope" fungsi Show_Memory, maka biasa disebut "local variable". Bandingkan dengan yang berikut ini:
A = 200
function Show_Memory2
display A
Hasil dari program atas adalah angka 200, tetapi variabel A yang ini berada di luar scope fungsi Show_Memory2. Variabel A di sini kita sebut sebagai "global variable".
A = 200
function Show_Memory3
A = 100
display A
Dalam contoh di atas dengan fungsi Show_Memory3, berapakah ouput yang akan dihasilkan? 100 atau 200? Ya benar, hasilnya adalah 100, sesuai dengan nilai "local". Nilai dengan "scope" terdekat atau terkecil yang selalu diutamakan, dan dalam hal scope local A = 100 adalah yang terdekat.
Hal ini pula yang terjadi dalam dunia kita sehari-hari. Dimana "local scope" kita adalah conscious mind kita. Setiap hari kita berpikir dan menganalisa dengan conscious mind kita. Apapun informasi dan pengalaman yang kita serap dengan panca indera, adalah seperti baris program A = 100 dalam scope lokal tersebut. Apa yang kita "terima" yaitu A = 100, maka itu pula yang akan kita proyeksikan kembali dalam bentuk menampilkan angka 100 itu pula. Apa yang kita lihat, dengar dan rasakan, itulah yang akan kita "sadari" dan dari situ kita akan menentukan apa respon kita.
Namun kadang kala dapat terjadi kondisi seperti di contoh fungsi Show_Memory2. Dimana sebelum sempat kita "memproses" di conscious mind, unconscious sudah lebih dahulu memproses dan "mencocokkan" dengan nilai global. Nilai global ini dapat terisi secara unconscious pula yaitu melalui mimpi, melalui rangkaian pengalaman yang sebelumnya kita tidak sadari/perhatikan, ataupun yang ada hubugannya dengan kehidupan "past life" (kita bahas lagi di bawah nanti).
Inilah "deja vu", dimana nilai lokal tidak (terlambat) diproses, maka nilai global sudah muncul terlebih dahulu. Kita merasa "pernah" mengalaminya, karena memang variabel globalnya sudah berisi nilai, bukan kosong seperti contoh dengan Show_Memory1.
A = 200
function Show_Memory4
display A
A = 100
display A
Mungkin lebih tepat dengan contoh seperti dengan Show_Memory4 di atas. Dalam contoh ini, akan ditampilkan 2 angka sekaligus, yaitu 200 dan 100. Dalam pengalaman "deja vu" kita sering merasa berada dalam "dua dunia" sekaligus. Dunia dari conscious mind bercampur dengan dunia hasil dari unconscious mind kita.
Bila berbicara tentang "time" kita sering menganggap time adalah sesuatu yang "linear" atau "sequential", dalam arti suatu hal harus selesai lebih dahulu, baru kita memulai sesuatu yang baru. Apakah semua memang harus berurutan seperti itu? Dalam arti "past life" memang harus terjadi sebelum ini? Dan "next life" harus sesudah ini? Jawaban sederhana: Ya sekaligus Tidak.
Dalam teknik programming kita mengenal sebuah metode bernama "recursive", yang secara sederhana berarti "memanggil diri sendiri". Jadi untuk menyelesaikan "tugasnya", sebuah fungsi mampu memanggil diri sendiri, dengan nilai parameter dan kondisi yang berbeda-beda.
Mari kita lihat contoh sebuah fungsi sederhana untuk menghasilkan angka fionacci pada posisi tertentu. Deret fibonacci adalah deretan angka yang masing-masing merupakan jumlah 2 angka sebelumnya. Dengan pengecualian posisi pertama dan kedua, sudah pasti masing-masing angka 1.
fibonacci ( position )
if position = 1 or position = 2 then result = 1
else result = fibonacci ( position - 1 ) + fibonacci ( position - 2 )
Dalam contoh pseudo-code di atas, kita akan melihat bahwa:
1. fibonacci ( 1 ) = 1
2. fibonacci ( 2 ) = 1
3. fibonacci ( 3 ) = fibonacci ( 2 ) + fibonacci ( 1 ) = 1 + 1 = 2
4. fibonacci ( 4 ) = fibonacci ( 3 ) + fibonacci ( 2 ) = ....
5. fibonacci ( 10 ) = fibonacci ( 9 ) + fibonacci ( 8 ) = .....
6. fibonacci ( 100000 ) = fibonacci ( 99999 ) + fibonacci ( 99998 ) = .....
Kita lihat dengan sebuah "rumus" sederhana yang kita definisikan dalam fungsi fibonacci itu, sudah bisa menghasilkan angka fibonacci di posisi manapun, tanpa batas (hanya dibatasi memory dan kecepatan komputernya). Bila "formula" fibonacci sederhana ini saja mampu menghitung hingga tanpa batas, tentunya makin terbuka pemahaman kita akan dahsyatnya alam semesta ini. Sedikit ini saja sudah unlimited, apalagi alam semesta sebesar ini. Dan ini sekaligus membuktikan, alam semesta kita dibangun berdasarkan "formula", bukan "matter".
Fenomena "recursive" ini pula yang menurut saya terjadi dalam rangkaian "past life" kita. Untuk "menyelesaikan" sebuah fibonacci, kita masuk ke fibonacci lainnya. Untuk "menyelesaikan" sebuah "life", kita masuk ke "life" lainnya. Pada saat kita berada di "life" yang sekarang, bukan berarti life yang lalu telah selesai, dan bukan berarti tidak ada life baru yang bisa "dimasuki" dari titik ini.
Demgam recursive ini, paralel dan sequential dapat terjadi sekaligus. Berurutan sekaligus bersamaan. Bersamaan sekaligus tetap berurutan.
Bukan hanya masa lalu menentukan masa depan kita, tapi saat ini pun kita bisa "mengubah" masa lalu kita. Kita bisa mendefinisikan ulang masa lalu kita. Yang pada gilirannya akan mempengaruhi lagi masa depan kita. Sambung-menyambung, kait-mengkait. Dan fenomena ini pun terbukti benar secara fisika quantum.
Past-life, present-life dan future-life bukan hanya terjadi secara sequential berurutan, tapi juga terjadi secara berlapis-lapis dari dalam keluar, dan dari luar ke dalam. Dan semuanya bersamaan secara recursive.
Catatan kecil: semua fungsi fractal image sudah pasti recursive.
Dear friends... be recursive today! Call and go inside yourself today. Layer by layer.
0
359
0


Komentar yang asik ya


Komentar yang asik ya
Komunitas Pilihan