لیسانس علوم کامپیوتر بدون پیژامه

بعد از تاسیس موسسه‌ی کورسرا توسط خانم دفنی کولر و همکارش اندرو ان‌جی و تدتاکش توی سال ۲۰۱۲، بحث آموزش آنلاین در سطح گسترده و آزاد یا همون MOOC ها بسیار داغ شد. هرچند که از مدت‌ها قبل بهترین دانشگاه‌های دنیا، مثل MIT از کلاس‌هاشون فیلم‌برداری می‌کردن و به صورت آنلاین و غالبا رایگان و ناسودبر در اختیار همه قرار می‌دادن، ولی توی سال‌های اخیر ایده‌ای جدید که مطرح شده، و اون هم این که دانش بشری باید در به صورت آزاد و رایگان در دسترس همه باشه و خب چه بستری بهتر از اینترنت، و خب ایده‌ی درآمد زایی این موسسه‌ها، نه از طریق فروش محتوای ارائه شده بلکه به صورت ارائه‌ی مدرک و دریافت هزینه در قبال مدرک‌های ارائه شده هست.

شروع وبسایت کورسرا با شروع اولین ترم دانشگاهی من همزمان شد و کیه که دوست نداشته باشه که از بهترین استاد‌های دنیا توی بهترین دانشگاه‌ها درس یاد بگیره؟ پس از همون اول یکی دو تا کورس رو ثبت‌نام کردم و هرچند که تمامشون نکردم که مدرکش رو بگیرم، ولی ویدئو‌های آموزشیش رو می‌گرفتم و امتحان‌هام رو با نمره‌های خوب پاس می‌کردم! خیلی از بچه‌ها می‌پرسیدن که چه شکلی می‌تونم بدون شرکت توی کلاس‌ها درس‌هام رو بگذرونم. این شد مقدمه‌ای برای یه همایش دو سه ساعته در مورد آموزش آنلاین که قبلا در موردش نوشتم.

اما این صحبت‌ها برای چی هست؟ اخیرا دوست خوبم عباس توی وبلاگ سیتپور در مورد این که چه شکلی می‌تونین با پیژامه لیسانس فیزیک بگیرین، مطلب خوبی نوشته که پیشنهاد می‌کنم از دستش ندین! و خب من رو دعوت کرده که لیستی از کورس‌های مرتبط با رشته‌ی تحصیلی خودم یعنی علوم کامپیوتر یا Computer Science بسازم تا این لیست کامل‌تر بشه. قبل از این که من لیست رو درست کنم، یه نکته‌ای توی پست عباس توجه‌ام رو جلب کرد، آیا واقعا واقعا دانشگاه رفتن وقت آدم رو تلف می‌کنه؟

همون جوری که عباس گفت دانشگاه واقعا جایی نیست که فقط توش درس ارائه بشه، یا بهتر بگم نباید این طوری باشه. دانشگاه باید محل بحث و گفت‌گو و پژوهش و تحقیق باشه، اگه به تعریف لغوی university هم نگاه کنیم، به community of teachers and scholars میرسیم، که تقریبا میشه جامعه‌ای از معلمان و عالمان، نه محلی که شما صرفا برای گرفتن یه مدرک به اونجا می‌رین. ولی اگه فکر می‌کنین که درس‌ها پاس میشه و تموم میشه، شاید اره، وقت تلف کردنه.

بگذریم و برسیم به لیست کورس‌هایی که شما اگه بگذرونین باید بهتون لیسانس علوم کامپیوتر بدن، اول بگم که چارت درسی این رشته توی ایران مثل خیلی از رشته‌های دیگه خیلی مشکلات داره و متاسفانه خیلی از دروس تخصصی این رشته با دروس نسبتا مشابه رشته‌های مهندسی نرم‌افزار و IT ترکیب شده و تدریس میشه، و منظورم هم اینه که نباید خودتون رو محدود به این لیست بکنین. و نکته‌ی بعدی هم این که خوشبختانه چون بحث MOOC ها از سمت جامعه‌ی علوم کامپیوتر مطرح شده، کورس‌های متنوعی برای این رشته و به خصوص ریاضی روی سایت‌های مختلف هست.

دروس پایه

نام درس ارائه کننده
ریاضی عمومی ۱

Coursera , MIT OCW , مکتب‌‌خونه

ریاضی عمومی ۲ و ۳*

  Coursera , MIT OCW , مکتب‌‌خونه، Khan Academy

معادلات دیفرانسیل

MIT (1) , MIT (2), edX, مکتب‌‌خونه , دانشگاه تهرانKhan AcademyUCLA, Saylor

مبانی کامپیوتر

Python,مکتب‌خونهPerimeter, Stanford, Udacity, Coursera, Edx

مبانی اقتصاد مکتب‌خونه، Khan Academy (Micro), (Macro), Coursera (Micro), (Macro)

 دروس هسته

نام درس ارائه کننده
مبانی علوم ریاضی Coursera
مبانی ماتریس‌ها و جبر خطی Saylor, Coursera, Edx, مکتب‌خونه
مبانی آنالیز عددی Saylor, MIT
مبانی آنالیز ریاضی
مبانی احتمال Edx
مبانی جبر Edx, Udacity, Saylor
مبانی آنالیز ترکیبیاتی Coursera
ساختمان داده‌ها و الگوریتم Khan Academy, Coursera, Udacity
اصول سیستم‌عامل‌ها Saylor
اصول سیستم‌های کامپیوتری Coursera, MIT
نظریه‌ی محاسبه (اتوماتا) Coursera

دروس انتخابی

نام درس ارائه کننده
بهینه‌سازی خطی Coursera (1), Coursera (2)
کامپایلر Coursera, Saylor
پایگاه داده‌ها Coursera
زبان‌های برنامه‌سازی Coursera
شبکه‌های کامپیوتری Coursera, MIT
گرافیک کامپیوتری Edx, Coursera
هوش مصنوعی و سیستم‌های خبره MIT, Udacity, Edx, Saylor
ریزپردازنده‌ها و معماری کامپیوتر Coursera
رمزنگاری Coursera (1), Coursera (2)
منطق Coursera

اضافه*

نام درس ارائه کننده
Machine Learning یادگیری ماشین Coursera
Game Thoery نظریه‌ی بازی‌ها Coursera
Probabilistic Graphical Models مدل گرافی احتمالی Coursera
Gamification بازی سازی Coursera
Big Data Science دانش ابر داده‌ها Coursera

* این لیست آخری توی چارت درسی ما نیست کلا ولی درس‌هایی مثل نظریه‌ی بازی‌ها توی بعضی از دانشگاه‌ها ارائه میشه و بعضی از این درس‌ها توی رشته‌های ارشد تدریس میشه (مثل PGM) ولی دوره‌های خیلی خوبی هستند که توصیه‌شون میکنم!

از بین دوره‌های بالا، الگوریتم با رابرت سجویک از پرینستون، دوره‌ی هوش مصنوعی با هنری وینستون از MIT، رمزنگاری با دن بونه از استنفورد و ۴ کورس آخری که معرفی کردم که دو تاش از خود دفنی کولر و اندرو ان‌جی، موسسین کورسرا هستن، جزو اون‌هایی هستن که حتما توصیه می‌کنم بگیریدشون.

یه نکته‌ای هم که هست، در مورد چارت بندی ما هست، برای مثال جبر خطی و جبر خطی عددی برای ما دو درس جدا هست ولی توی اکثر کورس‌ها جبر خطی عددی یکی دو فصل از جبر خطی هست. و یا ساختمان داده معمولا همیشه با الگوریتم ارائه میشه و چیز جدایی نیست. همین طور در مورد سیستم‌های خبره، در واقع توی کورس هوش مصنوعی MIT یه جلسه صرفا در مورد Expert Systems حرف می‌زنه، به خاطر همینه که من این‌ها رو جدا ننوشتم.

در آخر هم بگم که این لیست خیلی ناقص هست و خب هر روزه کلی دوره‌ی خوب به این‌ها اضافه میشه، اگه چیزی مد نظرتون هست که از دست من در رفته، حتما توی کامنت‌ها بگین تا به لیست اضافه‌اش کنم. و اگi یه وقت حوصله کردین همچین لیستی برای رشته‌ی خودتون تهیه کنین، من رو با خبر کنین تا به انتهای این لیست اضافه‌اش کنم.

بهترین انتخاب واحد دانشگاه

اولایل بهمن ماه مهم‌ترین چیزی که ما دانشجوها درگیرش هستیم، انتخاب واحد دانشگاه هست. دانشگاه من، خوشبختانه از سیستم گلستان استفاده نمی‌کنه و خوبی که داره اینه که با هر مرورگری که دلم بخواد می‌تونم ازش استفاده کنم. اما متاسفانه به شدت بد نوشته شده و من که کرکر نیستم و اصلا علاقه‌ای به این کار ندارم، به سادگی می‌تونم بهش نفوذ کنم. متاسفانه در هنگام انتخاب واحد بشدت سایت کند میشه و هر چند مدت یکبار هم، همچین اخطاری رو با جزئیات کامل می‌بینید!

باگ سایت دانشگاه شیخ‌بهایی
باگ سایت دانشگاه شیخ‌بهایی

من ترم اول که این سیستم رو دیدم رفتم و به معاونت فناوری و اطلاعات اطلاع دادم و برای اثبات حرفم هم یه باگ خیلی تابلو توی سیستم پرداختشون رو بهشون گفتم. ولی گویا متوجه حرف من نشدن و نتیجه‌اش این شد که سیستم همچنان پر از باگ‌های مختلف باقی موند.

من امنیتی نیستم و الان هم قصد ندارم در مورد این موضوع بنویسم، مشکلی که من باهاش درگیر هستم اینه که هر ترم باید کل کلاس‌ها و تاریخ‌هاشون رو طی یک پروسه‌ی سخت از روی سایت دانشگاه ببینم، سعی کنم یه جدول زمانی برای خودم درست کنم از روش و سعی کنم بر اساس زمان کلاس‌ها، استاد مربوطه، زمان امتحان و در آخر مبحثش کلاس (!) انتخاب واحد کنم که در آخر چند تا از کلاس‌ها یا پر شده‌ان یا اینکه نمی‌تونم اینترنتی بگیرمشون.

خب، دانشگاه که به نظر نمی‌اد بخواد ولخرجی کنه و این سیستم رو بهبود بده و متاسفانه کسایی که مسئول هستن هم درک و دانش کافی برای این قضیه ندارن. پس من مجبورم خودم برای خودم این موضوع رو درست کنم.

جمع آوری اطلاعات

خب توی فاز اول باید اطلاعات درس‌ها رو دربیارم. با توجه به مشکلات امنیتی که گفتم به سادگی میشه SQL Inject کرد به سیستم و اطلاعات رو در  آورد. حتی اگه SQL معتبر نفرستین سیستم سخاوتمندانه اخطار می‌ده و راهنمایی‌تون میکنه. ولی من قصد ندارم که از دانشگاه اخراج بشم و کرکر هم نیستم، پس این گزینه رو رد می‌کنم و سعی میکنم از اون چیزی که همه بهش دسترسی دارن استفاده کنم. پس خیلی ساده با استفاده از یه لایبرری ۵۰ کیلوبایتی به اسم simple html dom، اطلاعات مورد نیازم رو از صفحه‌ی مربوطه دربیارم و بعد محاسبات مورد نیازم رو روش انجام بدم.

این کار به لطف دانش کم دوستانمون خیلی سریع‌تر از اون چیزی که فکر می‌کردم زمان برد. توی این سیستم، هر موقع شما صفحه‌ی درس‌ها رو باز کنید، تمام اطلاعات با جزئیات تمام درس‌ها رو براتون لود می‌کنه. یعنی هیچ Ajax یا حتی درخواست دیگه‌ای به سرور نمی‌فرسته و خب فقط کافیه که اطلاعات لازم رو با همون لایبرری دربیارم و با regex یکمی درستشون کنم.

مشکل بعدیم تصحیح اطلاعات هست، من از ک و ی عربی توی زبان فارسی خوشم نمی‌اد! و مهم‌تر از اون من روی «سه شنبه ساعت ۱۰ (به مدت ۱ ساعت کلاس W210)» محاسبات نمی‌تونم انجام بدم. پس مجبورم این رشته‌ها رو اصلاح کنم و همچنین این ساعت‌ها رو به یه مفهوم قابل محاسبه برای خودم تبدیل کنم. خوشبختانه توی کل سیستم تمام اشتباهات یه جور هستن (یعنی اگه نوشته «یکشنبه»، همه جا همینه و میشه الگو توش درآورد.)

محاسبه و در آوردن خروجی

راستش واسه‌ی این قسمت یکمی به مشکل برخوردم، درآوردن اطلاعات رو قبلا انجام داده بودم توی محل کار و خب کار سختی نیست. اما برای محاسبه این که این ترم من ترم چه واحد‌هایی بردارم به چند تا چیز مربوط هست:

  • با حداقل اتلاف وقت بیشترین واحد رو بگیرم؛ مثلا سه روز ۱۸ واحد
  • زمان کافی قبل از روز امتحانش داشته باشه
  • با استادی که بهتر درس و نمره میده باشه
  • ترم متناسب باشه، خیلی سخت نباشه و خیلی هم آسون نباشه
  • درس‌هایی اولویت بیشتری دارن که پیش‌نیاز بقیه هستن

خب، بهتره که اول مجموعه رو کامل بسازم و بعد به هر عضوش با توجه به اولویتش یک عدد نسبت بدم. اینجا مجموعه من، میشه تمام حالت‌هایی که من می‌تونم درس رو بگیرم که:

  • تداخل زمانی نداشته باشه
  • تداخل امتحانی نداشته باشه
  • پیش‌نیاز درس رو گذرونده باشم
  • بیش تر از ۲ درس عمومی نداشته باشه

تا همین جای کار اگه بتونم اون مجموعه رو بسازم، تا حد زیادی از کار انجام شده، تنها کاری که می‌مونه اینه که اولویت‌هام رو توش اعمال کنم.

اینجا میشه دستم رو باز بزارم و بگم که مثلا تمام حالت‌هایی که روزهای بیشتری توی هفته خالی دارن و حداقل ۱۵ واحد توش برداشته شده رو برای من برگردونه؛ برای من به شخصه چون مشغول به کار هستم، خیلی مهمه که بتونم این زمان تلف شده توی دانشگاه رو تا حد امکان کم کنم.

اما وقتی که این مجموعه ساخته بشه، ایده‌های بیشتری میشه داد. برای مثال میشه به استادها رنک بدیم و بگیم حالا بر اساس رنک بندی ما اون عدد مربوط به هر حالت رو حساب کنه.

من اطلاعات مورد نیاز رو جمع کردم و اصلاحات مربوط به محاسبه رو هم انجام دادم ولی تا الان که این پست رو می‌نویسم هنوز محاسبه روی این داده‌ها انجام ندادم و خب مجبور شدم این ترم رو هم به صورت دستی انتخاب واحد کنم.

از اونجایی که ما فتیش اتوماسیون داریم، می‌تونیم بعد از انتخاب بهترین حالت ممکن، سیستم رو تنظیم کرد که هر موقع انتخاب واحد باز شد، درخواست دریافت واحد بده، اما متاسفانه همین الان هم با وجود اینترنتی بودن انتخاب واحد، خیلی از واحدها رو باید با هماهنگی مدیر گروه برداشت و کاملا اینترنتی نیست.

پی‌.نوشت: این موضوع با استادم آقای مهدی ناصری مطرح کردم و خب میشه این کار رو از سمت آموزش، یعنی بهینه‌سازی ارائه درس‌های ترم بر اساس وضعیت دانشجوها هم انجام داد.