مهندس سخت افزاری که آهنگسازی میکنه و عاشق ادبیاته :) وبگاه شخصی : haghiri75.com
داستان سختافزار آزاد - قسمت اول : منطق و ریاضیات یاد بگیریم
مدتی میشه که سری داستان سخت افزار آزاد رو شروع کردم. این اولین قسمتیه که حقیقتا قراره کمی چیزی یاد بگیریم که به دردمون میخوره. حالا چی قراره یاد بگیریم؟ منطق و ریاضیات پایهای که برای توسعه سخت افزار نیازمندیم.
در این مطلب، اول کمی رویکرد دانشگاهی روی یادگیری منطق و ریاضیات رو بررسی میکنیم و بعد رفرنس معرفی میشه برای یادگیریش. چرا که اگر بخوام دوباره از اول شروع کنم به آموزش منطق، حقیقتا «هزارباره کاری» کردم! چرا که میلیون ها مطلب خوب در باب منطق و ریاضیات کامپیوتر در اینترنت موجودند و من قصدم از این سری، بیش از آموزش صرف و مکتبخانهای؛ سرنخ دادن به علاقمندان به سخت افزار آزاده.
قبل از خوندن این مطلب، چی بخونیم؟
اول پیشگفتار این سری :
https://virgool.io/@haghiri75/wtf-is-open-hardware-ddfmknbvhx1m
بعدش هم مقدمهش :
)https://virgool.io/@haghiri75/gettingstarted-free-hardware-m5woqagva38w
بعد از خوندن این دو مطلب، برگردید و به خوندن این مطلب ادامه بدید.
منطق چیست؟
شاید این بیش از این که سوال فنی باشه؛ جنبه فلسفی داشته باشه. اما خب به طور کلی، منطق علم استدلال کردنه. به این شکل که ما معمولا گزارههایی داریم که بر راستی یا ناراستی یک موضوعی، دلالت میکنند. حالا با کنار هم قرار دادن این راستی و ناراستی ها؛ به یک سری نتایج راست یا ناراست میرسیم.
فکر کنم بیش از اندازه پیچیدهش کردم. بیایید این دو گزاره را در نظر داشته باشیم:
- علی با حسن دوست است
- محمد با حسن دوست است
فرض میکنیم هر دو گزاره فوق، راستگو هستند (یا به عبارت کامپیوتری تر True هستند). حالا میخواهیم از این نتیجه بگیریم :
علی با محمد دوست است.
آیا واقعا این نتیجه درسته؟ میتونه باشه و میتونه نباشه. در حقیقت ما نمیتونیم این موضوعاتی که نسبی هستند رو با منطق صوری (که به نوعی پایه علوم کامپیوتره) پاسخ بدیم و به انواع دیگر منطق (مثلا فازی) نیازمند خواهیم شد.
اما بیاییم چند گزاره دیگر بررسی کنیم :
- علی از حسین قد بلندتری دارد.
- حسین از محمد قد بلندتری دارد.
حالا میخواهیم نتیجه بگیریم :
علی از محمد قد بلندتری دارد.
خب، این گزاره ها دارند بر عواملی دلالت میکنند که احساسات یا در کل نسبیات در اونها تاثیر نداره. مثلا دوست بودن یک انسان با دیگری، ملاک و معیار کمی نداره اما قد انسانها معیار کمیه و به این شکل قابل مقایسه و نتیجه گیری.
تا الان فکر کنم با کلیت منطق آشنا شدید. بیایید به این سوال پاسخ بدیم که چرا باید برای طراحی کامپیوتر، منطق بلد باشیم؟پاسخ سادهست. کامپیوترها فقط صفر و یک میفهمند. در واقع الفبای کامپیوترها به جای ۳۲ حرف، فقط دو حرف صفر و یک داره (میشه از این نتیجه گرفت که کامپیوترها از ما زرنگ ترن؟ ?) و خب بسته به شرایط معمولا «یک» همون گزارهایه که راستگوئه و «صفر» گزارهای که «ناراستگو» محسوب میشه. پس کامپیوتر باید بتونه با چینش خاصی از مقایسات منطقی، محاسبات رو انجام بده.
ریاضیات مورد نیاز
گرچه منطق به تنهایی خودش یکی از شاخه های ریاضیات در کامپیوتر محسوب میشه، اما ما به ریاضیات متفاوتی هم برای طراحی کامپیوتر نیاز داریم. گرچه به خودی خود این ریاضیات خیلی پیچیده نیستند، اما بهرحال دونستن اونها لازمه.
اولین شکلی از ریاضیات که بهش نیاز داریم، ریاضیات گسستهست. در واقع مباحث مدارهای منطقی، معماری کامپیوتر، ساختمان های داده و الگوریتم همه از ریاضیات گسسته میان و شدیدا به ریاضیات گسسته وابستهن. اگر ریاضیات گسسته رو به درستی فرا نگیرید، احتمال زیادی داره که در فهم این موضوعات به مشکل بخورید.
دومین شکل، ریاضیات مهندسیه که خب کمی سختتره. سختی ریاضی مهندسی اونجاییه که وارد مباحث انتگرال و ... میشه (فکر کنم کابوس همه دانشجوهای مهندسی بوده، هست و خواهد بود ?) ولی خب از اونجایی که ما در طراحی سخت افزار با «سیگنال» سر و کار داریم و ریاضیات مهندسی پایههای «سیگنالها و سیستمها» رو تشکیل میده، نیازه که حداقل کمی باهاش آشنا باشیم و بدونیم چطور با سیگنالهایی که دریافت میکنیم باید رفتار کنیم.
در دانشگاه چطور منطق و ریاضیات یاد میگیریم؟
در دانشگاه، برای یادگیری منطق :
- ابتدا ریاضیات گسسته یاد میگیرید
- سپس ساختمان های داده و مدارهای منطقی
- معماری کامپیوتر و طراحی الگوریتم
بعد از یادگیری اینها، شما احتمالا بدون مشکل میتونید درسایی که کاربردهای دنیای واقعی این درسها هستند رو اخذ کنید (ریزپردازنده، هوش مصنوعی، مهندسی نرم افزار، الکترونیک دیجیتال و ... )
و برای یادگیری ریاضیات :
- ابتدا ریاضی عمومی ۱
- سپس ریاضی عمومی ۲، آمار و معادلات (اینها تا جایی که من میدونم هم نیاز هستند)
- سپس ریاضیات مهندسی
که بعد از گذروندن اینها هم شما میتونید دروسی مثل سیگنال و سیستم یا انتقال داده رو اخذ کنید.
بسیار خوب. تا اینجا با کلیت ماجرا آشنا شدیم. فهمیدیم منطق و ریاضیات کجای طراحی سخت افزار کاربرد دارند. از مطالب بعدی سعی میکنم شماتیک و ... آماده کنم و توضیح بدم که هرکدوم چه کاری میکنند. اما اگر خودتون کنجکاو هستید برای خوندن منطق، میتونم کتاب موریس مانو رو پیشنهاد کنم. ایشون به خوبی منطق و مدارات منطقی رو توضیح دادند.
بعد از خوندن اون کتاب هم میتونید سایر منابع رو مرور کنید. اکثر منابع موجود برای مدار منطقی، بر اساس کتاب موریس مانو نوشته شدند.
همچنین این کتاب من :
فصل های ۲،۳ و ۴ رو میتونید برای یادگیری منطق، مطالعه کنید. خودم هم قسمت زیادی از اون بخش رو از موریس مانو ایده گرفتم پس مشکلی در جهت مطالعه بعد یا حتی قبل از موریس مانو؛ نخواهید داشت.
مطلبی دیگر از این انتشارات
چگونه وکیل مدافع شیطان شویم؟ (یا چگونه با JS بکند پروژه های خود را بزنیم!)
مطلبی دیگر از این انتشارات
مار های ناهمزمان! ( async in python )
مطلبی دیگر از این انتشارات
می شه موقع SSH زدن پسورد نزنم ؟