از Codeforces و AtCoder تا CSES و LeetCode؛ با بهترین پلتفرمهای تمرین برنامهنویسی و کاربرد هرکدوم آشنا شو!
آشنایی با سایتهای تمرین برنامهنویسی
خب، فرض کنیم برنامهنویسی رو یاد گرفتی؛ متغیر و حلقه و شرط و تابع رو بلدی و حتی چندتا پروژه هم زدی. حالا چی؟
یکی از بهترین راهها واسه بهتر شدن، حل مسئلهست. دقیقاً مثل ورزش، که فقط با دیدن ویدیوهای آموزشی قوی نمیشی، توی برنامهنویسی هم باید دست به کد بشی و مسئله حل کنی.
اینجاست که باید از سایتهای تمرین برنامهنویسی کمک بگیری.
این سایتها معمولاً یه مجموعه از مسئلههای برنامهنویسی با سطحهای مختلف دارن. صورت مسئله رو میخونی، راهحل خودتو به صورت ذهنی یا روی کاغذ (به شدت پیشنهاد میکنم) مینویسی، با کد پیادهش میکنی و برای سایت میفرستی. سیستم داوری هم کدتو با تستهای مختلف بررسی میکنه و بهت میگه جواب درست بوده یا نه.
اما بین این همه سایت، کدوماشون خیلی پرطرفدار و مهمن؟
Codeforces
اگه حتی یه مدت کوتاه توی دنیای برنامهنویسی رقابتی بوده باشی یا اینکه المپیاد کامپیوتری باشی، حتماً از Codeforces استفاده میکنی.
Codeforces یکی از معروفترین پلتفرمای مسابقات برنامهنویسیه و هر هفته مسابقات مختلفی توش برگزار میشن. چیزی که Codeforces رو جذاب میکنه فقط تعداد زیاد مسئلههاش نیست؛ در واقع سیستم رتبهبندیش و ریتینگ (امتیاز حسابت در مجموع، که با شرکت توی مسابقات به دست میان) باعث میشه بتونی پیشرفت خودتو دقیق دنبال کنی.
مسائل Codeforces از سؤالهای خیلی ساده شروع میشن و تا مسائل واقعاً سخت و پیچیده ادامه دارن. پس، تقریباً برای هر سطحی میشه توش مسئله پیدا کرد.
یکی از ویژگیهای جالب کدفورسز، سیستم بلاگ کاربرمحورشه؛ یعنی عین یه انجمن، کاربرها توی بلاگ پست میذارن و معمولاً پستای ارزشمندی هستن که خیلی چیزا به آدم یاد میدن!
لینک سایت: Codeforces
AtCoder
AtCoder یه پلتفرم ژاپنیه که بین برنامهنویسهای سراسر دنیا حسابی محبوبه و شرکت ها و سازمان های مختلف، برای جذب نیروی کار حرفهای، توش مسابقه برگزار میکنن.
مسابقات AtCoder معمولاً نظم مشخصی دارن و کیفیت مسائلشون باعث شده خیلی از برنامهنویسهای رقابتی ازش واسه تمرین استفاده کنن.
یکی از مسابقه های معروفش، AtCoder Beginner Contest یا همون ABC هست که دقیقاً واسه افرادی طراحی شده که تازه وارد دنیای Competitive Programming شدن.
اگه Codeforces رو امتحان کردی و دنبال یه فضای متفاوت برای تمرینی، AtCoder میتونه گزینهی جالبی باشه.
لینک سایت: AtCoder
CSES
حالا بریم سراغ یه سایت متفاوت!
CSES بیشتر از اینکه روی مسابقه تمرکز داشته باشه، یه مجموعهی بزرگ از مسائل الگوریتمی کلاسیک و خوب هست که بر اساس موضوع دستهبندی شدن.
مثلاً میتونی یه روز بری سراغ Sorting and Searching، بعدش Dynamic Programming رو تمرین کنی و بعد وارد مباحث گراف بشی.
برای همین CSES مخصوصاً وقتی خیلی تازهکاری و نمیدونی دقیقاً باید چه الگوریتمایی رو تمرین کنی، میتونه برات خیلی مفید باشه.
لینک سایت: CSES Problem Set
Repovive
Repovive یه پلتفرم نسبتاً جدیده که با هدف ایجاد یه فضای رقابتی واسه حل مسائل الگوریتمی ساخته شده. ساختارش یکم شبیه Codeforces و AtCoder هست؛ کانتست برگزار میشه، مسئلهها رو حل میکنی، کدت جاج میشه و نتیجهت روی لیدربورد قرار میگیره.
یکی از چیزایی که Repovive رو از خیلی از سایتای مشابه متمایز میکنه، تمرکز جدیترش روی یادگیری در کنار رقابت هست. این سایت علاوه بر Problem Set و Contest، بخش Roadmap هم داره که مباحث مختلفی مثل Dynamic Programming، Graph Theory، Greedy و الگوریتمهای پایه رو به شکل مرحلهای آموزش میده.
حتی بعضی از این Roadmapها مسئلههایی از سایتایی مثل Codeforces، LeetCode و AtCoder رو هم برای تمرین معرفی میکنن؛ یعنی لازم نیست تموم تمرینا از خود Repovive باشن.
لینک سایت: Repovive
LeetCode
LeetCode یکم با سه تا سایت قبلی فرق داره.
این سایت بیشتر به خاطر مسئله های مربوط به مصاحبههای فنی معروفه. خیلی از سؤالای رایج ساختمان داده و الگوریتم رو میتونی اونجا پیدا کنی و راهحل خودتو با راهحل بقیه مقایسه کنی.
مسائل LeetCode بر اساس موضوع و سطح سختی دستهبندی شدن و زبانهای برنامهنویسی مختلفی هم پشتیبانی میکنه.
اگه هدفت فقط مسابقات برنامهنویسی نیست و در آینده میخوای برای مصاحبههای شغلی هم آماده بشی، بد نیست LeetCode رو هم بشناسی.
لینک سایت: LeetCode
HackerRank
HackerRank یکی دیگه از پلتفرمهای معروف تمرین برنامهنویسیه که برای شروع میتونه انتخاب مناسبی باشه.
برخلاف بعضی از سایتهای مسابقهای، HackerRank فقط روی الگوریتم تمرکز نداره و برای موضوعاتی مثل زبانهای برنامهنویسی، SQL، ساختمان داده و حتی بعضی از مهارتهای تخصصی هم تمرین داره.
اگه هنوز با برنامه نویسی رقابتی آشنایی زیادی نداری، ساختار دستهبندیشدهی HackerRank میتونه کمک کنه راحتتر مسیرتو پیدا کنی.
لینک سایت: HackerRank
آقا! بالاخره از کدوم شروع کنیم؟
اگه تازه میخوای وارد دنیای حل مسئله بشی، HackerRank یا مسابقات Beginner توی AtCoder میتونن برای شروع، خوب باشن.
اگه هدفت مسابقات برنامهنویسیه، احتمالاً دیر یا زود سر از Codeforces و AtCoder درمیاری.
اگه میخوای الگوریتمها رو منظم و موضوعی تمرین کنی، CSES انتخاب خیلی خوبیه.
اگه دنبال یه پلتفرم جدید واسه تمرین و شرکت توی کانتستی، مخصوصاً اگه دوست داری همراه حل مسئله، یه مسیر آموزشی هم داشته باشی، بد نیست Repovive رو هم امتحان کنی.
و اگه به فکر مصاحبههای فنی و ورود به بازار کار هم هستی، LeetCode رو از دست نده.
البته هیچ قانونی وجود نداره که بگه فقط باید یکیو انتخاب کنی. حتی خیلی از برنامهنویسها همزمان از چند تا پلتفرم استفاده میکنن. مثل خود من :)
در نهایت، مهمتر از اینکه کجا تمرین کنی، اینه که واقعاً تمرین کنی.
ممکنه اولین مسئلهای که باز میکنی رو اصلاً نفهمی. دومی رو هم نتونی حل کنی. حتی شاید بعد چند تا مسئله احساس کنی هیچ پیشرفتی نکردی. (اینم بگم که اصلاً پیشنهاد نمیکنم جواب مسئله رو سرچ کنی یا از هوش مصنوعی بگیری، همین که زیاد طول بکشه و راجع بهش تحقیق کنی، مسیر یادگیری رو تکمیل میکنه)
ولی یه روز به مسئلهای میرسی که قبلاً برات سخت بود و میبینی این دفعه خیلی راحت حلش کردی.
همین لحظههای کوچیکن که کمکم ازت یه برنامهنویس ماهر میسازن.