در درس برنامهسازی پیشرفته شریف چه گذشت؟ قسمت ۲
در قسمت قبلی این نوشته در مورد انگیزه برای اصلاح شیوهی ارائه این درس به خصوص در تمرین و پروژه صحبت کردیم. در این قسمت به گزارش اولین ترمی که به صورت جدی درگیر اصلاح فرآیندهای مربوط به این درس شدیم میپردازیم.
گزارش تحلیلی برنامهسازی پیشرفته ترم بهار ۹۷ و مستند تجربیات ما برای دستیاران آموزشی ترمهای آینده
در این پروژه تلاش کردیم اهداف مربوط به یادگیری را در دو بخش یادگیریهای فنی و یادگیریهای غیر فنی دنبال کنیم.
اهداف مرتبط با یادگیریهای فنی:
1) آشنایی با برنامهنویسی شی گرا - OOP در زبان جاوا (توانایی طراحی کلاسها و استفاده از پترن MVC)
2) استفاده از Git
3) انجام ریفکتور کد
4) آشنایی با گرافیک در جاوا
5) آشنایی با برنامهنویسی چند ریسهای و دیباگ آن
6) انجام انواع Serialization
7) آشنایی با Socket و برنامهنویسی شبکه در جاوا
8) طراحی و انجام تست
اهداف مرتبط با یادگیریهای غیر فنی:
1) توانایی کار کردن در تیم
2) تقسیم کار درست و درگیر بودن همهی اعضای تیم
3) زمانبندی و تخمین درست
4) مدیریت شرایط بحرانی و توانایی اولویت بندی کارها
در راستای محقق شدن اهداف بالا اقدامات اجرایی زیر صورت گرفت:
* الزام ساختن Repository و عضویت دستیار آموزشی پروژه در آن و امکان مانیتور تعداد کامیت هر یک از اعضای تیم
* اضافه شدن قابلیتهای جدید در فازهای بعد باعث میشد کد قبلی مرتباً نیاز به ریفکتور داشته باشد
* در نظر گرفتن قابلیتهایی مانند ذخیره بازی و همچنین پخش زندهی آن که تیم را درگیر طراحی مدل ذخیره و ارسال بهینه داده میکرد و از طرفی آشنایی با انواع Serialization را در پی داشت
نقاط ضعف پروژه این ترم:
1) ابهام و ناهماهنگی در داک فاز اول که به دلیل ویرایش آن توسط چند نفر با درکهای مختلف از پروژه رخ داد البته تلاش کردیم در داک فاز سوم آن را جبران کنیم و داک بسیار دقیقی تدوین شد
2) لاتک نبودن داک هیچ یک از فاز ها
3) جدی نبودن ددلاینهای رلیز و اتمام فاز
4) سنگین بودن گرافیک پروژه
5) نبود مکانیزمی برای جلوگیری از کمکاری نفر سوم در بعضی از تیمها
6) نبود الزام در استفاده از امکانات پیشرفتهتر gitlab مثل برنچ، pull Request و همچنین continuous integration
7) عدم پرداختن به 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/x7hQD
https://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 کردن دادهها برای ذخیرهسازی و ارسال در شبکه، گرافیک، زمانبندی، تقسیم کار و متعهد بودن به ددلاین از اهداف اصلی پروژه بود.
تلاش کردیم در پروژه این ترم تا جای ممکن موارد اضافی پروژه که بار یادگیری ندارند را حذف کنیم و به جای آنها روی مواردی که کاربرد صنعتی دارند تاکید کنیم. هر چند موفق به حذف کامل آنها نشدیم اما امیدواریم این روند اصلاحی در ترمهای آینده حفظ شود و پروژهها هر ترم به مهارتهای مورد نیاز در صنعت نزدیکتر شود. همچنین آموزش جدیتر اندروید، در نظر گرفتن پشتیبان و مشاور برای هر تیم و شفافیت کامل داک نمرات قبل از تحویل حضوری و حین آن از تلاشهای ما برای بهتر ارائه شدن پروژه بود.
خوشحالیم که پذیرفته شدن تعداد قابل توجهی از دانشجویان این درس در مصاحبهی شرکتهای خوب کامپیوتری کشور گواهی بر مثمر ثمر بودن این تلاشهاست.
و اما یکم خودمونی تر:
در صورتی که پیشنهاد یا انتقادی نسبت به عملکرد و رفتار تیم پروژه دارین خوشحال میشیم با ما در میان بگذارین، اگر کمی و کاستی از ما دیدن امیدوارم ببخشین و ترمهای بعد که خودتان دستیار آموزشی این درس شدید بهتر از آن را اجرا کنید
در اینجا لازمه از تیم دستیاران آموزشی پروژه آقایان عمرانپور، عالیان، طاهری، ابوالقاسمی و دستیار آموزشی حل تمرین آقای حسنزاده بسیار تشکر کنم که تمام تلاش خودشون رو برای یادگیری شما انجام دادند و در رفع اشکال دانشجویان نقش زیادی داشتند. همچنین آقای اعلمی که پیگیری زیادی برای حل مسائل مربوط به درس داشتند.
به طور ویژه از استاد محترم درس آقای حاتمی تشکر دارم که نهایت همکاری را با تیم پروژه داشتند.
از همهی دانشجویان عزیز که با همراهی و تلاش خود به ما در محقق کردن اهداف بالا کمک کردند و انصافاً پروژههای بسیار با کیفیتی را به سر انجام رساندند تشکر میکنم. کیفیت بعضی از پروژهها به حدی بود که باعث تحسین دستیاران آموزشی و حتی برنامهنویسان حرفهای در خارج از دانشگاه شد.
قسمت بعدی این نوشته به گزارش ادامهی بهبودها در ترم بعدی یعنی ترم پاییز ۹۷ میپردازد.
مطلبی دیگر از این انتشارات
برتریِ کوانتومی، قصهٔ مقالهٔ گوگل - قسمت دوم
مطلبی دیگر از این انتشارات
برای پیشرفت مجدد، دوباره وبلاگ بنویسید
مطلبی دیگر از این انتشارات
در درس برنامهسازی پیشرفته شریف چه گذشت؟ قسمت ۱