نشریه انجمن علمی دانشکده مهندسی کامپیوتر دانشگاه علم و صنعت ایران
پروندهی ویژه؛ بالاخره طلایی شدیم
رضا یزدی (ورودی ۱۴۰۰)
دلایل موفقیت دانشکده در مسابقات برنامهنویسی
یکی از مهم ترین خبر های اخیر دانشکده، این بود که امسال دو تیم از علموص که چهار نفرشون از بچه های دانشکده خودمون بودن، مقام های طلا و برنز مسابقات کشوری ICPC رو بدست آوردن. این اتفاق در حالی افتاد که سال ها بود دانشکده ما در مقام آوردن ناکام مونده بود.
در این مقاله از تورینگ، ابتدا گپ و گفت صمیمانه ای با احمدرضا طهماسبی، دبیر انجمن مون داشتیم و درباره مسابقه ElmoCPC که امسال با همکاری کوئرا برگزار شد صحبت کردیم.
در ادامه با دکتر صالح اعتمادی که همواره بچه ها رو برای شرکت در چالش های الگوریتمی تشویق می کنن گفتگو کردیم و به این موضوع پرداختیم که اصلا این مسابقات چی هستن و به چه دردی میخورن.
در آخر مصاحبه ای با دو نفر از بچه هایی که مدال طلای ICPC گرفتن داشتیم و دنبال راز موفقیت امسال مون در مسابقات گشتیم.
آی سی پی سی (ICPC) به سبک علم و صنعت
یکی دیگه از رویدادهای باحالی که چند سال اخیر انجمن علمی رقم زده مسابقات ElmoCPC است. انجمن علمی ما دو ساله که به صورت حرفهای به برگزاری این مسابقه پرداخته. در این رابطه سراغ آقای احمدرضا طهماسبی دبیر انجمن رفتیم تا با ایشون گفتوگویی داشته باشیم.
عرض سلام و احترام. وقتتون به خیر آقای طهماسبی. برامون از انگیزه بچهها بگید، چی شد که بچهها تو انجمن احساس کردن که نیازه یه همچین آزمونی برگزار بشه؟
سلام خدمت همه ی دوستان، آی سی پی سی (ICPC) همیشه برای دانشگاهها و دانشجوها مسابقه مهمی بوده به همین جهت هرساله دانشگاههای معتبر و سرشناسی در سراسر دنیا مسابقاتی برای آمادهسازی دانشجوها برای شرکت در مسابقات آی سی پی سی (ICPC) برگزار میکنن. دانشگاه ما هم یکی از همین دانشگاه هاست و
برگزاری این مسابقات بخشی از اعتبار دانشگاه ما بین سایر دانشگاه هاست.
یکی از نکات مهمی که در برگزاری این قبیل آزمون ها وجود داره کیفیت سوالهاست که به نوعی نشون دهندهی سطح دانشگاه ماست و قضیه یه جورایی یه قضیهی حیثیتی برای دانشگاه و بچه ها حساب میشه، میشه یکم برامون دررابطه با نحوه طراحی سوالات بگین؟
ببینید معمولا تو این جور رویداد ها دو راه رو میشه پیش گرفت. یکی اینکه برای طراحی و انتخاب سوالات از بچه های دانشکدهی خودمون استفاده کنیم، که با توجه به پتانسیلهایی که تو دانشکده داریم کار خیلی منطقی و خوبی به نظر میاد؛ اما یک مشکل وجود داره. اینکه اون مسابقه برای یه تعدادی از بچههای دانشکدهی خودمون میسوزه و دیگه نمی تونن از اون برای آماده شدن استفاده کنن، راهکار دوم اینه که یه مرجع معتبر انتخاب بشه و طراحی سوالات برونسپاری بشه، ما برای اینکه آزمون به بهترین نحو برگزار بشه و همهی بچه ها بتونن از آزمون استفاده کنن راهکار دوم رو انتخاب کردیم. در رابطه با خروجی هم باید بگم واقعا خروجی استانداردی تولید شد، چون معمولا در برگزاری این سبک آزمونها سطح آزمون کمی غیر استاندارد طراحی میشه، گاهی سوالات انقدر آسون طراحی میشن که تعداد خیلی زیادی از تیمها کل سوالات رو جواب میدن. گاهی هم انقدر سخت طراحی میشن که تا پایان زمان مسابقه حتی یک تیم هم موفق به پاسخ دادن به همهی سوالها نمیشه، اما خوشبختانه آزمون ما سطح استانداردی داشت و سختی سوالات به صورتی صحیح توزیع شده بود.
یکی از مشکلاتی که امسال برگزاری آزمون داشت این بود که مسابقات ما خیلی به مسابقات ریجنال نزدیک بود در صورتی که سایر دانشگاهها تقریبا بین یک تا سه ماه قبلتر مسابقاتشون رو برگزار کرده بودن؛ ما میتونیم برای امسال از شما به عنوان دبیر انجمن این قول رو داشته باشیم که آزمون ما زودتر برگزار بشه؟
بله درست میگید. سال قبل مسابقهی ما تقریبا با فاصلهی یک هفته با مسابقات ریجنال برگزار شد، حقیقت یکی از مشکلاتی که هست اینه که تاریخ انتخابات انجمن حوالی عیده و خب بعد از عید تیم جدید انجمن میان و مستقر میشن و تا تیم جدید به خودشون بیان و کار رو شروع کنن یکم زمان میبره. اما ما امسال نهایت تلاش خودمون رو می کنیم تا زمینه رو برای تیم بعدی انجمن کاملا آماده کنیم تا اون ها هم بتونن در اسرع وقت مسابقه رو برگزار کنند.
درپایان اگه صحبتی با بچهها دارید ما درخدمتتون هستیم.
یکی از نکاتی که خیلی دلم می خواست با بچهها به خصوص ورودیهای جدید در میون بگذارم این بود که
انجمن علمی جاییه که بچه ها می تونن در اون ایده هایی که واسه بهتر کردن دانشکدشون دارن رو عملی کنن.
ما از تمام بچهها استقبال می کنیم و بچهها به هیچ وجه اینطوری فکر نکنن که حتما باید عضو انجمن باشن تا بتونن تو انجمن فعالیت کنن. ما خیلی خوشحال میشیم که بچهها به ما ملحق بشن و ما رو تو برگزاری هرچه بهتر ایونتها همراهی کنن. در کنار همهی این ایونتهای خفن که توسط انجمن برگزار میشه، انجمن جاییه که در اون تلاش میکنیم ما دانشجوها دور هم جمع بشیم و کلی کارای باحال با هم بکنیم. از درس خوندن و ایونت برگزار کردن بگیر تا کلی کارای باحال دیگه. خلاصه ما حسابی منتظرتونیم.
چرا مسابقه؟ مصاحبه با دکتر اعتمادی
مسابقات آی سی پی سی (ICPC) در عرصهی جهانی برگزار میشه، همیشه هم برای دانشجوها و هم برای دانشگاهها اهمیت ویژهای داشته و دانشگاهها همیشه تلاش می کنن تو این مسیر دانشجوهاشون رو همراهی کنن. و در حد توانشون به اونها کمک کنن. دانشگاه ما هم از این قائده مستثنی نیست و برای آماده کردن دانشجوها برای آی سی پی سی یه کلاس خیلی باحال به اسم آمادگی برای مسابقات برنامهنویسی برگزار می کنه. ما خدمت آقای دکتر سید صالح اعتمادی رسیدیم کسی که اولین بار استارت این کلاسهارو توی دانشکدمون زدن.
سلام آقای دکتر. وقتتون به خیر، امروز مزاحمتون شدیم تا برامون یکم در مورد این مسابقات توضیح بدید و بفرمایید به نظرتون چرا بچه ها باید تو این قبیل مسابقات شرکت کنن و آوردهی اصلی این مسابقات برای بچه ها چیه؟
برای جواب دادن به این سوال شاید بهتر باشه مسیر رو برعکس بریم، شخصی رو فرض کنید که میخواد در یک شرکت نرمافزاری خوب مثل گوگل یا مایکروسافت یا هر شرکت بزرگ دیگهای استخدام بشه، ارزیابی این شرکت ها برای جذب نیرو معمولا مربوط میشه به سوالات ساختمان داده و الگوریتم. در نتیجه کسی که ساختمان داده و الگوریتمش خوب باشه می تونه تو این مصاحبهها موفقتر باشه، همچنین این شرکتها بیشتر کسانی رو جذب میکنن که بتونن این راهحلها رو سریع و در کمترین زمان به دست بیارن. اما در این رابطه ممکنه بچه ها بگن که «ما درس ساختمان داده و الگوریتم رو بین درس هامون داریم» ولی این درسها هنگام ارائه محدودیت زمانی دارن و نکتهی مهمتر اینه که این درسها در خیلی از دانشگاهها به صورت نظری درس داده میشن و بیشتر تمرکز روی مفاهیم و سودوکد هستش و خیلی از دانشجوها چندان کدی برای این درسها نمیزنن. پس بچهها نیاز دارن برای تسلط روی این مفاهیم وقت و تمرکز ویژه ای بگذارن.
چیشد تصمیم گرفتید این درسو ارائه بدید؟
این تصمیم دانشکده بود که مسئولیت بخش مسابقات و المپیاد رو به بنده واگذار کردند، البته من خودم هم علاقهمند بودم. طبق تصمیمی که با دانشکده گرفته شد به این نتیجه رسیدیم که همهی بچهها رو نمیشه همینطور به این سمت سوق داد و ازشون خواسته بشه شروع کنن به کد زدن. پس گفتیم چه بهتر که یک درس هم برای این بخش درنظر بگیریم که بچهها علاوهبر اینکه تو این بخش فعالیت میکنن یه تعداد واحد درسی هم براشون محاسبه بشه. خلاصه ما تلاش کردیم یک از سری تکنینکهای برنامهنویسی الگوریتمی، ساختمان داده و... رو داخل این درس بگنجونیم. ما حس میکنیم خروجی یک مهندس کامپیوتر که این درس رو پاس کرده خیلی بهتر و با تسلط بیشتر روی این مباحث خواهد بود و این شانس اون شخص برای ورود به شرکتهای خوب رو خیلی زیاد می کنه.
این ترم چرا این درس رو ارائه ندادید؟
این ترم چند دلیل داشت اول اینکه درسی که فقط یک نفر بتونه ارائه کنه خوب نیست چون ارائه شدنش وابسته میشه به حضور اون شخص و دلیل دیگه اینکه چند ترم اخیر بار آموزشی من خیلی زیاد بوده. گرچه این درس رو واقعا دوست دارم اما این ترم امکان ارائش رو نداشتم.
آیا به نظرتون کلاس آمادگی برای مسابقات کافیه؟
نکتهای که هست اینه که باید این سوال دقیقتر بیان بشه و ببینیم که این کلاسها برای چی کافیه. چون بالاخره این هم یک درسه مثل سایر دروس که در طول یک ترم ارائه میشه و بچهها براش به اندازهی یک ترم هفتهای ۱۰ الی ۱۲ ساعت زمان میگذارن پس مطمئناًً مثل هر درس دیگهای این درس هم خروجی داره، اما اگه خروجی گرفتن رو مدال آوردن بدونیم، خیر این کلاس به تنهایی کافی نیست و نیازه که بچهها هم از قبل و هم بعد این کلاس زمان و تلاش زیادی رو صرف این موضوع بکنن. این کلاس فقط بهونهای برای آشنایی بچهها با این سبک مسابقات و هل دادن اون ها به سمت جلو است.
یکی از مواردی که هست، اینه که خیلی از بچهها از اول که وارد دانشکده میشن شاید به این سبک سوالات و مسابقات علاقهمند باشن ولی خوب کسی رو ندارند که راهنماییشون کنه، نظر شما با تشکیل یک کامیونیتی برای اینکه بچههایی که علاقهمندن بتونن از ابتدای ورود به دانشگاه توش عضو بشن و وارد دنیای این مسابقات بشن چیه؟
کاملا موافقم و البته از قبل یه صحبت هایی با آقای دکتر مینایی (ریاست دانشکده) انجام شده و ایشون هم به ما قولهایی دادن و با بچههایی که توی تیمهایی هستن هم یک سری هماهنگیها صورت گرفته، امیدواریم که بتونیم با شروع ترم ماهم کارمون رو استارت بزنیم و یه همچین محیطی رو برای دانشجوها ایجاد کنیم.
آقای دکتر خیلی از بچهها که وارد دانشکده میشن اولین برخوردشون با این مسابقاته و دوست دارن بیشتر باهاش آشنا بشن، براشون سوال پیش میاد که تو این حوزه چه منابعی هست و اگه بخوان تو این حوزه فعالیت کنن چقد باید وقت بذارن، توصیتون براشون چیه؟
یکی از مواردی که هست اینه که همیشه بچههایی هستن که از قبل در زمان دبیرستان با این قبیل مسابقات سرکار داشتن و خوب طبیعیه به جهت زمانی که روی این موضوع گذاشتن یک سر و گردن از بقیه بالاتر باشن، بچهها نباید با دیدن این افراد ناامید بشن ولی خب باید بدونن که جایگزین تمرین فقط و فقط تمرینه پس اون ها هم باید تلاش کنن و زمان بگذارن تا به سطح اونها برسن. پس اگه واقعا علاقهمندن عضو تیمهای
دانشکده بشن و هیچ بکگراندی ندارن، باید از اول شروع کنن و هفتهای حداقل یک نصف روز مفید برای این موضوع وقت بگذارن. حضور منتور مطمئناًً خیلی مفیده و بهترین نوع یادگیری هم همینه، که یکی خودش تلاش کنه و یه منتوری اون رو مدیریت کنه، ما هم برای همین در حال تلاش برای ایجاد کردن اون کامیونیتی هستیم ولی خب اگر هم تشکیل نشد بچه ها باید خودشون پیگیر باشن و از بچه هایی که تو این حوزه هستن کمک بگیرن تا اون ها راهنماییشون بکنن.
اگه بچهها بتونن تو خودشون شوق و علاقه رو ایجاد کنن این موارد هم خود به خود درست میشن. مثلا من یک دوستی دارم که خیلی به شطرنج علاقهمنده ولی دندونپزشکه و اینطوریه که بین زمان ویزیت مریضها شطرنج بازی میکنه، خلاصه اینکه
وقتی علاقه ایجاد بشه ناخودآگاه آدم برای اون کار وقت میگذاره و ارزش قائل میشه.
برای منابع هم دورههای زیادی داخل اینترنت وجود داره و این بخش بیشتر اینطوریه که بخش تدریسش چندان زیاد نیست و بخش اصلی، بخش تمرین کردنه. یکی از مرجع هایی که بچهها برای سوال میتونن بهش رجوع کنن سایت کدفورسز (codeforces.co) هست که برای همه ی سطوح سوال داره اما نکتهای که موقع حل سوال مهمه اینه که سوال باید سطح مناسبی داشته باشه. برای مثال اگه برای شخصی که تازه شروع کرده سوال خیلی سختی انتخاب بشه هیچ کمکی بهش نمیکنه یا اینکه کسی همیشه سوالات آسون حل کنه مطمئناًً رشدی نمی کنه. پس نکتهی مهم اینه که هر شخص سطح خودش رو به درستی تشخیص بده و سوالاتی رو حل کنه که بهش کمک میکنن رشد کنه.
در پایان اگه با بچه ها در این رابطه صحبتی دارید ما درخدمتیم
یکی از نکاتی که بچهها حتماًً باید در نظر بگیرن اینه که زمانشون رو به درستی مدیریت کنن، برای مثال شاید دانشجویی بگه من میخوام همهی وقتم رو برای مسابقات یا حالا هر درس دیگه ای بذارم و این باعث بشه درس های علوم پایه یا سایر دروسش رو بیفته و خب این تقسیم وقت صحیح نیست. اما اولویت دادن به موضوعی که آدم بیشتر بهش علاقهمنده هم کار بدی نیست. پس باید تلاش کنن زمانشون رو درست مدیریت کنن.
طلاییها!
تیم دانشکده ی ما سال گذشته موفق به کسب مدال طلا در بخش ریجنال (کشوری) مسابقات ICPC شد. پس ما به اون ها هم سری زدیم تا کمی دررابطه با مسابقات صحبت کنیم.
در اینجا با امیرمحمد آزادی، عضو تیم برندهی مدال طلا مصاحبه میکنیم. سلام ضمن عرض تبریک ما مزاحمتون شدیم تا در مورد مسابقات یه سری سوال ازتون بپرسیم. ی میشه یکم برامون از انگیزهی شرکت تو این مسابقات بگین؟
سلام وقتتون به خیر. حقیقتاًً من برنامهنویسی رو از کلاس هفتم شروع کردم و بعد ادامه دادم تا به دبیرستان رسیدیم، تو دبیرستان متوجه شدم یه چیزی به اسم المپیاد کامپیوتر هم هست و خیلی بهش علاقهمند شدم. دو سال من اونجا شرکت کردم ولی به مدال ختم نشد. اما خیلی خوب بود و کلی چیزا یاد گرفتم. بعد گذشت تا اومدیم دانشگاه. داخل دانشگاه دوباره متوجه شدم که اینجا هم المپیاد داره و بهش میگن المپیاد دانشجویی. پس راه قبلیمو ادامه دادم. این سابقهی من بود که باعث شد به سمت ICPC حرکت کنم و بهش علاقهمند بشم.
یکم برامون از آدمایی بگین که تو این مسیر کمکتون کردن. کسایی که باعث شدن برای رفتن این مسیر انگیزهی کافی رو داشته باشین.
مطمئناًً اولین و بزرگترین عامل استاد اعتمادی بودن که از همون اول خیلی پیگیری کردن، هم دربحث آمادهکردن شرایط و هم از جهت پیگیری کارهای ما، بستر مسابقات که هر هفته برای ما ایجاد میکردن و همچنین برگزاری کلاسهای ویژه واقعاًً به ما کمک کرد تو این مسیر.
خیلی از بچهها با دیدن شما که رفتید و مدال آوردید انگیزه میگیرن و تصمیم میگیرن وارد این مسیر بشن. بدیهیه که این مسیر واقعاًً مسیر سختیه و اگه میخوان موفق باشن باید خیلی تلاش کنن؛ توصیهی شما برای این بچهها چیه؟
بله کاملاً درسته، ببینید میزان وقتی که بچهها نیاز دارن برای این موضوع بگذارن کاملا برمیگرده به بکگراندی که از این سبک مسابقات دارن ولی به نظرم عامل اصلیای که تو موفقیت یه فرد تأثیرگذاره علاقهی اون شخصه، چون الان تقریبا میشه گفت تو همه ی حوزهها مسابقات مختص به اون حوزه برگزار میشه پس بچهها حتما باید اول ببینن به چه حوزهای واقعا علاقه مندن به دلیل اینکه هم هی حوزهها سختیهای خاص خودشونو دارن پس بچهها باید علاقهمندیشونو دنبال کنن تا این سختی هارو بتونن رد کنن.
من خودم وقتی که برای مسابقات میگذاشتم در حد آخر هفتهها و مجموعاًً هفتهای در حدود ده ساعت بود.
از منابعی که برای آمادگی این آزمونها خوبن برامون میگین؟
به نظر من سایت کدفورسز و کوئرا منابع خوب و کاملی هستن و بچهها میتونن از بخش مجموعه سوالات (problem set) سوالات رو مرتب کنن و مناسب با سطح خودشون سوال حل کنن. همچنین درس آمادگی برای مسابقات هم که توسط دانشکده ارائه میشه درس خیلی خوبی برای شروع این مسیره.
رهام ایزدی دوست، عضو تیم برنده مدال طلا؛ سلام وقتت به خیر. برامون بگو چیشد تصمیم گرفتی بری اینوری و به این مسیر علاقه مند شدی؟
همیشه الگوریتم و فضای الگوریتمی برام جالب بوده و خب با رقابت و کار تیمی هم قاطی شده که واقعا برای من جذابش می کنه.
شخص مهم این مسیر برات کی بود؟ کسی که اگه نبود به نظرت کار به نتیجه نمیرسید؟
برای من این شخص سایین بود. چون واقعا انگیزهی بالایی داشت و همیشه اون بود که تشویقمون می کرد که ادامه بدیم.
به نظر شما دانشجوهایی که می خوان وارد این مسیر بشن و به این حوزه علاقهمندن، اگر میخوان تو این حوزه موفق باشن چقدر باید وقت بگذارن؟
به طور معمول هفته ای دوتا کانتست باید داده بشه که تقریبا هرکدوم پنج ساعتن، دو تا سه تا کانتست معمولی کدفرسز باید داده بشه که هرکدوم دو ساعتن، حداقل پنج تا ده ساعت هم برای یاد گرفتن چیزهای جدید باید وقت گذاشت. اما این چیدمان برای کسیه که قبلا سابقهی حضور تو این سبک مسابقات رو داشته و دانشجوهایی که تازه میخوان وارد این مسیر بشن باید اول تمرکزشون رو بیشتر روی یادگیری بگذارن و بعد از مدتی این زمانبندی به دردشون میخوره.
برای منابع شما کجارو پیشنهاد میکنید؟
منبع برای مطالعه سایت cf algorithm و برای حل سوال سایتهای کوفورسز و کوئرا خیلی عالین.
یه سری از دانشجوها عقبهای از قبل دارن اما یه سری دیگه از بچهها این اولین برخوردشون با این مسابقاته، برای این بچهها چه توصیهای داری؟
یکی از مواردی که متاسفانه هست اینه که بچههایی که عقبه دارن قوی هستن و این رقابت باهاشون رو واقعا سخت میکنه. اما یه شانسی که خو شبختانه وجود داره اینه که دانشگاهها سهمیهی محدودی دارن و این باعث میشه بقیهی بچهها هم شانس حضور تو این مسابقات رو داشته باشن. ولی هیچوقت نباید قدرت تلاش رو دست کم گرفت. من خیلی بچهها رو توصیه میکنم به کانتست دادن و اینکه از حلنشدن سوالها ترس نداشته باشن. تا جایی که میتونن خودشون رو سوالها فکر کنن و تا حد ممکن از رفتن سراغ جواب سوالها بپرهیزن، چون هدف اصلی این مسیر افزایش خلاقیت و پویایی ذهنه و با خوندن راه حل به نوعی این خلاقیته از بین میره و ذهن تنبل میشه.
مسیر باید به این صورت باشه که تو یه کانتست شرکت میکنیم و تا جایی که میشه پیش میریم. بعد از اتمام کانتست ما باید دوباره سراغ سوالهایی بریم که نتونستیم حلشون کنیم. یه مدتی مثلا یک روز روی سوال فکر کنیم اگر به نتیجه رسیدیم که چه عالی اگه نه بعد تازه بریم سراغ راهحل و مثلاًً میبینیم یه الگوریتم جدید اونجا معرفی شده، باید برن اون الگوریتم رو بخونن و یاد بگیرن و بعد دوباره برگردن سر اون سوال و اینبار حلش کنن. با این روش روز به روز الگوریتمهایی که بلدن بیشتر و بیشتر میشه.
اگر نکتهی پایانیای هست ما در خدمتیم
یکی از نکاتی که تو این مسیر خیلی مهمه اینه که بچهها نباید این مسیر رو فقط به چشم یه مدالی توی رزومه بهش نگاه کنن، هدف اصلی این مسابقات اینه که بچهها توش رشد کنن و لذت ببرن و این تفکر الگوریتمی بعدا خیلی به دردشون می خوره.
مطلبی دیگر از این انتشارات
کامپیوترهایی که شفاف فکر میکنند
مطلبی دیگر از این انتشارات
طراحی سیستماتیک در بازی ها
مطلبی دیگر از این انتشارات
مصاحبه با مهندس حمید محمودزاده - بنیانگذار مجموعه دیدار