Membuat Compiler Sendiri – Persamaan Matematis

[tek.kompilasi|t.inf|s.104|pert.9]

Pertemuan yang lalu telah disinggung membuat kompiler yang melakukan operasi perhitungan layaknya menggunakan kalkulator. Di sini dengan Lex and Yacc akan dicoba membuat kompiler yang bisa melakukan perhitungan seperti ini:

Yang belum mempunyai software lex and yacc silahkan klik di sini untuk mengunduhnya dengan ukuran sekitar 20-an Mb. Kebetulan software yang dishare berbasis Windows. Jika ingin yang linux, vendor juga menyediakan aplikasi lex and yacc berbasis linux seperti Ubuntu.

Prinsip Kerja

Generasi saya (kuliah 90-an) hanya mengenal disket dan belum mengenal punch card yang berisi kartu berlubang yang fungsinya sebagai instruksi ke komputer. Bayangkan jika kita diminta menghitung iterasi ratusan kali dengan kalkulator, tentu akan bentol jempol kita. Tapi dengan menginstruksikan agar komputer menghitung iterasi ratusan kali tersebut, sekali jalan langsung selesai. Jika dulu dengan kartu berlubang, saat ini instruksi berbasis teks yang diketik. Jadi komputer harus mampu melakukan scanning agar mengetahui instruksi tersebut sesuai dengan aturan sebelumnya atau tidak, baik dari sisi kata perkata atau logika yang berupa grammar. Jadi Lex and Yacc memiliki dua mesin:

  • Scanning kata per kata dengan mesin Lex (singkatan dari lexical generator), dan
  • Grammar check dengan mesin Yacc (singkatan dari yet another compilers compiler)

Makanya software tersebut dinamakan Lex and Yacc. Jika software sudah diinstal, silahkan pelajari dari situs resminya, yang juga dilengkapi dengan kode sumber untuk praktek kali ini.

Mengkompilasi File Lex

Ada dua file yang diperlukan untuk menghasilkan satu kompiler yaitu file lex (berekstensi *.l) dan yacc (berekstensi *.y). Silahkan masuk ke bab “Practice 2”. Kopi-kan saja ke Flex Windows (software Lex and Yacc versi windows) yang baru kita instal. Masuk ke menu Tools – Lex Compile. Lanjutkan dengan masuk ke menu yang sama: Tools – Lex Build. Maka akan dihasilkan satu file baru lex.yy.c yang merupakan hasil generate ke bahasa c.

Mengkompilasi File Yacc

Jika Lex bertanggung jawab mengecek kata/word yang terdaftar di bahasa pemrograman yang dirancang, Yacc bertanggung jawab terhadap grammatical-nya. Buat kode dengan nama yang sama dengan file Lex, hanya saja untuk Yacc harus berekstensi *.y. Lakukan proses yang sama dengan Lex di menu Tools – Yacc Compile dan dilanjutkan dengan membuild beserta Lex-nya lewat menu yang sama Tools – Lex+Yacc Build. Hasil dari proses kompilasi adalah dua buah file y.tab.c dan y.tab.h yang satu untuk header (di bahasa c dengan kode #include) yaitu y.tab.h dan satu lagi y.tab.c digunakan untuk build Lex+Yacc. Di bagian indikator bawah pastikan tidak ada masalah dan cek di file lokasi penyimpanan (di folder yang sama dengan lex dan yacc) apakah file berekstensi exe dengan nama yang sama dengan lex and yacc ada, misalnya yang saya gunakan calc2.exe.

Menjalankan Bahasa Pemrograman

Ada dua cara menjalankan bahasa pemrograman yang baru dibentuk yaitu dengan mengklik file calc2.exe atau nama lain yang Anda buat, atau dengan menekan Tools – Execute Exe Directly. Hasilnya akan memunculkan jendela di bawah ini, coba dengan melakukan operasi matematis tertentu dengan variabel. Selamat mencoba, semoga bermanfaat.

NOTE: Ada kesalahan di bagian yacc, tambahkan di bagian atas:

  • %{
  • #include <stdio.h>
  • void yyerror(char *);
  • int yylex(void);
  • int sym[26];
  • %}
Iklan

Mengejar Impian

Tiap orang memiliki impian sejak kecil. Impian di sini maksudnya sesuatu yang diinginkan, bukan mimpi ketika tidur, walaupun kadang keinginan itu dibawa mimpi juga sih. Berbeda dengan anak-anak yang ketika bermimpi tidak memperhitungkan mungkin atau tidaknya, orang dewasa terkadang membatasi diri dengan faktor-faktor luar yang membuat mimpi tersebut tidak mungkin tercapai.

Mimpi yang Sempurna

Jika dalam syair lagu “mimpi yang sempurna” Ariel bertanya kepada bintang-bintang tentang mempinya yang sempurna, ada baiknya mengikuti pendapat Arnold Schwarzenegger ketika dia bermimpi menjadi bintang Hollywood. Orang lain mengatakan tidak mungkin mengingat aspek-aspek di dirinya yang tidak cocok seperti logat khas Jerman yang pasti akan membuat produser tertawa-tawa. Justru ternyata logat tersebut menjadi kalimat sederhana yang terkenal: “I’ll be back” dalam film terminator dalam logat Jerman yang kental, mirip mesin. Vision atau dalam bahasa Indonesia Visi, harus dimiliki oleh siapapun karena akan mengarahkan ke tujuan. Tentu saja visi yang baik dan jelas.

Mimpi berbeda dengan keinginan, seperti ingin rujak yang tidak lama kemudian terkabul. Ada proses panjang untuk mengarah ke impian. Terkadang memang seharusnya kita yang mengikuti impian, bukan sebaliknya impian yang fleksibel mengikuti keadaan.

No Pain No Gain

Terkadang memang banyak penderitaan yang menyertai perjalanan menggapai impian. Selama ada hasrat dan keinginan tentu saja penderitaan sebesar apapun tidak berarti. Banyak rekan-rekan saya yang sakit, masalah rumah tangga bahkan meninggal dunia dalam menggapai jenjang pendidikan tertentu. Di tempat saya bekerja pun hanya separuh yang menyelesaikan studi doktoralnya, tapi tetap saja tidak dianggap penderitaan karena memang itu harus dijalani. Kemarin ada rekan yang sedang berusaha memperoleh beasiswa menceritakan perjalanannya yang berliku. Ketika memperoleh beasiswa ternyata lokasi kampusnya di Jogja bukan yang diinginkan (Jakarta). Padahal perjalanan mencapainya cukup panjang, pemberkasan, wawancara di daereah Jawa Timur, ketika sudah beres ternyata hamil dan nunggu melahirkan. Namun toh tetap saja dia mencoba lagi.

Santai dan Tetap Pertahankan Minat

Seperti biasa ketika ada rekan yang berhasil mendapatkan beasiswa dan mulai studi lanjut atau ada rekan yang telah menyelesaikan kuliahnya banyak yang bersemangat untuk mengikuti jejaknya. Tapi yah … seperti itu, semangat di awal dan kemudian redup lagi dan kemudian muncul lagi ketika ada yang lolos atau lulus dan begitu berulang kali. Makanya doctoral bootcamp yang diadakan Kemenristek DIKTI kurang begitu berhasil.

Impian itu mirip dengan lari jarak jauh atau lari marathon, bukan sprint 100 meter. Ketika berlari, memperoleh momentum dan energi baru. Kalau impian cepat sekali memperolehnya, jangan-jangan itu bukan impiannya, tapi “ada kesempatan dalam kesempitan”. Ada konsep dalam traditisi Tibet yaitu keinginan merupakan “loba” alias keserakahan, kesedihan/menderita adalah “dosa”, dan ketidaktahuan adalah “moha”, kalau dalam Islam diistilahkan nafsu. Jika impian kita jalankan seperti itu, sudah dipastikan akan sulit mencapainya. Anggap saja impian misalnya doktor, guru besar, atau apapun itu sekadar objek yang dituju tanpa ada keinginan ataupun nafsu yang mengebu-gebu, seperti dalam konsep meditasi yaitu santai dan tetap pertahankan minat. Dalam Islam diistilahkan nafsu mutma’inah. Mungkin film yang dibintangi Will Smith di bawah bisa menginspirasi. Yuk, tetap melangkah tanpa gejolak di hati.

Pemrograman Dinamis – Konsep Memoization

[algoritma|tek.inf|r408|pert.8]

Salah satu materi algoritma standar adalah pemrograman dinamis (Dynamic Programming). Walaupun ada kata “programming”-nya ternyata tidak ada hubungannya dengan kode/script. Ternyata istilah pemrogramannya karena teknik yang biasanya digunakan untuk optimalisasi ini memanggil suatu fungsi diri sendiri (rekursif) sebelum menentukan hasil-hasil yang optimal. Optimal di sini bisa maksimal atau minimal.

Pemotongan Batang (Rod Cutting)

Kasus ini contoh proses pemotongan bilah batang panjang agar dihasilkan margin keuntungan yang optimal. Misalnya batang baja sepanjang 10 inchi yang akan dipotong dengan potongan kelipatan 1 inchi.

Kombinasi dari ukuran potongan ternyata sangat menentukan keuntungan berdasarkan harga per potongnya. Misal, untuk baja sepanjang 4 inchi memiliki keuntungan dengan komposisi dua buah batang berukuran 2 inchi.

Selain dua buah potongan berukuran 2 inchi, panjang potongan menghasilkan harga 4, 7, dan 9. Sementara dua buah potongan 2 inchi menghasilkan harga 10 (tentu saja ini kasus bagi penjual, kalau pembeli tentu lebih menguntungkan beli potongan-potongan kecil satu inchi).

Memoization

Istilah ini saya fikir salah tulis, harusnya memorization, ternyata tidak. Istilah ini berasal dari kata “memo”, yaitu secarik surat/infor singkat. Misal untuk tiap-tiap panjang bilah akan dihasilkan nilai optimal sebagai berikut:

Perhatingan untuk baja sepanjang 1 sampai 3 inchi, optimalnya adalah tanpa dipotong, masing-masing berharga $1, $5, dan $8. Baja 2 in ada dua kemungkinan yaitu 1+1 atau 2 in tanpa dipotong. Karena 1in+1in menghasilkan hanya $2 maka yang dipilih 2 in tanpa dipotong, yaitu $5. Untuk baja berukuran 4 in ada beberapa kemungkinan seperti gambar batangan di atas dan dihitung semua kemungkinannya hingga diperoleh maksimal adalah dua potongan @2in. Pseucode-nya sebagai berikut:

Keterangan: baris ke-4 sampai 6 menghitung komposisi potongan baja. Misal untuk i=1, maka akan dicari maksimal dari 1 dan (n-1)-nya. Jika batang 4 in, maka 1 dan 3, berikutnya 2 dan 2 (dari n-2) dan seterusnya. Untuk kasus contoh di atas diperoleh nilai maks 10 (ketika i=2 dan satu potongan lainnya 2 in juga).

Karena potongan 2in sudah dihitung dari sebelumnya (batang ukuran 2in) maka ketika menghitung 4in tidak perlu menghitung kembali yang 2in hanya menggunakan riwayat yang lalu, alias dari “memo” sebelumnya. Di sinilah muncul istilah memoization, atau dalam bahasa Indonesianya mungkin memoisasi.

Top Down Memoization

Dengan rekursif, beberapa perhitungan dihitung berulang kali sehingga tidak efisien (naif). Oleh karena itulah pemrograman dinamis diterapkan untuk menggantikan proses rekursif berulang tersebut. Jadi sekali telah dihitung, maka jika akan menghitung proses yang sama hanya me-ngintip (lookup) hasil perhitungan yang lampau.

Untuk dengan memoization, ditambahkan arrah yang berisi nilai yang sudah dihitung dengan suatu routine yang disebut helper “Memouzed-Cut-Rod-Aux” (simbol minus tak hingga artinya unknown dan perlu dihitung):

Baris 1-3 mengecek apakah nilai sudah ada di array hasil perhitungan atau tidak. Jika tidak ada (else) masuk ke q yang unkhown (minus tak hingga) dengan baris 7 yang berisi maksimal komposisi-komposisi yang maksimal. Hanya saja di sini rekursif yang bekerja dengan mengecek hasil hitungan sebelumnya jika sudah ada di array hasil, langsung mengkopi saja tidak perlu menghitung lagi nilai r-nya (lihat r1 sampai r10 di contoh paling atas postingan ini untuk batang sepanjang 10 in).

Buttom Up Memoization

Teknik buttom up lebih sederhana karena tidak membutuhkan mekanisme rekursif, hanya dengan menghitung maksimal potongan-potongan dari terkecil hingga terbesarnya.

Keterangan: Seperti biasa array hasil dipersiapkan. Variabel j merupakan hasil optimal komposisi potongan yang bergerak dari kombinasi i dengan pasangannya. Misal ketika j=4 maka i bergerak dari i=1 dan r(3) mana yang lebih maksimal dibanding komposisi lainnya misal i=2 dan r(2), dan seterusnya. Baik buttom up ataupun top down memiliki running time yang kuadratik. Sekian, semoga bermanfaat.

Referensi:

Cormen, dkk. “intro to algorithms”, MIT Press: 2009.

Shift and Reduce Parsing

[tek.kompilasi|t.informatika|s-103|pert.8]

Untuk orang yang non ilmu komputer atau teknik informatika, istilah parsing merupakan istilah asing yang membuat dahi keriput. Bagaimana tidak, hanya menggunakan bahasa pemrograman saja sudah pusing, ini malah diminta membuat suatu bahasa pemrograman. Tapi perlu diingat, salah satu kewajiban pembelajaran adalah “apakah yang kita ajarkan sudah seharusnya yang kita ajarkan?”. Pertanyaan itu merupakan pertanyaan yang harus dijawab. Pertanyaan yang dikeluarkan oleh Mahatma Gandhi ketika India baru merdeka dan ingin segera bersaing dengan negara maju.

Grammar

Kembali ke proses pembuatan bahasa pemrograman. Sebelum bisa membuat suatu bahasa, perlu mengetahui cara kerja suatu bahasa. Bahasa bekerja mengikut grammar yang ada. Chomsky mengusulkan suatu context free grammar yang bebas dari linguistik lokal yang tidak beraturan. Sebagai contoh kita memiliki aturan grammar sebagai berikut:

Apa maksudnya? Di sini ada tiga aturan yang membolehkan pengguna mengoperasikan: 1) variabel ditambah variabel. Variabel di sini diistilahkan dengan non-terminal (bukan titik destinasi akhir), sementara terminal berupa konstanta atau operasi seperti tambah, kurang, kali dan bagi. 2) variabel dikalikan dengan variabel, serta 3) variabel diisi oleh konstanta. Secara singkat, notasi grammar di atas dapat ditulis dalam satu baris: E->E+E|E*E|id. Ekspresi di atas mengikut kaidah Backus Naur Form (BNF) yang terkenal untuk context free language.

Tugas bagian parsing adalah mengecek validitas operasi yang diberikan oleh pengguna apakah sudah sesuai dengan grammar yang ada atau tidak. Sebagai contoh user mengetikan persamaan matematis: E->x+y*z. Parsing akan mengecek apakah sudah sesuai atau tidak dengan grammar.

Shift and Reduce Parsing

Sesuai dengan namanya metode ini mengkombinasikan antara penggeseran dan pengurangan parsing. Contoh sebelumnya jika kita kerjakan maka otak kita lebih mudah mengerjakan lewat mekanisme ‘top down’ sambil melihat grammarnya. Dalam contoh di atas, ada penjumlahan (x+y) dan perkalian (dengan z). Dengan menggunakan left hand first diperoleh urutan berikut ini:

Perhatikan aturan grammar yang diterapkan di dalam kurung di samping kanan proses top-down. Pertama-tama digunakan aturan perkalian yang menghasilkan dua non-terminal E. E yang kanan dengan menerapkan rule no.3 diperoleh konversi dari E ke id (dalam hal ini z). Langkah berikutnya dengan menggunakan aturan no.1 dimana E menurunkan E+E (simbol -> diistilahkan turunan (derrive). Teruskan dengan menggunakan rule no. 3 akan merubah non-terminal menjadi terminal berturut-turut x dan y. Karena hasil akhir sama dengan soal, maka dapat dikatakan instruksi x+y*z dapat diterima parser.

Kita mungkin mudah mengerjakan dengan top-down method ini. Bagaimana dengan komputer? Tentu saja berbeda dengan otak kita. Untuk itulah metode shift and reduce layak diperhitungkan. Cara kerja shift and reduce adalah sebagai berikut:

  • Tulis operasi yang akan dicek grammar-nya
  • Lakukan operasi shift untuk memisahkan non-terminal/variabel yang akan diisikan id.
  • Lakukan operasi reduce untuk mengganti variabel menjadi terminal.

Perhatikan 11 langkah di atas, yang merupakan tipikal operasi shift and reduce. Pada langkah pertama, instuksi akan siap-siap melakukan proses “shift” dimana x bergeser ke kiri. Selanjutnya, x yang telah berada di kiri dikonversi menjadi terminal/variabel E. Berikutnya langkah ke3 dan 4 dua buah proses shift yaitu untuk plus dan y dilanjutkan dengan reduce y menjadi terminal E. Langkah 8, 9, dan 10 bermaksud mereduksi instruksi mengikut grammar sehingga dihasilkan E yang artinya instruksi x+y*z dapat diterima (accepted). Berikutnya akan dicoba lewat perangkat lunak Lex and Yacc, khususnya bagian Yacc yang bertanggung jawab mengurusi Grammar.

Perhatikan saat kompilasi Yacc di bagian komentar. Tampak Yacc menunjukan 4 shift/reduce [1] yang konflik. Ini tipikal dari bagian pengecekan instruksi (dengan shift and reduce). Perhatikan di sini saya iseng mengganti “+” dengan “p” dan “-” dengan “m”. Kira-kira hasil bahasa pemrograman primitif sebagai berikut di bawah ini. Perhatikan, “p” bermakna plus dan “m” bermakna minus. Sekian, semoga bermanfaat.

 

Kisah Unik Matematikawan Dodgson – Dodgson Condensation

Membaca tulisan yang membahas seorang ahli matematika abad 19, Reverend Charles Lutwidge Dodgson (1832-1898) cukup menarik juga. Ahli matematika ini ternyata menulis cerita terkenal “Alice in Wonderland” dan “Through the Looking Glass” dengan nama samaran Lewis Carroll. Dikisahkan bahwa Ratu Victoria ternyata kagum dengan cerita “Alice in Wonderland” sehingga ketika selesai membaca dia meminta bawahannya untuk membawakan buku karangan Lewis Carroll (yang nama aslinya Dodgson) yang lain. Tidak berapa lama kemudian tibalah bawahannya tersebut dengan membawa buku Dodgson yang berjudul “Elementary Theorems Relating to Determinants” yang ternyata buku matematika .. haha.

Metode Kondensasi Dodgson

Metode terkenal ini sangat ampuh untuk menghitung determinan matriks dengan jumlah baris dan kolom yang banyak. Tentu saja penting di jaman dulu ketika komputer (atau minimal kalkulator) belum ditemukan. Postingan ini sedikit banyak membahas metode ini, sebagai kelanjutan post terdahulu tentang invers matriks 4×4.

Misal sebuah matriks A dengan ukuran lebih besar atau sama dengan 3×3 dengan matriks dalam (interior matrix) menyatakan matriks (n-2)x(n-2) hasil penghilangan baris awal, akhir dan kolom awal serta akhir (kalau pusing, langsung loncat ke contoh kasus di bawah ya). Metode kondensasi Dodgson terdiri dari empat langkah/tahap antara lain:

  • Gunakan metode operasi baris dan kolom untuk menghilangkan nol dari matriks dalam (interior).
  • Cari determinan matriks 2×2 untuk tiap-tiap empat elemen untuk membentuk matriks baru berukuran lebih kecil (n-1)x(n-1), misalnya diberi nama matriks B.
  • Ulangi langkah sebelumnya untuk matriks (n-2)x(n-2) lalu bagi tiap elemen menurut interior original matriks A, untuk memperoleh matriks C.
  • Lanjutkan terus “kondensasi” di atas sampai hasil satuan ditemukan. Nilai ini merupakan determinan dari matriks A.

Sebagai ilustrasi ada baiknya menggunakan contoh kasus. Lebih mudah khususnya orang teknik yang suka praktis-praktis seperti saya, hehe. Diketahui matriks A.

Karena tidak ada nol di interior, langsung ke langkah 2 untuk mencari matriks B hasil penentuan determinan. Misalnya untuk sisi kiri atas serta sampingnya.

Lanjutkan hingga seluruh matriks A sehingga matriks B dari tahap kedua adalah sebagai berikut:

Tampak matriks A berukuran 5×5 menjadi (5-1)x(5-1) di atas. Tahap ketiga selanjutnya meneruskan kondensasi menghasilkan matriks 3×3, misalnya untuk bagian kiri atas.

Teruskan untuk sisi-sisi lainnya sehingga diperoleh matriks C

Lanjutkan dengan cara yang sama hingga menjadi matriks D. Di sini istilah kondensasi sepertinya ada benarnya. Ibarat embun yang timbul dari uap air yang terkumpul di udara.

Nah berikutnya adalah membagi matriks terakhir D ini (terkecil) dengan interior dari Matriks B yakni:

Tiap elemen matriks D dibagi mengikuti posisi int B, misalnya -84 dibagi -6, -580 dibagi 2, dan seterusnya hingga diperoleh matriks E:

Dengan mudah kita menghitung determinan matriks E ini dengan cara biasa det=14*(-109)-421*(-290) yang menghasilkan 120564. Apakah sudah selesai? Belum, dikit lagi yaitu membagi nilai tersebut dengan interion matriks C yang bernilai 36. Dan hasil akhirnya adalah 3349. Sekian semoga bermanfaat.

 

Menguasai Keterampilan dengan Cepat

Untuk mengetahui informasi dengan cepat dapat dilakukan dengan mencoba melatih membaca cepat. Makin banyak yang dibaca makin banyak pula informasi yang diperoleh, sehingga dengan waktu yang sama jika membaca dengan cepat akan diperoleh informasi/pengetahuan yang lebih banyak. Untuk informasi memang hanya bisa dilakukan dengan membaca, tapi bagaimana dengan keterampilan? Apakah bisa dengan membaca? Tentu saja tidak. Video di youtube ini cukup baik bagaimana meningkatkan keterampilan (bahkan menguasai keterampilan baru) hanya dalam waktu 20 jam, yang jika dirinci per hari berlatih selama 40 menit maka hanya dibutuhkan waktu 30 hari saja.

Ada lima langkah untuk menguasai dalam waktu 20 jam atau 40 menit sehari.

Beberapa ahli mengatakan istilah 10 ribu jam berlatih agar menjadi ahli dalam satu keterampilan, tetapi postingan ini sedikit memberi kabar baik bahwa tidak harus selama itu. Namun dibutuhkan hal-hal berikut ini jika ingin menerapkan prinsip 20 jam ini, antara lain:

1. Menentukan apa yang diinginkan terhadap keterampilan tersebut

Ini sangat penting karena tidak ada gunanya menguasai keterampilan tetapi tidak mengerti manfaatnya, minimal untuk dirinya sendiri. Dengan mengerti dan sadar manfaat yang diperoleh, tekad untuk menguasainya jadi lebih besar. Misalnya menguasai bahasa Inggris. Dengan menyadari keterampilan ini bermanfaat bagi karirnya sebagai seorang dosen (studi lanjut atau publikasi jurnal internasional) maka usaha untuk menguasainya lebih intens dibanding sekedar iseng.

2. Mencari keterampilan utama yang dibutuhkan hasil dari break down

Tiap keterampilan terdiri dari sekumpulan keterampilan-keterampilan kecil yang terhubung satu sama lain menghasilkan keterampilan tertentu. Seorang pemain bole selain harus memiliki kemampuan dribbling juga memiliki keterampilan-keterampilan kecil dari stamina berlari, passing, hingga sekedar menahan emosi ketika tanding. Jadi harus mampu memecah keterampilan utama menjadi beberapa keterampilan bagian (sub-skill) agar lebih mudah dilatih. Biasanya pelatih memiliki program yang membagi keterampilan menjadi beberapa keterampilan kecil. Mirip perkuliahan yang membagi menjadi beberapa sistem kredit semester (SKS).

3. Riset terhadap kemampuan diri (evaluasi diri) yang perlu dilatih sehubungan dengan sasaran skill

Tiap orang memiliki bakat tertentu yang membuat mudah dalam menguasai keterampilan tertentu. Tapi pasti ada kelemahan-kelemahan tertentu juga. Agar proses latihan lebih efektif adakalanya kita harus memahami apa keterampilan bagian tertentu yang menjadi titik lemah kita dan diperkirakan membutuhkan waktu lama dalam menguasainya. Jika lemah di babak akhir dalam permainan catur, perlu melatih lebih banyak dalam menerapkan teori-teori babak akhir. Jujur terhadap diri sendiri sangat diperlukan dalam tahap ini.

4. Menghilangkan hambatan-hambatan ketika berlatih

Karena per hari hanya dibutuhkan waktu 40 menit saja, maka perlu menjaga dari gangguan-gangguan yang mungkin terjadi ketika proses pelatihan. Televisi, radio, ponsel, dan sejenisnya perlu disingkirkan terlebih dahulu. Sedapat mungkin dalam melakukan latihan tidak perlu persiapan yang njlimet sehingga membuat kita malas sendiri untuk memulai latihan. Misalnya ketika berlatih gitar, maka sedapat mungkin gitar tersebut diletakan di kamar, dan ketika mulai latihan langsung di tempat itu juga, tidak perlu pergi ke studia, ke kebun .. apalagi sampai mandi kembang dulu, hehe.

5. Menguatkan tekad di awal proses latihan

Ini ibarat kunci starter kendaraan, apakah kita putar on atau tidak, tergantung tekad kita sudah bulat atau masih angin-anginan. Jika masih tidak jelas, sudah tentu tidak efektif untuk dieksekusi. Akan membuang waktu 20 jam yang percuma karena tidak sesuai dengan hasil yang diinginkan pastinya walaupun mengerti manfaat, mampu memecah menjadi sub-skill, mampu mengevaluasi diri dan menghilangkan gangguan-gangguan. Yuk dicoba.

 

Mencari Pertanyaan itu Sulit Juga

Saat ini era milenial sudah masuk ke segala bidang kehidupan mengikuti bertambahnya usia generasi Y yang lahir antara tahun 1981 hingga 1995. Generasi yang muncul akibat derasnya arus informasi menuntut generasi-generasi sebelumnya ikut gaya mereka yang mencintai segala informasi. Entah ada hubungannya atau tidak, saat generasi ini mulai beranjak dewasa istilah “KEPO” muncul, yang artinya sifat ingin tahu yang tinggi (KEPO=knowing Every Particular Object). Sifat yang membuat para guru kewalahan ini ada baiknya dimanfaatkan untuk hal-hal yang positif. Minimal keingintahuannya diakomodir dengan alat-alat bantu pembelajaran.

Untuk bisa klop dengan generasi ini tidak ada cara lain mengikuti gayanya yang kepo itu. Tidak ada yang salah dari sifat keingintahuan yang tinggi. Hanya saja tinggal diarahkan ke hal-hal yang bermanfaat/berguna. Kemampuan mencari pertanyaan di genenerasi ini ada baiknya ditiru oleh generasi-generasi sebelumnya yang telah lama diajarkan sesuatu yang setelah tahu, digunakan seterusnya. Padahal saat ini sesuatu yang diketahui saat ini, tidak lama kemudian akan digantikan oleh sesuatu yang baru lagi dan harus diketahui agar tidak tertinggal.

Pentingnya Bertanya

Saya sempat beberapa menit menyusun sebuah komposisi pertanyaan ketika tiba di negeri orang. Maklum banyak masalah ketika terpaksa studi lanjut di luar negeri, padahal komunikas satu-satunya hanya bahasa Inggris. Aneh juga, selama ini saya belajar bahasa Inggris menjawab pertanyaan-pertanyaan. Hampir tidak pernah diajarkan membuat pertanyaan, padahal di lapangan sering sekali pertanyaan harus dibuat. Einstein dikabarkan oleh ibunya ketika pulang sekolah selalu ditanya apa yang dia tanyakan ke gurunya ketika sekolah, bukan nilai atau materi pelajaran. Jika Anda telah mampu membuat pertanyaan yang tidak ada seorangpun yang menjawab, level Anda sudah masuk kategori calon doktor. Biasanya ujian kandidasi adalah mempresentasikan sebuah pertanyaan yang merupakan gap antara temuan terkini dengan yang saat ini dibutuhkan (teknik, metode, dan lain-lain).

Arah Pemikiran

Untuk menyelesaikan pekerjaan mental berupa penyelesaian masalah, diperlukan kombinasi kemampuan berfikir runtun dan acak. Namun tetap saja harus ada arahnya, dalam hal ini pertanyaan yang tepat. Semakin detil pertanyaan, semakin baik arah pemikiran seseorang. Hal ini yang perlu dibentuk ke generasi-generasi milenial yang jika tidak diarahkan hanya akan memiliki pemikiran yang banyak tetapi dangkal. Kita membutuhkan anak-anak muda yang memiliki pemikiran yang mendalam, bukan hanya luarnya saja. Memang lebih mudah mencari informasi dangkal karena tersedia secara instan di internet. Untuk hal-hal yang mendalam, kemungkinan perlu digali dari sumber-sumber lain yang baik dari sisi variasi, juga akurasinya (misalnya jurnal).

Pasangan Setia: Tanya dan Jawab

Sebagai contoh mudah adalah permainan catur. Pertama kali saya bingung, apa yang dilakukan orang bermain catur. Ternyata sederhana, menemukan pertanyaan kemudian merespon dalam bentuk jawaban. Yang repot adalah posisi yang sepertinya tidak ada solusi yang harus dijawab. Prof. Max Euwe, mantan juara dunia catur dari Belanda memberikan arahan yaitu memunculkan pertanyaan awal berupa apa saja “Ciri” bangunan saat ini, dilanjutkan dengan pertanyaan apakah bisa ber-“inisiatif”. Jadi dari awal hingga akhir isinya hanya pertanyaan dan menjawabnya, hingga ditemukan siapa yang paling mampu menjawab pertanyaan yang di level master (bukan catur jalanan) biasanya pertanyaannya sama. Sebagai ilustrasi, perhatikan partai di bawah ini, antara Grandmaster Milenial dengan Gen X yang seru. Sekian, semoga bisa menginspirasi.