EP 92

Ngobrolin Big-O - 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 tentang Big O Notation, sebuah konsep fundamental dalam ilmu komputer yang digunakan untuk mengukur kompleksitas performa kode. Diskusi dimulai dengan pengalaman tim mengenai pembelajaran Big O di kampus dan relevansinya dalam coding interview. Topik utama mencakup pengenalan berbagai jenis notasi kompleksitas seperti O(1), O(n), O(log n), O(n²), hingga O(n!), serta perbedaan antara Big O (worst case scenario), Omega (best case scenario), dan Theta notation. Episode juga menampilkan studi kasus nyata dari dunia kerja, termasuk kisah menarik tentang sistem penyimpanan 15.000 kunci mobil yang menerapkan konsep indexing secara fisik, serta contoh implementasi query optimization untuk WordPress block editor.

Poin-poin Utama

  • Big O Notation adalah representasi matematis untuk mengukur kompleksitas waktu atau ruang dari suatu algoritma, dengan fokus pada worst case scenario
  • Terdapat tiga jenis notasi kompleksitas: Big O (worst case), Omega (best case), dan Theta (ketika keduanya sama)
  • Jenis-jenis kompleksitas yang dibahas: O(1) konstan, O(n) linear, O(log n) logaritmik, O(n²) kuadratik, dan O(n!) eksponensial
  • Database indexing berperan penting dalam optimasi performa query, analog dengan sistem indeks pada buku atau yellow pages
  • Studi kasus nyata: sistem penyimpanan 15.000 kunci mobil menggunakan pengelompokan berdasarkan 2 digit pertama nomor plat untuk efisiensi pencarian
  • Contoh implementasi nyata: optimasi query WordPress block editor dengan teknik batching query menjadi hanya 2 query per halaman, menghindari nested loop yang berpotensi menyebabkan O(n³) atau lebih
  • Penting untuk berhati-hati dengan ORM yang mengorbankan performa untuk developer experience, serta disarankan untuk mengecek query hasil ORM dan mengoptimalkannya dengan raw query jika diperlukan
Transkrip Bantu Koreksi

0:10Hai, selamat malam.

0:17Halo-halo, sudah lama tidak bertemu, baru seminggu sih.

0:22- Seminggu lalu. - Seminggu lalu kita gak bisa.

0:24- Dua minggu lah jadinya. - Iya, dua minggu ya.

0:26Dua minggu tidak bertemu, gimana kabarnya.

0:30Gimana pengalaman IO Extended-nya, mudah-mudahan.

0:35Buat ketemu, ngobrol-ngobrol, dan bisa bertegur sapah.

0:41- Kita kemarin ketemu. - Yang gak ikut.

0:45Ikut, iya.

0:46Eh, event bukannya di satu kota gak ya? Gak sama sekali?

0:50- Gak jadi, gak sama sekali. - Gak jadi.

0:52Gak, gak, gak, gak kena waktunya banyak banget ininya.

0:58Oh, yang Bali cancel, gak bisa, jadi mendadak gak bisa.

1:03Gak bisa, karena ada urusan.

1:06- Ada urusan. - Terus...

1:08Minggu lalu ya, bukan minggu kemarin loh, minggu yang lalu ada acara keluarga.

1:18Hmm, terus harus hemat-hemat juga ya, hemat-hemat...

1:23Apa namanya, redwit waktu, karena bakal berangkat ya.

1:29Iya, terus kalau minggu ini gak tega juga, karena deket banget kan minggu depan sudah berangkat.

1:39- Jadi... - Berangkat kemana tuh, berangkat kemana sih ya?

1:42Tunggu tanggal mainnya.

1:44Iya, nanti kita live langsung, semua ada di sana.

1:48- Live? - Sama...

1:49- Iya, dikit-dikit gak bisa akses. - Nggak, gak live.

1:51- Rekaman, rekaman, rekaman, semua ada di sana. - Rekaman, rekaman garam tanda, enggak.

1:57Rekaman sama Pak Sandika Gali, mudah-mudahan Pak Sandika Gali mau ya.

2:01Iya, mudah-mudahan.

2:03- Oke, oke. - Sama Jessica.

2:06- Jessica, oh iya, berlima ya. - Yes, Power Rangers compete semua ya.

2:10Sekarang kita Power Rangers, udah bukan mingguan lagi.

Lihat transkrip lengkap

2:14Iya, bukan mingguan lagi.

2:18Power Rangers ya, yang penyanyi berlima gak ada ya, grup bandnya.

2:24Kan itu five quake quake.

2:28Apa itu?

2:32Entah, ada gak sih?

2:35Ada, Blackpink kan lima, Blackpink lima gak sih?

2:38- Iya. - Kewen semua tapi...

2:41- Tapi Power Rangers. - Paling benar sih.

2:43Informasi paling benar Power Rangers sih, Power Rangers kan kewennya dua tuh.

2:47- Power Rangers kan betul. - Benar sih.

2:51Kewen kan melenceng, tadinya kan dari grup musik.

2:55Jadi ngomongin kemana-mana nih.

2:58Oke, belum kemana-mana, seperti biasa, bertemu lagi dengan kita bertiga.

3:04Ada saya Riza, ada Ika, dan ada Irfan.

3:08Di setelah malam, kakak setelah malam waktunya.

3:11- Nah, berapa jam? - Nah, berapa jam?

3:16Kirain sudah lupa.

3:18Oke, malam ini kan kita, seperti di judul ya.

3:21Kita mau bahas tentang performa. Performa maksud performa gak?

3:24Fundamental ya, fundamental.

3:27Fundamental tapi terkait performa.

3:30Performa bukan performa aplikasi, tapi lebih ke kode.

3:34Nipet ya, potongan kode.

3:38Gak semua, kalau semua aplikasi bisa juga.

3:41Tapi kayaknya terlalu banyak ya.

3:43Jadi biasanya yang di-check itu, yang di-evaluasi itu adalah barisan kode.

3:50Misalkan ada perulangan.

3:54- Kondisional. - Kondisional.

3:56Ya, apapun yang pure function sih ya.

3:59- Apapun yang function, bukan pure. - Unit ya, function ya.

4:03Unit S gitu ya.

4:06Nah, istilahnya itu adalah Biko.

4:10Biko itu cuma notation, mewakili ya.

4:13Jadi dia gak ada arti apa-apa sebenarnya.

4:17Cuma mewakili bahwa kompleksitasnya sejauh mana.

4:22Ya, kayak simul matematis sih ya.

4:25Maksudnya itu gak ada kepanjangannya O gitu atau apa ya.

4:29O aja kayak X. X itu kan mencerminkan nilai yang harus dicari gitu.

4:33X adalah blablabla.

4:35O ini kan adalah representasi dari time atau space kompleksiti.

4:42Nah, nanti detailnya dibahas lebih dalam lagi kali ya.

4:47Yes.

4:48Teman-teman di sini sudah pernah tahu gak tentang Biko notation?

4:52Sudah pernah pajari belum?

4:54Ada yang sudah pernah interview, coding interview gak?

4:57Muncul gak sih di coding interview kayak gini?

5:00Biasanya dikasih warisan kode, terus tahu kode yang kita tuliskan sendiri.

5:05Terus coba ini Biko-nya apa biasanya gitu ya.

5:09Dan yang paling kompleks apa coba?

5:13Pas interview untungnya gak ditanya sih.

5:15Karena waktu interview dulu belum tahu.

5:17Ini taunya kayak ya relatif baru lah.

5:19Udah ternyata kerja dan udah ternyata mid-level baru belajar sendiri ini.

5:25Oke, lagi pertanyaan buat.

5:27Wah, Nur Holid ya.

5:31Nur Holid ini yang kemarin kita ketemu di Depok.

5:34Sekarang pertanyaan buat anak kuliah.

5:41Hah, foto?

5:42Foto-foto aja.

5:43Foto dong.

5:44Foto kan?

5:45Foto, ya.

5:46Foto.

5:47Kayak anak Jelis itu foto.

5:49Pertanyaan buat anak kuliah.

5:53Biko dipelajari gak di kampus?

5:55Ivan?

5:57Lupa saya.

6:03Kayaknya ada.

6:05Di struktur data.

6:07Algoritma?

6:08Enggak, struktur data.

6:09Struktur data apa algoritma ya?

6:10Alpro ya?

6:12Atau malah justru di database?

6:14Waktu itu.

6:16Karena, ya.

6:18Kalau gak salah ya di database.

6:20Dosen yang ngajarin DB, MS.

6:24Ngajarin tentang Big O Notation.

6:27Salah satu sesi kuliahnya.

6:32Karena itu kan.

6:34Karena kompleksitas query juga bisa dihitung dengan Big O kan.

6:38Misalnya join.

6:40Terus kemudian inner query.

6:43Sub-query, sorry.

6:44Sub-query.

6:45Ya, pull join.

6:46Itu ada Big O Notation juga, hitungannya.

6:51Wah, Nur Holid gak dapat.

6:52Dari semester 1 sampai semester 13.

6:55Banyak banget.

6:56Jangan terus.

6:57Pasti ajarin.

6:58Nah, cuma kalau misalnya ikut Mata Kuliah CS50 dari Harvard.

7:05Yang open source.

7:07Ada tuh Mata Kuliah Basic Computer Science.

7:11Yang memang dibuka untuk publik.

7:13Yang di sana kuliah ya bayar.

7:15Tapi di publish online.

7:18Memang secara terbuka.

7:20Kita boleh ngikutin.

7:22Ada tugasnya, ada exercise dan lain-lain.

7:24Itu di pelajaran sih.

7:25Itu di kelas ke-3 tuh.

7:28Coba lihat, buka aja link-nya di private chat.

7:32Oke.

7:34Ini sesuatu yang cukup menarik.

7:38Eh, salah kan?

7:39Oh, screen-nya mana?

7:42Kok gak ada screen-nya?

7:44Oh, pernah dikasih soal interview.

7:55Oke, apakah screen tersebut paling drom?

7:59Tapi pakai Big O ya.

8:00Ditanya, ini tuh Big O-nya apa ya?

8:02Sudah kelihatan ya layarnya.

8:05B, in-ear search.

8:09Turun lagi, turun lagi.

8:11Binary.

8:13Ini ya running time ya.

8:16Berapa lama ya?

8:18Nah, ini ya.

8:19Nah, ini dia.

8:21Zoom in.

8:23Oh, kurang.

8:25Udah?

8:29Berarti kayaknya Eka ini harusnya text-nya di gedein, komputernya.

8:35Di layar baru ya?

8:37Kan ada settingan text size kan, text size komputernya.

8:43Gak, ini kan ngomong-ngomong dulu.

8:48Ini kan video.

8:49Gimana mau di zoom?

8:51Oh, iya-iya. Gak bisa ya.

8:53Gak bisa.

8:55Eka lihatnya bukan di browser.

8:57Nah, ini juga salah satu yang biasa ditanyakan ya.

9:00Jadi, pertama kita bikin kodenya dulu.

9:02Ditanya kan tadi apa? String ya? String itu palindrom atau bukan.

9:07Harusnya biorangnya bisa lah ya.

9:10Tapi abis itu ditanya, seberapa kompleksitas kode yang kita buat.

9:16Itu salah satu tips, interview juga ya.

9:20Selalu melakukan seperti itu.

9:23Nah, ini cukup menarik.

9:25Cukup menarik karena waktu pertama kali bikin hektifat di 2016 itu.

9:32Waktu diskusi materi.

9:34Salah satu materi yang muncul sebenarnya Bikko.

9:37Dan rekan-rekan saya yang kebetulan kuliahnya di luar itu mereka kaget.

9:44Karena saya dan beberapa teman-teman yang kuliah di Indonesia.

9:50Itu ngaku tidak pernah belajar Bikko, tidak dapat di kampus, itu mereka kaget.

9:56Karena itu salah satu yang kundang mental yang diajarin di awal-awal.

10:01"Kok gak dapet?" "Ya" gitu.

10:03"Maksudnya sih gak dapet?" "Anda gak percaya?" gitu.

10:07Yang nanya, bahannya siapa tuh?

10:09Haris-haris.

10:11Bukan lah.

10:13Waktu pertama kali ketemu orang penting, waktu datang ke Jakarta.

10:20Ingat gak siapa itu namanya?

10:22Ya.

10:24Oh, Haris-haris sih.

10:26Ini Alex Russell.

10:28Ya, Alex Russell.

10:30Itu jauh.

10:32Oh, jauh.

10:34Oh, 2016.

10:35Kira-kira ingin Alex Russell.

10:37Gak, kalau foundernya hektifat kan kuliahnya di luar.

10:40Oke.

10:42Ya, dan ada beberapa, ada CTO-nya Rebel Work waktu itu.

10:46Dia juga kuliahnya di luar.

10:48Itu kaget.

10:50Gak.

10:52Akhirnya ditambahin lah materi itu di kampus.

10:56Ya, di kampus.

10:58Tapi itu di komen udah banyak yang jawab.

11:02Diajarin ya, berarti untung lah.

11:04Kodekulung pendidikan kita udah dipatch.

11:08Sudah update.

11:10Sudah dapet, tapi mungkin tidak terlalu ditekankan.

11:14Atau mungkin jangan inisiatif dosennya tuh.

11:16Kayak, maksud saya, belum secara resmi ada di curriculum.

11:20Cuma, maksud saya, dalam topik yang relevan, kayak dosennya nyelupin aja biar mahasiswanya tahu.

11:26Ya.

11:28Berarti dosenku bagus dong ya.

11:30Tapi di database malah.

11:32Bukan di ajaran basicnya.

11:36Jadi dia ngajarnya database.

11:40Ya mungkin dia gak ada mata kuliah dasar-dasar computer science.

11:46Ya, jadi intinya apa?

11:48Intinya adalah, oh itu adalah worst case scenario dari potongan kode.

11:54Jadi kalau misalkan kode kita ada four loop di dalam four loop.

11:58Itu dihitung kira-kira kalau datanya 100 ribu.

12:02Misalkan gak 100 ribu dulu ya.

12:04Kan, datanya 3 berapa?

12:06Kalau datanya cuma 2, bentar.

12:08Kalau datanya cuma 2 berarti dia 4 ya?

12:10Ya, 2 kali four loop.

12:122 dikali 2 kan.

12:142 pangkat 2 ya.

12:162 pangkat 2.

12:18Karena 4 di dalam 4 kan.

12:20Kalau 3 berarti 3 pangkat 2.

12:22Karena four loopnya 2.

12:24Gitu.

12:26Oh bentar.

12:28Kalau yang OO, itu kayaknya logaritma kan.

12:32Iya.

12:34Itu logaritma apa?

12:36Mana dia?

12:38Kita baca aja sama-sama.

12:40Kalau yang pangkat itu tengah-tengah.

12:42Ya intinya adalah worst case scenario.

12:44Kira-kira scenario terburuk dari kode kita itu seperti apa.

12:50Makanya muncul istilah O.

12:54Kemudian ada representasi dari kompleksitas kode kita.

13:00Ini harus di-share.

13:06Jadi misalkan linear search, gimana linear search?

13:10Linear search itu takes on order of n steps in the worst case.

13:16This is noted with O(n).

13:18Jadi worst case di sini maksudnya misalkan linear search.

13:22Linear search itu kan cari dari awal sampai akhir.

13:24Worst case itu maksudnya adalah

13:26kalau ternyata angka atau text yang kita cari itu ujung di paling akhir.

13:34Berarti kan dia akan menjalani semua kan.

13:36Nah itu nasional bagai worst case scenario.

13:40Jadi kalau linear search itu berarti apa nih bacanya?

13:46Gimana ya bacanya?

13:48O(n) aja ya.

13:50O(n) ya.

13:52Kalau binary search, binary search itu gimana?

13:56Jadi dibagi dua ini contohnya ada angka 1-10 dibikin 3.

14:04Sorry ada array 1-10.

14:08Terus diambil yang tengah.

14:14Diambil yang tengah itu angka kita lebih tinggi atau lebih besar dari angka yang mau kita cari.

14:24Yang angka di tengah itu.

14:28Kalau misalnya lebih besar, yang lebih kecil semua dibuang.

14:32Terus di-repeat lagi, dibagi dua lagi.

14:34Angka yang kita inginkan itu di sebelah kanan atau sebelah kiri dibuang, dibuang, dibuang.

14:44Jadi makanya log n.

14:46Log n itu kan urutan ya.

14:48Jadi makin dari paling besar sampai paling kecil urutan.

14:54Jadi kalau misalnya kita nyari tadi ada 10 angkanya.

15:02Angkanya 10 item berarti 0 all log 10.

15:08Itulah jumlah worst case nya.

15:12Tapi mungkin sebelum ngomongin Bitgo itu sebenarnya kompleksitas kode itu bisa dinilai dari dua hal kan.

15:22Yang pertama adalah kompleksitas ruang.

15:26Ruang space.

15:28Dan kedua adalah kompleksitas waktu.

15:32Time complexity.

15:34Seberapa lama kode itu berhasil di eksekusi.

15:36Atau seberapa banyak membuangkan memori atau hard disk.

15:42Jadi ada dua sebenarnya.

15:44Nah, Bitgo ini termasuk yang time complexity.

15:52Kalau nggak salah.

15:54Benar nggak?

15:56Tapi sebenarnya kayaknya Big O juga bisa deh.

16:00Dipakai buat ngukur space complexity.

16:02Tapi kan lebih jarang ya.

16:04Yang sampai makan tempatnya.

16:08Makan memori nya se ekstrim itu.

16:10Perbedaannya kan jarang ya.

16:12Kalau misalkan space complexity itu misalkan kita disuruh.

16:18Misalkan ada tugas untuk membaca file.

16:20File nya berukuran sangat besar.

16:22Gimana strategi kita untuk membaca apakah membaca keseluruhan taro di memori.

16:28Atau membaca baris per baris.

16:30Yang mana yang lebih efisien secara pace.

16:36Yang jelas yang pasti baris per baris dong.

16:40Tapi secara kecepatan ya.

16:42Mungkin aja bisa lebih cepat yang dibaca semua.

16:46Karena sudah masuk ke memori dan bisa diproses.

16:50Kembali lagi itu tergantung kebutuhan juga.

16:54Oke tadi kita sudah bahas tentang O(n) dan O log(n) ya.

17:06Jadi kalau linear itu cari angkanya dari kiri ke kanan atau per satu itu O(n).

17:14Kalau binary itu dibagi dua.

17:16Di tengah-tengah, di tengah-tengah, di tengah-tengah seperti di hadapan.

17:20Selanjutnya ada omega.

17:22Omega ini adalah base case scenario.

17:26Kalau tadi bico itu worst case nya paling lama.

17:30Kalau omega berarti base case scenario linear yang paling cepat.

17:36Kenapa? Karena kalau angkanya yang dikari adalah yang paling kiri.

17:40Ya dia langsung ngepet kan.

17:42Jadi omega satu. Karena akan selalu satu kan base case scenario nya.

17:50Jadi kadang-kadang di coding interview itu tanya worst case scenario nya gimana,

17:56base case scenario nya gimana.

17:58Terserah, teman-teman bisa jawab dengan istilah bico atau omega atau apa.

18:04Atau dengan kata-kata yang sendiri gitu.

18:08Maka pakai notasi-notasi dibilang nggak masalah sebenarnya.

18:12Biasa kita bisa kasih contohnya kan.

18:14Kalau pertanyaannya suruh base case sama worst case, ya berarti harus jelasin dulu.

18:20Ya, definisinya dulu worst case scenario itu maksudnya adalah ketika misalkan tadi

18:28pencarian string itu atau pencarian angka itu diunjung.

18:34Yang paling tidak optimize, yang paling unlucky lah ya, paling wujung nyaringnya.

18:42Atau kalau yang base scenario itu yang paling awal, yang gampang gitu ya.

18:48Kalau binary tetap omega satu ya.

18:54Kalau seandainya...

18:56Ya begitu di dapet langsung ternyata.

18:58Di dapet ya, pencuk saya dibalikin.

19:00Di ternyata langsung dapet.

19:02Ini apa?

19:04Ada lagi, baru tahu.

19:06Ada theta notation.

19:08Theta ya?

19:10Theta, ada yang kasih tahu.

19:12Saat ketika suatu algoritma punya big O notation yang sama seperti omega.

19:20Oh, theta.

19:22Jadi ini kondisi khusus ya.

19:28Jadi emang cuma, oh cuma bisa satu cara itu.

19:32Jadi mau best, mau worst, itu cuma.

19:34Sama.

19:36Itu sama.

19:38Misalnya array length ya berarti.

19:42Nah ini contohnya.

19:48Linear search ya.

19:50Kalau kita punya deretan angka ini,

19:52kalau base case scenario-nya adalah angka yang kita cari itu 20.

19:56Langsung dapet.

19:57Tapi kalau worst case, angka yang kita cari 50.

19:59Sehingga kalau linear search,

20:01dia akan cari for loop ya.

20:03Ini sama enggak sama 50.

20:05Nggak sama, nggak sama, nggak sama, nggak sama.

20:07Berarti berapa kali itu? 1, 2, 3, 4, 5, 6, 7 ya.

20:11Setelah 7 baru...

20:137.

20:15Ya.

20:17Nah ini adalah contohnya.

20:19Jadi dia menggunakan for loopnya 1.

20:231 for loop.

20:25Dan ada kondisi untuk cek angkanya sama atau tidak.

20:29Btw mirip java strip ya.

20:31Maksudnya buat orang yang belum pernah pakai sama sekali,

20:35ini kayaknya familiar banget.

20:37Bahkan loop syntax buat ngeloop-nya pun sama.

20:41Sama.

20:43Masih satu family, satu family.

20:45Ini apa?

20:49Linear search and array of string.

20:51Oh ini kalau pencarian string ya?

20:53Sama ya, kurang lebih sama ya.

20:55Interestnya yang bedanya adalah

20:57ya di datanya aja stringnya ya.

20:59Cuman untuk carinya kan berdasarkan index kan ya.

21:03Semakin besar indexnya.

21:05Tetap harus di cek satu persatu,

21:07kegitu ketemu, baru dibalikin.

21:09Oke.

21:11If you make two array,

21:13to store two features of separate index,

21:15and put the values in the same order,

21:17so that of the first entity are stored

21:21in the same order.

21:23Apa ini?

21:25Oh, implementationnya bisa beda-beda ya.

21:29Kalau ini,

21:31ini kayaknya mau nyimpan nama sama

21:33nomor telepon ya.

21:35Yang biasanya langsung simpan key value ya.

21:39Jadi,

21:43kalau si Carter itu nomor teleponnya ini,

21:45si David itu nomor teleponnya ini.

21:47Itu loopnya dua tingkat,

21:49jadinya nested kan.

21:51Ini enggak, ini satu.

21:53Iya, satu, enggak ada loop.

21:55Oh, cuma satu deh.

21:57Oh ya, if you want.

21:59Tapi kalau misalkan kita mau for loopnya

22:01dua kali ya, berarti tidak optimal kan.

22:03Ini yang di loop cuma namanya doang ya?

22:07Bukan nomornya.

22:09Bukan nomornya.

22:11Jadi dia mencari berdasarkan nama.

22:13Nah, ini udah bukan tentang Big O lagi nih.

22:19Itu deh, kita buka yang di private chat.

22:21Tanya Jem'nai dong.

22:23Tanya Jem'nai buat

22:25ngasih contoh-contoh

22:27Big O notation yang

22:29common.

22:31Zoom in.

22:39Eh, salah.

22:41Zoom in videonya.

22:47Nah, ini enak sih.

22:49Menanfaatnya tanya ke LLM Chatbot.

22:51Ini kalau yang OO1

22:59ini optimal banget lah.

23:01Konstan ya, konstan.

23:03Mau kita cari seribu,

23:05sepuluh ribu, sejuta ya sama

23:07hasilnya. Seribu kali ya seribu kali.

23:09Nah, itu contohnya kalau kita

23:11udah punya indexnya.

23:13Misalnya kita udah punya indexnya.

23:15Nah, jelannya cuma sekali.

23:17Jadi misalnya array kita udah tahu

23:19item yang kita cari di index ketiga

23:21atau ke seratus atau pertama.

23:23Ya kerjanya kan sama.

23:25Tentunya adalah mengakses

23:29array berdasarkan

23:31angka index ya.

23:33Gak perlu cek satu-satu lagi

23:35karena kita udah punya indexnya.

23:37Yang kedua, linear time.

23:41Linear time itu berarti naik begini ya.

23:43Linear naik ya.

23:45Sumbu X sama sumbu Y

23:47jadi di tengah-tengah gitu ya.

23:49Jadi menyesuaikan dengan

23:53jumlah items.

23:55Misalkan item yang satu

23:57ya OO1. Kalau item yang dua

23:59berarti OO2 atau OON.

24:01Jumlah number itemsnya.

24:03Kalau OO1,

24:05kalau seribu berarti OO1.

24:07Nah, contohnya itu

24:09finding the maximum value

24:11in unsorted array.

24:13Kita punya array yang

24:15isinya angka acak.

24:17Kita nggak tahu tingginya

24:19nggak diurut sama sekali.

24:21Berarti kan tetap harus

24:23dari awal sampai akhir cek

24:25semua satu-satu angkanya kan.

24:27Cek kalau lebih tinggi

24:29distort the memory.

24:31Cek selanjutnya

24:33kalau nggak lebih tinggi ya udah nggak usah

24:35ngapa-ngapain next. Cek lagi.

24:37Harus sampai kelar kan.

24:39Jadi kalau misalnya itemnya

24:41array itu isinya cuma

24:43satu angka

24:45ya jalannya cuma sekali.

24:47Kalau array-nya isinya lima angka, jalan lima kali.

24:49Kalau array-nya isi

24:51seribu angka ya seribu kali.

24:53Ya, step-nya.

24:55Ya, itu linear.

24:57Kemudian yang

24:59berdua. Nah, ini bukan pula

25:01aneh-aneh nih.

25:03Buat yang aneh ini matematik, udah mulai gitu-gitu

25:05ini. Angka dua ya.

25:07N angka dua ya.

25:09Jadi misalkan

25:11kalau datanya

25:13cuma satu.

25:15Ya, satu.

25:17Ya, kalau datanya dua,

25:19dua pangkat dua,

25:21cari empat.

25:23Kalau datanya lima, lima pangkat dua,

25:25lima kvadrat, dua lima.

25:27Seribu, si juta, mampu.

25:29Ini yang forwardnya dua ya.

25:31Nasty loop iterating

25:33over the same array.

25:35Jadi array-nya satu, tapi ada

25:37loop yang sama gitu.

25:39Misalnya apa compare kali ya?

25:43Jadi

25:45satu data,

25:47ya compare tapi yang nggak optimal gitu.

25:49Jadi misalnya kita punya data user.

25:51Ada banyak. Nah, terus kita

25:53ngeloop usernya.

25:55Tapi misalnya kita mau nyari

25:57user yang dari organisasi

25:59yang sama atau dari sekolah yang sama.

26:03Kita loop masing-masing user

26:05di user pertama.

26:07Kita loop lagi semua user di dalamnya.

26:09Jadi loop di dalam loop buat ngecek

26:11organisasinya sama atau nggak.

26:13Ya.

26:15Pokoknya, kalau ada nested loop,

26:17nah itu yang

26:19jadi rat-tack ya

26:21dalam tanda kutip ya.

26:23Sebisa mungkin

26:25kalau bisa, jangan.

26:27Apalagi

26:29yang kombinasi.

26:31Tau nggak kombinasi, pernah melakukan nggak?

26:33Saya sih pernah dulu ya.

26:35Gimana-gimana contohnya?

26:37Jadi misalkan

26:39di database

26:41kita udah dapet nih datanya.

26:43Abis itu kita loop lagi

26:45di aplikasi

26:47untuk misalkan ngambil nama

26:49gitu kan. Kita udah select

26:51gintang from people

26:53misalkan atau from user di atas gitu kan.

26:55Terus di bawah kita ngambil

26:57data user yang lain. Terus kita mau

26:59mapping nih, nama sama data yang lain.

27:01Itu dikerjakan

27:03tidak di sisi database

27:05tapi di sisi

27:07kode. Kita loop lagi.

27:09Jadi itu udah berapa kali ya.

27:11Mungkin tidak nested.

27:13Tapi sudah ada 3 for loop.

27:15Nah itu nanti akan ada di bawah

27:17yang di bawah ini.

27:19Kalau ini berarti nested ya.

27:21Nestednya berarti 2 kan.

27:23Nested 2 kan.

27:25Kalau nested 3, berarti pangkat 3.

27:27Pangkat 3 betul.

27:29Gross Quadratically

27:37Scroll atas?

27:43Oh atas ini?

27:45Iya, ini kan.

27:47Log N ini?

27:49Gross Logarata

27:55Minerals Search yang tadi.

27:57Ini contohnya gimana sih?

28:03Nggak inget.

28:05Saya punya

28:07artikel sih.

28:09Ini kan tadi

28:11kita omongin ya.

28:13Kalau O1 itu

28:15ya garis lurus lah ya.

28:17Kalau N itu dia...

28:19Kalau yang tadi nggak dikasih contoh yang pangkat 3 ya.

28:21Maksudnya kita mikir sendiri lah.

28:23Concrete-nya pasti nambah berat lagi.

28:25Makin banyak datanya

28:27makin sama, tapi

28:29dia waktu datanya sedikit

28:31cepat banget, eksponen.

28:33Log N itu naik.

28:35Makin eksponen, tapi makin banyak datanya

28:37ya sama aja gitu.

28:39Makin sedikit.

28:41Ini berarti bahaya ya, kalau orang nggak

28:43mau saya ada manfaat

28:45concretenya kenapa anak yang

28:47belajar Computer Science

28:49perlu belajar

28:51Big O. Kan ini kalau nggak ngerti

28:53cuma ngetes pakai data yang

28:55dikit, wah pakai ini aja, kenceng.

28:57Tiba-tiba jubul.

28:59Biasanya kan kita gitu

29:01developer juga suka gitu kan.

29:03Di saya cepet kok orang datanya data

29:05Dami cuma 10, ini cepet.

29:07Kalau pasti pakai berapa datanya?

29:11Dan sekarang lebih bahaya lagi ya.

29:13Maksudnya jaman server loss atau cloud

29:15ini kalau misalnya kesalahan

29:17yang terjadi di server

29:19billing, kalau misalnya

29:21on-prem kan yaudah paling jubul

29:23servernya mati yaudah.

29:25Kalau ini lebih horror lagi.

29:27Iya, nggak mati.

29:29Transaksi aman.

29:31Billingnya juga auto

29:35scale-nya kebetulan nyala

29:37nyalain service apa.

29:39Nah, jumlah

29:41jumlah 000-nya juga

29:43terreflektir

29:45di billing.

29:47Iya, itu kayak kita

29:49nggak didos diri sendiri.

29:51Ya, nah di sini

29:55di artikel ini ada

29:57contoh, contohnya adalah

29:59kalau kita punya travel app

30:01gitu kan, jadi misalkan

30:03kita mau filter by price.

30:05Nah, sebenarnya kan kalau misalkan kita mau

30:09cari filter gini kan

30:11kita cek dulu harga minimumnya berapa

30:13harga maksimumnya berapa.

30:15Semakin banyak data pasti semakin

30:17semakin lama, karena kan harus

30:21cek satu persatu.

30:23Jadi kalau misalkan kita punya

30:25datanya kayak gini, ini simple aja ya

30:27contoh dari sini

30:29disederhanakan gitu kan.

30:31Kita punya data ini, entah itu datanya

30:33dari SNK,

30:35API, atau dari database

30:37yang terserah gitu kan.

30:39Kita bisa lakukan dengan cara ya tadi

30:41yang eksponensial, N2.

30:43Iya kan?

30:45Kalau for loopnya 2.

30:47Jadi kita cek

30:49yang minimum berapa

30:51sama yang maksimum berapa.

30:53Kalau tadi udah dibahas juga

30:55kalau 3 di pangkat 2,

30:575 di pangkat 2, 10 di pangkat 2,

30:59100 di pangkat 2. Dari 10

31:01ke 100 itu jauh sekali bedanya.

31:03Kalau dari 3 ke 5

31:05mungkin masih ok lah gitu ya.

31:075 ke 10 juga masih ok gitu kan.

31:09Tapi kalau udah ke 100,

31:111000 dan seterusnya itu jauh sekali.

31:13Pokoknya dia

31:15n pangkat 2.

31:17Terus pengulangan dari

31:21apa? Pengulangan tapi di dalamnya

31:23ada 2 operasi.

31:25Kalau ini kan pengulangan

31:27dalam pengulangan. Kalau ini

31:29pengulangan satu, tapi ada

31:312 operasi, dari harga paling kecil

31:33sama dari harga paling besar.

31:35Itu berarti

31:37ON ya? ON, linear

31:39time itu ya berarti kan?

31:41Nggak ngaruh ya.

31:43Berarti nggak ngaruh sama satu, dua.

31:45Ya sesuai.

31:47Linear, sesuai. Itemnya 5

31:49ya dia jalan 5 kali yang tadi itu.

31:51Kalau itemnya 100, dia jalan

31:53100 kali.

31:55Ini jauh lebih baik daripada kita bikin

31:574 lagi, satu lagi dibawah gitu kan.

31:59Jauh lebih baik dibanding

32:01yang tadi itu yang atas, yang kudrat

32:03yang pangkat 2.

32:05Itu adalah

32:07ON.

32:09Kalau O1 ya kita bisa langsung

32:11dapat, ini

32:13misalkan kita si datanya

32:15itu udah kita sort duluan.

32:17Kita bisa tahu harga yang minimum itu

32:19pasti inggis 0.

32:21Tapi

32:23operasi nge-sortnya

32:25itu nggak

32:27pertanyaannya?

32:29Ya maksudnya beda kan.

32:31Mungkin hanya satu spesifik functionnya kan.

32:33Kalau operasi sortnya kan

32:35ada lagi nanti potongannya.

32:37Nah sekarang jadi pertanyaan

32:39kalau misalkan

32:41di database kita pake sort

32:43by price, ascending

32:45atau descending lah.

32:47Itu termasuk ke perhitungan

32:49atau nggak? Masuk kan ya.

32:51Ya makanya

32:53kita pelajarnya, makanya

32:55saya waktu itu pelajarinya di

32:57di mata kuliah DB.

32:59Tapi akan jauh

33:01lebih buruk kalau misalkan di database

33:03kita nggak sort, kita sortingnya

33:05di model.

33:07Kalau menurut saya sih

33:23lebih bagus sortnya di database.

33:25Iya, udah lebih optimiskan.

33:27Karena database

33:29punya

33:31index.

33:33Lebih cepat dia

33:35sortnya. Maybe

33:37depends ya tergantung

33:39kehandalan

33:41DB

33:43database kayaknya udah

33:45dioptimasi untuk hal-hal

33:47seperti itu kan.

33:49Harusnya ya built in kecuali

33:51beneran kita bikin.

33:53Tapi pagination di database itu

33:57tetap masih masalah kok sampai sekarang.

34:01Iya, iya, iya.

34:03Itu gambarannya kira-kira

34:07jadi gambarannya segini.

34:09Jadi yang tadi ya

34:11yang paling bagus ya

34:13pasti oh satu atau lock

34:15N itu masih oke.

34:17Oh N ini

34:19lampu kuning gitu ya

34:21kalau udah N2 atau

34:23kalau udah berpangkat-pangkat itu yang

34:25reflekt

34:27kata anak sekarang ya.

34:29Iya.

34:31Ini nama istilahnya

34:33aja konstan logarithnya

34:35linear quadratic exponential itu

34:37N pangkat N ya.

34:39Indari yang

34:41X N pangkat N.

34:43Ini ya. Pokoknya semua yang

34:45berpangkat-pangkat tuh kayaknya

34:47udah. Ini kalau udah nggak

34:49jadi ini masih oke.

34:51Kalau ini udah harus

34:53di de-factor ya.

34:55Oke.

34:57Tapi kan maksudnya ya tergantung

34:59harus ngapain. Tapi kan sebenarnya bisa

35:01diakalin di

35:03kalau untuk compare atau cari match

35:05kan ya udah jalan dulu

35:07sekali, di filter misalnya

35:09filter atau find, store di

35:11memory, baru jalan sekali lagi

35:13buat ngak compare. Ya, kalau

35:15use case-nya se-simple itu kan

35:17masih bisa diakalin ya, kecuali

35:19emang rumit banget.

35:21Yes.

35:23Nah, ini ada contoh-contoh

35:25notasi

35:27notasi Big O

35:29yang dari

35:31built-in

35:33function.

35:35Misalkan push, pop,

35:37kemudian

35:39unshift, dan lain-lain ya

35:41udah banyak. Cara menghitungnya gimana?

35:43Cara menghitungnya gini aja.

35:45Kasih tau per baris gitu.

35:47Jadi misalkan kalau for yang

35:49pertama itu O N. For

35:51yang kedua O N. Kalau ini kan O

35:531 ya. Kalau ini sebenernya bisa

35:55di-ignore sih. Jadi ini

35:57berarti N-nya ada 2. N

35:59dikali N jadi N panggap 2.

36:01Kalau ini berarti O 2 ya.

36:05Coba kalau

36:07di ini, apa namanya?

36:09Dipasukin ke

36:11jemana dia bisa jawab gak sih?

36:13Apa? Coba aja yang masukin.

36:15Big O

36:17Big O

36:19Big O

36:21ya. Big O

36:23Calculator

36:25Your Big O Calculator

36:27Notation Calculator. Count this

36:29Hilangin dulu itu nya

36:31comment-comment

36:33O N O N nya. Bisa gak ya?

36:35Bentar-bentar. Bentar ya.

36:37Kita buka

36:39bentar.

36:41Atau CGPT.

36:43Kita buka

36:452mini.

36:47Close. Kan bisa

36:49jemana yang di ini.

36:51Di browser aja.

36:53Iya ini di browser.

36:55Tadi kan itu browsernya

36:57Incognito.

36:59Maksudnya jemana

37:01Nano yang dibuild

37:03di browser.

37:05Nano gak bisa ditanya susah-susah.

37:07Nanti dia

37:09nanti dia halu.

37:11Jadi ini coffee.

37:13Apa? Gimana?

37:15Prom-nya. You are

37:17a Big O

37:19Big O Notation

37:21Calculator.

37:23Close.

37:29Calculate the

37:31third time

37:33complexity

37:35of this function.

37:37Of this

37:39code

37:41snippet below.

37:45Gini.

37:47Yang ininya dihapus.

37:49Ini kekecilan ya.

37:57Gak kelihatan ya.

37:59And explain.

38:01And explain your

38:03chain. And explain it.

38:05In detail.

38:13Pake triple ini gak?

38:15Eh udah ke pencet. Yaudahlah.

38:17Yaudahlah.

38:19The outer loop iterates ten times.

38:23Karena sepuluh ya. Oh ditara sepuluh ya.

38:25Pake N ya.

38:27Betul.

38:29For each iteration of the outer

38:31loop, inner loop iterates ten times.

38:33Inside inner loop to constant

38:35time operation, analyzing the

38:37complexity.

38:39Outer loop

38:41complexity satu

38:43constant.

38:45Oh inner loop juga constant.

38:47Tapi inner loop

38:49is nested within the outer loop.

38:51Total number iteration is sepuluh kali sepuluh.

38:53Sepuluh ten.

38:55Ten times ten.

38:57The operations

38:59inside the inner loop.

39:01Istilahnya namanya constant time ya.

39:03Constant time.

39:05Combining the complexity.

39:09The time complexity

39:11entire code is the product

39:13of time complexities of outer

39:15loop and the inner loop.

39:17Yang O1 itu

39:19tadi yang dimana ya?

39:21Outer loop?

39:23Yang outernya dianggap satu.

39:25Oh iya. Dikali yang

39:27nested. Jadi seratus ya.

39:29Oh seratus gitu ya.

39:31Constant factor

39:33is Rignore.

39:35Jadi kalau yang O1 itu bisa diignore.

39:39Relationship between number of

39:41iterations mulang berapa kali

39:43dan input size.

39:45Input size the number of

39:47iteration bertambah

39:49secara kvadrat.

39:51Berarti O on

39:53N pangkat dua.

39:55Benar.

39:57N represents benar.

39:59Ya benar.

40:01Size of the loop counters.

40:03Betul sekali.

40:05Betul. Enak ya.

40:07Sekarang bisa tanya ke

40:09chatbot.

40:13Nah kalau contoh yang

40:15apa? Ada juga nih.

40:17Ada demo-nya. Cuma kita nggak bisa masukin

40:19function kita sendiri.

40:21Cuma bisa pakai contohnya

40:23dari si

40:25timernya.

40:27Si calculator-nya.

40:29Gimana caranya?

40:31N sama dengan 10?

40:33Plug.

40:35Coba

40:37yang besar lah 100.

40:39Ini 100. Berarti

40:43O1?

40:45Ya.

40:47O1. Betul.

40:49O1 ya. Kalau ini

40:51sama.

40:53O1 juga.

40:55Oh nggak. Ini area.

40:57Ini area.

40:59Kok nggak ada garisnya ya?

41:01Iya. Kok nggak ada garisnya?

41:03Ini ada 2 loop.

41:05Berarti O2.

41:07ON ya.

41:09ON ya.

41:11Linear juga.

41:13Linear tapi

41:15lebih besar. Betul. Beda.

41:17Oh beda ya.

41:19Oh.

41:21ON kali 2.

41:23ON kali 2.

41:25Oh ya benar. ON kali 2.

41:27Tapi itu 1,1.

41:29Iya 1,1.

41:311,1 milion?

41:33Iya.

41:35Mikro itu.

41:37Sekan. Sekan.

41:39Time complexity ya

41:41berarti ya.

41:43Berarti itu tadi

41:45N kali 2. Nah kalau ini

41:47baru N

41:49pangkat 2 ya.

41:51Baru ini eksponensial.

41:53No. Jauh sekali.

41:55Tapi nggak di garis ya.

41:57Iya.

41:59Jauh banget ini.

42:01Ini nggak ada garisnya

42:03cuma ngasih tau ini doang.

42:05Cuma ngasih plot doang.

42:07Untuk ngebandingin masing-masing function

42:09itu tadi yang biru. Yang biru

42:11udah nggak kelihatan gitu saking.

42:13Abu-abu puncul

42:15merah.

42:17Yang ini aja terlalu jauh.

42:19Number of half.

42:21Ini

42:23yang dibagi 2 ya.

42:25Iya.

42:29Ini kayak log N.

42:31Log N di bawah ya.

42:33Iya.

42:35Total number of half itu

42:37berarti N ya.

42:41Iya.

42:43Log albinaries

42:45ini

42:47N juga.

42:51Oh ini yang lama nih.

42:53Iya.

42:55Sampai hang gitu.

42:57Kok bisa lama?

42:59Oh ini sebenernya

43:012 kali ya Pak?

43:03Ada path start? Nggak ya?

43:05Kan ada loopnya

43:07eh nggak deh.

43:09Ada repeat N itu.

43:11Oh iya.

43:13Ini di kali last numbernya

43:15di repeat kan.

43:17Di repeat sebanyak

43:19N itu.

43:21100.

43:23Ya 100 iya.

43:25Satunya ada 100.

43:27Terus abis itu di while loop

43:29countnya

43:31012

43:33jadi string.

43:35Terus sama nggak

43:37dengan angka 1

43:39yang jumlahnya 100 digit.

43:41Kebanyakan ini.

43:43Iya kan?

43:45Ini baru

43:47ON pangkat N

43:51berarti ya.

43:53Iya.

43:55Sama ya?

43:59Nggak, susah-susah.

44:01Hang lagi.

44:03Hang.

44:05Biarin aja.

44:07Masih lagi

44:09calculating.

44:11Calculating.

44:13Oh udah berhenti.

44:17Jadi dimana dia?

44:19Ini...

44:21Hah?

44:23Kok nggak ada?

44:25Ini gua serem deh soalnya

44:27ini brosernya sama.

44:29Brosernya sama.

44:31Nanti tiba-tiba

44:33stream yardnya error.

44:35Nggak bisa.

44:37Dikloss aja ya.

44:39Mau saya tab itu biarin aja.

44:41Oh biarin.

44:43Bisa dikloss ya?

44:45Bisa.

44:47Nah

44:49contoh yang paling

44:51sederhana adalah

44:53kalau mau

44:55low hanging fruit

44:57database-nya diindex lah ya.

44:59Ini ada contoh ya.

45:01Jadi misalkan kita

45:03apa, select

45:05dari sebuah table

45:07itu query-nya berapa

45:09bisa pakai analyze, expand analyze

45:11itu bisa ketahuan

45:13landing time-nya

45:151,5

45:17mili detik, execution time-nya

45:190,6

45:21mili detik ini, datanya sedikit ya.

45:23Tapi kalau udah kita bikin index

45:25itu

45:27bedanya berapa tuh?

45:29Bisa hemat 1 detik.

45:31Ya. Bisa hemat 1 detik.

45:35Hati-hati-hati dengan index.

45:37Iya jangan semua diindex ya.

45:39Kalau semua diindex

45:41cuma kayak mindahin

45:43tablenya doang ya.

45:45Iya buat apa gitu. Nggak guna.

45:47Kalau semuanya diindex dia nyarinnya gimana.

45:49Teman-teman di sini ada yang

45:51Berarti kompleksitifnya sama aja

45:53kayak pas awal.

45:55Kayak pas nyari tanpa index.

45:57Ada yang belum tahu

45:59istilah index itu

46:01cara kerjanya kayak gimana?

46:03Oh belum tahu.

46:07Index itu kayak

46:09kayak buku.

46:11Buku pages tahu

46:13yellow pages.

46:15Kalau kita mencari

46:17Ada index ya kan?

46:19Iya. Setiap buku itu ada index.

46:21Jadi misalkan kita mau cari

46:23mau cari apa ya

46:25di yellow pages itu biasa ada

46:27daftar toko.

46:29Jadi

46:31kalau misalkan kita mau cari

46:33toko dengan

46:35nama depan F

46:37itu kita nggak perlu cari dari halaman satu.

46:39Kita cukup cari

46:41kira-kira di tengah-tengah sini C.

46:43Nah itu index.

46:45Jadi dia index berdasarkan

46:47berdasarkan titlenya

46:49atau kategorinya.

46:51Terus nanti begitu dicari ya kita cari

46:53berdasarkan yang kayak tadi, binary research gitu.

46:55Binary research kan berarti

46:57kayak dibagi setengah

46:59di sini, di kiri

47:01di A atau di B.

47:03Kalau ada di B, dibagi dua lagi

47:05di sini atau di sini.

47:07Berarti gitu-gitu terus ya.

47:09Mungkin implementasinya seperti itu.

47:11Tapi yang jelas kalau misalkan

47:13yang tadi ya, misalkan kita mau cari

47:15alamat orang atau nomor

47:19telepon orang

47:21yang namanya adalah Z.

47:23Kalau

47:25nggak pakai index ya kita cari

47:27dari A. Kita bukan dari A.

47:29Tapi kalau di index misalkan

47:31indexnya A, B, sampai

47:33Z ya kita bisa cari

47:35A, kita lewatiin. Oh B, kan ada

47:37tandanya tuh.

47:39Lebih sedikit

47:41eksekusinya.

47:43Gitu lah kira-kira.

47:45Saya ada contoh

47:47dunia nyata

47:49yang saya

47:51dengar pengalaman langsung

47:53dari seorang direktur

47:55operasi sebuah

47:57perusahaan untuk penyewaan

47:59mobil. Yang cukup

48:01besar ya. Cukup besar.

48:03Armadanya

48:05ada sampe...

48:07Perusahaannya yang besar.

48:09Armadanya aja

48:11di satu kota, mobil yang

48:13mereka miliki asetnya itu

48:15ada 15 ribu

48:17mobil.

48:1915 ribu unit.

48:21Pertanyaannya, bagaimana

48:25cara menyimpan

48:27kunci seret

48:29BPKB

48:31dan STNK nya

48:33inventarisnya secara baik dan benar.

48:3515 ribu.

48:3715 ribu.

48:39Di mana coba?

48:41Kunci seret, photocopy

48:43STNK misalnya, atau

48:45kunci seret dan

48:47paperwork lah ya.

48:49Kan harus ada satu unit, harus ada.

48:51Pake filing ya, filing kabinet gitu.

48:53Kalau misalnya

48:55kalian bilang, oke pakai filing kabinet

48:57terus kemudian dibikin sistem

48:59pakai software, di mana nanti

49:01posisinya. Jadi tinggal

49:03set di sistem, oh nanti di filing

49:05kabinet itu.

49:07Itu katanya

49:09super kompleks.

49:11Too much work.

49:13Udah bikin sistem, harus

49:15bikin sistem yang

49:17supaya synchronize, oke kalau

49:19ada yang salah letak gimana?

49:21Mampus nyarinya tuh.

49:23Ya kan?

49:25Dia cuma bikin sebuah

49:27kabinet kotak

49:29yang ada

49:31100 ininya.

49:33100 laci gitu ya.

49:35Yang sesuai ukurannya.

49:37Dan dinomorin

49:39dari 00 sampai 99.

49:41Jadi semua angka

49:43plat.

49:45Sesuai nomor STNK?

49:47Ya sesuai nomor A plat itu 00

49:49sekian-sekian. Jadi kalau misalnya

49:51nomornya

49:53988

49:55ya udah berarti cari di laci

49:5719.

49:59Ya meskipun disana banyak, tetapi

50:01yang kamu cari itu

50:03yang ada

50:05di dalam situ gitu.

50:07Ya lebih mudah mencarinya.

50:09Jadi systemize scan yang

50:11sesuai dengan dalam kotak itu. Jadi dikategorikan

50:13berdasarkan

50:152 angka di depannya

50:17dia bikin.

50:19Ya cari

50:21tetapi

50:23maksudnya tetap

50:25butuh mencari. Mungkin di dalam situ ada

50:271000 kali kuncinya. Tetapi lebih mudah

50:29mencari 1000 daripada mencari

50:31yang salah letak. 1. Kedua

50:33Error rate atau human error

50:37untuk meletakkan sesuatu

50:39di tempat yang salah

50:41jauh lebih kecil. Karena dia udah liat

50:43oh 99

50:45ya sudah cari kotak 99.

50:47Taroklah di kotak

50:4999 barangnya.

50:51Atau cari di kotak sekian.

50:53Jadi dia menerapkan

50:55hospital yang membuat

50:57sistem operasional jauh lebih

50:59jauh lebih

51:01efisien.

51:03Error rate dia rendah.

51:05Nah itulah

51:07kisah nyata indexing.

51:09Indexing physical.

51:11Ada

51:13ada bidang

51:15studinya sendiri kan. Katalogin

51:17gitu kayak perpustakaan.

51:19Ya makanya

51:21dikategorikan berdasarkan apa gitu kan.

51:23Ya betul.

51:25Taksonomi. Supermarket.

51:27Supermarket itu kan

51:29banyak ya.

51:31Dan mengkategorikan sesuai apa.

51:33Berdasarkan itu berdasarkan

51:37harga.

51:39Produk.

51:41Sorting ascending depan

51:43paling murah.

51:45Dibalik ya.

51:47Cuma tanya, berarti

51:49kalau di dunia database,

51:51indexing itu berarti require

51:53membutuhkan kayak

51:55landmarkan semacam penanda

51:57yang kayak ibaratnya

51:59absolut dan nggak bisa diubah-ubah.

52:01Dan cukup praktikal kan. Kalo contoh

52:03kasus tadi apa? Yellow Pages

52:05atau buku telpon.

52:07Alphabet kan cuma A sampai Z.

52:09Cuma ada 26.

52:11Dan kalau emang namanya depannya Z kan

52:13ya anggap aja kecil kemimpinan

52:15udah ganti nama. Kalo pada saat itu

52:17namanya depannya Z, ya udah kan

52:19jelas. Nah terus kayak si

52:21itu mobil nanti juga kan

52:23STNK kan nomor plat kan

52:25nggak berubah-ubah. Jadi kayak harus

52:27ada itu kan pointer yang

52:29Berubah dong.

52:31Kalau terpanjang STNK.

52:33Nomor plat tidak berubah.

52:35Nggak ya.

52:37Nggak berubah. Ya

52:39berarti kan harus, berarti challenge-nya

52:41mungkin pilih

52:43unik key.

52:45Unik key-nya

52:47dicari, apa dibagi

52:49berdasarkan desimal? Atau gimana

52:51tuh? Misalnya range

52:53itu tergantung sih primary key-nya

52:57ya misalnya

52:59di database, kalo di database

53:01primary key

53:03nggak mesti

53:05eh sorry, index itu

53:07nggak mesti primary key.

53:09Tapi primary key itu udah pasti

53:11diindex ya.

53:13Kita bisa menambahkan index tambahan.

53:15Yang unik dan nggak berubah.

53:17Tapi kalo misalkan ada perubahan

53:21dia direindex kan?

53:23Yes.

53:29Enggak indexnya ditambahkan.

53:31Bukan ada perubahan.

53:33Kalo ada perubahan direindex semua.

53:35Enggak direindex semua.

53:37Cuman diubah aja kan ini-nya

53:39kan ya. Index table-nya

53:41dia ada sendiri.

53:43Si database tuh punya index table-nya

53:45sendiri.

53:47Kayak ada contoh

53:55ini nih.

53:57Contoh

53:59lucu-lucuan nih.

54:01Yang pernah saya

54:03pakai untuk

54:05interview

54:07orang yang mau masuk ke

54:09human way.

54:11Buat yang mau interview

54:13siapa tau besok gue interview Ivan.

54:15Dikasih soal yang lain. Anda terjebak.

54:19Window ya, window, window.

54:25Window-nya gimana sih caranya?

54:33Sudah?

54:35Keliatan. Luka kita.

54:37Panjang begini.

54:39Ntar.

54:41Kayak coba ini nih.

54:45Kecil sekali.

54:47Ya.

54:49Kok ada item di atasnya ya?

54:51Oh iya kok bisa sih.

54:53Itu item di atasnya.

54:55Enggak lah entah.

54:59Rescreen aja lah.

55:01Rescreen aja.

55:03Kalau begini bisa gak?

55:07Kalau cuma satu top aja.

55:09Nah bisa ya?

55:11Nah.

55:13Jadi

55:17ini kan carousel.

55:19Anggap

55:23ini membuat block

55:25di dalam block editor-nya si WordPress.

55:27Ada carousel.

55:29Dimana satu ini

55:31slide namanya.

55:33Slide itu berdasarkan konten dari post.

55:35Dan ada filter untuk mencari

55:37untuk mempersempit

55:39apa yang perlu

55:41dicari di dalam slide ini.

55:43Jadi hasilnya ini dipersempit oleh

55:45filter.

55:47Isi slide bisa

55:49berupa post, bisa berupa kategori.

55:51Jadi slide ini adalah

55:53berdiri sendiri.

55:55Ininya, itemnya.

55:57Dia punya query custom ya?

55:59Enggak sih enggak.

56:03Enggak query.

56:05Ini unit ini

56:07bisa

56:09recipe

56:11atau post.

56:13Bisa juga kategori itu maksudnya.

56:15Dan

56:17satu slide ini kan

56:19carousel ya. Berarti dia tetap bisa

56:21menambah tab. Ini ada tab-nya.

56:23Tab 1, 2, 3, 4, 5,

56:25sampai 10 juga mungkin bisa.

56:27Atau terserah banyak

56:29juga bisa.

56:31Kemudian setiap tab tentu

56:33harus diisi slide-nya.

56:35Kebayang?

56:39Notation-nya.

56:41Jadi

56:43isi ini

56:47slide ini ada sendiri

56:49dan setiap tab

56:51ada sendiri.

56:53Notation.

56:55Gimana cara kalian

56:57untuk

56:59membuat

57:01query-nya di front-end

57:03mungkin bukan front-end secara

57:05JavaScript. Anggap aja masih PHP.

57:07Mengquery data ini.

57:11Data yang disimpan

57:13di setiap slide ini nanti adalah

57:15ID dari post atau ID dari

57:19kategori. Jadi mungkin

57:21post ID 1, kategori ID 1,

57:23post ID 2, kategori

57:252, kategori 3, gitu.

57:27Disimpannya begitu.

57:29Dan ada

57:31pertanyaannya di front-end

57:35bagaimana cara kalian melakukan

57:37query-nya.

57:39Bayang gak?

57:45Ya kan harus diambil dari database.

57:47Harus diambil

57:49ke database, kan? Data ini kan.

57:51Berarti bukan front-end, kan?

57:53Ya maksudnya saat mau

57:55ditampilkan, ini kan

57:57di block editor, di ak,

57:59di UI di depan,

58:01kan harus di query

58:03tuh.

58:05Bagaimana cara mengambil

58:07datanya supaya

58:09big-one notation-nya kecil.

58:13Masing-masing tab ada setting

58:17filter-nya sendiri. Kepisah, kan?

58:19Maksudnya, apa?

58:21Misalnya di tab pertama,

58:23kategori A.

58:25Di tab kedua,

58:27kategori B atau post.

58:29Gak, gak seperti itu. Satu item ini

58:31berdiri sendiri, jadi gak ada filter-filter.

58:33Jadi anggap aja, kalau saya mau

58:35isi ya, saya

58:37cari. Oh, masing-masing item itu

58:39kepisah, ya? Bukan

58:41query, show,

58:43post, kategori A. Semuanya? Bukan.

58:45Gak. Satu item

58:47berdiri sendiri. Satu unit sendiri.

58:49Jadi bukan andal dari kategori

58:51apa, taruh sini.

58:53Tetapi bisa jadi,

58:55ya, bukan

58:57begitu. Jadi bukan diandal

58:59dari satu kategori.

59:01Bisa jadi, ini post,

59:03tapi disebelahnya ini adalah kategori.

59:05Sebagai satu unit.

59:09Karena kategori kan bisa jadi,

59:11bisa punya image, bisa punya nama.

59:13Jadi sebenarnya,

59:15di-show aja, nyempil aja gitu.

59:17Ada mungkin Beef Wellington, ada Beef

59:19Something Else apalah gitu ya.

59:21Atau Dinner gitu. Beef Roasted.

59:23Atau Carnivore.

59:25Carnivore.

59:27Nah,

59:31kalau gue nih, ini jawaban yang

59:33sesatnya ya. Maksudnya mungkin kalau

59:35interview, mungkin ini ditolak.

59:37Tergantung

59:39data-nya sih, realistik,

59:41realistik, tiap

59:43ngambil satu, tiap nge-query post,

59:45simpen di memori, terus

59:47ngambil satu lagi, list of

59:49kategoris, simpen lagi di memori.

59:51Abis itu, next item

59:53kan makin lama, makin

59:55ringan kan, karena tinggal ngambil dari

59:57yang udah disimpen.

59:59Tapi kalau database-nya besar banget ya,

1:00:01masalah baru lagi.

1:00:03Itu satu jawaban

1:00:07sesat. Kalau jawaban yang benar, apa ya?

1:00:11Kamu

1:00:13maksudnya,

1:00:15gimana?

1:00:17Kebayang nggak?

1:00:19Nggak.

1:00:21Nggak kebayang.

1:00:23Kan maksudnya UI-nya, gue bayangin gini kan,

1:00:25pas nge-quick gitu, untuk milih item pertama

1:00:27kan harus ada list of posts

1:00:29buat dipilih kan.

1:00:31Nah, pasti ponenya semua itu gue bikin

1:00:33kayak function lah, semua di pisasi function,

1:00:35get post, get category,

1:00:37get tax, atau taxonomy

1:00:39apapun, yaitu setiap

1:00:41menjalani ini, di cash,

1:00:43setiap menjalani si function

1:00:45getter ini, get post,

1:00:47get category, get tax, di cash.

1:00:49Nah, jadi kalau

1:00:51habis itu buka lagi, get post,

1:00:53itu kan udah kayak prepopulate, ada cash-nya.

1:00:55Maksudnya yang tadi kayak gitu sih.

1:00:57Kalau yang bener gimana, nggak tahu.

1:00:59Belum ada ide.

1:01:01Mau liat hasil akhirnya nggak,

1:01:03contohnya kayak gimana?

1:01:05Mau, mau, mau.

1:01:07Ini jawabannya.

1:01:09Karena ini udah jadi

1:01:11sebenarnya projectnya.

1:01:13Tapi didiadikan soal

1:01:15untuk interview gitu ya?

1:01:17Itu yang saya solve sendiri.

1:01:19Itu maksudnya project yang

1:01:21saya lakukan dan udah

1:01:23selesai.

1:01:25Saya share.

1:01:27Oh ya, sorry, sorry.

1:01:29Di fullscreen soalnya.

1:01:31Ini situsnya.

1:01:33Jadi lah, blognya.

1:01:35Yoi.

1:01:37Gue selalu ngajarin, ngajarin ini laper mulu.

1:01:39Ini yang tanpa tab.

1:01:41Yang ini tanpa tab.

1:01:43Ini tanpa tab.

1:01:45Ini yang ada tab-nya.

1:01:47See?

1:01:49Oh, isi pastas.

1:01:51Fast and fresh.

1:01:53Ya kan?

1:01:55Dan itu nggak harus

1:01:57semuanya recipe, bisa category, bisa...

1:01:59Ya, bisa.

1:02:01Ada nggak ya category ya contohnya ya.

1:02:03Kebetulan datanya

1:02:05tidak ada.

1:02:07Tetapi sebenarnya

1:02:09di dalam ini bisa nyempil satu category.

1:02:11Ya, nggak ada.

1:02:15Wait.

1:02:19This one seems like a category.

1:02:21No.

1:02:23Oh, wait.

1:02:2515 menit? Nggak.

1:02:27Ya, so...

1:02:29Bahasanya kayak gitu lah. Ini kan category.

1:02:31Oh, ini. Ini category semua nih.

1:02:33Tapi, nggak ada.

1:02:35Karusele-nya nggak terbentuk karena nggak abis.

1:02:37Gak panjang.

1:02:39Kurang panjang.

1:02:41Tapi sebenarnya ini karusele blog juga sama.

1:02:43Oke.

1:02:47So, kunci jawabannya.

1:02:49Oke.

1:02:53Saya bikinnya begini.

1:02:55Kita zoom in

1:02:59dulu ke satu blog ya.

1:03:01Ke satu blog yang seperti ini deh.

1:03:03Yang nggak ada...

1:03:05Yang nggak ada...

1:03:07Apa namanya?

1:03:09Nggak ada...

1:03:11Nggak ada tab-nya.

1:03:15Nggak ada tab-nya.

1:03:17Nggak ada tab-nya, maksudnya.

1:03:19Yang saya...

1:03:21Karena tadi ada dua entitas data.

1:03:23Entity, satu post, satu category.

1:03:25Maka dengan terpaksa

1:03:27harus ada dua query ke database.

1:03:29Karena satu ngambil post,

1:03:31satu ngambil category.

1:03:33Tetapi saya kumpulkan

1:03:35semua. Saya kumpulkan semua

1:03:37ID dari post

1:03:39dan saya kumpulkan semua ID

1:03:41dari category.

1:03:43Saya query sekaligus

1:03:45semuanya. Seabruk-abruk.

1:03:47Dan disimpan

1:03:49ke array.

1:03:51Dan tinggal ditampilkan.

1:03:53Nah.

1:03:55Kalau misalnya dia

1:03:57ke tab,

1:03:59sama. Saya kan sudah punya

1:04:01data post ID seluruh tab.

1:04:03Dan saya punya

1:04:05category ID dari seluruh tab.

1:04:07Saya tetap melakukan

1:04:09dua query.

1:04:11Sama. Jadi jumlah query-nya tetap

1:04:13sama. Selalu dua.

1:04:15Get post by ID,

1:04:17get category by IDs.

1:04:19Now, let's

1:04:21take a big picture. Karena

1:04:23saya yang kendalikan halaman ini,

1:04:25saya tahu isi

1:04:27halaman ini ada berapa banyak

1:04:29block

1:04:31yang memakai karusel block.

1:04:33Saya bisa query

1:04:35seluruh halaman. Saya sebelum

1:04:37dia ditampilkan. Saya

1:04:39query.

1:04:41Saya memparsing

1:04:43konten untuk mengambil

1:04:45dari block ini,

1:04:47mengambil semua post ID

1:04:49dan semua category ID.

1:04:51Jadi,

1:04:53untuk menampilkan satu halaman ini,

1:04:55untuk seluruh karusel yang ada,

1:04:57hanya butuh dua query.

1:04:59Dua query.

1:05:01Oh, sudah punya ID-nya ya?

1:05:03Kirain itu tadi

1:05:05user-nya. Maksudnya user dalam

1:05:07arti work trace admin-nya,

1:05:09kirain dia harus buka suatu UI,

1:05:11milih dulu post mana

1:05:13yang mau dimasukin, category mana

1:05:15yang mau dimasukin.

1:05:17Saat di admin, dia kayak gitu.

1:05:19Saat di admin,

1:05:21dia

1:05:23satu-satu,

1:05:25masukinnya satu-satu. Jadi, dia

1:05:27pilih iris beef,

1:05:29di-search iris beef,

1:05:31masuk, kosok.

1:05:33Oh, iya.

1:05:35Itu di admin-nya sendiri

1:05:37berarti ya. Maksudnya nggak bikin from scratch

1:05:39yang milih itu.

1:05:41Oh, ini bikin dari scratch. Ini react ini.

1:05:43Ini bikin dari scratch.

1:05:45Nah, berarti itu kan tetap harus

1:05:47memanggil semua post juga kan

1:05:49sebelum tahu ID-nya apa.

1:05:51Yang user facing phone N ini

1:05:53emang

1:05:55sudah tahu ID-nya, jadi bisa

1:05:57get post by ID 1, 2, 3,

1:05:59terus abis itu

1:06:01get category by ID juga.

1:06:03Nah, tapi sebelumnya

1:06:05pas di admin-nya kan harus

1:06:07get all post dulu kan.

1:06:09Iya, satu-satu. Dia tetap

1:06:11harus search karena dia mau masukin apa

1:06:13kesini dia mau punya full kendali

1:06:15saat searching gitu.

1:06:17Oh, iya, iya, iya.

1:06:19Tapi ada faktor ini dong

1:06:21semakin banyak data di database

1:06:23akan semakin berat karena query-nya

1:06:25walaupun 2, tapi jumlah datanya

1:06:27kan bisa berpengaruh.

1:06:29Karena sudah punya ID

1:06:33dan ID-nya itu adalah primary key.

1:06:35Jadi sebenarnya

1:06:37post...

1:06:39Maksudnya

1:06:41post in atau query

1:06:43in itu

1:06:45lebih cepat sebenarnya

1:06:47karena in-nya itu adalah primary key.

1:06:49Lebih lama searching

1:06:53by title, contohnya

1:06:55yang tidak diindeks, tetapi

1:06:57ini adalah query in

1:06:59primary key.

1:07:01Jadi sebenarnya...

1:07:03Wah, berarti

1:07:07kerja beratnya di klien dong

1:07:09kalau datanya diambil semua?

1:07:11Enggak, karena

1:07:13tidak ada...

1:07:15Ini server-side render

1:07:17tidak ada...

1:07:19Ini bukan client-side render

1:07:21itu server-side render semua.

1:07:23Jadi saya query

1:07:27saya query

1:07:29jadi punya array yang

1:07:31cukup gemuk

1:07:33jadi makan memori sebenarnya

1:07:35tetapi ya, array-nya gemuk

1:07:37tetapi waktu ngerender setiap

1:07:39block, sebenarnya dia

1:07:41sudah tinggal

1:07:43hanya, sudah tinggal looping

1:07:45sudah tinggal...

1:07:47tinggal looping

1:07:49berdasarkan si isi array

1:07:51karena array-nya itu sudah diindeks

1:07:53by

1:07:55key dari

1:07:57array itu adalah post ID.

1:07:59Oh, berarti mirip kasusnya seperti

1:08:03yang tadi diawal. Antara

1:08:05kalau kita mau baca

1:08:07file, apakah baca file-nya semua

1:08:09dimasukkan ke memori, atau baca

1:08:11file per baris?

1:08:13Bedanya itu kan? Ini kurang lebih sama kan?

1:08:15Karena kita sudah punya datanya semua

1:08:19yang ada di memori

1:08:21pasti lebih cepat.

1:08:23Kita tidak perlu query lagi satu per satu.

1:08:25Jadi beberapa

1:08:29interviewer yang saya tanya

1:08:31dia

1:08:33pakai nesting loop

1:08:35untuk

1:08:37self-solving

1:08:39tab aja

1:08:41data per tab dia

1:08:43nesting for loop.

1:08:45Saya tanya lagi, kalau misalnya

1:08:47satu halaman itu ada 10

1:08:49karusel yang dipakai dan

1:08:51setiap karusel ada 10 tab

1:08:53dan setiap tab ada 100

1:08:55item, berapa jumlah

1:08:59dari mu?

1:09:01Belulah dihitung-hitung, wah banyak banget.

1:09:03Sebenarnya 3 tingkat

1:09:05for loop

1:09:07atau 10 for loop.

1:09:09Setiap karusel

1:09:13kan nested loop

1:09:15tapi kalau ada 10 block

1:09:17maka jadi 10

1:09:19nested loop.

1:09:21Saya bilang, berapa lama nanti

1:09:23jadinya page itu ke render?

1:09:25Kalau begitu caranya.

1:09:27Lagian itu kan di PHP kan

1:09:31pusing juga itu kalau nested loop-nya

1:09:33di PHP

1:09:35gak ke render-render.

1:09:37Berarti, oke.

1:09:41Make sense.

1:09:43Itulah

1:09:45gunanya

1:09:47saya belajar di connotation.

1:09:49Berarti emang ada kegunaan

1:09:51konkret ya, bukan cuma buat biar

1:09:53passing interview aja.

1:09:55Fundamental ada gunanya juga ya

1:09:57buat di...

1:09:59saya tidak belajar

1:10:01terus terang, kalau saya tidak belajar fundamental

1:10:03saya akan masuk ke jebakan for loop.

1:10:05Saya

1:10:07saya solve satu

1:10:09karusel dengan 1 tab

1:10:11fine, tetapi begitu

1:10:13dipakai di dunia nyata.

1:10:15Tadi kan banyak kan karuselnya, minimal

1:10:17ada 6 itu saya hitung tadi.

1:10:19Kalau misalnya tiap

1:10:21karusel 3

1:10:23tab-nya, terus ada 10

1:10:25itu ya eksponensial

1:10:27itu kalau misalnya for loop.

1:10:29Pasti minimal

1:10:313-5 detik

1:10:33render page-nya.

1:10:35Itu TTFD doang.

1:10:37Gak bisa lag di loop.

1:10:39Maksudnya in that particular case

1:10:41kalau misalnya JavaScript kan

1:10:43kalau user gak nge-scroll, ya gak usah

1:10:45manggil dulu atau gak ganti tab

1:10:47gak usah di render

1:10:49dulu. Kalau ini lebih fatal lagi ya

1:10:51berarti. Maksudnya apa?

1:10:53Harus dipikir di awal.

1:10:57Dengan cara teknik yang saya pakai

1:10:59hanya 2 query

1:11:01per page.

1:11:03Menarik, menarik.

1:11:07Untuk kisah nyata.

1:11:11Wah, ini ada yang ketinggalan.

1:11:13Referensi untuk teori

1:11:15Big O, ada tadi di

1:11:17awal-awal.

1:11:19Di atas ada ini.

1:11:21Medium.

1:11:23Afart CS50 lecture 3.

1:11:25Ada blog dari

1:11:27saya juga.

1:11:29Kalau yang bahasa Indonesia.

1:11:31Ada beberapa yang lain, silahkan

1:11:33di-check aja di ini.

1:11:35Oh ini ya, CS3 ya.

1:11:37CS50 ya.

1:11:39Ini kuliah gratis.

1:11:41Materi kuliahnya

1:11:43gratis.

1:11:45Penaruhin kuliah gratis tapi

1:11:47gak pernah selesai loh CS50 ini.

1:11:53Menentuk di

1:11:55sesi ke-2. Jadi kan introduction

1:11:57session 0, session 0.

1:11:59Terus kuliah kelas

1:12:01pertama, kelas ke-2.

1:12:03Habis itu selalu ke distracted heline.

1:12:05Tapi pendekatannya menarik ya tadi ya

1:12:09yang kesnya Ivan ya.

1:12:11Karena

1:12:13by nature

1:12:15atau ya naluri-naluri saya

1:12:17gitu ya. Mungkin setiap orang

1:12:19berbeda ya approachnya pendekatannya.

1:12:21Kalau saya melihatnya, saya akan

1:12:23bikin satu karusel itu

1:12:25satu fungsi.

1:12:27Jadi kalau ada 6 karusel, dia akan

1:12:29memanggil 6, minimal

1:12:316 query. Karena pakai

1:12:33fungsi kan. Misalkan

1:12:35fungsi karusel

1:12:37gitu kan. Terus habis itu yang dibutuhin adalah

1:12:39oh pakai tab atau enggak, true

1:12:41or false gitu kan. Terus di dalamnya nanti ada

1:12:43query-nya. Query-nya berdasarkan

1:12:45apa? Misalkan karuselnya berdasarkan

1:12:47kategori atau berdasarkan pos.

1:12:49Saya akan bikin seperti itu.

1:12:51Tapi kalau... - Kalau mungkin itu mindset

1:12:53JavaScript dev nggak sih? Kayak

1:12:55yang kebiasa, ya udah

1:12:57nanti, kalau dibutuhin

1:12:59baru misalnya bikin

1:13:01patch atau apa. Jadi kayak

1:13:03per block, per UI

1:13:05block, ada function, satu function.

1:13:07- Betul, betul.

1:13:09Kayak apa ya? Kayak mikirnya

1:13:11kayak...

1:13:13mungkin... - Unit.

1:13:15- Unit, function.

1:13:17- Iya, mikirnya unit. Jadi nggak keseluruhan

1:13:19halaman.

1:13:21- Itulah bahaya

1:13:23yang apa dong?

1:13:25- Tapi saya jadi tahu

1:13:27perspektif. Kalau misalnya

1:13:29ada tuntutan server

1:13:31site, jadi kita harus optimize

1:13:33di awal. Yang tadinya mungkin

1:13:35mindset-nya lebih ke visual

1:13:37block-nya. Satu

1:13:39item, satu

1:13:41function, satu query.

1:13:43Gue tadi malah salah paham

1:13:45sama soalnya dong

1:13:47lebih parah lagi. Kirain pas lagi milih

1:13:49item-nya.

1:13:51- Oke. Ini juga apa ya?

1:13:55Approach yang menarik

1:13:57juga. Karena kan ada apa ya?

1:13:59Beberapa tahun yang lalu, mungkin sekarang hype-nya udah

1:14:01kurang ya. Beberapa tahun yang lalu kan

1:14:03ada yang namanya GraphQL.

1:14:05GraphQL itu kan dia menghindari

1:14:07penganggilan data yang terlalu banyak

1:14:09ulak-ulak timpong gitu kan. Karena ada

1:14:11latensi dan lain-lain kan.

1:14:13Berarti kechase ini juga itu

1:14:15berguna kan

1:14:17harusnya kan. Jadi dia ngambil semua

1:14:19secara keseluruhan, terus baru

1:14:21diolah di sisi klien-nya atau di sisi

1:14:23front-end-nya gitu.

1:14:25Jadi bisa lebih efisien.

1:14:27- Cuma GraphQL itu kayaknya shifting

1:14:29beban, ya maksudnya

1:14:31mengoptimize-nya ke yang

1:14:33apa? Orang yang nulis

1:14:35service database-nya.

1:14:37Apa? Yang bikin API untuk

1:14:39untuk

1:14:41dikonsumsi sama GraphQL klien itu

1:14:43kan. Tetepkan software

1:14:45harus dioptimize. Misalnya apa?

1:14:47Kalau kita pakai REST API

1:14:49kan kita get users, gitu.

1:14:51fetch users, jalan

1:14:53sekali, dibalikin daftar user.

1:14:55Nah, terus abis itu

1:14:57get pose kita yang

1:14:59get pose by user ID kita

1:15:01yang masuk-masukin. Sementara kalau di

1:15:03GraphQL API kan kita bisa

1:15:05minta user, di masing-masing

1:15:07user, ada pose-nya

1:15:09yang dimana

1:15:11berarti kan itu sebetulnya dibalik layar

1:15:13tetap harus gimana caranya

1:15:15nyari semua, get pose by

1:15:17user ID kan. Sebenarnya sama, cuma

1:15:19sama. Tapi beban-nya

1:15:21di-shifting ke

1:15:23yaitu yang bikin API

1:15:25lah.

1:15:27- Iya, tapi kan istilahnya kita

1:15:29manggil satu untuk dipakai

1:15:31beberapa kali dibandingkan

1:15:33kalau kita pakai satu untuk satu

1:15:35karusel aja, terus yang kedua

1:15:37karusel lagi, yang ketiga karusel lagi

1:15:39kan di-kali 6

1:15:41kan dalam kasus Ivan

1:15:43tadi kan.

1:15:45- Eh, coba ya.

1:15:491,

1:15:512, 3,

1:15:534,

1:15:555,

1:15:576, ya. Eh, 5

1:15:595 blocks.

1:16:05- Tuhan, kebanyakan main di full stack ya.

1:16:07Full stack WordPress ya.

1:16:09- Sebenarnya, WordPress itu

1:16:17kan cuma foundation-nya, tapi ujung-ujungnya

1:16:19ya ph. Saya cuma

1:16:21saya nggak melihat WordPress itu adalah sesuatu yang istimewa

1:16:23karena ujungnya cuma php

1:16:25javascript

1:16:27react, kebanyakan

1:16:29karena block editor

1:16:31dan

1:16:33lebih ke framework

1:16:35kan sebenarnya ya.

1:16:37- Tapi karena php framework

1:16:41ya itu, jadi query-nya

1:16:43kan harus di php, ya nggak harus

1:16:45tapi by default.

1:16:47- Maksudnya, query-nya sudah menggunakan

1:16:49API-nya si WordPress kan.

1:16:51Sudah, WP query,

1:16:53WP post,

1:16:55segala macam. Jadi sudah

1:16:57objek-objeknya sudah

1:16:59encapsulated. Ya, sebenarnya

1:17:01sama aja

1:17:03sebenarnya kalau mau terbiasa

1:17:05pakai Laravel ya sama aja.

1:17:07Kalau pakai Doctrine, segala macam.

1:17:09- Oke.

1:17:17Ada lagi yang mau dibahas?

1:17:19Sudah cukup?

1:17:21- Dari default sudah cukup.

1:17:23- Dari kita sudah cukup. Kalau begitu

1:17:25ditunggu

1:17:27topik-topik

1:17:29menarik lainnya di kesanain/

1:17:31ngobrolin web. Ini juga salah satu topik

1:17:33yang kita ambil dari GitHub ya.

1:17:35Discussion

1:17:37yang cukup banyak

1:17:39diminta juga.

1:17:41Jadi silahkan

1:17:43langsung kesana untuk

1:17:45apa namanya?

1:17:47Untuk kasih-kasih ide

1:17:49atau mau diskusi seputar

1:17:51kerjaan. Misalkan tadi ketemu

1:17:53coding interview

1:17:55yang kayak Ivan tadi. Boleh disiap

1:17:57siapa tahu, gitu kan.

1:17:59Kemarin saya interview soalnya

1:18:01kayak gini gitu. Solusi yang lebih bagus

1:18:03saya nggak ketemu. Bisa diskusi,

1:18:05bisa, bisa.

1:18:07- Lepasnya pas lagi temen-temen interview

1:18:09juga bisa dimana?

1:18:11- Nggak boleh.

1:18:13Jangan.

1:18:15Jangan.

1:18:17Kecuali yang interview-nya Ivan.

1:18:19Ya, itu boleh.

1:18:25Ya sudah, kalau begitu. Kita

1:18:27Udahan untuk malam hari ini. Terima kasih

1:18:29banyak buat semuanya. Kita

1:18:31belajar cukup banyak ya.

1:18:33Ternyata, padahal udah tahu lama

1:18:35Biko, tapi

1:18:37ternyata

1:18:39masih banyak-banyak yang missing ya.

1:18:41- Sejelas, tapi kayak concrete-nya tuh kayak nggak terlalu

1:18:43merhatiin. Cuma yang "Oh ya, udah deh."

1:18:45Maksudnya gitu.

1:18:47- Gua hari ini belajar Omega Notation sama Theta Notation.

1:18:49- Omega Theta.

1:18:51- Karena biasanya kan

1:18:53kalau di coding interview itu kan

1:18:55yang

1:18:57apa, yang menjadi contoh kasus

1:18:59adalah

1:19:01toy problem

1:19:03kan, toy problem kayak palindro,

1:19:05ya,

1:19:07atau fist bus lah

1:19:09atau apa, gitu kan.

1:19:11Kalau yang real case kayak gini tuh menarik sih.

1:19:13Jadi

1:19:15istilahnya kita bisa dapat, apa ya,

1:19:17snippet pada saat nanti kita kerja tuh

1:19:19bakal kerjain ini, bukan kerjain palindro,

1:19:21bukan kerjain anagram

1:19:23dan lain-lain, gitu kan.

1:19:25- Kecuali yang bikin aplikasi palindro.

1:19:27Di HR perusahaan yang bikin

1:19:31aplikasi palindro, fist bus.

1:19:33- Iya, dan

1:19:37kembali lagi,

1:19:39kembali lagi ya,

1:19:41harap berhati-hati

1:19:43dengan apa ya, penggunaan

1:19:45library, harus diperhatikan juga.

1:19:47Misalkan contohnya,

1:19:49ini bukan menjelekan ya,

1:19:51misalkan di Laravel kan ada ORM,

1:19:53ORM itu kan

1:19:55tidak dioptimis untuk performance kan,

1:19:57dia dioptimis untuk

1:19:59developer experience kan, biar cepat,

1:20:01gitu kan. Misalkan kayak

1:20:03join,

1:20:05apa lagi,

1:20:07dan lain-lain kan, jadi

1:20:09kita nggak perlu pakai query,

1:20:11tapi dimudahkan karena

1:20:13pemanggilan API,

1:20:15gitu kan. Dan itu bisa berdampak

1:20:17kalau datanya jumlahnya udah cukup besar,

1:20:19itu bisa berdampak ke performance

1:20:21karena

1:20:23si query-nya itu harus dioptimis juga.

1:20:25Dan biasanya itu ada semacam apa ya,

1:20:29misalnya ya, semacam

1:20:31jebakan. Karena kita udah biasa

1:20:33menggunakan ORM yang ada

1:20:35di bahasa pemograman masing-masing, baik itu

1:20:37PHP, JavaScript,

1:20:39Ruby,

1:20:41dan lain-lain gitu, Python,

1:20:43itu kita cenderung

1:20:45operasinya itu, padahal sebenarnya

1:20:47operasi di database itu bisa dioptimis,

1:20:49tapi kita operasinya di kode.

1:20:51Karena ORM-nya kan pakai

1:20:53bahasa pemograman yang kita suka,

1:20:55bukan SQL, kan.

1:20:57Jadi kita cenderung terperangkap

1:20:59ke situ, akhirnya kita bikinlah

1:21:01looping lagi, bikin

1:21:03lah filtering, dan lain-lain yang menyebabkan

1:21:05performanya jadi semakin jelaj.

1:21:07Jadi

1:21:09mungkin kalau misalkan ada

1:21:11teman-teman punya aplikasi

1:21:13yang, kok ini lambat, atau

1:21:15gimana, udah mulai ada komplain dari user,

1:21:17yang pertama dilihat adalah

1:21:19query dari ORM-nya udah optimis

1:21:21sebelum. Karena saya yakin semua

1:21:23ORM itu bisa support

1:21:25raw query.

1:21:27Jadi triknya

1:21:29adalah, jalanin aja dulu join-nya.

1:21:31Kan ada di konsol itu biasa,

1:21:33di copy-paste, dioptimis, abis itu

1:21:35diganti. Gitu.

1:21:37Salah satunya.

1:21:39Ada banyak yang lain. Index juga jangan lupa.

1:21:41Tapi kebanyakan index juga

1:21:43salah.

1:21:45Gitu ya, untuk malam ini.

1:21:47Kita ketemu

1:21:49lagi minggu depan.

1:21:51Minggu depan, tanggal berapa?

1:21:53Mungkin, oh, minggu depan ya.

1:21:556, tanggal 6.

1:21:57Mas ya, tanggal 6.

1:21:59Ya, nanti.

1:22:01Nanti kita lihat, mudah-mudahan bisa.

1:22:03Kalau nggak bisa, kita

1:22:05juburin, atau kita

1:22:07jubur dulu.

1:22:09Dan hantikan kejutan

1:22:11dari kita bertiga.

1:22:13Atau bahkan berlima.

1:22:15Atau bertujuh.

1:22:17Atau rame-rame.

1:22:19Rame-rame.

1:22:21Udah itu aja.

1:22:23Terima kasih banyak untuk malam ini.

1:22:25Kita ketemu lagi lain waktu.

1:22:27Sampai jumpa

1:22:29di lain kesempatan.

1:22:31Bye bye.

Suka episode ini?

Langganan untuk update episode terbaru setiap Selasa malam!

Langganan Sekarang

Episode Terkait

Ngobrolin Cache - Ngobrolin WEB
EP 76

2 Apr 2024

Ngobrolin Cache - Ngobrolin WEB

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

Ngobrolin MicroFrontend - Ngobrolin WEB
EP 104

5 Nov 2024

Ngobrolin MicroFrontend - Ngobrolin WEB

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

Ngobrolin Alat Dokumentasi - Ngobrolin WEB
EP 106

19 Nov 2024

Ngobrolin Alat Dokumentasi - Ngobrolin WEB

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

Komentar