EP 79

Ngobrolin Buku "Refactoring to Collections" - Ngobrolin WEB

Bagikan:

Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. Topik, tautan dan pertanyaan menarik bisa dilayangkan ke https://ksana.in/ngobrolinweb Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.

Ringkasan Episode

Bantu Koreksi

Episode ini membahas buku "Refactoring to Collections" karya Adam Wathan, seorang pengembang yang dikenal luas sebagai pencipta Tailwind CSS. Pembahasan diawali dengan latar belakang ketertarikan Ivan terhadap kode yang clean dan maintainable, di mana ia memiliki prinsip bahwa dalam tim bekerja, setiap orang harus dapat digantikan (everyone is replaceable) dan tidak boleh ada "superhero" yang bergantung pada satu orang saja. Buku ini menarik perhatian karena mengajarkan konsep menulis kode tanpa loop dan conditional statement yang berlebihan, mengarah ke gaya pemrograman yang lebih deklaratif daripada imperatif. Buku ini juga menonjol karena menggunakan contoh production code yang nyata, bukan sekadar contoh "Hello World" atau "Animal extends Dog" yang kurang praktikal. Selain membahas inti isi buku yang mencakup penggunaan higher-order function seperti map, filter, dan reduce untuk mengubah kode menjadi lebih bersih dan mudah dipelihara, episode ini juga membahas topik pembelajaran dari buku secara umum. Para pembicara dan audiens sepakat bahwa buku sangat cocok untuk topik-topik "evergreen" yang tidak cepat berubah seiring waktu, seperti konsep dan pola berpikir dalam pemrograman, berbeda dengan tutorial framework yang sering berubah setiap beberapa bulan. Episode ini ditutup dengan rekomendasi buku-buku lain yang menarik seperti "The Phoenix Project," buku-buku karya Adi Osman, serta "Halo Coding" karya Hilman, dengan harapan episode bedah buku ini dapat dilanjutkan secara rutin untuk meningkatkan literasi dan memberikan perspektif baru dalam pembelajaran pemrograman.

Poin-poin Utama

  • β€’Refactoring ke Collection - Mengubah kode imperatif dengan loop dan conditional bertingkat menjadi pendekatan deklaratif menggunakan method collection seperti filter(), map(), dan reduce() membuat kode lebih mudah dibaca dan dimaintain.
  • β€’Kode untuk Manusia - Menulis kode bukan hanya untuk mesin, tapi terutama untuk manusia (diri sendiri dan tim). Kode yang mudah dipahami mengurangi WTF per menit saat membaca dan mempermudah kolaborasi tim.
  • β€’No If, No Loop - Prinsip Never Write Another Loop mengajarkan menghindari explicit for/while loop dan if-else bertingkat. Sebagai gantinya, gunakan higher-order function dan method chaining yang lebih ekspresif.
  • β€’Everyone is Replaceable - Dalam tim kerja, tidak boleh ada superhero yang bergantung pada satu orang. Kode harus ditulis dengan standar yang memungkinkan siapapun untuk mengambil alih dan melanjutkan pekerjaan.
  • β€’Make it Work, Make it Beautiful - Definition of done bukan hanya kode berjalan, tapi juga kode yang sudah rapi dan refactored. Proses: tulis imperatif dulu (make it work), lalu refactor menjadi deklaratif (make it beautiful).
  • β€’Early Return dan Konsistensi - Teknik seperti early return, satu tipe data return, dan konsistensi code style membantu mengurangi kompleksitas kognitif saat membaca kode.
  • β€’Menulis Kode Hanya 25% - Dari 100% waktu development, hanya 25% untuk menulis kode, 50% untuk berpikir/imajinasi, dan 25% untuk testing. Refactoring adalah langkah penting setelah kode berjalan.
Transkrip Bantu Koreksi

0:00(musik)

0:10(tingting)

0:13Selamat malam!

0:16Hello, selamat malam!

0:17Bertemu lagi dengan kita bertiga di hari Selasa Malam.

0:22Trio web-web Selasa Malam.

0:25Karena Selasa Malam waktunya ngobrolin web.

0:31Udah lama kita gak opening ya, kemarin kemarin kita gak pernah opening lagi.

0:36Masa sih?

0:37Waktu di, minggu lalu?

0:40Udah, udah.

0:41Kayaknya enggak deh, enggak ada ngobrolin web yang janjian bareng-bareng gitu, enggak ada.

0:46Selasa Malam waktu nyobrolin gue.

0:48Hei, ada Adrian, halo, halo.

0:50Waktu itu gue bukan Selasa Malam, gue Selasa Sia.

0:52Iya, oh, udah kembali ya, udah kembali ke...

0:56Udah kembali ke...

0:57Udah selesai, sudah ke ruang kerja.

1:01Ruang, ruang bekerja kembali ya.

1:05Kalau di sana, oleh-olehnya apa ya?

1:11(tertawa)

1:13Mbak Pia.

1:15Mbak Pia.

1:17Mbak Pia, yang pemutin.

1:19Kok mute, Ivan.

1:21Cek sound, cek sound.

1:22Aman.

1:24Apa tadi?

1:26Soalnya aman.

1:28Soalnya aman?

Lihat transkrip lengkap

1:30Soalnya bagus.

1:32Oleh-olehnya itu, Baklava.

1:36Oh iya, Baklava itu sana.

1:38Ya kan, Yunani dan Turki masih ya...

1:44Mediterania ya.

1:46Pernah dijajah lah.

1:48Jangan dulu ya.

1:50Pernah dijajah sama...

1:52Pers ya?

1:54Pers ya.

1:56Benar-benar.

1:58Kalau makanan asal itu baklava ya?

2:00Ya, campur-campur lah.

2:02Ada baklava-nya, pastry-nya, ada baklava, ada olive oil, banyak banget olive oil.

2:08Olive oil?

2:10Oke.

2:12Has, yang has sana?

2:14Madu.

2:16Nah itu juga has.

2:18Madunya enak.

2:20Hello Audi, bot-nya belum nyalah, mau di nyalahin bot-nya?

2:24Jangan, nanti rusuh.

2:26Emang ada bot apaan?

2:28Nggak, gue kemarin bikin bot kan buat Pak YouTube chatbot.

2:32Jadi kalau ada yang komentar, dia langsung bales komentar gitu.

2:38Wow.

2:40Tapi langsung 30 dolar.

2:42Selesai live streaming langsung 30 dolar.

2:44Live streaming 2 jam.

2:46Berat.

2:48Karena dia standby terus.

2:50Iya, harusnya dilingit ya.

2:52Request inilah.

2:54Request credit lah, kan?

2:56Iya kan masih credit, 30 dolarnya masih potong credit.

2:58Cuman ngeri juga, kalau sekali live streaming 30 dolar kan.

3:00Cuma kalau bisa, kalau ke depannya selalu nyalah, berat.

3:06Paling di random, kalau ada yang komen, di random dulu 1-10 kalau dapat nilai sekian gitu kan.

3:1250 persennya dibales, 50 persen nggak dibales misalkan.

3:16Iya, tiap 15 minit sekali, suruh baca semua komentar.

3:20Terus tering aja satu yang perlu dibales.

3:26Akal-akalan.

3:28Biasanya mati lagi, tidur lagi 15 minit.

3:32Kalau sekarang masih manual, dimatiin dulu.

3:34Nanti kalau misalkan udah diskusi, kita nyalahin lagi.

3:38Oke, jadi seperti biasa malam hari ini kita akan ngobrol santai.

3:44Dan malam hari ini agak berbeda ya.

3:48Ada seri baru.

3:50Kita coba apa ya?

3:52Bukan topik ya.

3:54Kita explore.

3:56Kategori topik baru.

3:58Yang sebenarnya udah cukup lama kita pengen bahas.

4:04Tapi baru kesampaian sekarang.

4:06Mudah-mudahan nanti setelah ini ada buku yang menarik yang bisa kita bahas.

4:14Dan malam hari ini kita akan bahas salah satu buku yang favoritnya Ivan ya.

4:22Mungkin boleh diceritakan dulu, latar belakang.

4:28Kenapa dulu memilih untuk membaca buku ini.

4:34Mungkin bisa buka websitenya kali ya.

4:39Kan ada landing page-nya dia kan ya.

4:42Faktoring to collection-nya si Mas Adamuatan.

4:47- Mas Adamuatana. - Ya jadi justru seri ini kita bedah buku ya.

4:51Kalau bisa sih.

4:53Berharapnya ke depannya kita juga gantian buku yang kita masing-masing suka.

4:59Sama temen-temen di chat kalau ada yang punya buku favorit.

5:03Mungkin misalnya buku ini bagus banget.

5:07Bikin issue aja di GitHub ya.

5:11Bikin discussion deh.

5:13Ya jadi saya suka, maksudnya waktu pertama kali lihat buku ini,

5:19"Wih kok keren."

5:21Maksudnya saya suka dengan kode yang clean.

5:26Clean dan bersih.

5:28Suka dengan kode yang bisa di-maintain.

5:32- Jadi nggak perlu... - Nggak ngerepotin orang.

5:39Dan nggak ngerepotin diri kita sendiri.

5:42Saya punya prinsip satu, kalau kerja dalam tim,

5:47itu prinsip utama saya semua orang harus bisa di-replace.

5:51Termasuk saya.

5:53Everyone is replaceable caranya ya.

5:56Jadi saya nggak mau tim bergantung dengan saya

6:00atau saya bergantung dengan seseorang gitu.

6:04Atau biasanya super hero.

6:06Saya nggak mau ada super hero yang di dalam tim.

6:08Biasanya bentuk tim itu seperti itu.

6:11Jadi tercermin ke dalam bentuk kode-kode yang saya pekiakan.

6:22Sebisa mungkin kodenya gampang di-maintain ya.

6:27Mungkin nggak mesti super clean code.

6:30Apa bahasanya ya?

6:32Kayak bukan clean code trick gitu.

6:35Cara clean code gimana nggak.

6:37Tapi yang penting bisa di-maintain.

6:39Jadi kalau misalnya saya baca kodenya itu mengerti.

6:42Dan mudah dipahami.

6:44Dan bisa saya lanjutkan kalau ada bug.

6:51Contohnya.

6:54Salah satu basicnya saya kalau dalam menulis kode itu pertama early written.

7:04Kedua, less conditional dan less looping.

7:08Kalau bisa loopingnya di higher order function yang kita bahas.

7:12Indah.

7:14Jadi tetap ada tetapi nggak kelihatan.

7:16Caranya berbeda.

7:18Di abstraction.

7:20Iya.

7:22Dan salah satu.

7:24Dan begitu saya lihat buku ini.

7:26Never write another loop again.

7:28Woh, langsung.

7:30This is it.

7:32Saya suka banget kode yang tanpa if dan tanpa loop.

7:36Jadi itu konsepnya.

7:40Nah.

7:42Dan siapa yang nggak tahu Adam Wetan?

7:46Siapa yang nggak tahu Adam Wetan?

7:48Dari dulu kiprahnya di dunia persilatan.

7:50Sudah cukup terkenal.

7:54Tapi buku ini setelah dia mengeluarkan Tailwind atau sebelumnya?

7:58Tailwind, sebelum, jauh.

8:00Sebelum kan, jauh kan.

8:02Nah itu malah tadi lumayan surprise juga.

8:06Lihat lho, ini kan mas-mas Tailwind.

8:08Tiba-tiba ngomongin functional programming.

8:10Wow.

8:12Ini jauh sebelumnya.

8:14Nggak mendorongin dia.

8:16Ternyata track recordnya dia itu juga ya.

8:19Produktif dan versetil.

8:23Kayak bukan soal CSS library doang.

8:27Saya beli buku ini 2019 atau 2018.

8:31Jadi sudah 6 tahun yang lalu.

8:37Tapi ilmu yang saya dapat dari sini masih terus saya pakai dan konsep berpikirnya.

8:44Ini evergreen lah.

8:46Evergreen.

8:48Ini topik-topik yang kayak gini yang cocok sekali dijadikan konten, evergreen.

8:55Terutama konten programming ya.

8:57Karena ke programming kalau kita bikin tutorial Laravel atau Express atau apa-apa.

9:03Next.js routing.

9:05Setiap tahun next.js routing berubah.

9:07Setiap 6 bulan sekali harus update kan.

9:09Kalau yang evergreen seperti ini itu long-lasting.

9:13Jadi ya update-nya nggak perlu sering-sering.

9:16- Ya mungkin butuh ada revisi. - Karena ini ajarin cara berpikir.

9:19Ya sinteksnya kan bisa aja berubah setelah beberapa tahun atau sinteks berubah.

9:23Tapi tadi sih dari hasil skimming sekilas doang.

9:26Mungkin nanti event bisa lebih deep dive.

9:28Ini kan yang diajarin mental modelnya atau cara berpikirnya.

9:33Apa yang perlu di abstraksi.

9:35Biar di fungsinya pas kita panggil tuh nggak banyak loop, nggak banyak kondisional.

9:43Kayak apa aja yang harus di abstraksi dan level-level tingkat-tingkat abstraksinya gimana.

9:48Nah itu kan awet ya.

9:49Maksudnya walaupun meta framework berubah, sinteks bahasanya berubah tetap bisa dipakai.

9:55Ya, jadi mungkin si Mas Adamuatan ini kan terkenal di dunia UI dan CSS kan ya.

10:03Tapi sebelum itu dia lumayan, dia bertumbuhnya di komunitas PHP ya kalau nggak salah ya.

10:11Ya, ekosistem Laravel kayaknya ya.

10:13Laravel, dia Laravel.

10:15Laravel ya.

10:16Dan dia juga sempat yang saya lihat itu pernah lihat trailernya itu dia bikin screencast tentang test driven development pakai Laravel.

10:27Itu juga menarik.

10:28Terus sama buku ini dan kemudian setelah ini baru dia bikin buku yang namanya Refactoring UI.

10:36Nah dari situlah muncul inspirasi untuk Tailwind kalau nggak salah.

10:41Jadi dia bikin buku, judulnya depannya kudua Refactoring ya.

10:46Refactoring to collections, Refactoring UI.

10:50Ya, ntar lagi dia bikin buku Refactoring Yourself, buku itu soft skill.

10:55Self development, motivasi.

10:59Motivasi.

11:01Dia jadi motivation speaker itu loh.

11:05Nah selanjutnya mau bedah bukunya atau mau intisarinya.

11:12Karena saya pernah bikin presentasi untuk intisarinya.

11:15Oh boleh.

11:17Kalau ngeliat sekilas dafarisinya itu sangat fungsional sekali ya.

11:25Ini boleh dilihatin.

11:27Sangat mudah dipahami.

11:30Saya baca ini ya. Nggak sampai 3 jam saya baca ini, selesai.

11:37Habis gitu.

11:38Iya.

11:39Berarti bikin ini dong, bikin penasaran gitu.

11:43Sampai kita bisa nerapin kan tetap butuh waktu kan ya.

11:46Iya.

11:47Maksudnya kalau cuma ngapain buku kan cepet.

11:50Cuma pas kita nerapin dikodingan kita sendiri kan,

11:53mesti mikir dulu buat apa, nge-matching apa yang diajarin di sini kan.

11:58Betul.

12:00Ya kan kayak imperative, declarative kita udah pernah bahas.

12:03Higher order function juga udah pernah bahas.

12:05Map filter reduce juga udah bagian dari fungsional programming.

12:09Padahal sebelumnya kita bahas OOP ya, episode sebelumnya.

12:12Terus yang bagus itu transforming data itu loh, thinking in steps.

12:16Oke oke oke.

12:19Langsung habis itu praktek.

12:29Kalau beli paketnya, itu sekalian ada screen casenya juga dia ngajarin.

12:36Iya ada videonya ya, jadi yang kita dapat itu ada view the package.

12:42Ada 2 paket, ada yang mau bukunya saja, atau yang mau...

12:48Ada yang premium.

12:50...screen casenya, jadi saya beli yang atas.

12:52Ada yang plus, ya plus buku.

12:54Dulu nggak semahal ini loh.

12:56Dulu nggak semahal ini, karena...

12:58Ya kan setengah harga naik.

12:59Selasa ngobrolin.

13:01Bukan, dulu itu ada purchasing parity-nya di Gumroad.

13:04Jadi saya dapat disk-nya 60%.

13:08Itu di-click kayaknya ke Gumroad deh.

13:13Dan saya dapat purchasing parity 60%.

13:20Ini enaknya tinggal di negara dunia ketiga ya.

13:25Tapi udah nggak ada purchasing parity lagi ya?

13:28Iya mungkin, nggak tau ya.

13:32Dulu saya beli yang murah kok.

13:34Jadi saya beli dulu ini bukunya.

13:36Kalau buku punya doang berapa nih?

13:3839 ini ya kalau buku punya doang, 39 dolar.

13:40Dan itu pun di-score 60% karena purchasing parity.

13:44Eh belum tentu, sekarang masih apa nggak?

13:46Nggak, masih pasang duit.

13:48Oh Ivan, beli yang mana?

13:50Yang paling atas.

13:52Oh paling atas, yang paling mahal ya?

13:54Iya.

13:55Tapi karena dulu nggak semahal ini.

13:57Iya, iya, iya.

13:59Nggak 2 juta juga.

14:01Nah, yang menarik lagi dari buku ini adalah yang saya lihat ya.

14:05Ini nih, ada source code yang sudah di jalan di production.

14:11Itu kan agak apa ya, berbeda unik gitu.

14:14Maksudnya nggak semua buku bisa menyediakan itu.

14:17Kadang-kadang buku atau tutorial kan cuman contohnya,

14:21contoh apa ya, contoh dummy gitu loh.

14:24Bukan contoh yang production code gitu.

14:26Iya, contohnya Hello World atau biasanya Restoran.

14:29Kita kemarin sih yang OOP itu kelas semua contohnya animal, dog, plus cat, extent, animal.

14:38Kurang praktikal gitu.

14:40Kalau ini kan ada contoh dari production code gitu kan,

14:44kita bisa lihat juga code yang delete-nya seperti apa,

14:46terus direfactoring jadi bagus.

14:48Yang menerapkan apa hal-hal yang diajarin di buku ini.

14:51Itu yang mahal menurut saya.

14:53Mencari code production yang tidak terlalu bagus,

14:56kemudian bisa direfactoring.

14:58- Itu dia bikin sendiri kali. - Oh iya, bisa jadi sih.

15:04Dia yang bikin cuma dengan pola pikir yang diajarin di situ.

15:10Cuma itu juga menarik sih.

15:12Sekarang gue jadi tertarik dari segi content creation-nya.

15:17Dia ngajarin suatu konsep, kan dia nggak ngajarin sintaksinya sendiri ya?

15:21- Dia lebih ngajarin konsep. - Dia ngajarin konsep cara berpikir.

15:28Sampai bisa jadi production code.

15:31Nah, itu yang mahal.

15:33Itu yang mahal, betul.

15:36Boleh, Ivan langsung summary?

15:39Summary, summary.

15:42Intisari, enak nih.

15:45Kita nggak perlu baca ya, perlu tetap ya.

15:47- Bisa baca nanti. - Bisa baca nanti.

15:51Cuma kisi-kisinya dulu.

15:54Entire screen aja lah ya biar simple hidup saya.

16:01Share.

16:04Bahkan dulu saya masih di-ten up waktu masih ngasih topik ini

16:14dan di PHP Indonesia.

16:18- Oke. - Itu masih ke-biasaan sekarang?

16:22Masih.

16:24- PHP Indonesia masih. - Masih, masih.

16:28Oke.

16:31Pertama, tentunya saya kasih gabar spaghetti code.

16:36Topiknya tentang bagaimana mengubah kodonya menjadi lebih baik.

16:40Kalau refactor into collection topiknya,

16:42mungkin pada nggak ngerti, tapi kalau saya ngasih kata clean code,

16:45orang lebih mudah memahami.

16:47Langsung ada bayangan.

16:49Spaghetti code biar nggak ruput ya, biar nggak ruput.

16:54Terus saya kasih contoh, ini production code ya.

16:56Yang pernah saya pakai dan yang nulis tim saya.

17:02Bentuknya begini.

17:05Oke, kita baca pelan-pelan ya.

17:08Ini saat itu yang nulis seorang senior di perusahaan yang saya pimpin.

17:16Dan dia menuliskan sebuah function untuk mengambil value sesuatu

17:22dari scraping bahasanya, dari sebuah bank.

17:28- Dari web? - Untuk web bank.

17:31Yang untuk mengambil saldo kalau sudah dibayar apa belum.

17:34Jadi dia masukin username, password, submit, dapet saldo, diambil gitu ya.

17:42Ya betul.

17:44Dan yang dia lakukan seperti ini.

17:46Di dalam mungkin ada core blablabla di sini ya.

17:50Masukin form, input, blablabla gitu ya.

17:53Terus output-nya dia ambil di regex.

17:57Terus new result 6, new result 8.

18:01Terus di looping, di dalam looping ada if.

18:05Di dalam if, asli ada if.

18:07Terus kemudian else.

18:09Terus kemudian if lagi.

18:11Terus kemudian if lagi, else lagi.

18:14Else, terus-terus.

18:17- Ini berapa level ya? - Oh ini panjang banget ini.

18:22Kalau saya nggak saya truncate,

18:26ini mungkin panjangnya bisa 200-400 baris ini kalau nggak salah saya.

18:31Pertanyaannya siapa yang bisa maintaining gitu.

18:35- Pak, orangnya sendiri aja kalau udah ngerjain project lain 1 bulan nih.

18:40Ditinggal 1 bulan, dijamin ya.

18:42Kalau ketemu lagi.

18:44- Apa ini gitu ya.

18:47Terus saya nggak ngerti ya.

18:50Terus saya bilang, saya kasih contoh ini the only valid measurement

18:56untuk code quality adalah jumlah WTF per menit gitu ya.

19:00Jadi tugas saya waktu memimpin lead atau tim itu

19:06adalah mengubah spaghetti code menjadi indome code.

19:10Lebih enak kan.

19:12- Indome kan ribetnya.

19:16- Tapi lebih enak, lebih selera Nusantara ceritanya.

19:20- Bubur ayam kok lah.

19:23- Bubur ayam, ancur tuh kodenya.

19:26- Terus saya ambil contoh, ini contoh dari buku ya.

19:30Contohnya karena ini nggak ada animasi,

19:34harusnya pertanyaannya apa yang bisa kita improve dari fungsinya ini.

19:41Terus saya klik, pertama kali bisa kita improve tentu kita bikin camel case.

19:48Atau snake case, up to you lah bagaimana mau code styling kalian ya.

19:53Mau camel case atau mode code style.

19:55Yang penting kalau code stylingnya ngambil satu, setujunya satu.

20:00- Harus sama semua.

20:01- Harus sama semua, konsisten.

20:03Seluruh code base konsisten.

20:05Mau camel case, camel case.

20:07Mau snake case, snake case.

20:09Kalau di WordPress, snake case.

20:11Nah, kita bisa ganti ini jadi camel case.

20:14Kan jadi lebih enak bacanya, ya kan?

20:17Lalu, ini throw di sini buat apa?

20:21Ada gunanya kan.

20:24If else, buat apa? Throw gitu ya.

20:27- Oh iya, bawahnya ada return.

20:29- Nggak perlu, apus.

20:33Lebih bersih sedikit ya.

20:35Lalu supaya sama returnnya.

20:40Jangan satu returnnya array, satu returnnya nul.

20:44Kan susah.

20:45Bukan nggak boleh, tetapi sebisa mungkin konsisten.

20:49Karena get user emails.

20:51Dihindari kalau bisa satu data type lebih mudah nanti ngeceknya di ujungnya.

20:58Yang saat kita gunakan.

21:00- Pada saat pakenya, ya. Pada saat eksplosinya.

21:02- Jadi kita bisa pakai array kosong aja.

21:05Kalau memang nggak dapat ya.

21:07Jadi selanjutnya.

21:09Oh ya, function ini tujuannya adalah mengambil emailnya saja dari object user.

21:17- Dari array budisi object user.

21:19- Iya, itu tujuannya ya.

21:21Oke, terus.

21:24Ini kan kita bisa bikin alerated ya.

21:27Nggak perlu bikin padat-padat begini, ya kan?

21:30- Kalau user kosong, langsung return array.

21:34- Kalau user kosong, kita return empty aja.

21:37Terus kita balik.

21:38Kita proses dan return emailnya.

21:41Terus emailnya kalau nanti ternyata for loopnya ini kosong,

21:44ya udah, emailnya kosong.

21:46Kan lebih pasti kodenya.

21:49Oke, selanjutnya apa?

21:51Kita, ini kan bisa pakai for each ya.

21:54Nggak perlu, ya ini.

21:57- Style-nya.

21:58- Style ya, bisa mau pakai for.

22:00Kata-katanya sih for lebih cepat daripada for each.

22:02Tetapi dalam hal ini supaya gampang dibaca,

22:04saya pakai for each.

22:06Lebih, eh, lebih simple.

22:09Sedikit, ya.

22:11Nah, terus kemudian imperative versus declarative.

22:15Seperti yang pernah kita bahas, imperative itu lebih fokus,

22:19kode kita lebih fokus bagaimana langkah-langkahnya,

22:24sedangkan declarative fokus apa yang kita mau capai.

22:27Contohnya SQL query itu...

22:29- Itu deklaratif.

22:31- Itu deklaratif.

22:32Jadi lebih apa yang kita mau capai, bukan langkahnya.

22:35- Yes.

22:36- Nah, ini imperative programming.

22:39Oke, terus kita lanjut ya.

22:45Bagaimana kita bisa menuju nanti deklaratif.

22:47Terus kemudian,

22:49kondisional ini, kita bisa kita roboh pakai area filter sebenarnya.

22:57- Iya.

22:58- Ya kan?

22:59Jadinya seperti ini.

23:01Kita cari tahu,

23:03kalau user-nya punya email,

23:06dimasukin ke area email.

23:08Begitu doang, ya kan?

23:10Kalau user-nya, jadi user yang nggak punya emailnya nggak perlu dicek.

23:14Sesederhana itu.

23:16Yang kita cek itu user yang punya email.

23:19Lalu, ini kan kita bisa jadi area map.

23:22Kita sudah filter user yang punya email dan kita mapping ke...

23:26ambil emailnya saja.

23:28- Berarti email sama dengan...

23:30- Jadi emails beres sebenarnya, kan?

23:34Nah, hasil akhirnya seperti ini.

23:37Terakhir, ya tentunya kita bikin...

23:40Oke, jadi kalau misalnya kita sudah bikin yang koda di bawah tadi.

23:48Tentu loop-nya ini atas nggak perlu,

23:50karena kalau misalnya filternya ini kosong,

23:53dan di area map juga kosong,

23:56ya pastinya ujung-ujungnya kosong.

23:58- Area kosong, ya.

24:00- Iya, nggak perlu lagi.

24:02Nice, no if, no loop.

24:04Ya kan?

24:06- No loop.

24:08- Terakhir, tambahin...

24:10PHP doc.

24:13Inline doc.

24:15Iya, PHP doc.

24:17Supaya tampang dibaca.

24:19Happy?

24:21Tentu saja belum.

24:23Nah, kan tujuannya kita tadi adalah...

24:26mau deklaratif, seperti ini.

24:29Sebenarnya, kalau di MySQL kan...

24:31"Select email from user what email is not known."

24:33Sama tadi kode yang tadi itu seperti ini contohnya.

24:36Lalu, apa yang bisa kita lakukan?

24:39Makanya tadi kita bisa pakai si...

24:42collection-nya si Laravel.

24:45Tapi ini bukan beratik harus pakai collection-nya si Laravel ya.

24:49Ada banyak collection yang lain.

24:51Ini cara berpikirnya saja.

24:54Yang maksudnya nanti pakai yang namanya...

24:58chain function di chain.

25:01Nah, jadinya seperti ini kode Laravel.

25:05Jadi, collect itu...

25:08mengubah user itu jadi collection.

25:11Iya kan?

25:13Mengubah ini jadi collection.

25:16Dia sudah jadi collection nih.

25:18Terus di filter.

25:20Terus di chaining lagi, di mapping.

25:22Beres, jadi satu...

25:25satu...

25:28satu line.

25:30Beres, jadi dan kode ini udah pasti.

25:33Orang kayaan.

25:36Nah, dan collection ini gak cuma punya Laravel, once again.

25:41Kalau misalnya kalian stop di area map, area filter,

25:44dan kemudian mau di chaining pakai...

25:46callback function di JavaScript, up to you.

25:49Javascript, array data type juga udah...

25:52udah ada kayak filter dan lain-lain.

25:55Bisa di chain.

25:57Kalau mau custom tinggal bikin new set.

25:59Kembali lagi, ini cuma cara berpikir...

26:02dan gak harus pakai Laravel.

26:04Bisa di chain supaya bisa jadi lebih deklaratif.

26:08Dan, misalnya kita pakai, ini plug ini...

26:12ada di mana-mana, ya.

26:15Jadi, sudah kayak...

26:18kalau di Laravel dia ada plug.

26:20Kalau di JavaScript kaya belum ada.

26:24Kalau di WordPress ada array plug atau ada.

26:27Di underscore ada plug juga ada.

26:31Waktu itu ambil data dari filter ya?

26:33Dari property yang...

26:35Iya, jadi ambil data dari property objek itu.

26:39Jadi, simple kan?

26:43Dari user collection, di filter, dan di plug.

26:47Beres.

26:49Dan, diganti sedikit.

26:53Jadi seperti ini, supaya lebih rapi.

26:56Dan, "before", "after".

27:04Enak mana baca?

27:06"Before", "after".

27:10Ya, jadi...

27:15Ini idea dari buku ini.

27:20Dari buku "Refactoring to Collection" ini.

27:23Intisarinya.

27:25Jadi, pola berpikir bagaimana sebuah function kita bisa...

27:30setiap function itu kita bisa bikin jadi lebih deklaratif.

27:34Karena deklaratif itu lebih enak dibacanya.

27:37Ya, itu semua, menurut saya.

27:42Makanya ada refactoring to collection.

27:45Oke.

27:47Sip, itu saja.

27:49Menarik, menarik, ya.

27:51Menarik.

27:52Seru banget, ya. Maksudnya, kodenya itu...

27:56ya, langsung bisa relate ke JavaScript.

27:59Karena mirip-mirip, kan?

28:01Ada filter, ada map.

28:04Kemudian bisa di-chain juga.

28:06Dan sebetulnya kayaknya bahasa apapun...

28:08ya, kayaknya kalau misalnya kita...

28:10Ada, pasti ada.

28:12...programming, terus harus mengolah data yang kayak gitu...

28:15pasti ya mirip-mirip lah.

28:17Mostly data yang kita urus itu berhubungan dengan...

28:23array, looping, conditional, object.

28:28Sebenarnya, kan?

28:30Jadi...

28:32Apa sih yang lain?

28:35Sama aja kalau misalnya HTML juga diubah jadi tree.

28:39Tree juga.

28:41Oke, graph. Mungkin satu lagi berbeda konsep.

28:44Graph, ya.

28:46Tapi intinya...

28:48Graph itu juga sebenarnya collection.

28:51Kalau mau dipikir-pikir node collection.

28:54Dan ada chainingnya.

28:56Jadi, dari graph satu ke graph yang lain.

28:59Tapi...

29:01dasarnya sama.

29:03Kalau kita... makanya kalau back to basic...

29:06waktu kuliah dulu, zaman saya kuliah...

29:10kuliah, kalau nggak salah, anggur ritma pemograman...

29:13dan struktur data.

29:15Akhirnya...

29:17if...

29:19conditional, looping, array...

29:22dan linked list.

29:24Linked list biasa.

29:26Linked list, ya.

29:28Itu kan dasarnya.

29:30Semua...

29:32gitu.

29:34Beritanya.

29:36Pemilihan...

29:38pemilihan struktur data juga penting kan ya.

29:40Jadi, kita nggak bisa sembarangan istilahnya...

29:44bukan struktur data, bukan tipe data.

29:47Tipe data juga.

29:49Tapi struktur data penting gitu.

29:51Apakah sebuah data itu...

29:53bisa kita representasikan sebagai array...

29:55atau object of array, atau apa gitu.

29:57Itu juga tergantung...

30:00itu juga penting gitu.

30:02Karena...

30:04apa yang bisa kita lakukan dengan struktur data itu...

30:06ya kan, kita nggak bisa sembarangan ya.

30:08Misalkan kita pakai struktur data object...

30:10ya, berbeda perlakuannya dengan array kan.

30:13Mungkin nggak bisa diloop, nggak bisa...

30:16difilter, atau apa gitu.

30:19Ya.

30:21Betul.

30:23Nah, ini ada pertanyaan nih, dari November.

30:25Lebih efisien pakai metode chaining...

30:27atau for loop?

30:29Kita...

30:33harus benchmark...

30:35dulu kalau mau...

30:37manusianya atau...

30:39mesinnya.

30:41Ya kan, bobonya bisa...

30:43diukur efisiensinya kan.

30:45Ya, yang bisa diukur efisiensinya...

30:47dengan baik sih mesin ya.

30:49Benchmark performance test kan.

30:51Tapi efisiensi dari DX kan...

30:53bisa juga disebut efisiensi.

30:55Maintain...

30:57kalau untuk maintainable code...

30:59pakai chaining.

31:01Cuma kalau untuk cepet...

31:03cepet-cepetan...

31:05imperatif lebih cepet-cepetan.

31:07Ya, ini ada...

31:09ada faktor...

31:11jam terbang juga kali ya, kalau teman-teman...

31:13yang belum terbiasa.

31:15Dikit banget isinya.

31:17Perbedaan performance-nya.

31:19Oh, ini komparasinya...

31:21kecepatan eksekusi.

31:23Performance dan benefit-nya.

31:25Benefitnya, ya.

31:27Ya, kalau kayak gini-gini kan...

31:29ada faktor jam terbang juga kan.

31:31Nggak mungkin istilahnya...

31:33baru lulus kuliah yang...

31:35diajarkan for loop, if dan...

31:37lain-lain tiba-tiba kita...

31:39berharap...

31:41kode yang dihasilkan seperti yang tadi...

31:43yang after tadi gitu kan.

31:45Karena itu baru akan...

31:47bisa tercapai...

31:49kalau sudah...

31:51berpengalaman atau sudah...

31:53bikin project gitu, ikutan project.

31:55Terus...

31:57apa ya, project-nya...

31:59oh, ini kok kodenya...

32:01gampang banget dibaca gitu.

32:03Gampang dimengerti gitu. Sedangkan kalau...

32:05apa, teman-teman yang mungkin belum...

32:07mengalami atau...

32:09belum mendapatkan kode yang...

32:11seperti itu ya...

32:13jadi nggak relate kan.

32:15Atau...

32:17sebelum lulus kuliah...

32:19nonton ngobrolin web.

32:21Jadi udah tahu.

32:23Nggak...

32:25apa ya...

32:27Ya, mungkin ini bukan solusi...

32:29tapi harapan ya.

32:31Lebih keharapan. Harapannya...

32:33paradigma fungsional...

32:35diajarkan sedikit-sedikit di kampus.

32:37Belum ya? Atau...

32:41pengalaman Mas Tiza belum ya?

32:43Belum.

32:45Kan kita belajarnya prosedural, abis itu OOP.

32:47Udah nggak ada belajar...

32:49bahasa fungsional atau...

32:51paradigma fungsional lain kan.

32:53Saya nggak tahu...

32:57karena kuliahnya sastra.

33:01Sastra sendiri, mungkin...

33:03harus ada deklaratif dan imperatif juga...

33:05sastra itu.

33:07Penggunaan linguistik.

33:09Untuk deklaratif.

33:11Eh, ada sih. Digrammer ada sih.

33:13Cuma...

33:15Karena kadang-kadang...

33:17kalau kita yang sudah terbiasa atau sudah...

33:19dicekokin sama OOP, belajar fungsional setelah...

33:21dicekokin sama OOP itu susah banget.

33:23Karena ada higher order function...

33:25itu yang bikin pusih.

33:29Biasanya di fungsional yang pakai penggunaan higher order function...

33:31itu bikin pusing kalau...

33:33dicempun ke OOP.

33:35Menurut saya ya.

33:37Funksional lebih pusing karena ada monad.

33:39Itu tergantung sudut pandang juga.

33:43Kan monad nggak selalu dipakai...

33:45di setiap kode kan.

33:47Nah, cuma ini...

33:51setelah dilihat tadi...

33:53kalau dipikir-pikir nih...

33:55dari tingkat kesulitannya sendiri kan...

33:57sebetulnya dalam tanda kutip nggak sulit ya.

33:59Itu kan cuma mindahin doang.

34:01Cuma mindahin doang.

34:03Kalau orang...

34:05sudah tahu caranya bikin function...

34:07sudah tahu caranya misalnya...

34:09loop sama apalah...

34:11semua sintaks-sintaksnya...

34:13tahu caranya masukin...

34:15argument ke function terus diproses...

34:17kapan harus pakai if-else...

34:19kapan di-return, kondisionalnya gimana...

34:21itu kan sebetulnya bisa.

34:23Itu bukan hal yang sulit...

34:25sel nulis kayak gitu, itu nggak sulit.

34:27Cuma yang perlu dibiasain adalah...

34:29apa ya, kesadaran nggak sih?

34:31Kayak kalau tadi kan...

34:33presentasinya Ivan...

34:35kayak apa, beneran ngejelasin...

34:37secara gambar...

34:39before, terus kenapa ini bermasalah...

34:41terus after...

34:43kenapa ini lebih bagus.

34:45Nah, dengan harapan ke depannya...

34:47semua anggota timnya Ivan...

34:49misalnya atau semua programmer lah kita...

34:51dengan sadar pas kita...

34:53menghadapi skenario lain...

34:55yang bukan get user email tadi...

34:57kita juga bisa nerapin itu.

34:59Nah, apa?

35:01Kesadarannya itu sih yang...

35:03mahal, yang sulit, maksudnya harus dicari...

35:05kalau cuma minum-minum.

35:07Nah, kalau chainingnya doang kan...

35:09bukan obat sekali...

35:11jadi beres. Cuma maksudnya...

35:13besok ketemu lagi...

35:15kita bikin bakal yang spaghetti lagi...

35:17atau kita dengan sadar, oh iya...

35:19kita jadiin indomie atau bubur ayam...

35:21kalau saya, biasanya...

35:23nulis kode itu...

35:25ini dulu ya, misalnya...

35:27apa yang ada di otak itu...

35:29step 1, step 2, step 3, step 4 itu sudah ada.

35:31Setelah jadi...

35:33testing selesai, baru saya...

35:35refactor. Sebelum di Submit PR...

35:37saya refactor...

35:39ada yang bisa saya pindahin ke...

35:41pindahin ke function...

35:43atau satu function tersendiri, bisa...

35:45ada yang bisa saya...

35:47early return, atau kemudian itu...

35:49biasanya...

35:51sebelum PR saya...

35:53Submit itu...

35:55kode itu sudah kayak...

35:57berapa kali saya looping...

35:59untuk memperbaikinya.

36:01Jadi...

36:03ada step-nya juga.

36:05Jadi, karena...

36:07lebih gampang berfikir untuk...

36:09membuat...

36:11untuk nulis kode itu...

36:13lebih gampang saat kita...

36:15hanya nulis dengan cara...

36:17imperatif.

36:19Karena benar-benar step-by-step.

36:21No doubt.

36:23Jadi, maksudnya pasti.

36:25Lebih gampang, karena kalau kita mau ke sana...

36:27step-nya gimana, ngambil data itu...

36:29dan mem...

36:31apa namanya...

36:33memproses data itu.

36:35Tetapi setelah selesai...

36:37mungkin kita bisa...

36:39lebih...

36:41membersihkan kode-nya.

36:43Refactor lagi, refactor lagi, refactor...

36:45sampai dia...

36:47sebuah fungsi yang compact...

36:49yang terkecil.

36:51Jadi fungsi yang terkecil, jadi bisa...

36:53bisa direfactor secara baik.

36:55Dan...

36:57gampang dibaca.

36:59Less bug.

37:01Dan expected.

37:03Funksional kan expected ya hasilnya.

37:051 tambah FX sama dengan Y.

37:07Pure function.

37:09Benar-benar pure function.

37:11Jadi, tujuannya adalah...

37:13bagaimana kode kita itu...

37:15di unit terkecilnya itu expected...

37:17hasilnya.

37:19Kalau A tambah B...

37:21itu hasilnya harus C.

37:23Ya, sebisa mungkin...

37:25penghasil terkecil kita...

37:27bisa di expected...

37:29sehingga memaintain ke depannya...

37:31nggak pusing.

37:33Iya.

37:35Jadi, mindset pertama...

37:37yang harus ditanamkan adalah...

37:39yang pertama.

37:41Yang paling, ya salah satu yang...

37:43utama ya.

37:45Kita nulis kode...

37:47bukan hanya buat mesin...

37:49tapi buat orang. Buat kita sendiri...

37:51dan buat teman-teman kita.

37:53Dipastikan...

37:55kode yang kita tulis itu...

37:57setidaknya kita bisa mengerti.

37:59Minimal, itu minimal banget.

38:01Kalau kita sendiri nggak ngerti ya gimana ya?

38:03It works, tapi nggak tahu gimana.

38:05It doesn't work juga nggak tahu kenapa.

38:07It works, bingung.

38:09Bingung juga, iya.

38:11Jadi, setidaknya kita bisa tahu...

38:13karena...

38:15menulis kode itu...

38:17coding itu...

38:19berapa persen ya?

38:21Kita nulis kode itu...

38:23cuma berapa persen? Selebihnya banyakan dibaging.

38:25Benar nggak sih?

38:27Lebih tepatnya...

38:29berhayal.

38:31Berhayal?

38:33Lebih banyak menghayalnya.

38:35Lebih banyak menghayal, iya.

38:37Apa proses menulis kode itu ya?

38:39Sebentar...

38:41kode itu...

38:43menurut saya terkecil...

38:45ininya.

38:47Dari 100 persen...

38:49kalau menurut saya, menulis kode itu cuma 25 persen.

38:51Imaginasi.

38:5350 persennya...

38:55Imaginasi.

38:5725 persennya nulis kode, 25 persennya...

38:59lagi tes dan dibag.

39:01Ya...

39:03Red Green Refactor, ini tes...

39:05development ya.

39:07Ya, jadi kita bikin...

39:09coba tes dulu, tesnya gagal.

39:11Kita bikin implementasinya...

39:13kemudian jangan lupa refactor.

39:15Nah ini, berarti...

39:17kunci yang kedua adalah...

39:19definition of done-nya...

39:21harus direvisi.

39:23Karena biasanya kan...

39:25oh, jalan kok, ya udah selesai gitu.

39:27Kita nggak peduli dengan bagaimana implementasinya...

39:29bagus atau nggak...

39:31bisa dibaca atau nggak.

39:33Yang penting, kode yang kita hasilkan...

39:35jalan.

39:37Dan mungkin jalan, tapi...

39:39dengan kondisi tertentu, kita juga nggak tahu kan.

39:41Jadi...

39:43kalau...

39:45ada quote dari siapa ya...

39:47jadi saya ingat gitu, kayak...

39:49"Make it work...

39:51and then make it beautiful."

39:53Biasanya, kalau udah...

39:55kodenya beautiful, biasanya itu...

39:57secara nggak langsung performanya bagus.

39:59Secara nggak langsung ya, ini kondisi-kondisi tertentu.

40:01Coba saya cari dulu ya.

40:03Nah, ini...

40:09co-pilot...

40:11dipikir-pikir, co-pilot bisa nggak sih...

40:13disuruh baca itu buku tadi...

40:15dikasih gimana caranya lah...

40:17fine-tuning, training, atau apa...

40:19suruh baca buku itu...

40:21biar setiap kita coding...

40:23co-pilot-nya suruh betulin.

40:25Oh iya...

40:27bisa sekarang ya.

40:29Bisa.

40:31Suruh belajar.

40:33Make it work, make it better kali?

40:37Nggak, nggak, nggak.

40:39Ini kayaknya ada.

40:41Nah, ini...

40:45bentar ya, share ya.

40:47Jadi ini ada...

40:49"Make it work, make it beautiful, and then make it fast."

40:51Jadi kalau kita coding, biasanya kan kita bikin...

40:53itu jalan dululah kayak gimana caranya.

40:55Mungkin pakai tadi kan imperatif.

40:57Dibikin menarik...

40:59dibikin bagus dengan cara...

41:01deklaratif.

41:03Kemudian baru dioptimasikan.

41:05Jadi ada 3 tahap gitu ya.

41:07Nah, kalau...

41:09dari quote yang lain...

41:11salah satunya adalah...

41:13yang bikin bahasa fungsional Erlang...

41:15menurut dia...

41:17"Make it work, then make it beautiful."

41:19Oh bukan.

41:23Make it work, then make it beautiful.

41:25You really, really have to make it fast.

41:2790% of the time...

41:29if you make it beautiful, it will already fast.

41:31Itu menarik.

41:35Udah cukup 2 aja gitu.

41:37Menurut dia ya. Kita nggak tahu ini.

41:39Perlu dicoba ya.

41:41Seru ya.

41:43Oke.

41:45Tapi berarti itu kan contoh-contoh...

41:47level-level optimasi lah.

41:49Jadi kayak level buat optimize.

41:51Pertama bare minimumnya nih...

41:53yang mc free banget kan...

41:55harus make it work. Jelas.

41:57Itu semua kan yang oke gitu.

41:59Abis itu ya udah dipercantik.

42:01Dibikin lebih cepat.

42:03Dan kembali kuncinya...

42:05kalau refactoring, kuncinya adalah...

42:07testing.

42:09Jangan coba-coba refactoring tanpa testing ya.

42:11Mereka bunuh diri.

42:21Ras maksudnya apa nih?

42:23Ras already covered this. Apa nih?

42:25Merujuk kemana?

42:27Mungkin Ras udah maksudnya...

42:29udah deklaratif kali ini.

42:31Udah langsung beautiful gitu.

42:33Jadi nggak perlu ini ya.

42:35Karena compiler Ras itu...

42:37sangat bawel.

42:39Jadi kalau kode kita salah sedikit aja...

42:41banyak warning.

42:43Harus perbaiki. Wah ini variable nggak dipakai.

42:45Apus. Oh ini itu. Bener nggak sih?

42:47Oh itu secara nggak langsung berarti...

42:49meng-enforce biar clean code.

42:51Ya.

42:53Clean code.

42:55Zero cost abstraction.

42:57Di NeoVim...

42:59ada refactoring.envim...

43:01yang mengikuti style buku refactoring...

43:03dari Martin Fauler.

43:05Ada ya?

43:07Oh jadi dia kayak linting gitu ya?

43:09Banyak tools, tools.

43:11Banyak tools, tools.

43:13Intinya sih pola berpikirnya.

43:15Pakai tools apapun.

43:17Kalian juga bisa minta...

43:19CGPT atau copilot...

43:21juga bisa minta tolong refactor ini...

43:23juga bisa kok. Namun...

43:25intinya...

43:27ya cara pikirnya aja.

43:29Patternya yang itu...

43:31dipahami. Sehingga waktu...

43:33ketemu kode orang yang...

43:35yang...

43:37spaghetti atau ketemu...

43:39kode orang yang bagus bisa...

43:41langsung bisa baca.

43:45Terus gimana kalau...

43:47kode yang...

43:49ditinggalkan, yang di...

43:51diwariskan ke kita itu kita nggak ngerti?

43:53Sementara orangnya udah desain.

43:57Ya tuh kembali lagi.

43:59Biasanya saya...

44:01Orang baru kayak baru.

44:03Iya orang baru...

44:05Semua bikinannya awal.

44:07Oh ini ya? Yang tadi diawal ya?

44:09Siapa yang komen tuh?

44:11Ganti orang ganti repo ya?

44:15Sampai ekstrim.

44:17Karena nggak bisa baca kodanya.

44:19Tergantung...

44:21kodanya masih working atau tidak.

44:23Kalau work...

44:25if it still work, don't touch it.

44:27If it is working, leave it.

44:33Kalau sudah...

44:35ada masalah, baru...

44:37ada unit test-nya nggak.

44:39Kalau nggak ada unit test-nya, nggak boleh nipegang.

44:41Apalagi kalau sudah jalan...

44:43di production ya.

44:45Jalan di production yang pakai...

44:47company enterprise.

44:49Yang...

44:51apa namanya?

44:53Bahasanya untuk...

44:57secara...

44:59apa?

45:01Kontraknya harus 99.99% uptime, contohnya.

45:05Jadi nggak berani...

45:07nggak berani...

45:09aneh-aneh.

45:11TDD tidak wajib.

45:13Kita nggak bilang wajib kok.

45:15Kita nggak bilang test-nya.

45:17Test first itu wajib.

45:19Yang penting ada test-nya kan.

45:21Mau di depan, di belakang, ya itu urusan kalian lah...

45:23masing-masing ya.

45:25Itu maksudnya SLA.

45:27Service Level Agreement.

45:29User yang seru ngetes.

45:31Iya, tetap...

45:33kita yang ngetes, tetap user yang ngetes.

45:35User kena error, terus nanti...

45:37kita nanya browser-nya apa...

45:39apa, maksudnya...

45:41koneksi internet-nya gimana.

45:43Terus kita berusaha coba reproduce error-nya.

45:45Terus kita fix.

45:47Itu kan sebenarnya kayak TDD juga.

45:49Iya, tapi...

45:51manual, manual.

45:53Cuma perkara...

45:55automatic, pakai library...

45:57atau pakai manusia.

45:59Iya.

46:01Yang berasa itu kalau kita refactor tanpa...

46:03testing dulu, karena kita nggak tahu...

46:05kode yang kita...

46:07refactor itu...

46:09mencapai...

46:11bisa sesuai nggak.

46:13Iya.

46:15Karena bisa aja kita refactor yang ini...

46:17modul yang lain yang rusak.

46:19Ada skenario yang kita nggak inget.

46:21Kita nggak inget, oh iya...

46:23ternyata ini dipakai di...

46:25ini dipakai di situ untuk itu.

46:27Pasti nggak inget. Maksudnya ngapain juga...

46:29nginget-nginget.

46:31Apalagi kalau codebase-nya sudah...

46:33lebih dari 5 tahun...

46:35menulis code-nya entah-entah kemana.

46:37Betul.

46:39Nah, apa...

46:41dan apa... ada yang bilang juga...

46:43TDD itu ya bukan tentang...

46:45testing juga. Itu tentang mindset lagi.

46:47Balik lagi tentang mindset.

46:49Ketika kita menulis kode, itu seolah-olah kita...

46:51mendesain...

46:53API untuk aplikasi kita.

46:55Oh, cara manggilnya gini. Oh, pakai dua...

46:57dua parameter.

46:59Oh, pakai ini. Dah.

47:01Ketika kita implementasi, kita udah kebayang...

47:03harus kita tulis itu seperti apa.

47:05Cuma kalau ini ada...

47:09banyak faktor...

47:11banyak faktor teamwork juga nggak sih?

47:13Jadi kalau misalnya kita di suatu tim...

47:15dan kita mau punya...

47:17mindset kayak gini, apalah...

47:19Gimana cara menge-enforce?

47:21Gimana cara menge-enforce?

47:23Kalau misalnya yang lain...

47:25punya cara pikir yang beda-beda, gimana ya?

47:27Ya, kalau Ivan kan pada saat itu...

47:29berada di posisi sebagai tim lead ya.

47:31Jadi bisa enforce.

47:33Pokoknya kalian harus...

47:35pull request, kodenya seperti ini...

47:37dan harus di-review dulu.

47:39Atau harus re-review saya dulu.

47:41Jadi bisa di-comment atau bisa...

47:43minta tolong dong direfactor...

47:45jadi lebih deklaratif dan lain-lain.

47:47Itu...

47:49kalau seandainya...

47:51kita berada di satu...

47:53perusahaan tapi tidak menerapkan itu...

47:55Gimana itu?

47:57Jadi kan itu harus...

47:59disiplin kan melakukan...

48:01disiplin.

48:03Kita harus teman-teman steam kita nonton...

48:05ngobrolin web.

48:07Itu adalah kesepakatan bersama.

48:09Kesepakatan bersama...

48:11atau diktatorship.

48:13Ya, diktator juga.

48:15Komentnya naikin...

48:17diktatorship.

48:19Jadi diktator juga...

48:21benar-benar perlu.

48:23Dari sisi...

48:27dari sisi team lead...

48:29atau dari sisi...

48:31harus disupport...

48:33sama leadership sih.

48:35Harus disupport.

48:37Nah, Ivan kan...

48:39cukup sering...

48:41berada di satu perusahaan...

48:43konsultan kan ya?

48:45Software house kan ya?

48:47Kan software house itu...

48:49kalau di Indonesia ya, kalau di Indonesia...

48:51identik dengan...

48:53Roro Jonggrang, project cepat...

48:55dan tidak...

48:57melakukan kaedah-kaedah based practice.

48:59Yang penting projectnya jadi.

49:01Pernah juga...

49:07dalam project yang...

49:09yang Roro Jonggrang juga pernah.

49:11Tentunya...

49:13ya itu tadi banyak hal-hal...

49:15yang di-shortcut juga ada.

49:17Tetapi...

49:19ada tetapinya...

49:21bukan kayak one-time bill...

49:23tetapi ada retainer.

49:25Karena mungkin...

49:27mereka butuh kejar launch.

49:29Launching...

49:31dalam tahap tertentu.

49:33Dan kita memilih...

49:35MVP yang mau di-launch itu tahapnya apa?

49:37Contohnya waktu pernah saya...

49:41nge-develop Google SiteKit...

49:43plugin di WordPress namanya Google SiteKit.

49:45Itu Roro Jonggrang...

49:47itu project cepat.

49:49Kita dalam 6 bulan...

49:516 bulan nge-develop plugin itu dasarnya.

49:53Waktu itu mengejar untuk beta release...

49:55di WordCami Europe.

49:57Nah...

49:59tesnya nggak ada.

50:01Tesnya nggak ada...

50:03pada itu project Google loh.

50:05Tesnya nggak ada, terus kemudian...

50:07fungsional...

50:09fungsional yang dibuild itu ada 4.

50:11Kayak konek ke Google Analytics,

50:13konek ke Google Search Console,

50:15konek ke...

50:19Google Tech Manager,

50:21sama satu lagi konek ke Google...

50:23konek ke Google Adsense.

50:25Itu aja udah 4 integrasi ke...

50:294 produk besar.

50:31Belum lagi...

50:33ada...

50:35ada...

50:37sedikit sengeta bagaimana...

50:39kita mendefine asitektur...

50:41untuk API keynya.

50:43Anyway...

50:45Long story short, itu adalah...

50:47project rojongerang waktu...

50:49saya...

50:51di project...

50:53Alhasil ya nggak ada tes.

50:55Karena nggak sempat.

50:57Jadi tesnya itu benar-benar manual.

50:59Saya bikin...

51:01tesnya itu...

51:03automatic tesnya itu...

51:05pakai...

51:07apa namanya...

51:09kayak end-to-end testing...

51:11yang sederhana...

51:13yang bisa ngetes di Docker.

51:15Karena butuh...

51:17butuh kompatibilitas...

51:19PHP 5.6...

51:21Sorry, PHP...

51:235.6 dan PHP 7.4...

51:25zaman itu.

51:27Dan...

51:29WordPress 5 sekian, 5 titik sekian, 5...

51:31Jadi ada beberapa tes kesana...

51:33tes environmentnya. Jadi setiap kali kita...

51:35setelah saya sprint,

51:37iten harus di tes.

51:39Ini pas, ini pas, nggak ada...

51:41fatal error lah. Intinya sih cuma nyari...

51:43total error. Jadi saya bikin...

51:45automation script aja.

51:47Jadi pluginnya bisa diaktifkan, terus bisa di...

51:49jalan... user sebagai...

51:51klik-klik-klik itu jalan.

51:53Itu saya ingat pakai selenium.

51:55Waktu itu saya buat web driver-nya...

51:57dijalankan pakai Docker.

51:59Dan...

52:01Alhasil bisa...

52:03deliver...

52:05cuma capek.

52:07Lalu...

52:09selanjutnya baru direfactor.

52:11Intinya kan mereka mau...

52:13launching beta dulu, dan...

52:15betanya itu juga close beta.

52:17Jadi hanya beberapa orang aja yang dikasih akses.

52:19Lalu... selanjutnya baru mereka...

52:21full refactor. Jadilah...

52:23plugin sidekit saat jaman ini yang sudah...

52:25saya sendiri sudah nggak bisa baca kodenya...

52:27karena saya nggak mengerti lagi...

52:29abstraction-nya.

52:31Tetapi... dan sekarang itu udah full test.

52:33Udah ada...

52:35test coverage-nya luar biasa mereka buat.

52:37Oh, berarti ini kan...

52:39misalnya bikin produk juga kan ya.

52:41Kalau misalkan kayak konsultan...

52:43atau agency gitu kan...

52:45banyak kan bikin sesuai...

52:47requirement dari...

52:49klien kan. Apakah...

52:51klien-klien yang sekarang...

52:53yang... istilahnya yang...

52:55success story-nya bagus lah gitu ya.

52:57Yang success story...

52:59berhasil yang berhasil jalan...

53:01itu apakah ada menyaratkan...

53:03bahwa, oh pokoknya...

53:05kodenya harus bagus...

53:07ada tes-nya dan lain-lain karena nanti...

53:09kodenya akan di hand over ke tim-nya atau ke tim yang lain...

53:11atau ke agency lain.

53:13Ada sebagian yang begitu...

53:15tergantung...

53:17dari klien...

53:19permintaan klien-nya.

53:21Namun dari standar... kalau tempat saya bekerja...

53:23sekarang ini standarnya ada.

53:25Jadi harus punya minimal unit test.

53:27Minimal unit test.

53:29Lalu...

53:31kalau kita nge-build...

53:35website-nya from scratch...

53:37kita punya...

53:39visual regression test.

53:41Itu berarti udah difaktor...

53:45udah diperhitungkan di jam...

53:47jumlah...

53:49main hour kan, dev hour-nya.

53:51Jadi misalnya pertama kali bikin penawaran...

53:53biayanya berapa kan, itu udah dipikirin...

53:55bahwa ada jatah buat...

53:57developer-nya harus bikin unit test.

53:59Nah ini bagus nih, kalau nggak ada unit test...

54:01nggak cair.

54:03Ya, karena kontraknya begitu.

54:05Cuma kan jadi nggak bisa benting...

54:07harga yang ekstrim.

54:09Cuma berarti itu positioning ya.

54:11Tergantung klien-nya.

54:15Klien-nya.

54:17Klien-nya ngerti nggak...

54:19kalau klien-nya nggak ngerti...

54:21nggak ngerti testing dan lain-lain.

54:23Yang kebutuhannya memang punya...

54:25internal team...

54:27biasanya punya internal team...

54:29yang mereka mengerti ya.

54:33Iya, jadi...

54:35apa namanya...

54:37sebenarnya dari estimasinya kita itu...

54:41sudah diperhitungkan...

54:43dan dengan tools-tools...

54:45yang kita punya kan...

54:47kita punya segudang tools...

54:49yang siap pakai.

54:51Jadi setup unit test sendiri nggak dari 0.

54:53Sudah ada framework-nya.

54:55Dan untuk menerus unit test itu...

54:57sebenarnya sudah ada skeletal-nya...

54:59dan sudah tinggal pakai.

55:01Jadi menghemat waktu sebenarnya.

55:03Jadi sebenarnya menulis unit test itu nggak...

55:05Justru menghemat waktu, bukan menghabiskan...

55:09waktu lebih panjang.

55:11Sambil ngerjain sih.

55:13Itu kalau mau ngirit waktu sambil...

55:15Ingat nggak tadi...

55:17yang saya kasih konsepnya...

55:19kalau ada satu tiket...

55:21berfikirnya 50%...

55:23nulis kodnya 25%...

55:25sisanya dibagging sama testing.

55:27Ya udah, testing itu...

55:29pada saya ngedibagging lama-lama...

55:31saya nulis testing-nya.

55:33Biar komputernya aja yang nyari...

55:35dibug-nya.

55:37Itu...

55:39caranya.

55:41Namun kalau nggak terbiasa dengan unit test...

55:43ya pasti akan lama.

55:45Dan itu yang mengakibatkan jadinya...

55:47serasa mahal...

55:49kalau lama.

55:51Ya karena mungkin baru belajar...

55:53baru beradaptasi...

55:55kan butuh adaptasi ya...

55:57atau teranggur selesai semua...

55:59itu malas sih kalau udah selesai...

56:01kita nggak mikirin bagian itu lagi.

56:03Terus kita bikin itu...

56:05karena kita harus...

56:07lusurin lagi kan itu apa...

56:09terus apa ekspektnya...

56:11skenario-nya yang perlu di-test...

56:13ekspekt-ekspektnya apa aja.

56:15Itu saya harus pikir.

56:17- Jadi kalau kita rubah pola...

56:19kita rubah pola berpikirnya ya...

56:21bisa jadi cepat di awal tapi lama di belakang.

56:23- Ya.

56:25- Kalau kita posisinya adalah...

56:27kita...

56:29mungkin bahasanya...

56:31lebih lama di awal...

56:33tetapi sekali selesai ya selesai.

56:35- Selesai.

56:37- Nggak ada embel-embel di belakang...

56:39itu susah.

56:41Jadi ada muncul bug lagi, bug lagi.

56:43Jadi proyeknya itu bisa kayak...

56:45sebuah momentum.

56:47Jadi kayak ini jalan, ini jalan.

56:49Bukan kita phase 1 jalan...

56:51nanti phase 2 jalan, eh ternyata setengah dari...

56:53waktu phase 2...

56:55ngebenarin bug di phase 1.

56:57Akhirnya untuk nge-develop phase 2...

56:59waktunya habis, tinggal setengah.

57:01Ya kan?

57:03Terus waktu phase 3, phase 2...

57:05ngejar untuk...

57:07ngerjain fase 2...

57:09yang...

57:11yang setengah kelar.

57:13Belum lagi karena nge-bug.

57:15Jadi phase 3-nya...

57:17kacau lagi.

57:19Jadinya kita jadi lingkaran...

57:21jadi makin lama...

57:23makin capek, makin lama, makin capek...

57:25makin lama, makin capek...

57:27yang terakhir adalah...

57:29resign.

57:31Atau proyeknya batal, nggak...

57:33nggak launching-launching.

57:35Karena isinya...

57:37bug-driven development.

57:39- Iya, resign. Terus orang baru bilang...

57:41- "Wah ini kodenya ancur, buat lagi dari apa?"

57:43- Iya, kodenya jelek.

57:45Build from scratch.

57:47Biasanya begitu kan?

57:49Pakai deno, pakai boom, pakai...

57:51- Jadi ngerti konsep berpikirnya ya.

57:55Jadi nggak apa-apa.

57:57Jalan itu nggak perlu...

57:59misalnya nge-develop itu nggak perlu...

58:01lari-lari, nggak jelas.

58:03Jadi kalau saya tuh kayak...

58:07misalnya mau dikasih...

58:09suruh ngelit nih.

58:11Biasanya...

58:13untuk onboarding ngelit sebuah proyek aja...

58:15saya butuh 3 hari.

58:17On-boarding-nya.

58:19Karena saya butuh baca...

58:21dokumentasinya dulu.

58:23Saya butuh ngobrol sama...

58:25tim lead sebelumnya.

58:27Ini arsitekturnya seperti apa.

58:29Terus...

58:31kalau capek ya tidur dulu.

58:33Nanti jalan lagi, liat lagi, baca lagi...

58:37dokumentasi.

58:39Belum ngerti kodenya, mengerti...

58:41setup-setup database-nya.

58:43Ngerti...

58:45apa namanya.

58:47Biasanya kalau sebelum...

58:49saya jadi tim lead, saya akan minta...

58:51onboarding-dokumentasi,

58:53engineering-dokumentasi,

58:55terus kemudian...

58:57road-mapping plan selama...

58:59selama setahun gitu.

59:01Ada road-map ya. Biasanya satu proyek sudah ada...

59:03road-map-nya dari klien itu.

59:05Mau ngapain aja secara bisnis.

59:07Yaitu, sudah saya sudah minta...

59:09sebelum saya ngelit.

59:11Dan kalau misalnya saya nggak yakin...

59:13saya bisa bilang...

59:15saya nggak berani.

59:17Nah, itu ngejawab tadi...

59:19dari klien tuh. Tanya kalau...

59:21bisnis logic-nya nggak fix,

59:23berubah-ubah, itu gimana...

59:25bikin TDD-nya?

59:27Nggak tahu maksudnya gitu nggak sih?

59:29TDD di-crease, yang proses bisnisnya...

59:31berubah-ubah, tidak fix, tidak track-up,

59:33apakah setuju?

59:35Nah, berarti...

59:37jangan ini sampai dia fix kan?

59:39Bukan. Function...

59:41Pure function...

59:43Pure function kan tetap.

59:45Mau input-nya A,

59:47keluar-nya B, gitu ya.

59:49Itu kan pure function.

59:51Jadi yang minimal unit test...

59:53harus punya dong.

59:55Minimal.

59:57Terkecilnya kan unit test-nya harus punya.

59:59Mungkin yang bisa... yang nggak jelas itu...

1:00:01adalah end-to-end testing-nya nanti.

1:00:03Yang berubah-ubah.

1:00:05End-to-end testing itu...

1:00:07End-to-end testing itu...

1:00:09jarang sih...

1:00:11saya selama 4 tahun...

1:00:133 tahun...

1:00:15di tempat kerja sekarang...

1:00:17hanya satu project yang pakai end-to-end testing.

1:00:19Sisanya nggak ada end-to-end testing.

1:00:21Biasanya, sisanya unit testing apa sampai integration?

1:00:23Unit test.

1:00:25Unit testing sama integration.

1:00:27Tapi integration-nya pun nggak full coverage.

1:00:29Hanya...

1:00:31yang core bisnis...

1:00:33dan...

1:00:35yang berintegrasi dengan...

1:00:37berintegrasi dengan...

1:00:39biasanya downstream channel bahasanya.

1:00:41Jadi ada... dia...

1:00:43menyediakan API untuk ke...

1:00:45sistem lain...

1:00:47atau mengambil API dari sistem lain itu...

1:00:49ada integration test-nya.

1:00:51Sisanya nggak.

1:00:53Oh, jadi kebayang kasusnya gini nih.

1:00:55Misalnya kita bikin situs...

1:00:57artikel gitu...

1:00:59atau blog kayak medium ya.

1:01:01Terus, mungkin...

1:01:03bisnis decision-nya kan...

1:01:05itu ubah-ubah. Misalnya client request...

1:01:07kalau user nggak login, nggak punya akun...

1:01:09itu boleh lihat artikel...

1:01:11atau nggak di... apa...

1:01:13dikasih itu tuh...

1:01:15kayak apa... sign-up model...

1:01:17atau nggak... atau mungkin...

1:01:19boleh baca 3 artikel...

1:01:21misalnya lah random ya.

1:01:23Misalnya kalau nggak punya akun, dikasih...

1:01:25baca 3 artikel, di artikel keempat...

1:01:27muncul pop-up. Halo, kamu harus...

1:01:29berlangganan atau apa.

1:01:31Nah, berarti kan contoh unit test-nya...

1:01:33yang tetap bisa dibikin...

1:01:35misalnya check if user authenticated ya.

1:01:37Kan itu, regardless...

1:01:39bisnis decision-nya kayak gimana kan...

1:01:41tetap butuh nge-check user authenticated...

1:01:43atau nggak. Terus misalnya...

1:01:45ngetrack pake IP lah...

1:01:47atau pake local storage...

1:01:49ngetrack user sudah ngom-visit...

1:01:51beberapa kali. Itu kan tetap bisa dibikin...

1:01:53unit test-nya. Nah...

1:01:55yang itu tadi disebut...

1:01:57event end-to-end test kan berarti...

1:01:59ngetest tergantung...

1:02:01bisnis decision-nya user...

1:02:03muncul pop-up, suruh sign up-nya tuh...

1:02:05di paywall ya, login wall...

1:02:07login wall-nya tuh munculnya...

1:02:09kalau yang berubah-ubah itu kan...

1:02:11nggak apa-apa. Tapi kita tetap bisa bikin unit test...

1:02:13buat kasus-kasus tadi tuh...

1:02:15check if user authenticated...

1:02:17check how many hits...

1:02:19the user itu.

1:02:21Mungkin contohnya...

1:02:23gitu kali ya.

1:02:25Oke.

1:02:27Nah, ini di-check RAM-nya...

1:02:29sendiri nih ya. Bahas...

1:02:31testing, TDD, ada yang...

1:02:33ini lagi apa...

1:02:35talikasi...

1:02:37talikasi...

1:02:39melantur dari topic pertama...

1:02:41dari topic ya...

1:02:43ya nggak apa-apa sih diskusinya...

1:02:45santai aja sebenarnya. Refactoring...

1:02:47ada hubungan sama testing juga kan.

1:02:49Tapi yang mau...

1:02:51mungkin dua pertanyaan terakhir kali ya...

1:02:53mengenai buku...

1:02:55gitu. Yang pertama adalah...

1:02:57gimana dulu...

1:02:59bisa terdiscover...

1:03:01buku refactoring to collection ini.

1:03:03Kan apa... ada...

1:03:05kan... kayak Ivan kan...

1:03:07tadi sempat bilang...

1:03:09kalau sukanya modingnya, gayanya...

1:03:11yang clean dan lain-lain. Terus...

1:03:13kenapa tiba-tiba kok...

1:03:15jadi ke buku si Adamuatan ini?

1:03:17Dari mana? Dan dia juga kayaknya bukunya...

1:03:19ini kan self-publish kan...

1:03:21bukan ada di toko buku...

1:03:23atau di Amazon dan lain-lain.

1:03:25Kalau saya udah jodoh kali ya...

1:03:27di buku itu yang datang...

1:03:29tahan bagaimana saya bisa nemu aja.

1:03:31Mungkin karena PHP. Ada apa...

1:03:33di ekosistem PHP atau ini.

1:03:35Nggak ada hubungan sama WordPress.

1:03:39Sudah kenal Adamuatan sebelumnya atau...

1:03:45gimana? Sudah follow atau apa?

1:03:47Sudah follow.

1:03:49Berarti dia promo-promo...

1:03:51refactor untuk collections gitu ya.

1:03:55Atau mungkin...

1:03:57itu dipost di...

1:03:59di company saya sebelumnya.

1:04:01Itu saya lihat, eh saya beli ini.

1:04:03Mungkin, saya nggak tahu. Intinya dia datang...

1:04:05buku bisa saya klik, eh tertarik.

1:04:07Ini dia nih yang saya butuh.

1:04:09Nah, pertanyaan selanjutnya ini...

1:04:11buat penonton nih...

1:04:13buat penonton. Berapa banyak...

1:04:15teman-teman yang masih belajar dari buku?

1:04:17Beli buku atau punya...

1:04:19buku di perpus, terus...

1:04:21baca... Saya masih baca...

1:04:23baca buku. Masih. Atau e-book lah...

1:04:25jaman sekarang e-book lah ya, e-book ya.

1:04:27Beli e-book atau buku gratis.

1:04:29Oh, buku bener. Iya.

1:04:31Nggak betah, eh, baca buku di screen.

1:04:33Kindle lumayan.

1:04:35Oh, masih.

1:04:37Ya, Kindle. Buku elektronik...

1:04:39apa? Gadget khusus...

1:04:41Gadget khusus untuk...

1:04:43baca buku ya.

1:04:45Oh, banyak juga ya. Adios money...

1:04:47optimization. Masih...

1:04:49masih baru sedikit...

1:04:51nah.

1:04:53Orali tahunan.

1:04:55Masih rame ya.

1:04:57Gue jarang tuh. Jarang, tapi...

1:04:59terakhir tuh baca yang buku...

1:05:01beneran niat. Baca pakai Kindle...

1:05:03di highlight, bikin notes, itu...

1:05:05You Don't Know JS. Apa?

1:05:07JDK JS. Oh, itu bagus tuh.

1:05:09You Don't Know JS itu sebenarnya bisa...

1:05:11gratisan kan? Kita bisa...

1:05:13lihat di repo-nya dan kita bisa...

1:05:15kompal sendiri kan untuk jadi...

1:05:17IPUP atau PDF dan lain-lain.

1:05:19IPUP-nya emang gratis juga di download.

1:05:21Emang maksudnya si author-nya...

1:05:23menyediakan buat download.

1:05:25Terus pernah beberapa kali beli...

1:05:27satu pack soalnya dulu Smashing Magazine...

1:05:29yang tentang UX-UX gitu.

1:05:31Cuma kayak nggak selesai terus apa ya?

1:05:33Buru-buru skimming.

1:05:35Oh, hanya kebutuhan tertentu gitu ya.

1:05:37Ya, penasaran aja sih...

1:05:39abis itu lupa.

1:05:41Belakangan malah lebih banyak...

1:05:43belajar dari course.

1:05:45Karena nggak tau kenapa ya content creator...

1:05:47yang kayaknya lebih banyak course.

1:05:49Mungkin menyesuaikan...

1:05:51attention span. Menyesuaikan dengan jaman ya.

1:05:53Kayak online course ya video.

1:05:55Kayak PC Dots yang...

1:05:57testing JavaScript.

1:05:59Cuma sebetulnya, ya pengen sih.

1:06:01Boleh deh 2024, resolusi.

1:06:03Telat nggak sih bulan April resolusi?

1:06:05Ya, lebih banyak belajar...

1:06:07dari buku.

1:06:09Tapi mungkin kan kita belajar...

1:06:11suatu tuh macem-macem ya. Kayak misalnya...

1:06:13contoh yang tadi deh, Next.js.

1:06:15Routing.

1:06:17Kalau kayak gitu kan lebih cocok dari...

1:06:19YouTube atau blog post aja kan.

1:06:21Tutorial. Karena itu tuh...

1:06:23cepat berubah. Cuma kalau buku itu...

1:06:25kayaknya cocok buat yang evergreen lah.

1:06:27Yang kayak sih refactoring tadi kan.

1:06:29Koncept, ya.

1:06:31Kita baca buku itu bukan untuk...

1:06:33sintaksnya atau fiturnya sendiri.

1:06:35Maksudnya itu bukan perkara fitur...

1:06:37PHP, tapi tentang cara mikir...

1:06:39yang dijelasin dari perspektifnya.

1:06:43Dari segut pandangnya sih...

1:06:45autor. Yang unik kan itu ya.

1:06:47Yang kita beli, bisa dibilang, adalah...

1:06:49itu cara si penulis buku...

1:06:51menjelaskan konsep itu ke kita...

1:06:53dan ngasih berbagai contoh...

1:06:55sampai kita paham.

1:06:57Nah, itu mungkin cocok ya...

1:06:59kalau buku. Karena kita bisa...

1:07:01ulang-ulang...

1:07:03sampai paham.

1:07:05Bisa baca perlahan-lahan juga.

1:07:07Betul, betul.

1:07:09Nah, benar nih, buku...

1:07:11ternyata banyak juga ya...

1:07:13peminat buku ya. Buku Halo Coding ya.

1:07:15Hilman ya.

1:07:17Belum baca.

1:07:19Bagus, belum baca juga.

1:07:21Saya dikirimin.

1:07:23Hilman, oh.

1:07:25Bisa kita undang nggak ya Hilman ya?

1:07:27Beda buku selanjutnya, Kang Hilman.

1:07:29Beda buku ya.

1:07:31Di Indonesia...

1:07:33memang masih sedikit sekali...

1:07:35teman-teman yang...

1:07:37konten kreator yang melirik buku.

1:07:39Jadi, waktu...

1:07:41beberapa bulan yang lalu, waktu saya ke Makassar...

1:07:43yang Deves ya kalau nggak salah ya...

1:07:45itu saya sempat...

1:07:47ketemu sama Hilman dan...

1:07:49penasaran kan. Kan dia...

1:07:51yang bikin sekolah coding kan.

1:07:53Istilahnya online course kan, bikin online course.

1:07:55Kok tiba-tiba ngeluarin buku gitu kan?

1:07:57Penasaran, kenapa?

1:07:59Nanya alasannya.

1:08:01Ya itu.

1:08:03Jadi dia akhirnya ketemu...

1:08:05cara...

1:08:07menerbitkan sebuah buku yang...

1:08:09nggak perlu update. Istilahnya nggak...

1:08:11evergreen. Seperti yang...

1:08:13Refactor Into Collection ini. Makanya...

1:08:15akhirnya mengutuskan untuk menulis buku.

1:08:17Kalau buku kayak tutorial apa...

1:08:19yang tadi Next.js lah atau apa...

1:08:21itu kan update-nya harus... kayaknya 6 bulan sekali...

1:08:23harus dia update kan.

1:08:25Jadi...

1:08:27ya menarik sih. Dan...

1:08:29penasaran juga dengan apa ya...

1:08:31gimana cara...

1:08:33kok bisa sampai bikin buku...

1:08:35proses...

1:08:37proses kreatifnya seperti apa?

1:08:39Itu harus disiplin...

1:08:41ya harus disiplin banget.

1:08:43Ya harus disiplin banget.

1:08:45Dan punya apa ya? Punya self disiplin...

1:08:47yang tinggi. Inspiratif ya...

1:08:49buku Halo Coding ya.

1:08:51Saya dikirimin...

1:08:53bukunya gratis. Terus saya...

1:08:55ketemu sama dia, minta tanda tangannya.

1:08:57Wah.

1:08:59Oh, buku Kubernetes untuk...

1:09:03ini bukunya Giri ya?

1:09:05Giri, mas Giri.

1:09:07Apa-apa-apa.

1:09:09Susah Kubernetes.

1:09:11Boleh sih.

1:09:13Bisa gak sih Kubernetes untuk...

1:09:15untuk...

1:09:19SME. Pak Ono, ya Pak Ono.

1:09:21Gimana...

1:09:23Kubernetes untuk? Kubernetes untuk SME itu...

1:09:25masih relevan gak sih?

1:09:31Ya, jadi mungkin memang yang cocok...

1:09:33buku untuk diterbitkan adalah...

1:09:35buku-buku yang filosofis...

1:09:37tentang teori, konsep...

1:09:39Wow.

1:09:41Mainset. Mainset. Mainset.

1:09:43Mungkin Kubernetes...

1:09:45konsepnya kali ya? Susah ya.

1:09:49Karena untuk amulat ya bahasanya.

1:09:53Jadi mungkin lebih bahas dasar.

1:09:55Jadi lebih evergreen daripada...

1:09:57Kubernetes yang advance.

1:09:59Karena advance itu mungkin...

1:10:01suatu saat, ya contohnya ya...

1:10:03kalau saya belajar Kubernetes dulu...

1:10:05yang awalnya sama yang sekarang...

1:10:07udah berbeda.

1:10:09Nah, itu risiko yang berfokus...

1:10:11pada suatu produk ya.

1:10:13Iya, ini kan ada produknya.

1:10:17Tapi sebenarnya gak apa-apa juga sih.

1:10:19Mungkin ada orang yang emang lebih gampang belajar...

1:10:21sambil tegang buku fisik gitu.

1:10:23Dan bahasa Indonesia punggulannya adalah...

1:10:25bukunya bahasa Indonesia mungkin gak banyak.

1:10:27Jadi ya tetap berguna.

1:10:29Tapi ya diharapkan...

1:10:31setelah si pemula itu...

1:10:33paham, nguasain dari buku itu...

1:10:35ya besok-besok Kubernetes-nya apa...

1:10:37settinganya berubah, pindah-pindah semua...

1:10:39ya udahlah itu...

1:10:41udah paham, cari sendiri lah.

1:10:43Googling sendiri yang berubah apa dan...

1:10:45perlu adaptasi atau enggak.

1:10:47Kita bisa coba nanti...

1:10:51kontak-kontak yang ilman atau...

1:10:53Mas Giri...

1:10:55yang di satu grup kita kan...

1:10:57teranggil kalau dia berkenan ya.

1:10:59Kita tanya-tanya proses penulisan buku...

1:11:03kesulitannya apa.

1:11:05Mudah-mudahan kan...

1:11:07semakin banyak buku kan...

1:11:09semakin bagus ya buat kita untuk belajar ya.

1:11:11Phoenix Project, ini juga salah satu buku yang...

1:11:13sebenarnya fiksikan.

1:11:15Fiksikan, novel.

1:11:23Yang terinspirasi dari buku itu...

1:11:25akhirnya menerapkan di...

1:11:27perusahaan sebenarnya.

1:11:29Padahal itu sebenarnya...

1:11:31Baru tahu The Phoenix Project, baguskah?

1:11:33Itu Phoenix Project bagus-bagus.

1:11:35Beberapa teman yang baca...

1:11:37Teman-teman yang baca bilang...

1:11:41mereka menerapkan istilah...

1:11:43konsep DevOps dan lain-lain...

1:11:45terinspirasi dari buku Phoenix Project ini.

1:11:47Tapi dikemas dalam bentuk novel.

1:11:51Tapi ceritanya...

1:11:53nggak real sebenarnya.

1:11:55Tapi mungkin berdasarkan kisah nyata...

1:11:57atau gimana nggak tahu ya.

1:11:59Dikemas dalam bentuk menarik...

1:12:01dalam bentuk fiksik.

1:12:03Cuma ada hal-hal yang bisa diterapkan dari situ.

1:12:05Saya jadi merasa...

1:12:09kategori bodah buku ini...

1:12:11sangat bagus.

1:12:13Betul, setuju.

1:12:15Konon tingkat literasi...

1:12:17di Indonesia selalu...

1:12:19apa sih, kayak sepuluh terbawah gitu.

1:12:21Cuma kayaknya setiap gue...

1:12:23lihat artikel berita gitu kayak nggak terima.

1:12:25Emang yang disurvey siapa aja sih?

1:12:27Yang disurvey orang yang nggak pernah baca doang kali.

1:12:29Wah, viewer-viewer kita pada...

1:12:31baca buku ternyata ya.

1:12:33Oh gitu ya?

1:12:35Saya nggak nyangka lho seramanya ini.

1:12:37Kalau nggak ada yang pernah kena...

1:12:39survey literasi ya.

1:12:41Setiap kali selalu kayak gitu.

1:12:43Indonesia selalu...

1:12:45sepuluh terbawah di Asia.

1:12:47Di Singapura, Malaysia, Kala.

1:12:49Kita melihat...

1:12:51yang disurvey...

1:12:53yang disurvey yang...

1:12:55yang disurvey yang nggak...

1:12:57yang nggak baca buku kali.

1:12:59Nah, itu biasnya...

1:13:01Buktinya saya dari kecil tuh...

1:13:03baca buku komik lho.

1:13:05Bagon Bol, Kung Fu Boy.

1:13:07Itu baca buku.

1:13:09Nah, terus tingkat sekarang?

1:13:11Itu tuh masuk kategori membaca kan.

1:13:13Walaupun juburan.

1:13:15Baca Twitter, baca Instagram gitu.

1:13:17Baca kan ya.

1:13:19Eh, jangan salah lho.

1:13:23Twitter thread itu sekarang mulai panjang-panjang lho.

1:13:25Walaupun ada yang benar, ada yang nggak.

1:13:29Itu kan sosial media kan.

1:13:31Terserah opini masing-masing kan.

1:13:33Buku juga...

1:13:35Buku juga belum tentu semua benar.

1:13:37Bisa aja.

1:13:39Oh, dulu Mas Diri ngasih pengantar CICD...

1:13:41dari Buku Phoenix Project ya?

1:13:43Wah, seru nih.

1:13:45Beda Buku Phoenix Project berikutnya kali ya?

1:13:47Featuring Mas Diri ya?

1:13:49Mas Diri.

1:13:51One Piece.

1:13:53Sik.

1:13:55Ivan, bacanya Dragon Ball.

1:13:57Saya juga bacanya Dragon Ball.

1:13:59Baru meninggal ya? Berapa bulan yang...

1:14:01Akhirnya terima.

1:14:03Akhirnya terima.

1:14:05Pas saya lagi di Jepang itu...

1:14:07Oh, iya. Ikut Pohayat nggak?

1:14:09Enggak.

1:14:13Di mana juga nggak tahu dia.

1:14:15Pohayat balik bahwa nasi...

1:14:17nasi berkat.

1:14:19Nasi buhikus.

1:14:21Oh, iya-iya. Songgoku kan makan nasi ya?

1:14:25Teman-teman yang hadir...

1:14:27yang hadir...

1:14:29gini dong, thumbs up, thumbs down...

1:14:31atau gimana untuk konsep...

1:14:33Beda Buku ini perlu kita lanjutin.

1:14:35Ya, kasih itu dong.

1:14:37Kasih feedback kira-kira.

1:14:39Kita adain lagi nggak sih? Perlu kita adain lagi atau nggak?

1:14:41Sama rekomendasi itu.

1:14:43Kita kembali ke format awal.

1:14:45Ya itu finish project tadi.

1:14:47Ya, rekomendasi boleh.

1:14:49Ya, kalau nanti ada yang kepikiran.

1:14:51Oh, buku ini seru juga kali ini.

1:14:53Kalau udah buku.

1:14:55Tolong rekomendasikan kita buku.

1:14:57Ke sini aja.

1:14:59kesana.in/ngobrolinweb

1:15:01Disitu ada GitHub Discussion.

1:15:03Jadi teman-teman langsung...

1:15:05bikin post aja.

1:15:07Rekomendasi buku disana.

1:15:09Buku yang menarik kita baca dan...

1:15:11kita coba review ya.

1:15:13Kita coba beda.

1:15:15Kita paksa baca dulu ya.

1:15:17Baca dulu.

1:15:19Misalkan ada...

1:15:21misalkan ada 6 chapter lagi ya.

1:15:23Ga refresh.

1:15:25Refactor to collection lagi.

1:15:27Bikin buku kekuatan anime...

1:15:31untuk programmer.

1:15:33Jadi wibu nanti jangan ya.

1:15:35Bikin manga, bikin manga, tapi...

1:15:37ya bayangin kayak...

1:15:39Subasa atau apa. Cuma kan itu main mula.

1:15:41Nah, ini programmer.

1:15:43Cuma lebih gitu...

1:15:45aku harus bisa memacakan bak ini.

1:15:47Ada.

1:15:49Ada efek-efeknya gitu.

1:15:51Ada itu di Instagram kan...

1:15:53yang komik untuk programmer.

1:15:55Ada horror code.

1:15:57Horror apa gitu.

1:15:59Instagramnya.

1:16:01Dulu Bukalapak bikin kayak komik gitu.

1:16:05Konsep-konsep homograman.

1:16:07Oh ya?

1:16:09Saya pernah dapet.

1:16:11Dia bentuknya komik tipis ya.

1:16:13Jadi bahas tentang Ejal.

1:16:15Bahas tentang TDD kalo ga salah. Apa gitu.

1:16:17Wah keren banget.

1:16:19Ada dulu.

1:16:21Di bagi-bagi.

1:16:23Ga tau deh.

1:16:25Gugling ga ketemu ya.

1:16:27Nanti kalo ada deh.

1:16:29Ada tuh buku...

1:16:31saya dapet tuh waktu itu.

1:16:33Bukunya tipis sih.

1:16:35Cuma berapa lembar.

1:16:37Tapi ya lucu juga ya.

1:16:39Masa-masa kemasan. Bener kan?

1:16:41Ada yang pernah liat kan ya.

1:16:43Tapi saya lupa judulnya apa.

1:16:45Di Gugling juga ga ketemu.

1:16:49Komik Bukalapak.

1:16:51Ini hal-hal yang selalu di Gugling ya.

1:16:53Ini hal-hal yang selalu di Gugling ya.

1:16:55Ya bisa Gugling.

1:16:57Maksudnya kalo kita Gugling komik Bukalapak ya.

1:16:59Munculnya orang jualan komik.

1:17:01Ada tuh dulu.

1:17:03Ya bukan komik yang tebal

1:17:05berapa ini ya.

1:17:07Berapa ratus halaman ya.

1:17:09Komik strip lagi tuh ya?

1:17:11Strip ya betul.

1:17:13Komik strip cuma 3-4 halaman.

1:17:15Betul.

1:17:17Tapi itu

1:17:19lumayan menarik.

1:17:21Apalagi buat kita yang baru belajar.

1:17:23Terus ngeliatin kayak gitu kan bagus ya.

1:17:25Oke.

1:17:27Wah kayaknya bisa lanjut ya.

1:17:29Tapi

1:17:31sekalian memaksa kita untuk

1:17:33membaca kan ya.

1:17:35Itu buat memperbaiki hasil

1:17:37survei tahunan tingkat literasi.

1:17:39Berarti saya harus komit

1:17:41menyelesaikan ini dalam 2-3 bulan ke depan.

1:17:43Tebal banget.

1:17:47Makasih bikin ya. Beda buku ya.

1:17:49Seru nih. Ayo.

1:17:51Beda buku apa ya.

1:17:55Bukunya si Adi Osmani itu bagus-bagus.

1:17:57Termasuk salah satu yang

1:17:59saya tertarik itu buku softskillnya

1:18:01itu keren banget sih.

1:18:03Oh dia punya buku softskill juga ya?

1:18:05Aku cuma tau ya.

1:18:07Baru delis kan terakhir ya.

1:18:09Keren ya yang patterns itu.

1:18:11Ada itu juga ada

1:18:15softskill books.

1:18:17Mana dia?

1:18:19Di perusahaan saya

1:18:23kalau misalnya mau beli begini kan.

1:18:25Bisa request.

1:18:27Request ya?

1:18:29Ya.

1:18:31Kalau perusahaan belum begitu

1:18:33berarti pertama kali harus ajuin ke bosnya.

1:18:35Saya mau beli buku di support nggak?

1:18:37Ke perusahaan.

1:18:41Dan usahakan ke HR-nya

1:18:43sampai bisa gitu.

1:18:45Ke semua orang

1:18:47yang ngumpulin tim.

1:18:49Kalau kita mau belajar

1:18:51harus bisa dikasih buku.

1:18:55Ini gratis ya? Bisa didownload soalnya free.

1:18:57Sample chapter kali?

1:18:59Download the books.

1:19:01Ya bisa.

1:19:03Oh emang kan dia emang

1:19:05sebagian bukunya ada yang free,

1:19:07ada yang berbayar.

1:19:09Tapi biasanya ya

1:19:11ini yang saya beli ini

1:19:13sebenarnya dia

1:19:15kalau dihitung-hitung ya

1:19:17dia nggak dapat profit apa-apa dari buku ini.

1:19:23Yang buku yang saya beliin ini.

1:19:25Karena yang saya beli itu cuma ongkos kirimnya doang.

1:19:27Itu belinya di mana?

1:19:31Smashing Books.

1:19:35Smashing Magazine.

1:19:37Oh pas di Eropa, bukan di Indonesia?

1:19:39Enggak.

1:19:41Saya purchase online.

1:19:43Dikirim sampai ke Indonesia?

1:19:45Iya dikirim. Jadi pertama kali saya

1:19:47download EPUB-nya sudah dapat.

1:19:49Tapi nggak suka baca di handphone.

1:19:51Gak enak.

1:19:53Terus terakhir

1:19:55dikirim.

1:19:57Spill buku satu-satu.

1:19:59Nanti kita baca. Kalau saya buka

1:20:01semua nggak enak.

1:20:03Ini fun fact ya.

1:20:05Yang topik

1:20:07Deface waktu saya bawain makasar kan

1:20:09tentang Image Optimization.

1:20:11Itu saya ambil beberapa materinya

1:20:13dari sampel buku yang tadi.

1:20:15Sampelnya doang ya.

1:20:17Itu tebal banget ya.

1:20:19Ternyata.

1:20:21Spill koleksi.

1:20:23Tetapi enaknya baca buku ini. Saya nggak perlu baca semua.

1:20:25Karena dia sudah percaptor.

1:20:27Sudah kayak yang saya butuhkan

1:20:29aja. Karena nggak semua butuh juga.

1:20:31Atau bisa balik-balik.

1:20:33Pertama kita cuma pengen tahu

1:20:35ABC. Terus nanti suatu saat

1:20:37kita mau buka susahin.

1:20:39Bisa balik ke buku itu lagi.

1:20:41Jadi intinya ini

1:20:43bukan tutorial ya.

1:20:45Penjelasan mendalam.

1:20:47Penjelasan mendalam tentang WP.

1:20:49Dan Optimized App WP.

1:20:51Atau

1:20:53penjelasan mendalam mengenai

1:20:55JPEG Excel

1:20:57dan lain-lain sebagainya.

1:20:59Jadi hanya butuh

1:21:01dibaca sebagian.

1:21:03"Homong-homong, Adi Osmani

1:21:05kok pakai batik ya?"

1:21:07Dia orang Indonesia kali.

1:21:09Oh yang terakhir itu

1:21:13Developer Experience.

1:21:15Bukan yang large-scale

1:21:17app ini.

1:21:19Ini yang baru.

1:21:21Coba diset.

1:21:23Ini ini.

1:21:25Tapi fokusnya

1:21:27ke react ya.

1:21:29Ini

1:21:31udah masuk bookmark sih.

1:21:33Coba setunya.

1:21:35Yang

1:21:37DX mana?

1:21:39Gak ada.

1:21:41Mana?

1:21:43Sampai bikin

1:21:45stoic mind.

1:21:47Sampai nulis buku stoicism.

1:21:49Menarik juga nih.

1:21:53Tapi ini bisa dibaca

1:21:55gratis kan kalau HTML ya?

1:21:57Betul.

1:21:59Kalau mau beli buku yang benerannya

1:22:01baru di ini ya.

1:22:03Wah banyak yang menarik nih.

1:22:05Seru-seru-seru. Bisa kita kumpulin

1:22:07nanti ya. Dijadikan satu

1:22:09thread, nanti kita bahas satu-satu.

1:22:11Mantap.

1:22:13Oke.

1:22:15Nah, untuk malam ini mungkin udahan dulu kali ya.

1:22:17Udah satu setengah jam.

1:22:19Hampir satu setengah jam kita ngobrol.

1:22:21Malorngi dulu.

1:22:23Dan mudah-mudahan

1:22:25kita punya cukup

1:22:27bandwidth untuk membaca buku dan

1:22:29ngobrolin

1:22:31tentang isi bukunya.

1:22:33Harus disempatkan. Minimal

1:22:35setahun sekali.

1:22:37Dibiasakan sedikit-sedikit.

1:22:39Ternyata teman-teman di sini

1:22:41banyak juga yang

1:22:43masih melirik buku sebagai

1:22:45sumber referensi dari belajar ya.

1:22:47Saya kaget juga jujur sih. Karena

1:22:49kirain udah beralih

1:22:51ke video

1:22:53atau online course dll. Ternyata

1:22:55masih cukup banyak. Jadi kita masih satu frekuensi ya.

1:22:57Oke.

1:22:59Ya segitu aja untuk malam ini.

1:23:01Jangan lupa kritik saran seperti tadi

1:23:03bisa kita lemparkan

1:23:05kesana.in/ngobrolinweb.

1:23:07Kita bisa diskusi juga. Teman-teman

1:23:09kalau ada pertanyaan yang

1:23:11butuh dijawab, mungkin nanti kita akan

1:23:13hadain episode

1:23:15khusus untuk menjawab pertanyaan-pertanyaan

1:23:17di GitHub Discussion

1:23:19kalau sudah mulai terkumpul pertanyaannya.

1:23:21Untuk malam ini, udahan dulu. Terima kasih

1:23:25banyak untuk atensinya.

1:23:27Untuk diskusinya. Kita jumpa lagi minggu

1:23:29depan. Sampai jumpa.

1:23:31Bye bye.

1:23:37Sampai jumpa di video selanjutnya.

Suka episode ini?

Langganan untuk update episode terbaru setiap Selasa malam!

Langganan Sekarang

Episode Terkait

Ngobrol dan Diskusi Bebas - Ngobrolin WEB
EP 81

7 Mei 2024

Ngobrol dan Diskusi Bebas - Ngobrolin WEB

Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. ...

Ngobrolin Video Player - Ngobrolin WEB
EP 115

4 Feb 2025

Ngobrolin Video Player - Ngobrolin WEB

Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. ...

Bedah Buku Problem Solving 101 - Ngobrolin WEB
EP 138

22 Jul 2025

Bedah Buku Problem Solving 101 - Ngobrolin WEB

πŸ—£οΈπŸ•ΈοΈ Selasa malam waktunya #NgobrolinWEB! Malam ini kita akan membedah buku Problem Solving 101. Masih bersama Ivan da...

Komentar