سفر به اعماق کامپیوتر (قسمت دوم)

سلام.حالتون چطوره؟اینجا اینترن پلاس پلاسه و شما دارید به دومین قسمت سری سفر به اعماق کامپیوتر گوش میدید. اگه قسمت قبل رو گوش نکردید توصیه میشه که اول برید اونو گوش کنید. توی این سری-پادکست ما میایم یسری مفاهیم فنی رو میگیم که تو راه برنامه نویس شدن به دردتون میخوره. و توی این اپیزود هم من که علی ام و محمد میخوایم در مورد‌ اینا صحبت کنیم:۱. ماهیت source code. و ابزار های کار باهاشون.۲. انواع رابط کاربری برنامه ها.۳. انواع ارور ها.در واقع چیزایی رو میگیم که شما بعد این اپیزود میتونید برید یادگیری یه زبون برنامه نویسی رو شرو کنید.شما میتونید این قسمت رو به عنوان پادکست هم از اینجا گوش بدید. و اگه دوست داشتید مارو از اینجا ها دنبال کنیدماهیت source code و ابزار کار باهاشون.اگه یادتون باشه قسمت قبل یه اشاره سوسکی به مفهوم source code کردیم.یادتونه؟گفتیم به فایل یا فایل هایی که توشون به یه زبون برنامه نویسی یه برنامه مینویسیم source code میگیم. و این source code رو میدیم به کامپایلر تا برامون تبدیلش کنه به زبون ماشین که همون برنامه ی قابل اجراس.یادتون اومد؟قبل اینکه بریم سراغ ادامه تعریف بزارید اول فایل رو تعریف کنم براتون.فایل: یه مجموعه‌ای از داده‌اس که‌ در یک واحد ذخیره میشن و یه اسم هم دارن. و میتونن فرمت های مختلفی داشته باشن.مثل ویدیو و عکس و موزیک و...ولی یسری فایل هم داریم که فرمت متنی دارن. ینی وقتی با برنامه های ویرایشگر متن مثلا note pad بازشون میکنیم کارکتر ها و اعداد عجق وجق نمیبینیم. چیزی که میبینیم اصطلاحاً human readable یا (قابل خواندن توسط انسان هست).خلاصه که همچین نگا که میکنی شبیه زبون ادم ایزاد به نظر میاد.در صورتی که اگه یه فایل غیر متنی (مثلا ویدیو رو) با نوت پد باز کنید کلی کارکتر عجق وجق میاد که اصن نمیفهمید کجاش به چی ربط داره.اگه بخوام فایل متنی مثال بزنم مثلا فایل های txt متنی ان. عجیب به نظر میرسه اگه بگید تا حالا باهاشون برخورد نکرده باشید ولی یه مثال دیگه فایل های srt زیرنویس هان که قطعاً باهاشون برخورد کردید.(همه فیلم میبینن)تا حالا بازشون کردید؟این دفه باز کنید ببینید توش چه خبره.خلاصش کنم که همه اینا رو گفتیم که بگیم سورس کد برنامه ها که برنامه نویس اونا رو مینویسه خاصیت متنی دارن. و خوب همون طور که حدس میزنید یه ویرایشگر متن یا text exitor نیازه که بشه چیزی توشون نوشت یا خوند یا اضافه کرد.سوال که اینجا پیش میاد اینه که پس با note pad هم میشه برنامه نوشت؟جوابش اینه که بله. چرا نمیشه ولی زیاد کار راحتی نیست. چون notepad و نرم افزار های مشابه مخصوص برنامه نوشتن نیستن و برای نوشتن متن های معمولی طراحی شدن.حالا سوال بعدی که پیش میاد اینه که مگه اونایی که برای برنامه نویسی طراحی شدن چه امکانات اضافه تری دارن که ما notepad رو بزاریم کنار و بریم اونا رو نصب کنیم؟حالا سوالی که اینجا پیش میاد اینه که واقعاً این سوالا داره برای شما پیش میاد؟نمیدونم.در واقع text editor هایی که مخصوص برنامه نویسی ان یه سری امکانات دارن که الان دونه دونه برسی میکنیم با هم.syntax highlightاین قابلیت یعنی اینکه وقتی دارید کد مینویسید هر کلمه با توجه به نقشی که داره یه رنگ خاص میشه. که این میتونه به خوانا تر شدن کد کمک کنه. و مهم تر از اون اگه مثلا یجا غلط املایی داشته باشید اون کلمه یه رنگ غیر منتظره میشه و زود میفهمید که یه جای کار میلنگه.autocompleteاین قابلیت باعث میشه که وقتی شرو میکنید یچی بنویسید بهتون پیشنهاد میده. ینی در واقع با توجه به چیزایی که قبلا نوشتید توی همون فایل یا حتی فایل های دیگه حدس میزنه که شما چی میخواید بنویسید و چنتا پیشنهاد میده که شما یکی از اونا رو میتونید انتخاب کنید یا اگه یچی دیگه میخواید بنویسید هم که بنویسید خودتون.و یکی از جاهایی که text editor ها با هم رقابت دارن هم همینجاس و هر کدوم تو یه زبونی هوشمند تر عمل میکنن.line numberلاین نامبر ینی بقل جایی که کد ها هست یه ردیف هست که نوشته هر کدوم از این کُد ها در خط چندم فایله. که خیلی کاربردیه. چون وقتی به یه ارور میخوریم. ارور میگه مثلا خط ۳۲ یه مشکلی هست و شما با توجه به لاین نامبر اون بغل میفهمید که کجای کار میلنگه.lintingیکی دیگه از قابلیت هایی که text editor های برنامه نویسی دارن اینه که با لینتر ها تعامل دارن و شما لازم نیست کد رو بدید به کامپایلر که ایراداتش رو بگه بلکه همینطور که دارید مینویسید ارور هارو نشون میده معمولا قرمز میکنه که اینجوری به محض نوشتن یه چیز اشتباه میفهمید و درستش میکنید. البته به جز ارور ها بسته به پیشرفته بودن لینتر میتونه ایراد های دیگه هم از کد شما بگیره که از نظر کامپایلر ایراد نیستن ولی بهتره اونجوری ننویسید یا مثلا ممکنه بگه این تیکه کد اضافیه و پیشنهاد کنه که حذفش کنید.و الان احتمالا میتونید حدس بزنید که هر زبون برنامه نویسی لینتر مخصوص به خودش رو داره.البته تکست ادیتور ها ممکنه امکانات دیگه ای هم داشته باشن ولی پایه ها ایناسخوب با یه تکسست ادیتور و یه کامپایلر میشه برنامه نوشت. ولی بازم ابزار های دیگه هستن که توی برنامه نویسی کمک میکنن.مثلاً:دیباگر ها.ابزار تست.آنالیز.ورژن کنترلر ها.و خیلیای دیگه که به نسبت زمینه که کار میکنید توش از یسریاشون استفاده می کنید.حالا یه مفهوم دیگه ای هم داریم به اسم IDE یا محیط توسعه ی یکپارچه که در واقع همه ی ابزار های یک یا چند رشته ی برنامه نویسی رو توی خودش داره و شما با نصب اون دیگه از نصب کردن هر چیز دیگه ای بی نیاز میشید. هر چند که بعضی از برنامه نویسا ترجیح میدن که از ide ها استفاده نکنن و تک تک ابزار های مورد نیاز خودشون رو با سلیقه ی خودشون نصب کنن.انواع رابط کاربری:حالا میرسیم سراغ بخش دوم پادکستمون که در مورد انواع رابط کاربری یا user interface هست.رابط های کاربری در واقع واسط بین آدم و کامپیوتره که باعث میشه کاربر بتونه با کامپیوتر و برنامه هایی که منو شما نوشتیم تعامل ایجاد کنه.تعامل یعنی کاربر به واسطه ی رابط کاربری به برنامه بفهمونه که چی میخواد و برنامه هم با همین واسط خروجی رو نمایش میده.حالا میخوایم یه نگاه به دو تا از معروف ترین رابط های کاربری بندازیم.اولین نوع رابط کاربری cli یا رابط خط فرمانی هست که شاید تا الان کمتر بهشون برخورد کردید. ولی از این به بعد بیشتر میبینیدشون.در این نوع رابط کاربری با متن سرو کار داریم.معمولا این شکلیه که یه صفحه ی سیاه باز میشه و یسری چیز مینویسه بعد کاربر با استفاده از کیبورد یه چیزی مینویسه بعد اینتر میزنه بعد برنامه باز یسری چیز مینویسه.بعد دوباره کاربر مینویسه.بعد دوباره برنامه جوابش رو مینویسه.بعد همینجوری این چرخه ادامه داره که برنامه تموم شه.و به این مدل برنامه ها console application هم میگن و نکته ای که هست اینه که کاربر موقع کار کردن با یه console application موس و... به کارش نمیاد. فقط کیبورد. چون المان گرافیکی تو صفه وجود نداره که بخواد کلیک کنه یا کارای دیگه انجام بده.حالا از اون ور ما رابط کاربری gui رو داریم که ظاهر کاملا گرافیکی داره یعنی توش دکمه و منو آیکون و افکت و انیمیشن و اینا میبینید و یه جاهایی یه چیزایی رو تیک میزنید و یچیزایی میتونید بردارید بندازید یه جای دیگه و خیلی کارای دیگه. که توی این حالت علاوه بر کیبورد شما واسط های دیگه ای مثل موس و… دارید. یا مثلاً تو موبایل هاتون با تاچ کردن المان های تو صفحه با برنامه ها تعامل ایجاد میکنید.حالا همه اینا رو گفتم که بگم معمولاً وقتی شما شروع میکنی یه یادگیری یه زبان برنامه نویسی، اولاش فقط برنامه های cli یاد میدن چون نوشتنش راحت تره ولی بعد ها که توی نوشتن برنامه های cli مسلط شدید میتونید با یادگرفتن یه کتابخونه یا فریمورک گرافیکی برنامه های گرافیکی تولید کنید.در مورد کتابخونه و فریمورک توی قسمت های بعدی کامل توضیح میدیم.اصلاً اگه جایی رو متوجه نشدید نترسید.ما همین دور و وراییم?در ادامه برنامه های cli و gui رو به روایت تصویر میبینیدارور ها:بخش سوم این پادکست هم واسه ارور هاست.ارور ها مهم ان. چون برطرف کردنشون بخش قابل توجهی از کار ما برنامه نویس هاس.پس بریم یه نگاه بهشون بندازیم.<فقط یه نگاه تو منو پاک دیوونه کرده . دوتا چشم تو منو پابند خونه کرده>ببینید رفقا. ما کلا سه نوع ارور داریم.compile time error.این نوع ارور موقعی اتفاق میفته که کامپایلر موقع کامپایل یه اشکالی توی کد شما ببینه. و خوب اگه این اتفاق بیوفته اجازه کامپایل نمیده و از فایل اجرایی هم خبری نیست. خوبیش اینه که کامپایلر دقیق مشخص میکنه که مشکل کجاست و حدوداً هم میگه مشکل چیه و حل کردنش معمولاً خیلی سخت نیست. خود این compile time error ها هم انواع دارن که یکی از معروف ترین هاش syntax error هست که ینی ارور دستور زبانی که ینی کدی که شما نوشتی از قواعد دستوری اون زبون برنامه نویسی پیروی نمیکنه.یادتونه تو قسمت قبلی ممد داشت میگفت زبون های برنامه نویسی چه شکلی ان و گفت مثلا تو زبون جاوا بعد از کلمه ی کلیدی if باید پرانتز بیاد و… خوب پس اگه پرانتز رو نزارید قواعد دستوری جاوا رو رعایت نکردید و بهتون syntax error میده.runtime error.این مدل ارور ها موقع اجرا برنامه اتفاق میوفته یعنی کامپایلر بدون هیچ مشکلی کارشو انجام داده و فایل اجرایی هم تولید شده و شما موقع اجرای فایل اجرایی به ارور می خورید.بزارید یه مثال بزنم.فرض کنید شما یه ماشین حساب نوشتید که کاربر دوتا عدد وارد میکنه و شما اونارو تقسیم بر هم میکنید. همیشه هم خوب کار کرده بدون هیچ مشکلی. حالا من به عنوان کاربر میام عدد دوم رو صفر وارد میکنم. و همون طور که میدونید عدد ها نمیتونن تقسیم بر صفر بشن و اینجا یه ارور زمان اجرا یا ران تایم رخ میده که بهش exception یا استثنا هم میگن.حالا چندتا مثال دیگه هم میزنم که به گستردگی این ارور ها پی ببرید.مثلاً برنامتون میخواد یه فایلی که وجود نداره رو بخونه.یا مثلا میخواد وصل شه به اینترنت یه داده ای رو بگیره ولی اینترنت وصل نیست.یا مثلا یه کاری میخواد بکنه که دسترسی نداره.یا مثلاً برنامه انقدری رم میخواد که رم کامپیوتر پر میشه. و دیگه جا نداره برای حافظه ی بیشتر.و یا خیلی اتفاق های ناگوار دیگه ای که ممکنه بیفته.این ارور های زمان اجرا هم وقتی اتفاق میفتن کاملا مشخص میشه که کجا و به چه علت رخ دادن. و برنامه همونجایی که هست تموم میشه و ادامه ی کد های شما اجرا نمیشن. یا به اصطلاح فنی تر کرش میکنه <OMG!> یا به اصطلاح غیر فنی تر از برنامه میپره بیرون.البته راه هایی برای مدیریت کردن این ارور ها هست که مثلا به جای اینکه از برنامه بپره بیرون یه پیام مثلا فلان خطا رخ داده است به کاربر نشون میده. و برنامه درحال اجرا باقی میمونه.logical err.اما میرسیم به نوع سوم ارور ها که از خبیث ترین نوع ارور هاست و اونم ارور منطقیه. این ارور ها موقعی رخ میدن که شما برنامتون از نظر کامپایلر هیچ ایراد نداره و موقع اجراع هم اتفاقی که باعث بیرون پریدن برنامه بشه نمیوفته ولی برنامه درست کار نمیکنه یعنی خودش فکر میکنه درست کار میکنه چون طبق دستور شما رفته جلو ولی شما انتظار یه چیز دیگه رو ازش داشتید و این ارور هم ناشی از اینه که شما یه جای کد هاتون اشتباه کردید ولی اون اشتباه رو نه کامپایلر توانایی کشف کردنش رو داره نه باعث اتفاق ناگواری شده که بپره بیرونبنابراین شما هم نمی فهمید که کجای کار مشکل داره و باید برید بگردید.واسه همین هم میگیم خبیث ان چون پیدا کردنشون سخت تر از دو تا ارور قبلیه.به این ارور های منطقی باگ هم میگن که ینی سوسک که جالبه بدونید این اسم از کجا اومده.در روزگاران قدیم یعنی حولو هوش دهه پنجاه میلادی یه بنده خدایی داشته برنامه اش رو روی یه کامپیوتر اجرا می کرده بعد هی به ارور منطقی میخورده و رفتن کلی گشتن آخر دیدن که یه سوسکی رفته بوده تو کامپیوتر و باعث میشده که درست کار نکنه. بعد دیگه هر موقع درست کار نمی کرده مینداختن گردن سوسکا و میگفتن این الان باگ داره بعد این اصطلاح کم کم جا افتاد و الان هم خیلی مرسومه که به این نوع ارور ها میگن باگ و به حل کردن این ارور ها هم میگن دیباگ.حرف آخر:خوب با این اطلاعاتی که توی این دو اپیزود کسب کردید عملا میتونید برید یادگیری یه زبون برنامه نویسی رو شرو کنید.آموزش های رایگان و غیر رایگان و انگلیسی و فارسی ام که تو اینترنت فَتُ فراوان ریخته.منتظر اپیزود های بعدیه ما باشید. درسته الان دیگه خودتون میتونید برید یادگیری رو شرو کنید ولی از ما که نباید غافل بشید چون توی اپیزود های بعدی بازم مفهوم هایی رو براتون روشن میکنیم که مسیر برنامه نویس شدنو هموار میکنه براتون.قربون شما من برم.?خدانگهدار.