4 poin oleh GN⁺ 2024-11-17 | 1 komentar | Bagikan ke WhatsApp
  • Berawal dari meminjamkan sebuah buku kepada seorang mahasiswa sebagai bacaan musim panas, Simon Dobson kembali menegaskan bahwa SICP adalah buku ilmu komputer yang paling besar memengaruhi karier dan minat risetnya
  • Berbeda dari pendidikan pengantar yang berpusat pada Pascal, buku ini berangkat dari nilai, nama, binding, dan kontrol untuk menunjukkan apa yang bisa menjadi bentuk pemrograman
  • Buku ini menghubungkan lambda abstraction, komputasi orde tinggi, stream, evaluasi malas, interpreter dan compiler, garbage collection, virtual memory, bahasa mesin, hingga bahasa spesifik domain di dalam Scheme
  • Pengaruh terbesarnya terletak pada desain berlapis yang menyusun sistem kompleks dengan berbagai lapisan bahasa, dan pada sudut pandang yang melihat ilmu komputer sebagai disiplin tentang “bagaimana melakukannya”, bukan sekadar “apa itu sesuatu”
  • Buku yang dibelinya pada 1988 ini masih layak dibaca ulang secara praktis pada 2010, dan SICP tetap menjadi buku dasar yang bertahan lama dalam ilmu komputer

Pertemuan pertama dengan SICP

  • Setelah meminjamkan Structure and Interpretation of Computer Programs kepada seorang mahasiswa untuk dibaca selama musim panas, Simon Dobson teringat bahwa buku ini baginya adalah karya yang paling mendasar di seluruh ilmu komputer
  • Judul resminya adalah Hal Abelson dan Jerry Sussman, Structure and Interpretation of Computer Programs, diterbitkan oleh MIT Press pada 1984 dan juga dikenal sebagai SICP
  • Buku ini masih terus diterbitkan, dan tersedia lengkap secara online
  • Dobson pertama kali mengenal buku ini sebagai bacaan yang direkomendasikan setelah menyelesaikan mata kuliah pemrograman pertamanya pada tahun kedua program sarjananya di Newcastle upon Tyne
  • Saat ia masih mencari arah dalam ilmu komputer, SICP menunjukkan kepadanya bukan “pemrograman pada masa itu” yang diwakili Pascal, melainkan bentuk-bentuk pemrograman yang mungkin

Konsep-konsep yang dibangun di dalam Scheme

  • SICP dimulai dari elemen dasar pemrograman—nilai, nama, binding, dan kontrol—lalu meluas ke topik yang sangat luas
    • lambda abstraction dan komputasi orde tinggi
    • struktur data kompleks yang memuat isi komputasi
    • modularitas, kemampuan untuk diubah
    • stream
    • evaluasi malas
    • konstruksi interpreter dan compiler
    • manajemen penyimpanan, garbage collection, virtual memory
    • bahasa mesin
    • bahasa spesifik domain
  • Cakupan yang dibahas begitu luas hingga terasa mengejutkan, tetapi tetap konsisten berkat cara menulis dan penyusunan para penulisnya
  • Secara khusus, semua konsep dibahas dalam satu kerangka bahasa, yaitu Scheme, sambil membangun konsep berikutnya di atas hal-hal yang telah dipelajari sebelumnya

Desain program melalui desain bahasa

  • Ciri kedua SICP yang sangat berpengaruh adalah bahwa Hal Abelson dan Jerry Sussman memandang segalanya sebagai latihan desain bahasa
  • Buku ini menekankan desain berlapis yang menyusun sistem kompleks dari berbagai tingkat bahasa
    • Setiap tingkat dibangun dengan menggabungkan komponen yang dianggap primitif pada tingkat tersebut
    • Komponen yang dibuat pada satu tingkat digunakan sebagai elemen primitif pada tingkat berikutnya
    • Bahasa pada setiap tingkat memiliki elemen primitif, sarana penggabungan, dan sarana abstraksi yang sesuai dengan tingkat detail itu
  • Abstraksi hierarkis sendiri sudah akrab bagi ilmuwan komputer, tetapi perbedaan penting di sini adalah pandangan bahwa setiap lapisan harus dapat diprogram
  • Dari sudut pandang ini, lapisan bukan sekadar mekanisme untuk menyembunyikan informasi, melainkan sarana untuk menangani komputasi dan transformasi
  • Dalam bahasa pemrograman arus utama, pelapisan seperti ini sulit berkembang menjadi perluasan bahasa itu sendiri
    • Java tetaplah Java dari atas sampai bawah; ada kelas dan pustaka, tetapi tidak ada struktur kontrol baru
    • Walaupun struktur bahasa khusus untuk domain tertentu bisa berguna, menambahkannya di dalam bahasa tidak mudah
    • Sebaliknya, meskipun ingin melarang penggunaan struktur tertentu pada sebuah domain, menghapusnya dari dalam bahasa juga tidak bisa dilakukan dengan mudah
    • Java-ME memang menghilangkan sebagian fitur agar dapat berjalan pada perangkat kecil, tetapi itu bukan sesuatu yang bisa dilakukan tanpa menulis ulang compilernya

“Bagaimana melakukannya” alih-alih “apa itu sesuatu”

  • Pengaruh penting ketiga adalah pandangan SICP tentang apa yang sebenarnya ditangani oleh ilmu komputer
  • SICP melihat revolusi komputer sebagai revolusi dalam cara berpikir dan cara mengekspresikan pikiran
  • Buku ini menjelaskannya sebagai procedural epistemology
    • Jika matematika klasik menyediakan kerangka untuk menangani “apa itu sesuatu” secara presisi
    • maka komputasi menyediakan kerangka untuk menangani “bagaimana melakukannya” secara presisi
  • Dobson pernah mengambil sudut pandang bahwa komputer itu seperti mikroskop jenis baru, yang membantu pendekatan lama sekaligus membuka ilmu pengetahuan baru
  • Sisi “bagaimana melakukannya” dalam ilmu komputer ini muncul kembali di berbagai bidang
    • penjelasan perilaku jaringan sensor yang dapat beradaptasi sambil terus mencerminkan fenomena yang terdistribusi
    • interpretasi data berskala besar yang ditambang dan digabungkan dari seluruh web
    • penangkapan untuk mengotomatisasi metode dan proses ilmiah
  • Kekayaan bidang-bidang ini mendorong integrasi melalui bahasa pemrograman alih-alih perangkat lunak paket, serta membuat antarmuka dan struktur tetap fleksibel dan dapat dieksperimenkan lewat bahasa seperti R

Mengapa buku lama ini masih tetap dibaca

  • Di bagian dalam buku Dobson tertulis tanggal pembelian September 1988, dan pada 2010 buku yang hampir berusia 22 tahun itu masih tetap relevan
  • Ia menilai SICP bukan sekadar menarik secara historis, melainkan hampir satu-satunya buku ilmu komputer seusia itu yang masih berguna untuk dibaca ulang
  • Dalam buku matematika, isi yang bertahan lama bukan hal langka, tetapi dalam ilmu komputer—yang idenya bergerak cepat dan dipenuhi topik sementara—hal itu sulit ditemukan
  • Fakta bahwa isi SICP hampir tidak terasa usang menunjukkan bahwa buku ini menangkap konsep inti ilmu komputer dengan sangat baik
  • Karena alasan inilah SICP menjadi salah satu dari sedikit buku ilmu komputer yang layak dibaca lebih dari sekali, dan dinilai sebagai buku yang, seperti Lectures on Physics karya Feynman dalam fisika, menyuling hakikat bidangnya menjadi sesuatu yang mudah diakses dan mampu bertahan terhadap ujian waktu
  • Dalam pembaruan 27 Januari 2024, buku ini juga dimasukkan ke annotated Lisp bibliography melalui entri Structure and interpretation of computer programs

1 komentar

 
GN⁺ 2024-11-17
Komentar Hacker News
  • “Klasik” seperti SICP berbicara tentang desain program, tetapi sekarang desain sistem tampaknya menjadi kemampuan yang jauh lebih penting
    Saya tidak tahu apakah sistem terdistribusi termasuk dalam “ilmu komputer”, tetapi dalam praktiknya itu adalah masalah yang jauh lebih sering harus diselesaikan
    Saya cenderung membuat sistem sesederhana mungkin, lalu menggunakan alat observabilitas untuk menemukan titik-titik yang desainnya kurang memadai, dan baru mengeluarkan struktur data atau solusi yang “bernuansa ilmu komputer” saat memang diperlukan
    Dalam kebanyakan kasus, notasi Big-O dan kompleksitas waktu eksekusi tidak terlalu penting, dan banyak masalah bisa diselesaikan dengan array dan CPU yang cepat
    Bahkan jika ada masalah performa, kita tetap harus lebih dulu menemukan bottleneck lewat profiling
    Ilmu komputer tidak terlalu mengajarkan bagaimana cache memori CPU bekerja
    Algoritme graf yang keren bisa saja punya kompleksitas waktu eksekusi yang baik, tetapi merusak cache CPU sehingga lebih lambat daripada array yang memanfaatkan cache dengan baik
    Masalah yang lebih umum di dunia nyata justru berkaitan dengan toleransi kegagalan, ketepatan distributed lock dan queue, serta skalabilitas sistem
    Mungkin saya bias karena berlatar belakang computer/electrical engineering

    • Untuk merancang sistem, Anda perlu punya sudut pandang implementasi, jadi meskipun Anda naik ke bagian atas rantai nilai dan mengerjakan desain, pengalaman di lapisan bawah tetap tidak bisa dilewati
      Cache memori CPU saya pelajari 30 tahun lalu pada semester pertama S1 CS lewat buku Hennessy dan Patterson, dan setahu saya itu masih dipakai sampai sekarang
      Toleransi kegagalan, distributed lock dan ketepatan queue, serta skalabilitas sistem juga dibahas di S1 CS, dan saya tidak punya latar belakang khusus di computer engineering/electrical engineering
    • CS dan pengembangan software di lapangan kini agak berbeda
      Masih ada pekerjaan membuat framework, engine database, dan alat version control, dan pekerjaan seperti ini menuntut pengetahuan CS yang mendalam seperti algoritme dan struktur data setiap hari
      Tetapi pekerjaan seperti itu lebih sedikit dibanding dulu, dan untuk aplikasi orang lebih sering memakai Postgres daripada mengimplementasikan sendiri engine DB
      Sebagian besar pekerjaan adalah mengimplementasikan business logic, dan meskipun memahami cara kerja internal database membantu menghasilkan hasil yang lebih baik, Anda tetap bisa membuat banyak software yang berfungsi tanpa tahu bagaimana indeks disimpan di disk
      Banyak lulusan CS keliru mengira pekerjaan mereka adalah menulis framework, padahal kenyataannya mereka memakai framework yang sudah ada dan mengimplementasikan business logic, sambil memakai latar belakang CS mereka untuk memahami framework tersebut secara mendalam
    • Secara tradisional, bidang database sangat berfokus pada penyelesaian masalah algoritme ketika berhadapan dengan data yang jauh lebih besar dan tidak muat seluruhnya di memori
      Data ada sebagai “page” di disk, dan RAM memiliki sejumlah tetap “slot page”
      Memindahkan page antara disk dan RAM itu lambat, jadi harus diminimalkan sebanyak mungkin
      Karena itu, masalah yang tampak sepele pun menjadi menarik. Dalam ilmu komputer klasik bahkan tidak ada konsep terpisah bernama “join”, karena itu dianggap tidak cukup rumit untuk diberi nama
      Mudah untuk menganggap riset algoritme sebagai esensi yang murni, tetapi efisiensi algoritme juga bisa dipandang hanya bermakna dalam konteks data dan hardware tertentu
      Itulah yang membuat pekerjaan ini menarik, dan karena Anda tidak bisa sekadar menerapkan library atau solusi ala buku resep di mana-mana, keahlian algoritme tetap berguna
    • Itu benar, tetapi saya rasa bukan hanya junior; programmer berpengalaman pun sering kesulitan pada coding tingkat taktis
      Saat ini saya sedang pusing dengan sebuah komponen yang mendapat perubahan kecil, karena state-nya terlalu banyak tanpa perlu dan ia menangani dua abstraksi sekaligus
      Ia memproses file sambil memakai file system dan database untuk penyimpanan state, dan saya benar-benar terkejut melihat betapa buruk desainnya
      Saya menghabiskan beberapa hari untuk menghindari sekadar menambal seperti sebelumnya dan membuatnya makin sulit dipahami
      Budaya pull request tampaknya membuat orang menyetujui sembarang kode tanpa ruang untuk benar-benar memikirkan kode secara mendalam
      Saya berharap code review tatap muka kembali
    • Saya penasaran apakah Anda pernah melihat Software Design for Flexibility: How to Avoid Programming Yourself into a Corner karya Chris Hanson dan Gerald Jay Sussman
      Tanggung jawab yang terbit pada 2021
  • Tautan ke salinan gratis artikelnya rusak
    https://mitp-content-server.mit.edu/books/content/sectbyfn/b...
    https://web.mit.edu/6.001/6.037/sicp.pdf
    Sampai hari ini saya belum pernah melihat versi PDF resminya
    Sekitar tahun 2001, yang tersedia gratis hanya versi HTML, dan seseorang mengonversinya ke TeXinfo: https://www.neilvandyke.org/sicp-texi/
    Jika ingin mengikuti SICP sekarang, Anda bisa menjalankan kodenya di MIT Scheme atau DrRacket: https://www.neilvandyke.org/racket/sicp/

    • Bagi yang ingin mencoba MIT Scheme, para maintainer saat ini tidak lagi menyediakan .dmg, tetapi MIT Scheme versi x86_64 bisa diunduh lalu dibangun
      Rilis saat ini (v12.1) berjalan di Mac Intel dengan Sequoia atau di Apple silicon melalui Rosetta
      Namun kompiler kode native-nya agak rusak, dan mungkin tidak diperlukan untuk SICP
      Sepertinya dulu masih berfungsi di macOS sebelum Monterey, jadi bisa jadi dependensi dari Apple berubah, tetapi saya belum menelusurinya
      Jika MIT Scheme tidak wajib dan Anda tidak ingin repot dengan proses kompilasi, Racket mungkin pilihan yang lebih baik
    • Sebagai catatan, saya merekomendasikan menggunakan Racket
      Setahu saya ada mode SICP yang eksplisit
      Saya pernah mencobanya dengan GNU Guile, tetapi ada perbedaan sintaks kecil antara Guile dan MIT Scheme sehingga cukup merepotkan
    • Jika ingin membacanya di browser, saya ingat versi TeXinfo menjadi sumber untuk versi HTML5 yang enak dilihat
      Formatnya lebih baik daripada versi asli MIT: https://sarabander.github.io/sicp/
    • Perlu diketahui bahwa “bahasa gambar” di bab 2 tidak didukung oleh MIT Scheme pada 2024
      Dulu ada paketnya, tetapi sudah hampir 20 tahun tidak dipelihara
      Sebaliknya, DrRacket memiliki paket khusus untuk menyelesaikan soal-soal tersebut
    • DrRacket menyertakan SICP dan HTDP sebagai paket pendidikan
  • Anda bisa menonton rekaman kuliah tahun 1986 ketika Abelson dan Sussman mengajarkan isi buku ini
    Penjelasan tentang cara membangun dan mengikat abstraksi di beberapa lapisan masih berguna bagi saya secara pribadi maupun saat membimbing orang lain
    Di videonya, itu ada di lesson 3A, menit 1:07:55
    https://m.youtube.com/playlist?list=PLE18841CABEA24090

    • Lelucon Kabbalah selalu lucu setiap kali didengar
    • Saat melihat video seperti ini, terasa menakjubkan bahwa orang-orang ini sama sekali tidak tahu apa yang akan datang di masa depan
  • The Elements of Programming Style layak dibaca tiga kali, dan saya sudah membacanya jauh lebih sering serta sangat terbantu olehnya
    Jika tertarik, ada ulasan yang saya tulis pada 2010: https://reprog.wordpress.com/2010/03/06/programming-books-pa...

    • Saya sempat mengira yang dimaksud adalah Elements of Programming karya Stepanov dan McJones, dan sejujurnya buku itu juga layak mendapat rekomendasi serta penilaian yang sama
      https://elementsofprogramming.com/
  • Bagian dari SICP yang paling saya sukai dan masih saya ingat selama bertahun-tahun adalah gagasan wishful programming
    Ini adalah cara membangun sesuatu dari atas ke bawah seolah-olah rutinitas tingkat rendahnya sudah ada
    Lalu Anda benar-benar membuat rutinitas tingkat rendah itu dan turun sampai ke dasar
    Menurut saya cara berpikir ini sangat cocok dengan pengembangan berbasis pengujian
    Anda menulis pengujian terlebih dahulu untuk kemampuan yang Anda harap ada, lalu pergi memenuhi harapan itu
    Kebanyakan pengembang tampaknya membangun dari bawah ke atas, dan akhirnya mendapatkan sesuatu yang tidak pernah diinginkan siapa pun

    • Alasan melakukannya dengan cara seperti itu adalah karena orang menginginkan performa dan kealamian
      Anda bisa tanpa sengaja menginginkan sesuatu yang sifat aslinya belum benar-benar Anda pahami, lalu berakhir dengan kekacauan rapuh di lapisan dasar
      Itu biasanya terjadi, karena sifat algoritmik dari banyak hal jarang terasa intuitif
      Memulai dari bawah seperti memulai dari quark yang benar-benar Anda miliki, bukan dari “andaikan sihir itu ada”
      Sihir itu tidak ada, dan ketika Anda mencapai dasar, yang ada bukan partikel sihir melainkan quark, dan dalam prosesnya Anda juga kehilangan petunjuk konteks yang membantu menerjemahkan antara dua fisika itu
      Kedua pendekatan sama-sama berguna. Untuk memecahkan masalah yang dalam, kadang kita memang perlu berani berharap
      Hanya saja secara pribadi saya lebih suka menempatkan sihir itu tepat satu lapisan di bawah puncak
      Caranya, bangun dulu dari bawah ke atas, lalu buat lapisan sihir kenyamanan yang saling menerjemahkan dengan bahasa bisnis tepat sebelum logika bisnis
      Dengan begitu, sistemnya bisa disetel dan tidak menjadi kekacauan yang kusut sampai ke bawah
    • Dr. Donald Knuth juga menggunakan pendekatan yang kurang lebih seperti itu saat membuat TeX
      Ia mula-mula menuliskan cara pemformatan/penandaan yang terasa tepat, lalu memikirkan cara pemrograman yang cocok untuk markup itu—yakni makro—dan setelah itu baru masuk ke implementasi
      Saya juga sedang mencoba pendekatan serupa untuk pekerjaan membuat pustaka yang memodelkan G-code di OpenSCAD
      Baru-baru ini saya menulis ulangnya lagi dalam OpenPythonSCAD yang “murni”, jadi semoga sekarang menjadi cukup layak pakai
    • Dunia Smalltalk mendukung pendekatan seperti ini dengan sangat baik melalui cara menulis kode dari dalam debugger
      Sebaiknya coba Pharo
  • SICP adalah buku terbaik untuk dibaca sebagai buku pertama saat mempelajari ilmu komputer
    Setelah bertahun-tahun memrogram sebagai hobi, membaca buku tentang pemrograman terstruktur, dan mengenal berbagai bahasa dari Pascal hingga Common LISP, saya menggunakan Abelson & Sussman di program sarjana ilmu komputer, dan itu benar-benar membuka wawasan saya
    Buku ini menunjukkan kesederhanaan, keindahan, dan interaktivitas Scheme, sekaligus mengajarkan bahwa ilmu komputer adalah pekerjaan menyusun berbagai jenis abstraksi secara berlapis-lapis
    Dimulai dari abstraksi prosedural dan abstraksi data, lalu berlanjut hingga mendefinisikan bahasa spesifik domain sendiri, mengimplementasikan kompiler-nya, dan bahkan mendefinisikan perangkat keras baru di dalam perangkat lunak
    Semuanya terlihat begitu alami, dan hanya seorang maestro sejati yang bisa membuatnya tampak seperti itu
    Tetapi, Anda harus membeli edisi ke-2, bukan edisi pertama atau edisi yang lebih baru
    Edisi terbaru menggunakan Python alih-alih Scheme, dan itu kurang bagus

  • Saya benar-benar ingin menyukai SICP, tetapi Lisp justru menjadi penghalangnya
    Saya menyukai Haskell dan Standard ML
    Saya penasaran apakah ada orang lain yang punya pengalaman serupa
    Akan menarik jika ada buku yang semangatnya mirip dengan SICP, tetapi menggunakan bahasa lain sebagai mediumnya
    Saya tidak ingin mempelajari SICP dalam JavaScript

    • Anda mungkin tertarik pada tulisan tahun 1987, A Critique of Abelson and Sussman or Why Calculating is Better than Scheming: https://dl.acm.org/doi/10.1145/24697.24706
      Penulisnya mengusulkan penggunaan KRC atau Miranda sebagai alternatif Scheme
      Saya tidak terlalu tahu soal KRC, tetapi Miranda adalah bahasa pemrograman fungsional bertipe statis yang memengaruhi Haskell
    • SICP bukan buku tentang Lisp, tetapi buku ini menggunakan sifat khas Lisp untuk menunjukkan konsep-konsep penting yang sulit direproduksi dengan mudah dalam bahasa lain
      Jika ada buku mirip SICP yang tidak menggunakan Scheme atau Lisp, maka buku itu akan sangat berbeda dari SICP, atau setidaknya tidak akan bisa mengajarkan hal yang sama
      Dari pengalaman saya, Haskell dan ML jauh lebih sulit dipahami daripada Scheme, jadi saya penasaran bagian mana yang terasa sulit bagi Anda
    • Saya benar-benar ingin menyukai SICP, dan kalau saya membacanya 15 tahun lalu, saya rasa saya akan menyukainya
      Saya mulai membacanya bulan lalu, tetapi terasa membahas terlalu banyak hal secara luas
      Terlalu banyak prinsip matematika menarik yang hanya disapu sekilas, lalu saat mulai terasa seru, buku itu sudah berpindah ke topik berikutnya
      Dengan kata lain, terlalu dangkal
      Kalau dipikir-pikir lagi, tidak membantu juga bahwa saya sudah melihat banyak kuliah atau dokumen turunan dari SICP, jadi setiap kali suatu topik diperkenalkan, saya merasa, “oh, ini lagi”
    • Saya paham perasaan itu. Lisp membuat saya menjauh, dan itu karena saya tidak cukup pintar
      Meski begitu, saya tetap memaksakan diri menyelesaikannya, dan justru karena saya tidak cukup pintar untuk menangani Lisp, saya belajar luar biasa banyak
      Karena saya menghabiskan begitu banyak waktu hanya untuk membaca kodenya, rasanya saya malah belajar lebih banyak dibandingkan jika saya memakai bahasa yang sudah familier
      Ada juga versi Python dari SICP
      Saya sendiri belum benar-benar menyelesaikannya dan hanya melihat-lihat sekilas, jadi ini bukan rekomendasi, tetapi saya tinggalkan tautannya sebagai bukti bahwa itu memang ada
      https://wizardforcel.gitbooks.io/sicp-in-python/content/0.ht...
    • Functional Programming in Scala, alias Red Book of Scala, menurut saya adalah buku yang mengajarkan cara berpikir ala SICP sambil menggunakan bahasa bertipe
      Di rak buku saya, kedua buku itu juga berdiri berdampingan, dan jelas layak dibaca
  • Saat membaca untuk kedua kalinya, saya menggali catatan kaki dan daftar pustakanya, dan di sana pun ada dunia besar yang indah
    Kalau saya ingat dengan benar, ada makalah tentang Sussman dan timnya yang merancang prosesor terprogram khusus untuk menghitung sifat benda langit, yaitu lintasannya
    Seperti biasa, isinya benar-benar membuat kepala berputar

  • SICP membantu saya memahami sejak awal bahwa ada banyak model pemrograman, ketika di jenjang sarjana saya baru mempelajari sejumlah model yang terbatas
    Ini adalah salah satu buku yang memberi saya rasa percaya diri bahwa saya bisa menemukan arah saat membaca dokumentasi bahasa, pustaka, atau framework apa pun

    • Salah satu kelas pemrograman terbaik yang pernah saya ambil di kampus adalah mata kuliah bahasa pemrograman komparatif yang membahas banyak bahasa, masing-masing sekitar dua minggu
  • Di samping SICP, saya juga menaruh seluruh seri The Little * sebagai bacaan yang layak dibaca dua kali atau lebih
    Types and Programming Languages juga bagus
    Untuk pekerjaan yang saya lakukan, itu adalah ilmu komputer yang dapat diterapkan, tetapi tidak cukup hanya dibaca, harus juga diimplementasikan
    Jika tidak diulang, sebagian akan terlupakan
    Secara pribadi, mungkin juga karena saya mengenal dan menghormatinya, saya cukup sering membaca ulang buku dan makalah Dijkstra
    Sekarang memang sulit diterapkan secara langsung, tetapi baik untuk melatih otak, dan menurut saya pribadi dia adalah penulis yang hebat