در درس برنامه‌سازی پیشرفته شریف چه گذشت؟ قسمت ۲

در قسمت قبلی این نوشته در مورد انگیزه برای اصلاح شیوه‌ی ارائه این درس به خصوص در تمرین و پروژه صحبت کردیم. در این قسمت به گزارش اولین ترمی که به صورت جدی درگیر اصلاح فرآیند‌های مربوط به این درس شدیم می‌پردازیم.پروژه‌ی گروه شماره یک، علاوه بر پیاده سازی بازی Clash یک اپلیکیشن کنترل کننده‌ی اندروید از طریق نیز برای آن نوشته بودندگزارش تحلیلی برنامه‌سازی پیشرفته ترم بهار ۹۷ و مستند تجربیات ما برای دستیاران آموزشی ترم‌های آیندهدر این پروژه تلاش کردیم اهداف مربوط به یادگیری را در دو بخش یادگیری‌های فنی و یادگیری‌های غیر فنی دنبال کنیم.اهداف مرتبط با یادگیری‌های فنی:1) آشنایی با برنامه‌نویسی شی گرا - OOP در زبان جاوا (توانایی طراحی کلاس‌ها و استفاده از پترن MVC)2) استفاده از Git3) انجام ریفکتور کد4) آشنایی با گرافیک در جاوا5) آشنایی با برنامه‌نویسی چند ریسه‌ای و دیباگ آن6) انجام انواع Serialization7) آشنایی با Socket و برنامه‌نویسی شبکه در جاوا8) طراحی و انجام تستاهداف مرتبط با یادگیری‌های غیر فنی:1) توانایی کار کردن در تیم2) تقسیم کار درست و درگیر بودن همه‌ی اعضای تیم3) زمان‌بندی و تخمین درست4) مدیریت شرایط بحرانی و توانایی اولویت بندی کار‌هادر راستای محقق شدن اهداف بالا اقدامات اجرایی زیر صورت گرفت:* الزام ساختن Repository و عضویت دستیار آموزشی پروژه در آن و امکان مانیتور تعداد کامیت هر یک از اعضای تیم* اضافه شدن قابلیت‌های جدید در فاز‌های بعد باعث می‌شد کد قبلی مرتباً نیاز به ریفکتور داشته باشد* در نظر گرفتن قابلیت‌هایی مانند ذخیره بازی و همچنین پخش زنده‌ی آن که تیم را درگیر طراحی مدل ذخیره و ارسال بهینه داده می‌کرد و از طرفی آشنایی با انواع Serialization را در پی داشتنقاط ضعف پروژه این ترم:1) ابهام و ناهماهنگی در داک فاز اول که به دلیل ویرایش آن توسط چند نفر با درک‌های مختلف از پروژه رخ داد البته تلاش کردیم در داک فاز سوم آن را جبران کنیم و داک بسیار دقیقی تدوین شد2) لاتک نبودن داک هیچ یک از فاز ها3) جدی نبودن ددلاین‌های رلیز و اتمام فاز4) سنگین بودن گرافیک پروژه5) نبود مکانیزمی برای جلوگیری از کم‌کاری نفر سوم در بعضی از تیم‌ها6) نبود الزام در استفاده از امکانات پیشرفته‌تر gitlab مثل برنچ، pull Request و همچنین continuous integration7) عدم پرداختن به Unit Testنقاط قوت و مواردی که اجرای آن‌ها با نتایج بسیار خوبی همراه بود: (بخشی از این موارد برای اولین‌بار اجرا می‌شدند)1) در نظر گرفتن پشتیبان (مشاور یا راهنما) برای هر تیم به طوری که نقش پیگیری وضعیت، رفع اشکال و مشورت دادن به اعضای تیم را داشته باشد. پشتیبان هر تیم به گیت آن تیم دسترسی داشت که فرآیند مشورت گرفتن در مورد کد ها برای تیم آسان‌تر باشد. دستیاران آموزشی پروژه 6 نفر بودند که هر یک پشتیبان حدود 3 تیم بودند.2) الزام تیم‌ها به طراحی کلی کلاس‌ها قبل از شروع به برنامه‌نویسی و بررسی فایل‌های UML و مشورت دادن به تیم‌ها قبل از شروع پیاده‌سازی که باعث بهبود درک آن‌ها از فرآیند طراحی و در برخی موارد اصلاحات اساسی در طراحی شد3) هماهنگی کامل روند پیشرفت پروژه با کلاس حل تمرین به گونه‌ای که دستیار حل تمرین در جریان اهداف پروژه و زمان‌بندی آن و موارد فنی مورد نیاز بودند و بعد از رلیز هر فاز پروژه موارد فنی مربوط به آن را توضیح می‌دادند. در بعضی از موارد طرز استفاده از کتابخانه مورد نیاز پروژه در کلاس حل تمرین گفته شده است.4) در دسترس بودن دستیاران آموزشی پروژه برای همه دانشجویان: در این ترم پشتیبان و اعضای هر تیم یک گروه تلگرام داشتند و همین باعث می‌شد اولاً فرآیند رفع اشکال بسیار سریع‌تر از گذشته که مبتنی بر ایمیل بود انجام شود و ثانیاً تیم دستیاران آموزشی پروژه زودتر در جریان ابهام‌ها و مشکلات پروژه قرار گیرد و بازخورد های بیشتری را در زمان کوتاه‌تر دریافت کند و بر اساس آن اصلاحات لازم را انجام دهد.شاید بتوان گفت مورد چهارم نقش اصلی را در بالاتر بودن کیفیت پروژه‌های این ترم داشته است زیرا تعامل گسترده تیم پروژه با دانشجویان باعث شد تعداد سوالات و رفع اشکال‌های انجام شده چندین برابر حالت سنتی مبتنی بر ایمیل شود که باعث انتقال تجربیات فنی دستیاران آموزشی و یادگیری بهتر می‌شد.5) حضور افرادی با تجربه فنی بالا در تیم دستیاران آموزشی پروژه6) شفافیت کامل در داک نمرات: داک نمرات که در زمان تحویل حضوری توسط دستیاران آموزشی پر می‌شود قبل از شروع تحویل حضوری به صورت عمومی انتشار یافت تا همه‌ی دانشجویان امکان مشاهده و بررسی میزان نمره هر بخش داشته باشند بنابراین خودشان بین موارد امتیازی اولویت بندی می‌کردند و بر اساس هزینه/فایده موارد مهم‌تر را پیاده سازی می‌کردند. فایده دوم این کار نیز کاهش اشتباهات دستیاران آموزشی و اعتراضات بود چون اگر اشتباهی در نمره دهی تحویل حضوری رخ میداد دانشجویان به صورت آنلاین می‌دیدند که نمره آن‌ها اشتباه وارد شده است و تذکر می‌دادند.7) تلاش برای حذف موارد کم کاربرد و وقت گیر بدون ارزش یادگیری از پروژه: سعی کردیم مواردی از قبیل گرافیک swing و پیاده سازی‌های روتینی که کتابخانه‌های آن موجود است را از پروژه حذف کنیم و به جای آن استفاده از کتابخانه‌های مرسوم، استفاده و خواندن کد‌های متن باز را بگنجانیم که به مهارت‌های مورد نیاز یک برنامه‌نویس نزدیک‌تر باشد. همچنین اسپرایت‌ها و بخشی از عکس‌های مورد نیاز بازی را در اختیار دانشجویان قرار دادیم تا وقت آن‌ها کمتر تلف شود هر چند به موفقیت کامل نرسیدیم و مواردی چون حجم بالای گرافیک بازی از همین کار‌های بدون ارزش یادگیری بود که حدف نشد.8) برگزاری چالش بهترین پروژه ترم بر اساس رای گیری بین دانشجویانبر اساس بازخورد‌های دریافت شده از افراد مختلف و همچنین ارزیابی‌های انجام شده کیفیت خروجی نهایی پروژه‌ی دانشجویان این ترم به طور محسوسی از ترم‌های گذشته بالاتر بوده است که اصلاحات بالا و همچنین تلاش جدی خود دانشجویان در جهت یادگیری از دلایل اصلی آن است.در پایان لازم می دانم از همه‌ی دستیاران آموزشی و دانشجویان عزیز به خاطر همراهی‌شان تشکر کنم و همچنین تشکری ویژه از استاد حاتمی عزیز دارم که با حمایت و میدان دادن به تیم پروژه باعث شدند بتوانیم اصلاحات بالا را انجام دهیم. ان شاء الله که این روند اصلاحی در ترم‌های آینده ادامه پیدا کند.کاندید‌های بهترین پروژه ترم بهار ۹۷ (ورودی های ۹۶)‌ برنامه‌سازی پیشرفته دانشکده مهندسی کامپیوتر شریف:گروه 1:سید صادق مهدوی - امیر مجتبی صبور - حامد عبدیhttps://www.aparat.com/v/h3DgFگروه 3:حامد علی محمدزاده - سروش وفایی تبار - ارشیا مقیمیhttps://www.aparat.com/v/x7hQDhttps://www.aparat.com/v/Y9TC7گروه 6: (جا مانده از نظر سنجی)سید علیرضا فاطمی جهرمی - سینا معمر - مهران اصغریhttps://www.aparat.com/v/KtZpsگروه 7: (فیلم از فاز دوم)اشکان میرزایی - لیلی گلی - آراد محمدیhttps://www.aparat.com/v/QeWbGگروه 12:محمد مهدی عرفانیان - محمد امیدوار طهرانی - صابر دین پژوهhttps://www.aparat.com/v/pfniQگروه 15: (فیلم از فاز دوم)ثنا آیرملو - رودابه صفوی - سروش فرقدانیhttps://www.aparat.com/v/26MgQو در نهایت برنده نظرسنجی گروه ۳ بود!و اما در پایان:بسیار خوشحالیم که این ترم تلاش کردیم در حد توانمان به یادگیری مهارت‌های فنی و غیر فنی (مدیریتی و اجرایی) شما در پروژه برنامه‌سازی پیشرفته کمک کنیم. یادگیری مواردی چون کار تیمی، git، آشنایی با OOP، کدنویسی شبکه TCP و UDP، ریفکتور کد قدیمی در فاز‌های بعدی پروژه، آشنایی با برنامه‌نویسی Android، آشنایی با Serialize کردن داده‌ها برای ذخیره‌سازی و ارسال در شبکه، گرافیک، زمان‌بندی، تقسیم کار و متعهد بودن به ددلاین از اهداف اصلی پروژه بود.تلاش کردیم در پروژه این ترم تا جای ممکن موارد اضافی پروژه که بار یادگیری ندارند را حذف کنیم و به جای آن‌ها روی مواردی که کاربرد صنعتی دارند تاکید کنیم. هر چند موفق به حذف کامل آن‌ها نشدیم اما امیدواریم این روند اصلاحی در ترم‌های آینده حفظ شود و پروژه‌ها هر ترم به مهارت‌های مورد نیاز در صنعت نزدیک‌تر شود. همچنین آموزش جدی‌تر اندروید، در نظر گرفتن پشتیبان و مشاور برای هر تیم و شفافیت کامل داک نمرات قبل از تحویل حضوری و حین آن از تلاش‌های ما برای بهتر ارائه شدن پروژه بود.خوشحالیم که پذیرفته شدن تعداد قابل توجهی از دانشجویان این درس در مصاحبه‌ی شرکت‌های خوب کامپیوتری کشور گواهی بر مثمر ثمر بودن این تلاش‌هاست.و اما یکم خودمونی تر:در صورتی که پیشنهاد یا انتقادی نسبت به عملکرد و رفتار تیم پروژه دارین خوشحال میشیم با ما در میان بگذارین، اگر کمی و کاستی از ما دیدن امیدوارم ببخشین و ترم‌های بعد که خودتان دستیار آموزشی این درس شدید بهتر از آن را اجرا کنیددر اینجا لازمه از تیم دستیاران آموزشی پروژه آقایان عمران‌پور، عالیان، طاهری، ابوالقاسمی و دستیار آموزشی حل تمرین آقای حسن‌زاده بسیار تشکر کنم که تمام تلاش خودشون رو برای یادگیری شما انجام دادند و در رفع اشکال دانشجویان نقش زیادی داشتند. همچنین آقای اعلمی که پیگیری زیادی برای حل مسائل مربوط به درس داشتند.به طور ویژه از استاد محترم درس آقای حاتمی تشکر دارم که نهایت همکاری را با تیم پروژه داشتند.از همه‌ی دانشجویان عزیز که با همراهی و تلاش خود به ما در محقق کردن اهداف بالا کمک کردند و انصافاً پروژه‌های بسیار با کیفیتی را به سر انجام رساندند تشکر می‌کنم. کیفیت بعضی از پروژه‌ها به حدی بود که باعث تحسین دستیاران آموزشی و حتی برنامه‌نویسان حرفه‌ای در خارج از دانشگاه شد.قسمت بعدی این نوشته به گزارش ادامه‌ی بهبود‌ها در ترم بعدی یعنی ترم پاییز ۹۷ می‌پردازد.