بایگانی برچسب: پادکست آموزش برنامه نویسی

آموزش برنامه‌نویسی – بخش دوم – الگوریتم‌ها در برنامه‌نویسی

پیش‌نوشت: این متنی که توی پادکست می‌گم (و البته چیزی که تو پادکست گفته شده کمی متفاوته چون موقع خوندن عوض می‌شه!). دلیل برای اضافه‌کردن جزئیات نمی‌بینم. حدود ۱۴ دقیقه‌ست که البته ۶ دقیقه‌ی آخرش هم آهنگه (Rango Suit کاری از هانس زیمر!) و شما هم می‌تونید پادکست رو با حجم ۱۲ مگابایت از مدیافایر یا از مگا (مگا از مدیافایر خوشگل تره!) دانلود کنید(بازم ببخشید که چندتا کیفیت نزاشتیم. از دفعه‌ی بعد جبران می‌کنیم!).

می‌تونید همه‌ی پادکست‌های آموزش برنامه‌نویسی ما رو توی مدیافایر ببینید. خوب بریم سراغ پادکست:

سلام.

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

خوب این چیزی که می‌خوام براتون پخش کنم توضیحات‌ کامل‌ش توی سایت جادی به آدرس جادی.نت یا جادی۲.آندو.ایت هست و من توضیحات جادی رو هم باهاش پخش می‌کنم. این‌ها توی پادکست دوم رادیو گیک پخش شده و من توصیه می‌کنم کلا برید همه‌ی پادکست‌های جادی رو گوش کنید. توی نوشته‌ای که تو دو برنامه‌نویس منتشر می‌شه لینک‌هاش رو هم براتون می‌زارم.

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

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

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

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

تا قسمت بعد (که همین الانش تقریبا آماده شده!) خدانگهدار!

آموزش برنامه‌نویسی – شروع دوباره – الگوریتم چیست

سلام

قرار شد آموزش‌ها برنامه‌نویسی به شیوه‌ی پادکست + نوشته منتشر شوند و امشب هم یک پادکست ۵ دقیقه‌ای در مورد الگوریتم‌ها داریم که متن کامل‌نشده‌ی آن را هم در زیر مشاهده می‌کنید. دلیل کامل‌نشده‌بودن متن نیز این بوده که بخش‌هایی را در حین ضبط اضافه یا حذف کردم مثلا فلوچارت!

بخش اول را از می‌توانید از این‌جا دانلود کنید. همین‌طور همه‌ی پادکست‌های آموزش برنامه‌نویسی (که در آینده منتشر خواهند شد) در مدیافایر موجودند.

این هم نوشته‌ی کامل‌نشده:

سلام

قراره اولین بخش از آموزش برنامه‌نویسی رو دوباره شروع کنیم و امروز جمعه چهارم اسفند ۹۱ هستش و الان هم یه تیکه از بخش اول موسیقی Jack Sparrow از آلبوم موسیقی متن دزدان دریایی کارائیب ۳ (که اسم اصلی‌ش گنجینه‌ی مرد مرده یا Dead Man’s Chest هستش) پخش شد براتون.

خوب بریم سراع آموزش.

رسمه که آموزش الگوریتم رو از درست‌کردن شیرکاکائو شروع کنن که چون شیرکاکائو کپی‌رایت داره و کپی‌رایت‌ش مال یکی از معلم‌های ماست ما از شیرقهوه استفاده می‌کنیم

باید بدونید که در سلوک برنامه‌نویس ها واحبه همیشه یه لیوان شیرقهوه (یا قهوه) کنار دست‌تون باشه!

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

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

خوب امیدوارم تعریف الگوریتم رو خوب فهمیده باشید.

اما قبول دارید که فهموندن این الگوریتم به کامپیوتر تقریبا غیرممکنه؟ حداقل الان که غیر ممکنه.

برای همین هم باید الگوریتم رو ساده‌تر کنیم. حالا فرض کنیم که یه روبات خیلی پیچیده با قابلیت پذیرش دستورات زیاد داشته باشیم که دستورات ما رو تا حدودی بفهمه ولی خوب چون اون هم کامپیوتره بازهم نمی‌تونه معنی «خوب حل‌شدن» رو بفهمه پس لازمه که متغیرهای کیفی‌مون رو کمّی کنیم.

پس الگوریتم‌مون می‌شه این

یک قاشق قهوه رو بریز توی لیوان

سه قاشق شکر بریز توی لیوان

(مثلا) ۱۰۰میلی‌لیتر آب جوش بریز توی لیوان

تا وقتی که هیچ دونه‌ی قهوه‌ای توی لیوان نمونه محتویات لیوان رو پر کن

تا وقتی که لیوان پر نشده توش شیر بریز

لیوان رو بده به برنامه‌نویس‌ت که قهوه‌ش رو بخوره و برو به کارات برس (:D)

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

اما مطمئنا کامپیوتر شما نمی‌تونه معنی «برو» یا «لیوان» یا حتی قهوه و شکر رو بفهمه و خوب فعلا ما چنین روباتی نداریم. شما اگر دارید خیلی سرمایه‌دارید با این قیمت دلار!

ولی ما برای هرکاری توی زندگی‌مون الگوریتم داریم. مثلا از خیابون رد شدن که شعر‌ش رو روی همه‌ی ایستگاه‌های اتوبوس دیدید و لازم به تکرار نیست!

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

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

خوب فکر کنم برای بخش اول کافی باشه.

برای تمرین هم الگوریتم درست‌کردن خامه‌عسل، باقالی پلو با گوشت و زرشک‌پلو با مرغ رو اول خودتون سعی کنید بنویسید و بعدش هم از کتاب آشپزی کمک بگیرید. و خوب در مرحله‌ی بعدی سعی کنید الگوریتم رو برای روبات‌های ساده‌تر شرح بدید.

به این می‌گن آموزش چندمظوره!‌ هم برنامه‌نویسی و هم آشپری!

برای این‌که هیجان قضیه زیاد بشه میگم که در بخش بعدی آموزش‌مون درمورد الگوریتم‌ها توی برنامه‌نویسیه و البته این بستگی داره به میزان علاقه‌ی شما

خوب امیدوارم تا قسمت بعدی شاداب  و سلامت باشید.

 پی‌نوشت: در پادکست فراموش کردم که بگم آهنگ کار هانس زیمره.

پی‌نوشت۲: هر مشکلی که دیدید لطفا اطلاع بدید مثلا اگر صدا بد بود یا نوشته (و صدا) کامل نبود یا هر چیز دیگه.