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



سلام.

حالتون چطوره؟

اینجا اینترن پلاس پلاسه جایی برای کسایی که میخوان برنامه نویس شن.

نکته: همین متنی که اینجا میبینید پادکستش هم هست اگه گوش کردن رو بیشتر دوست دارید یه سر به سایت ما بزنید و مارو تو اپ های پادکستی دنبال کنید.

https://virgool.io/p/mb11r8ngkcvq/internplusplus.ir


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

توی این قسمت در مورد اینا صحبت میکنیم:

1. به چی میگیم کامپیوتر

2. یه کامپیوتر از چیا تشکیل شده و هر کدوم چی کار میکنن.

3. یه کامپیوتر چجوری میفهمه ما چی میخوایم

4. ما چجوری به کامپیوتر بگیم چی میخوایم.

5. زبونای برنامه نویسی چی ان و چه شکلی ان.

6. انواع زبون های برنامه نویسی از نظر کاربرد و سطح و نحوه ی اجرا.


به چی میگیم کامپیوتر

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

نکته ی اصلی اینجا اینه ما میتونیم به کامپیوتر دستورالعمل بدیم. که به عبارت دیگه ینی کامپیوتر دستگاهیه که قابل برنامه نویسی باشه.

به همین راحتی?

حالا با یه تا مثال تعریفمو کامل میکنم.

موبایل هوشمند شما کامپیوتر هست.

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


یه کامپیوتر از چیا تشکیل شده

ما کامپیوتر های ریزو درشت زیادی داریم ولی در کل

یه کامپیوتر دیجیتال از حداقل سه بخش کلی تشکیل میشه

central processing unit

سی پی یو : همون پردازنده ی اصلی ماست که عملیات های منطقی رو انجام میده و میتونه برنامه ها رو اجرا کنه.

random access memory

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

البته این رم رو با sd card ها اشتباه نگیرید. در مورد حافظه ها مفصل توی اپیزود های بعدی صحبت میکنیم.

input output

ای او : واسط بین کامپیوتر و دنیای بیرون هست که دستورالعمل ها و داده ها از input میان و به cpu تحویل داده میشن و خروجی ها از output خارج میشن. که خودش هم یه پردازنده ی مستقل به اسم iop داره که کارش کنترل تبادل اطلاعات ورودی و خروجی هست.


تقریباً شبیه مغز ماس.

الان من به شما میگم ۲ به اضافه ۳ چقد میشه.

شما اولا سوال منو میشنوی (مثل input)

بعد عدد ۲ و ۳ رو تو حافظه ت ذخیره میکنی. (مثل رم)

بعد عملیات جمع که تو دبستان خوندی رو میاری تو حافظه ت (که حکم همون دستورالعمل یا برنامه رو داره)

بعد شرو میکنی جمع کردن (مثل cpu)

بعد که جم کردی عدد پنج باز میاد تو حافظه ت (رم)

بعد به من جواب رو میگی (مثل output)

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


یه کامپیوتر چجوری میفهمه ما چی میخوایم

همون طور که گفتیم کامپیوتر ها زبون آدم ما حالیشون نمیشه.

یه کامپیوتر به اصطلاح فنی زبون ماشین میفهمه.

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

اونم استفاده از زبون های برنامه نویسیه.

خوب. ایده ی اصلی اینه که ما یه برنامه به یه زبون برنامه نویسی که خیلی راحت تر از زبون ماشین هست مینویسیم ،

بعد تو یه فایلی جایی ذخیرش میکنیم.

بعد میدیمش به یه برنامه دیگه که بهش میگن کامپایلر.

بعد این کامپایلر میاد برنامه ی مارو تبدیل میکنه به زبان ماشین.

اینجوری دیگه لازم نیست درگیر صفرو یک ها و پیچیدگیای زبان ماشین بشیم.

حالا ما زبان های برنامه نویسیه خیلی زیادی داریم که هر کدوم هم کامپایلر مخصوص به خودشون رو دارن.

ینی در واقع این کامپایلر ها هستن که باعث میشن یه زبون برنامه نویسی اصن وجود داشته باشه.

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

یه نکته ی دیگه اینه که به اون فایل یا فایل هایی که توشون به یه زبان برنامه نویسی برناممون رو نوشتیم source code میگیم. که تو قسمت های بعدی بیشتر در مورد نهوه ی ساخته شدن و ادیت شدنشون صحبت میکنیم.


زبون های برنامه نویسی چه شکلی ان

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

اگه بخوایم با زبون آدم ها مقایسشون کنیم

اولا اینکه خیلی کلمه های کم تری دارن مثلا زبونی داریم به اسم زبون جاوا که 48 تا کلمه داره و شما برای نوشتن اکثر برنامه ها لازم نیست همه ی 48 تاش رو بلد باشید. و هر کدوم از این کلمه ها دستور زبان یا syntax خاص خودشون رو دارن مثلا در زبان جاوا وقتی کلمه ی if میاد باید بعدش پرانتز بیاد و ادامه داستان که ما اینجا وارد جزئیاتش نمیشیم.

البته به اصطلاح فنی تر به این کلمه ها کلمه ی کلیدی یا keyword گفته میشه.

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

سوما اینکه زبون های برنامه نویسی ایهام و کج‌فهمی توشون جایی نداره و یه برنامه رو فقط یجور میشه ازش برداشت کرد.

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


انواع زبون های برنامه نویسی از نظر سطح.

ما توی زبون های برنامه نویسی یه اصطلاح داریم به اسم سطح.

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

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

ولی از اون ور زبون های سطح بالا تر رو داریم که یادگیریشون راحت تره کد نوشتن باهاشون راحت تره و سرعت کد نوشتن باهاشون بیشتره و معمولاً احتمال خطا کردن برنامه نویس توشون کم تره.

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

اگه بخوایم نام ببریم الان زبونایی مثل

Assembly , c , fortran ,....

زبون های سطح پایین به حساب میان البته همین زبونا سی چهل سال پیش زبون های سطح بالا به حساب میومدن ولی الان با اومدن زبون های سطح بالاتر جدید اینا کم کم رفتن تو لیست سطح پایین ها.

زبون های سطح بالا هم که مثلا

Java , python , javascript , swift , kotlin , dart , ruby ,...


انواع زبون های برنامه نویسی از نظر کاربرد.

کاربرد کلی

زبون هایی که باهاشون کار های متنوعی میشه کرد. مثلا شما با جاوا اسکریپت میتونی برنامه موبایل بنویسی واسه اندروید و ای او اس . میتونی واسه کامپیوتر های رومیزی برنامه بنویسی میتونی وبسایت بنویسی میتونی سمت سرور بنویسی. بازی بنویسی و...

کاربرد خاص

زبونایی هستن که مخصوص یه کار خاص هستن

مثلا SQL فقط برای کار با دیتابیس هاس

به این زبون ها زبون های نسل ۴ هم میگن

نکته ی دیگه اینه که ما زبون های برنامه نویسی خیلی زیادی داریم ولی ده پونزده تاشون هستن که خیلی استفاده میشن و بقیشون یا کاربرد خیلی خاص دارن یا پروژه های شکست خورده ان. یا قدیمی شدن و کنار گذاشته شدن.

در مورد زبون ها و کاربردهاشون هومن و زهرا بیشتر براتون توضیح میدن


انواع زبون های برنامه نویسی از نظر نحوه ی اجرا.

کامپایلی

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

مثل زبون c ,c++ ,...

تفسیری

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

زبونایی مثل پایتون و جاوااسکریپت این مدلی کار میکنن

ماشین مجازی

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

مثال معروفش هم میتونه جاوا باشه که یه زبان میانی به اسم بایت کد داره که روی ماشین مجازیه جاوا که اسمش jvm هست اجرا میشه.

منبع به منبع (source to source)

یسری زبون برنامه نویسی هم داریم که هیچ کدوم از حالت های بالا رو ندارن ولی قابلیت تبدیل شدن به زبون های دیگه رو دارن و به این تبدیل transpile گفته میشه.

مثل زبون typescript که به javascript تبدیل میشه و بعد با مفسر javascript قابل اجراست

حالا این وسط زبون هایی هم هستن که چند حالت اجرا دارن

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

مثل زبون کاتلین که سه حالت اجرا داره.

هم کامپایل میشه. هم ترنسپایل میشه و هم میتونه بایت کد جاوا تولید کنه.


حرف آخر

خوب امیدوارم که مجله ی ما رو دوست داشته باشید.

توی اینترن پلاس پلاس هدف ما اینه که شما رو تو مسیر برنامه نویس شدن قرار بدیم و توی سری پادکست سفر به اعماق کامپیوتر ما یسری مفاهیم فنی رو بهتون میگیم که تو مسیر یادگیری برنامه نویسی به دردتون میخوره.

اگه فکر میکنید این پادکست به دردتون میخوره مارو دنبال کنید.

و به دوستاتون هم خداوکیلی معرفی کنید شاید اونام به دردشون خورد.

همین دیگه خدافظ.