خلاقیت الگوریتمی و برنامه‌سازی پایتون

Algorithmic Creativity and Programming in Python

شماره درس: ۹۰۹۰ تعداد واحد: ۳
نوع درس: نظری-عملی پیش‌نیاز: –

اهداف درس

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

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

ضرورت

توسعه علوم کامپیوتر و برنامه‌نویسی در مدارس ایران به دلایل ذیل دارای ضرورت و اهمیت بسیار زیادی است:

  1. تاثیر تفکر الگوریتمی بر مهارت‌های متعددی از زندگی تحصیلی و کاری:‌ ارتقای تفکر الگوریتمی در یک دانش‌آموز صرفا زمینه‌ساز ورود وی به رشته‌ی مهندسی کامپیوتر، علوم کامپیوتر یا فناوری اطلاعات نیست، بلکه می‌تواند رویکرد وی در ابعاد گوناگونی از زندگی تحصیلی و کاری را تحت تاثیر جدی قرار دهد. نگاه الگوریتمی می‌تواند باعث برنامه‌ریزی بهتر، تعریف چالش‌های پیش رو به مساله‌های مجرد و تلاش برای حل آن، و بهینه‌سازی سازوکارهای پیش رو است.
  2. تطبیق مهارت‌های دانش‌آموختگان مهندسی کامپیوتر برای بازار کار: در سال‌های اخیر استقبال از رشته‌های مرتبط با کامپیوتر نظیر مهندسی کامپیوتر (در کارشناسی) و هوش مصنوعی (در تحصیلات تکمیلی) افزایش چشم‌گیری داشته است. با وجود آن‌که دانشجویان زیادی از این رشته فارغ‌التحصیل می‌شوند، همچنان بازار کار این رشته‌ها در کشور نیازمند ورود متقاضیان مسلط و حرفه‌ای است. از دلایل این موضوع، عدم تسلط بسیاری از دانش‌آموختگان این رشته به مهارت‌های عمیق الگوریتمی و برنامه‌نویسی است. بسیاری از دانشجویان از مقطع کارشناسی برای نخستین بار مهارت‌های الگوریتمی را در تعداد محدودی واحد دانشگاهی (بعضا به صورت صرفا نظری) می‌گذرانند و عملا فرصت کسب مهارت‌های کافی برای ورود به بازار کار را پیدا نمی‌کنند. در حالی که اگر مهارت‌های الگوریتمی و برنامه‌نویسی از سطح مدارس آموزش داده شود، دانشجویان با آشنایی اولیه وارد دانشگاه می‌شوند و در هنگام فارغ‌التحصیلی برای ورود به بازار کار بسیار آماده‌تر هستند.
  3. سرمایه‌ی اولیه برای شروع کسب‌وکار: ایجاد یک کسب‌وکار جدید در بسیاری از رشته‌های مهندسی نیازمند سرمایه‌ی اولیه‌ی زیادی است. مثلا یک مهندس معماری و عمران، شیمی یا مکانیک برای آن‌که یک طرح ساختمانی، یک کارخانه تولید محصولات شیمیایی یا یک کارگاه تولید قطعات ایجاد کند نیازمند میلیاردها تومان جذب سرمایه است. این در حالی است که بسیاری از شرکت‌های نوپا (استارتاپ) در حوزه‌ی مهندسی کامپیوتر با چند میلیون تومان سرمایه‌ی اولیه شروع به کار می‌کنند.
  4. تغییر الگوی خلق ثروت در جهان: زمانی بزرگترین‌ کسب‌وکارها کارتل‌های نفتی بودند. از چند دهه پیش، بیشترین خلق ثروت در جهان توسط شرکت‌های مرتبط با حوزه‌ی علوم و مهندسی کامپیوتر نظیر مایکروسافت، اپل و گوگل تحقق یافته‌است. رمزارزها که صدها میلیارد دلار خلق ثروت نمودند به طور مطلق برپایه‌ی تفکر الگوریتمی و علوم و مهندسی کامپیوتر توسعه یافتند. هوش مصنوعی، اینترنت اشیا و علوم داده از مهمترین محرک‌های کسب‌وکارها در اکثر زمینه‌ها در سال‌های آینده هستند.

ریز مواد

  1. بخش نظری
    • آشنایی با ساختار کامپیوتر
    • ریاضیات دودویی
    • مقدمه‌ای بر ترکیبیات
    • منطق و نظریه‌ی مجموعه‌ها
    • استقرای ریاضی
    • آشنایی با نظریه گراف
    • الگوریتم‌های مرتب‌سازی
    • جستجوی دودویی
    • الگوریتم‌های حریصانه
    • برنامه‌‌ریزی پویا
  2. بخش عملی
    • نصب پایتون
    • استفاده از پایتون در محیط وب
    • متغیرها
    • کتابخانه Turtle
    • برنامه‌ی محاسبات ریاضی ساده
    • دستورهای شرطی
    • شرط‌های تودرتو
    • حلقه و حلقه‌های تودرتو
    • تابع و ماژول
    • آشنایی اولیه با کتابخانه‌ها
    • نوشتن یک هوش مصنوعی ساده

شیوه‌ی آموزش

این درس در ۸ هفته و به صورت هیبرید (حضوری/مجازی) برای دانش‌آموزان مقطع متوسطه برگزار خواهد شد. در کلاس حضوری به جای تخته‌سیاه از تخته‌ی الکترونیک و ویدئوپروژکتور استفاده می‌شود تا شرایط آموزشی برای دانش‌آموزان حاضر در کلاس با شرکت‌کنندگان مجازی مشابه باشد.

ساختار کلاس‌ها به این صورت خواهد بود:

  • کلاس نظری: به مدت ۹۰ دقیقه. تأکید در این کلاس روی آموزش نظری الگوریتم، نظریه‌ی گراف، ترکیبیات، و هنر حل مساله خواهد بود.
  • کلاس عملی زبان برنامه‌نویسی پایتون: به مدت ۹۰ دقیقه. هر کلاس عملی به فاصله‌ی ۳۰ دقیقه استراحت پس از کلاس نظری برگزار می‌شود و رویکرد کلاس نظری و عملی هماهنگ خواهد بود، مثلاً در یک روز در کلاس نظری چند شیوه‌ی ساده‌ی مرتب‌سازی تدریس می‌شود و در کلاس عملی شیوه‌ی پیاده‌سازی یکی از آن الگوریتم‌ها تدریس خواهد شد. آموزش عملی به صورت نوشتن کد در کلاس توسط مدرس خواهد بود.
  • کلاس حل تمرین و رفع‌اشکال: دانش‌آموزان به گروه‌های کوچک تقسیم می‌شوند و مسوولیت هر گروه با یکی از دانشجویان داوطلب خواهد بود تا با برگزاری یک کلاس حل تمرین و رفع اشکال در هفته، مشکلات نظری و خصوصا عملی دانشجویان را برطرف کند.
  • تمرین: در هر هفته به دانش‌آموزان تمرین نظری و عملی در پلتفرم کوئرا داده می‌شود.

ارزبابی

  • تمرین‌های نظری
  • تمرین‌های عملی
  • حضور در کلاس

مراجع

  1. K. H. Rosen. Discrete Mathematics and Its Applications. 6th edition, McGraw Hill, 2007.
  2. A. Engel. Problem-Solving Strategies. Springer, 1998.
  3. P. Wentworth, J. Elkner, A. B. Downey, C. Meyers. How to Think Like a Computer Scientist: Learning with Python. 3rd Edition, Open Book Project, 2011.
  4. J. Campbell, P. Gries, J. Montojo, G. Wilson. Practical Programming: An Introduction to Computer Science Using Python. The Pragmatic Bookshelf, 2009.
  5. J. M. Zelle. Python Programming: An Introduction to Computer Science. Franklin, Beedle & Associates, 2004.