Ngobrolin Big-O - Ngobrolin WEB
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 KoreksiEpisode 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
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!
Episode Terkait
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. ...
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. ...
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. ...