Lewati ke isi

Link Sumber: 6 Mistakes in Learning Competitive Programming - YouTube


6 Mistakes in Learning Competitive Programming

Halo semuanya, saya Shan dan di video ini saya akan membahas kesalahan umum yang sering dilakukan orang saat belajar pemrograman kompetitif. Kesalahan-kesalahan ini bisa sepenuhnya menghancurkan usaha Anda. Jadi, jika Anda berpikir, "Kenapa saya sudah berusaha keras tapi tidak maju, dan tidak mendapatkan rating yang saya inginkan?", Anda harus menonton video ini untuk melihat apakah Anda melakukan salah satu kesalahan ini. Tanpa basa-basi lagi, mari kita mulai.

1 | Menyelesaikan Masalah secara Acak

Kadang saya melihat orang yang tidak tahu harus menyelesaikan masalah apa, bagaimana cara menemukan masalah yang bagus, dan mereka hanya menyelesaikan masalah acak dari sumber-sumber kode. Ini berhasil di awal, saat Anda masih pemula atau "pupil". Itu berhasil karena, seperti yang saya katakan, Anda bisa menyaring masalah berdasarkan tingkat kesulitannya dan mulai menyelesaikannya. Namun, seiring Anda berkembang dan rating Anda semakin tinggi, Anda harus mulai belajar menemukan masalah yang bagus.

Ada banyak cara untuk menemukan masalah yang bagus, tetapi cara yang paling penting adalah menggunakan fitur di Codeforces. Fitur ini disebut List. Fitur ini sangat membantu Anda karena dapat menemukan masalah yang diselesaikan oleh orang-orang penting. Jadi, pada dasarnya idenya adalah Anda bisa membuat daftar orang-orang penting yang Anda kagumi, dan fitur ini akan menampilkan di depan setiap masalah berapa banyak orang dalam daftar itu yang telah menyelesaikannya. Pada dasarnya, Anda bisa menyimpulkan bahwa jika sebuah masalah diselesaikan oleh banyak orang tersebut, itu berarti masalah itu adalah masalah yang bagus dan layak untuk diselesaikan. Pendekatan ini hampir selalu berhasil.

Anda bisa menambahkan para competitive programmer terbaik di dunia, rival Anda, atau orang-orang yang Anda kenal dan kagumi. Anda bisa melihat berapa banyak dari mereka yang telah menyelesaikan setiap masalah. Sungguh, dengan probabilitas tinggi, masalah yang diselesaikan oleh banyak orang ini adalah masalah yang sangat bagus. Jadi, jika Anda membuka Codeforces dan masuk ke profil Anda, Anda bisa klik di bagian List dan pilih Create new list. Lalu Anda bisa memilih nama untuk daftar Anda. Mari kita beri nama "sample list". Kemudian Anda bisa mulai menambahkan orang ke dalam daftar Anda.

Mari kita lihat para competitive programmer dengan peringkat tertinggi dan mari kita tambahkan mereka. Misalnya, kita tambahkan tourist dan Jiangly. Lalu Anda bisa membuat daftar dengan nama-nama ini. Anda menambahkan semua orang ini ke daftar Anda, dan Anda bisa melihat bahwa mereka semua ada di sini. Sekarang Anda bisa mengurutkannya berdasarkan rating atau apa pun. Tidak harus competitive programmer teratas, Anda bisa memilih siapa saja. Mari kita ke Problem sets dan di Status, mari kita lihat orang terakhir yang telah menyelesaikan masalah. Saya akan menambahkan orang ini. Anda juga bisa menambahkan orang ini, misalnya.

Kemudian jika Anda membuka Problem sets di sini, jika Anda klik di bagian ini, Anda bisa melihat daftar Anda. Jika saya klik "sample list", Anda sekarang bisa melihat bahwa di depan setiap masalah tertulis berapa banyak orang dari daftar itu yang telah menyelesaikan masalah spesifik tersebut. Anda bisa melihat semua ini dan jika Anda mencari masalah dengan rating tertentu, Anda bisa mencari masalah dengan rating misalnya 1500. Lalu Anda bisa melihat bahwa untuk setiap masalah ini, berapa banyak orang di daftar itu yang telah menyelesaikannya. Jika Anda memilih daftar ini, misalnya, saya melihat masalah ini diselesaikan oleh tujuh orang, masalah ini diselesaikan oleh 10 orang, dan seterusnya. Masalah ini diselesaikan oleh dua orang dan seterusnya.

Namun, saya sangat, sangat merekomendasikan Anda untuk menambahkan lebih banyak orang ke dalam daftar ini. Misalnya, tambahkan 40 hingga 50 orang. Terutama, tambahkan rival Anda. Misalnya, ketika saya belajar untuk Olimpiade Nasional Informatika Iran, saya menambahkan semua orang yang menjadi rival saya ke dalam daftar ini. Dengan begitu, saya tahu masalah apa saja yang telah mereka selesaikan, dan saya hampir yakin bahwa jika begitu banyak dari mereka telah menyelesaikan masalah itu, pasti ada sesuatu yang spesial dengan masalah tersebut. Mungkin guru mereka yang memberikan masalah ini atau semacamnya. Pada dasarnya, saya yakin bahwa masalah ini adalah masalah yang bagus. Jadi, jangan hanya menyelesaikan masalah acak. Cobalah untuk menemukan masalah yang bagus. Dan menggunakan List sangat membantu Anda.

Bahkan sekarang, ketika saya menjadi seorang guru, saat saya ingin memilih masalah yang bagus untuk orang lain—masalah yang bahkan belum pernah saya lihat sendiri sebelumnya—saya akan menggunakan fitur ini dan saya menemukan masalah yang telah diselesaikan oleh banyak orang ini, lalu saya membukanya. Dan saya melihat bahwa itu adalah masalah yang sangat indah dan sangat edukatif. Jadi, pastikan untuk menggunakan fitur ini.

2 | Belajar seperti Kimia

Kadang saya melihat orang memperlakukan pemrograman kompetitif seperti kimia. Mereka mencari buku, mereka mencoba membaca berbagai algoritma. Itu sangat buruk. Ini bukan yang seharusnya Anda lakukan. Pemrograman kompetitif adalah keterampilan yang akan terbentuk melalui banyak latihan.

Seperti yang saya katakan jutaan kali sebelumnya, Anda tidak boleh mulai dengan mencari algoritma dan hanya membacanya, menghafalnya, dan melihat apa itu. Belajar algoritma tidak terlalu penting. Kemampuan, keterampilan untuk menyelesaikan banyak masalah, itulah yang penting.

Jadi, jika Anda melihat orang yang tahu banyak algoritma, mereka telah menghafalnya. Itu tidak berarti mereka kuat. Mereka hanya tahu banyak algoritma. Jika Anda meminta mereka untuk menulis algoritma ini, mereka bisa menuliskannya dengan sempurna untuk Anda. Tetapi mereka tidak bisa menyelesaikan masalah dengan algoritma yang paling sederhana. Itu tidak pernah bagus. Saya pernah mengajar di banyak sekolah dan saya melihat bahwa orang-orang ini masih pemula atau pupil setelah satu atau dua tahun belajar dan mengikuti kelas. Kemudian saya mulai bekerja dengan siswa-siswa ini dan selama tiga atau empat bulan mereka menjadi ahli. Ini adalah sesuatu yang telah terjadi berulang kali. Dan jika Anda bertanya kepada saya apa alasannya, apa yang saya lakukan berbeda dengan guru mereka sebelumnya. Intinya adalah saya menyadari bahwa guru sebelumnya mengajarkan mereka AVL tree. Jadi, para siswa tahu algoritma terberat, tetapi mereka tidak tahu bagaimana menyelesaikan masalah dalam sebuah kontes untuk keluar dari tahap pupil.

Itu adalah cara paling bodoh untuk belajar pemrograman kompetitif. Dan jika Anda melakukannya, Anda akan melihat bahwa semua usaha Anda tidak membuahkan hasil. Awalnya, cobalah untuk menyelesaikan 100 hingga 200 masalah. Anda bahkan tidak perlu mempelajari algoritma apa pun. Cukup tahu beberapa dasar C++ seperti cara mencetak "hello world" atau cara menjumlahkan dua angka, dan kemudian mulailah menyelesaikan 100 hingga 200 masalah dengan kesulitan 800 atau kesulitan minimal. Saya sudah mengatakannya berkali-kali sebelumnya, jadi saya tidak ingin mengulanginya lagi. Pastikan untuk menonton video saya yang lain tentang hal ini, terutama video tentang apa yang tidak boleh dilakukan untuk keluar dari tahap pemula dan juga cara dari pemula menjadi ahli dalam 3 bulan di mana saya menceritakan perjalanan saya sendiri.

Jadi, jangan pernah lupakan bahwa pemrograman kompetitif bukan tentang mengetahui apa itu algoritma, melainkan tentang keterampilan Anda untuk menyelesaikan masalah.

3 | Terlalu Memikirkan Rating

Sering kali saya melihat orang yang terobsesi dengan rating. Saya bahkan terkadang melihat orang mengeluh tentang "cheaters" (peserta curang) yang menyebabkan mereka kehilangan beberapa rating, dan perbedaannya hanya sekitar lima poin. Obsesi terhadap rating ini benar-benar dapat merugikan Anda. Meskipun rating itu penting dan Anda harus peduli dengannya—itu juga bisa menjadi motivasi bagi Anda, membantu Anda berlatih lebih baik, dan memiliki motivasi untuk berkembang—terlalu memikirkannya dan terobsesi dengannya dapat benar-benar merugikan Anda.

Pada akhirnya, tidak terlalu penting berapa rating Anda saat ini. Jika level Anda lebih tinggi, cepat atau lambat Anda akan mencapai rating itu. Saya sangat menyarankan Anda untuk fokus pada pekerjaan Anda sendiri. Jangan terobsesi seperti, "Ya ampun, kenapa rating saya turun?" dan semacamnya. Sebaliknya, fokuslah pada pelatihan Anda. Fokuslah pada masukan Anda (input), bukan pada keluarannya (output).

Masukan Anda adalah seberapa banyak Anda mencoba, seberapa banyak usaha yang Anda curahkan, dan lain-lain. Keluaran adalah rating yang Anda dapatkan. Anda tidak memiliki kendali atas keluarannya. Anda harus fokus pada masukan Anda. Buatlah rencana untuk masukan Anda. Misalnya, rencanakan bahwa selama sebulan ke depan, saya akan menghabiskan waktu sebanyak ini untuk berlatih. Jangan berencana seperti, "Oke, setelah sebulan rating saya akan mencapai ini." Anda tidak memiliki kendali atas hal itu.

Fokuslah pada masukan Anda. Peduli pada rating Anda, itu penting dan juga sangat menyenangkan dan kompetitif. Tapi jangan terobsesi dengannya.

Kesalahan lain yang sangat buruk yang saya lihat dari orang adalah kadang mereka tidak berpartisipasi dalam kontes Codeforces karena mereka tidak ingin kehilangan rating, atau bahkan di awal mereka tidak memiliki keberanian untuk mulai berpartisipasi dalam kontes. Itu lagi-lagi di mana obsesi dengan rating merugikan Anda. Pastikan untuk berpartisipasi dalam semua kontes CF yang Anda bisa. Jangan lewatkan satu pun kontes selama Anda bisa. Saya harus memasukkan kembali bagian dari wawancara dengan Kavi di sini karena itu sangat penting. Dia berkata, "Apa perbedaan yang kamu lakukan dibandingkan dengan orang lain yang kamu yakini memiliki efek signifikan pada peningkatanmu?"

Kavi menjawab, "Saya selalu berusaha untuk tidak pernah melewatkan kontes di Codeforces. Tidak pernah melewatkan kontes. Saya tidak melewatkan satu pun kontes di tahun 2018 dan 2019."

"Wow! Kenapa? Bagaimana bisa?"

"Karena saya sangat menikmatinya. Apakah kamu melewatkan janji kencan dengan kekasihmu? Tidak. Tidak."

Jadi, berpartisipasi dalam kontes sangat penting untuk kalian. Jangan takut akan hal itu. Di tahap mana pun Anda berada, bahkan jika Anda baru saja memulai dan hanya menerima 10 masalah, saya tetap merekomendasikan Anda untuk berpartisipasi dalam kontes. Pada akhirnya, Anda ingin mendapatkan pekerjaan atau tampil baik di IOI atau ICPC. Jadi, keterampilan Anda penting. Apa yang Anda pelajari dari kontes ini jauh lebih penting daripada rating Anda. Jadi, jangan terobsesi.

4 | Mengisolasi Diri

Kesalahan lain yang saya lihat orang lakukan adalah mengisolasi diri dari semua orang lain yang sedang belajar CP (pemrograman kompetitif). Itu sangat buruk.

Mari saya mulai dengan cerita dari diri saya sendiri. Ketika saya masih di SMA dan mulai belajar pemrograman kompetitif, saya bertaruh dengan salah satu teman saya bahwa dalam waktu sekitar sebulan saya akan mendapatkan 100 accept di Codeforces—mungkin sedikit lebih atau kurang, tapi sekitar itu. Dia berkata, "Tidak, kamu tidak bisa melakukannya," dan saya berkata, "Ya, saya pasti akan melakukannya," dan kami bertaruh. Saya menghitung bahwa saya membutuhkan sekitar empat accept per hari untuk memastikan saya mendapatkan sebanyak itu. Dan Anda tahu, motivasi tambahan ini sangat membantu saya dan membuat segalanya jauh lebih menyenangkan. Hasilnya, saya menyelesaikan jauh lebih dari empat masalah sehari. Saya menyelesaikan sekitar 8, 9, 10 masalah setiap hari, dan rating saya juga mulai tumbuh pesat. Seperti yang juga saya katakan di video saya tentang cara dari pemula menjadi ahli dalam 3 bulan.

Jadi, intinya adalah jika Anda mengisolasi diri dari orang lain yang belajar pemrograman kompetitif, itu bisa menjadi lebih membosankan bagi Anda untuk belajar pemrograman kompetitif, sementara berinteraksi dengan orang lain yang melakukan hal yang sama dapat membuat segalanya menyenangkan. Jadi, pastikan Anda berinteraksi dengan orang lain. Jika Anda memiliki beberapa orang lain di sekolah, di universitas, atau orang-orang di sekitar Anda yang melakukan hal yang sama, berinteraksi dengan mereka akan sangat bagus. Jika tidak, setidaknya bergabunglah dengan komunitas. Misalnya, kami sendiri memiliki komunitas di Telegram dan Discord yang bisa kalian ikuti dan berbicara satu sama lain. Ada ribuan orang yang belajar pemrograman kompetitif di sana, dan akan sangat bagus jika Anda bergabung di sana dan berinteraksi dengan orang lain. Dan saya sangat merekomendasikan itu kepada semua orang. Jangan mengisolasi diri.

5 | Berpikir Kurang atau Lebih dari yang Seharusnya

Kesalahan besar lain yang biasanya dilakukan orang—dan saya sendiri membuat kesalahan ini di berbagai periode—adalah berpikir tentang masalah kurang atau lebih dari yang seharusnya.

Mari kita buat ini sederhana dan jelas. Sebagai aturan praktis, Anda harus terus memikirkan sebuah masalah selama Anda masih merasa ada hal-hal yang bisa Anda pikirkan. Ketika Anda merasa buntu, tidak apa-apa untuk membuka editorial, mungkin membaca baris pertama, lalu melanjutkan berpikir.

Saya telah melakukan banyak wawancara dengan para competitive programmer hebat, dengan Raina, Um_nik, dan orang lain yang juga mengatakan hal yang sama. Bukan seperti, "Tidak, kamu tidak boleh membaca solusi masalah." Kami pernah punya guru yang mengatakan ini kepada kami, "Kamu tidak boleh membaca solusi masalah. Teruslah berpikir tanpa batas." Tetapi itu tidak bagus karena mungkin Anda akan menghabiskan begitu banyak waktu pada satu masalah, padahal dalam waktu itu Anda bisa menjelajahi lebih banyak ide.

Juga sangat tidak benar jika Anda mulai membaca masalah dan langsung pergi dan membaca editorialnya. Saya yakin ini adalah sesuatu yang Anda rasakan sendiri. Tidak baik untuk menetapkan batas waktu. Itu adalah sesuatu yang Anda rasakan sendiri—ketika Anda tidak memiliki ide sama sekali, misalnya selama 10 menit terakhir, Anda tidak ada kemajuan dan Anda tidak memiliki ide apa pun tentangnya. Dalam kasus itu, tidak apa-apa untuk mulai membaca editorial. Dan yang saya rekomendasikan adalah membaca baris pertama atau dua baris pertama dari editorial dan melihat apakah itu memberi Anda ide untuk berpikir lebih lanjut. Jika ya, lanjutkan berpikir setelah itu. Jangan langsung membaca seluruh editorialnya.

Jadi, selalu ingat ini. Jangan berpikir lebih dari yang dibutuhkan atau kurang dari yang dibutuhkan.

6 | Malas dan Mencari Jalan Pintas (Hacks)

Kadang yang saya lihat pada orang adalah mereka mencari cara mudah untuk menjadi hebat, untuk menjadi grandmaster, untuk mendapatkan warna merah dengan sangat mudah. Itu tidak pernah mungkin.

Semua tips yang saya berikan kepada Anda ini adalah cara untuk tidak menyia-nyiakan usaha Anda. Tapi tetap saja, Anda harus berusaha. Berusaha, tetapi dengan cara yang benar. Bukan seperti, "Oke, ada cara di mana saya tidak perlu berusaha dan saya akan menjadi hebat dalam pemrograman kompetitif." Tidak. Bagaimanapun, pada akhirnya, Anda harus menginvestasikan banyak waktu untuk berlatih agar menjadi lebih baik. Saya sendiri berlatih sangat keras selama lebih dari 2 atau 3 tahun untuk mencapai international grandmaster untuk pertama kalinya. Jadi, tidak seperti, "Oke, dalam 3 bulan saya bisa menjadi IGM." Tidak, itu tidak mungkin. Anda pasti harus mengerahkan banyak usaha. Tidak ada jalan pintas yang mudah seperti "jika saya melakukan ini, saya bisa melakukannya dengan mudah atau sangat cepat." Tidak ada yang seperti itu.

Tonton bagian lucu dari wawancara saya dengan Um_nik ini. "Setelah sekitar 2 tahun kamu menjadi Red coder. Jadi, dan kamu bilang semua orang bisa menjadi grandmaster. Jadi, apa metode latihanmu saat itu agar orang lain juga bisa melakukannya dan mungkin mereka juga bisa mencapai grandmaster?"

Um_nik menjawab, "Saya menyelesaikan banyak masalah dan hanya itu saja."