سلام به همه بچههای علاقمند به کامپیوتر و برنامهنویسی و هوش مصنوعی. همانطور که میدونین روز به روز دنیای هوش مصنوعی داره وسیعتر میشه و به حوزه مختلف از علوم راه یافته است. ما تصمیم داریم هر هفته با یک مقاله در این حوزه، شمارو با رویداد های دنیای هوش مصنوعی آشنا کنیم و مهمتر اینکه ریاضیات این حوزه رو با ساده سازی به شما دانش آموزان عزیز کانونی توضیح بدیم. در نهایت بتونیم قدم به قدم به کد نویسی در محیط پایتون برای مسئله های جذاب هوش مصنوعی برسیم. پیشنهاد میکنم هر هفته مارو با یک مقاله در این حوزه دنبال کنید.
در این سری مطلب شما رو قدم به قدم با برنامهنویسی آشنا خواهیم کرد. مهم نیست از چه سطحی از دانشِ برنامهنویسی برخوردار هستید. ما قصد داریم برنامهنویسی رو از پایهایترین مرحلهش برای شما توضیح بدیم و در پایان، بسته به میزان تمرینهایی که انجام خواهید داد، شما رو یک برنامهنویس حرفهای بکنیم. اصلاً از اسم برنامهنویسی نترسید! ما اینجاییم که شما رو تبدیل به یک فرد حرفهای در حوزه برنامهنویسی بکنیم. پس ما رو دنبال کنید!
برنامهنویسی چیه؟
برنامهنویسی کامپیوتر رو توانا میکنه تا یک وظیفه مشخص رو بدون اشتباه انجام بده. فرض کنید از دوستتون که هوشمند نیست میخوایید یک لوگو براتون بسازه. اما توانایی این کار رو نداره و فقط میتونه با دستور و کمک شما این کار رو بکنه. یادتون باشه که دوست شما خیلی احمقه و شما باید دقیقاً حالیش کنید که چجوری میتونه یه لوگو بسازه و در غیر این صورت گند میزنه به کار! اگه فقط تو یک مرحله تنهاش بذارید و نگید که فلان چیز رو کجا بذاره یا چجوری انجام بده، کل لوگو رو خراب میکنه. راهنمایی و آموزشِ این دوست احمق خیلی شبیه به کدنویسی یک برنامهنویس است. شما در برنامهنویسی به جای یه دوست نادان با کامپیوتر زبون نفهم روبرو هستید! و به جای راهنمایی برای ساخت لوگو یه سری اطلاعات به کامپیوتر میدید تا به کمک اونا یه برنامه رو کامل بکنه. مثل بازی یا برنامه اینترنتی. یادتون باشه کامپیوترها به ظاهر ماشینهای پیچیدهای هستند. در حالی که کامپیوتر صرفاً یه ماشین ساده و به زبون خودمون نادانی هست که هیچ کاری ازش برنمیاد و فقط به کمک برنامهنویسها هست که میتونه کارهای پیچیده انجام بده.
به نظر شما تفاوت اصلی دوست احمق با یک کامپیوتر چی میتونه باشه؟ کار کردن با دوست احمق کار سادهایه چون که زبان مشترکی دارید. اما کامپیوتر اینجوری نیست. کامپیوتر فقط کدها رو میفهمه. کد زبانِ عددیه که به دوتایی (Binary) هم مشهوره. این کدها جوری طراحی شدن که کامپیوتر سریع اونهارو میخونه و مفهمه و اجرا میکنه.
همه اطلاعاتی که به کامپیوتر داده میشه، تبدیل به یه سری از صفر و یکها میشه. کامپیوتر این صفر و یکها رو تفسیر میکنه و اونهارو دوباره به اطلاعات تبدیل کرده و وظیفه مورد نظر رو انجام میده.
خب دوباره برگردیم به دوست احمقمون و بقیه مطلب رو با این مثال توضییح بدیم. این دوست ما نه تنها احمقه بلکه به زبان چینی هم حرف میزنه و از زبان ما سر در نمیاره. برای اینکه بتونید با دستتون ارتباط برقرار کنید و حرفتون رو بهش بفهمونید باید تمام آموزشتون رو به زبان چینی تبدیل کنید تا بتونه یاد بگیره چطور باید یه لوگو طراحی کنه. این فرایند دقیقاً فرایندیه که شما در کامپیوتر طی میکنید. احتمالاً میدونید که حالی کردن یه چینی و یاد دادن با زبان چینی چقد میتونه سخت باشه! کدنویسی به مراتب سختتر از این کاره. چون بالاخره هر چند دوستتون چینیه ولی آدمه. اما کامپیوتر نه!
هر برنامه شامل میلیونها صفر و یک است. خب حالا چجوری آموزشمون رو تبدیل به یه سری کد بکنیم؟ این جایی که زبانهای برنامهنویسی به کمکمون میاد.
زبانهای برنامه نویسی
زبانهای برنامهنویسی یه واسطه است تا بتونیم یه برنامه رو تبدیل به کد بکنیم. یادگیریِ این زبانها بسیار راحتتر از کدهای صفر و یکی است. دوباره برگردیم به مثال لوگوی خودمون. یه زبان برنامهنویسی مثل یه مترجم کار میکنه و حرفهای شمارو ترجمه میکنه به زبان دوست غیرفارسیزبانِ شما. این جاست که باید قدر زبانهای برنامهنویسی رو بدونیم. به عبارت دیگه زبان برنامهنویسی ستون فقرات یه برنامه خوب است.
در عالم برنامهنویسی، زبانهای برنامهنویسی متفاوتی وجود داره که هر کدوم مزیتهای خاصِ خودشون دارند. زبانهایی مانند پایتون (Python) و جاوا (Java) زبانهایی با هدفهای عام هستند که میتونند انواع مختلفی از وظایف رایانهای رو انجام بدن. یا رباتهای مانند سی (C) و HTML و CSS.
هر زبان قدرت (Power) و ترازِ (Level) خاصِ خودشو داره. بعضیا تراز پایین (Low level) هستند مثل C و بعضیا تراز بالا مانند پایتون و جاوا. زبانهای تراز پایین فقط میتونن وظایف محدودی رو انجام بدن. حال آنکه تراز بالاها (High level) توانایی انجام وظایف پیچیدهتر و بیشتری رو دارن. ما قدرت و تراز یک زبان رو بر اساس میزان شباهت اون به کدِ ماشین اندازهگیری میکنیم. یعنی همون زنجیرهی صفر و یکی که قبلاً دربارهش صحبت کردیم. زبانهای تراز پایینی مانند اسمبلی (Assembly) یا C در مقایسه با زبانهای تراز بالا به کدهای دوتایی (همون صفر و یکی) نزدیکتر هستند. خلاصه اینکه هرچقدر ترازِ زبان مورد استفاده شما پایینتر باشه همونقدر به کدهایی که ماشین به واسطه اونها حرف شمارو تبدیل به کد میکنه شبیهتر خواهد بود. و هر چقد تراز بالا باشه همونقدر به زبان طبیعی خودمون نزدیکه.
خب این همهی اون چیزی بود که شما برای درک برنامهنویسی لازم داشتید. حالا چجوری کد بنویسیم؟ بریم سراغ بخش جذاب بعدیمون.
کدنویسی؟ چجوری بنویسم؟
به کمک یک IDE. این کلمه مخفف محیط یکپارچه توسعه (Integrated development environment) است. IDE کدنویسی رو راحتتر میکنه. یعنی جایی است که میشه توش کد رو نوشت و اجرا کرد و اون رو تبدیل به یک کد رایانهای کرد. IDE یه رابط الفبایی رو کامپیوتر شماست که به واسطه اون برنامهنوس کدنویسی میکنه و همچنین کدها رو اشکالزدایی (Debug) میکنه بدون اینکه نگران پیچیدهگی یک برنامه و کدهای اون باشه.
IDE یه برنامه مثل هر برنامهی دیگه روی کامپیوتر شماست مانند یک بازی یا یک مرورگر اینترنت. ما این برنامه رو برای نوشتن کد استفاده میکنیم.
این IDE که در تصویر بالا مشاهده میکنید برای نوشتن کدِ جاوا استفاده میشه. حالا سوال اینه که چجوری در بستر IDE کدنویسی کنیم. چون نوشتن کد در بستر IDE مثل این نیست که یه سری واژگان اتفاقی رو از یک زبان برنامهنویسی گرد هم بیاریم و انتظار داشته باشیم کامپیوتر منظور مارو متوجه بشه. اینجاست که ما به علم نحو یا سینتکسِ (Syntax) کامپیوتر نیاز داریم.
یادگیری زبان کامپیوتر دقیقاً مثل یادگیری یه زبان واقعی مثل انگلیسی است. بعضی از زبانها مثل چینی شکل عجیب غریبی دارن که ممکنه شمارو متعجب کنه. بعضی از زبانهای دیگه ممکنه مفاهیم انتزاعی داشته باشه که شمارو گیج کنه. همچنین هر زبانی قوانین خاص خودشو داره که ما در زمینه یادگیری زبان بهشون میگیم گرامر. ما به گرامرِ کامپیوتر سینتکس میگیم. هر زبان برنامهنویسی سینتکس و قواعد خاص خودشو داره که اگه بخوایید برنامهتون درست اجرا بشه باید رعایتشون کنید. دقیقاً مثل اینه که شما در استفاده از زبان مادریتون برای اینکه حرفتون معنیدار باشه باید جای فاعل و مفعول و ... رو رعایت کنید.
یه سینتکس میتونه عبارت باشه از اینکه چطوری یک کارکرد (Function) خاصرو پیاده کنید، در آخرِ یک خطِ کد چی قرار بدید، یا اینکه چطوری میتونید یه کارکرد جدید ایجاد کنید. هر زبانی سینتکس مختص به خودش رو داره. گاهی اوقات میتونه بعضی از قواعدشون یکسان باشه اما اغلب اوقات خصوصیاتی دارن که اونها رو از سایر سینتکسها جدا میکنه. چنانچه قواعد هر سینتکس رو دقیقاً رعایت نکنیم در برنامهمون اشتباه رخ خواهد داد.
برای مثال اگر شما بخوایید یک متغیر رو تو محیط جاوا آغاز کنید، باید نوع متغیری رو که میخوایید تعریف کنید مشخص کنیم. مثلاً عدد صحیح 3. همچنین بعد از عدد 3 باید یه نقطه ویرگول اضافه کنید. تو پایتون اصلاً نیازی نیست که به کامپیوتر متذکر بشیم که میخواییم یه متغیر تعریف کنیم. و فقط اونچه رو که میخواییم ایجاد کنیم مینویسیم. و در نهایت تو جاوا اسکریپت (JavaScript) فقط مشخص میکنیم که داریم یک متغیر جدید ایجاد میکنیم اما نیازی نیست که مشخص کنیم در صدد ایجاد چه نوع متغیر هستیم.
همونطور که مشاهده میکنید در هر سه سینتکس هدف ما مشترکه یعنی تعریف کردن متغیر 3 در حالی که با قواعد مختلفی مینویسیمش. در همه این زبانها الزاماً باید قواعد رو ریز به ریز رعایت کنیم چون همونطور که یادتونه فرض ما بر اینه که کامپیوتر یه موجود احمقه. چنانچه یه نقطه یا یک حرف رو جا بندازید کل برنامه میره رو هوا و اجرا نمیشه و اخطار سینتکسی براتون میاد. این مسئله دقیقاً شبیه همین مَثَل مشهوره: بخشش لازم نیست اعدامش کنید. این جمله هم میتونه اینطور تفسیر بشه که هیچ بخششی در کار نیست و فرد مورد نظر رو اعدام کنید. هم اینطور که ببخشیدش و لازم به اعدام نیست. اما از اونجا که ما اندک شعور رو داریم با توجه به بافت جمله میتونیم تشخیص بدیم کدوم تفسیر درسته. اما کامپیوتر هیچ شعوری نداره و نقطه به نقطه باید حالیش کنیم.
فایده دیگهی IDE اینه که بهتون این اجازه رو میده که بفهمید آیا اشتباهی در جملهتون وجود داره یا نه و اگه داره کجاست. مثلاً در جملهای که در زیر اومده ما یک n رو جا انداختیم که IDE به ما اخطار داده.
در پایان مطلب این هفتهمون توصیهمون به شما دانشآموزا اینه که قبل از اینکه شروع به نوشتن برنامههای پیچیده در یک زبان بکنید، قواعد و سینتکسِ اون زبان رو به درستی یاد بگیرید. اکثرِ قواعد کسل کننده هستند اما در عین حال یادگیریشون آسونه. اگر یادشون بگیرید سریعاً میتونید اشتباهات سینتکسی رو پیدا کنید و اصلاح کنید و یک سری کدهای بینقص از آب در بیارید.
دوستان عزیزم؛ برای ارتباط با رتبه برترها صفحه اینستاگرام زیر رو دنبال کنید.
منابع:
- Introduction to Programming and Computer Science - Full Course - YouTube
- https://introprogramming.info/wpcontent/uploads/2013/07/Books/CSharpEn/Fundamentals-of-Computer-Programming-with-CSharp-Nakov-eBook-v2013.pdf

