programming-by-binary-part-1
به نام خدا
برنامه نویسی با باینری بخش 1 :
همانطور که در پست قبلی تحت عنوان " سلام باینری خداحافظ اسمبلی " اعلام کردم ، از این پست به بعد رسما و منحصرا با زبان برنامه نویسی ماشین که از این پست به بعد به آن باینری می گویم ، برنامه نویسی خواهم کرد . انشاا...
منظور از " باینری " همان زبان برنامه نویسی ماشین می باشد . اینجا قصد دارم بگویم که زبان برنامه نویسی ماشین از ابتدای بکارگیری رسمی اش در سال 1935 میلادی ( توسط دانشمند آلمانی به نام کنراد زوس و بر روی کامپیوتر زد 1 ) تا به امروز ( سال 2022 میلادی ) همیشه به شکل باینری بوده است و از این به بعد نیز تا روز قیامت و تا ابد به شکل باینری خواهد بود . باینری یعنی دوتایی . یعنی 0 و 1 .
باینری یا 0 و 1 زبان مشترک تمام دستگاهها و ماشین آلات و لوازم برقی از یک لامپ ساده گرفته تا بزرگترین و پیچیده ترین و قدرتمندترین سوپرکامپیوترهای جهان ، می باشد .
درواقع هر دستگاهی که به جریان برق مستقیم یا متناوب وصل شود ، فقط 0 و 1 را می فهمد .
بله فقط صفر و یک .
صفر یعنی خاموش
یک یعنی روشن
این ، ساده ترین و قابل فهمترین شکل زبان ماشین است که از سالها پیش تا به امروز همیشه بصورت یک اصل و قانون ثابت علمی و بین المللی عملا در دستگاههای برقی وجود داشته و بکار می رفته است .
درحقیقت ، باینری یا همان 0 و 1 ، زبان مادری و واقعی تمام دستگاههای الکتریکی دنیا می باشد . در این مورد هیچ فرقی بین یک لامپ برق ساده و یک سوپرکامپیوتر فوق مدرن و پیچیده نیست . زیرا هردو فقط همین دو عدد 0 و 1 را می فهمند و بکار می گیرند .
در چنین شرایطی ، نه فقط زبانهای سطح بالا بلکه حتی زبان اسمبلی که نزدیکترین زبان به زبان ماشین (باینری ) می باشد ، اضافی و زائد هستند و باید دور ریخته شوند .
زبان ماشین یا همان باینری (0 و 1 ) زبان اول و آخر دنیای فناوری می باشد .
باینری نخستین بار بصورت کاملا رسمی در اولین کامپیوتر الکتریکی جهان یعنی zed1 در سال 1935 میلادی بکار رفت و تا به امروز ، بعنوان زبان برنامه نویسی واقعی و حقیقی تمام دستگاههای الکتریکی و تمام کامپیوترها بکار می رود .
ما می توانیم دستگاههایی را ببینیم که فقط از باینری استفاده می کنند و هیچگونه سیستم عامل ندارند !
اکثر دستگاههای ریز و کوچک و ساده که مدارات الکتریکی بسیار ساده ای دارند عملا هیچنوع سیستم عاملی ندارند و مستقیما با جریان برق و باینری ( 0 و 1 ) کار می کنند .
تعریف سیستم عامل :
سیستم عامل یعنی رابط بین سخت افزار و انسان .
این ، ساده ترین و قابل فهم ترین و مختصرترین و مفیدترین تعریف از سیستم عامل می باشد .
سیستم عامل ، هرگز مهمترین بخش یک دستگاه کامپیوتری یا الکتریکی نیست . زیرا دستگاه الکتریکی و حتی کامپیوترهای مدرن ، می توانند بدون سیستم عامل نیز کار بکنند . تمام ما کاربران تجربه ی بالا آمدن بایوس کامپیوتر و اعلام عدم وجود سیستم عامل را داریم . این ثابت می کند که حتی در دستگاههای مدرن مثل کامپیوتر نیز ، سیستم عامل فقط یک عامل ساده کننده و برای راحتی کاربر می باشد و بود یا نبودش چندان مهم نیست .
من خودم سالها پیش ، نرم افزار معروف فوتوشاپ را روی کامپیوتری که هیچ سیستم عاملی نداشت نصب کردم و جالب اینکه مراحل نصب بصورت کاملا گرافیکی انجام شد !!!
این تجربه ی جالبی از اوایل دهه ی 80 شمسی بود .
می خواهم بگویم : برای برنامه نویسی با باینری ( زبان ماشین ) لزوما به سیستم عامل نیاز نداریم و می توانیم روی سخت افزار خام نیز با زبان ماشین برنامه بنویسیم !
سیستم عامل فقط کار ما را دشوارتر می کند و دست و پای ما را می بندد خصوصا اگر انحصاری و تجاری باشد .
وجود توابع API ویندوز عملا فرایند برنامه نویسی با باینری را دشوار می کند.
هرچند که می توانیم با ترفندهای مختلف ، در کمترین زمان با زبان ماشین تحت ویندوز برنامه نویسی نماییم اما به آن آزادی کامل و دلخواه نمی رسیم و مجبوریم توابع ویندوز و حتی توابع زبانهای سطح بالا را تحمل کرده و بکار گیریم .
توابع و کتابخانه ها و سمبولهای دیباگ سیستم عامل ویندوز و زبانهای سطح بالا خصوصا زبان دشوار و نامفهوم سی و سی پلاس پلاس ، واقعا بجز اتلاف وقت و ایجاد سردرگمی و تردید و ناامیدی نتیجه ی دیگری برای ما نخواهند داشت .
من می خواهم از صفر شروع کنم .
یعنی فرض را بر این می گیرم که کامپیوتر یا یک قطعه ی سخت افزاری را در اختیار دارم که هیچ سیستم عاملی روی آن نصب نیست و حالا می خواهم با کمک زبان ماشین ( باینری) ، این قطعه ی سخت افزاری یا کامپیوتر یا تراشه را راه اندازی کرده و بکار گیرم و به او دستور بدهم !
فقط در این حالت است که به آزادی و بصیرت کامل می رسیم .
اصلا چه دلیلی دارد که میلیونها تابع ویندوز و توابع زبانهای سطح بالا و سمبولهای دیباگ را بکار گیریم تا بلکه شاید با هزار بدبختی بتوانیم نرم افزار بسازیم ؟؟؟؟!!!
این فرایند کاملا اشتباه و غلط است و ما را به استقلال و آزادی واقعی و کامل نمی رساند .
اگر بتوانیم در یک نرم افزار ویندوزی که قصد داریم از اولین تا آخرین بایت اش را با زبان ماشین و در قالب باینری و با دست بسازیم ، از توابع ویندوز یا توابع زبانهای سطح بالا استفاده کنیم عملا خودمان را فریب داده ایم و هرگز به مقصود و هدف نهایی نمی رسیم .
باید طوری برنامه نویسی کنیم که هیچ نیازی به استفاده از توابع ویندوز و توابع زبانهای سطح بالا نباشد .
یعنی در ستون سمت راست هگز ادیتور ، هیچ نام و نشانی از توابع ویندوز و توابع زبانهای سطح بالا دیده نشود و منحصرا کدهای زبان ماشین یا کاراکتر دیده شوند !!!!!
شاید اینکار نوعی مازوخیست و خودآزاری و اتلاف وقت محسوب شود اما موجب می شود که ما به مغز استخوان دنیای فناوری اطلاعات نفوذ کنیم و به آزادی کامل برسیم و از شر زبانهای سطح بالا و حتی توابع ویندوز یا سایر سیستم عاملها ( لینوکس و .... ) خلاص شویم .
اصلا چه دلیلی دارد که در برنامه نویسی با زبان ماشین یا اسمبلی ، از توابع گنگ و پیچیده و نامفهوم زبانهای سطح بالا خصوصا زبان سی استفاده کنیم ؟؟؟
اینکار اشتباه بسیار بزرگی است که متاسفانه طراحان اسمبلرهای معروف ، مرتکب شده اند .
بیاییم یکبار هم که شده ذهن مان را از زبانهای سطح بالا خالی کنیم و دنیا را به شکلی زیباتر و خالصتر و تمیزتر و واقعی تر ببینیم .
+
خب با این مقدمه ی طولانی ، قصد دارم بگویم که من برای جلوگیری از بروز مجدد تردید بین زبانهای سطح بالا و سطح پایین و تردید بین زبانهای ماشین و اسمبلی و تردید بین ویندوز و لینوکس و تردید بین ... و .... ، از پست بعدی مستقیما به سراغ سخت افزار و باینری می روم .
یعنی برای ویندوز ، برنامه می نویسم ولی تمام تلاشم را می کنم که از توابع و سمبولهای دیباگ زبانهای سطح بالا و حتی توابع ویندوز استفاده ننمایم و منحصرا از کدهای خالص باینری استفاده کنم .
برای اینکه باینری را بهتر بفهمیم سعی می کنم زبان ماشین را در مبنای اصلی و استانداردش یعنی باینری ( 0 و 1 ) بکار گیرم و از بکارگیری سایر مبناهای زبان ماشین یعنی هگزادسیمال و دسیمال و اوکتال ، خودداری نمایم !!!!
این دیگه نهایت ریاضت و خود آزاری است اما خروجی اش بسیار بسیار زیبا و کاربردی و جذاب خواهد بود .
از درس بعدی سعی می کنم زبان ماشین را در مبنای واقعی اش یعنی باینری ( 0 و 1 ) تدریس نمایم و چهار عمل اصلی یعنی جمع و تفریق و ضرب و تقسیم را با استفاده ی محض از کدهای باینری ( 0 و 1 ) انجام دهم .
+
نکته :
برخلاف تمام کاربران ، من هرگز از انجام کارهای دشوار و طاقت فرسا خسته نمی شوم و هرگز از اصالت و غیرت ام دور نمی شوم . من روی اصالت زبان ماشین ، غیرت دارم و تحت هیچ شرایطی حاضر نیستم زبانی غیر از زبان ماشین را تدریس نمایم .
یعنی اگر قرار باشد یک سیستم عامل شبیه به سیستم عاملهای اسمبلی بسازم ، آنرا بطور کامل با زبان ماشین می سازم و هرگز به جان زبانهای ماشین و اسمبلی غر نمی زنم و نق نمی زنم و تحت هیچ شرایطی سنگ زبانهای سطح بالا را به سینه نمی زنم .
بنابراین بعنوان یک مرد که حرف اش همیشه یکی می باشد ، مطابق همیشه روی زبان ماشین ، غیرت و تعصب دارم و خواهم داشت .
من سنگ زیرین آسیاب هستم و از دشواریهای برنامه نویسی با زبان ماشین هرگز نمی ترسم .
دنبال سود و منفعت مالی و پول و ثروت و شهرت و محبوبیت نیز نیستم . دنبال مادیات و زندگی مرفه نیستم .
دنبال آزادی و آزادگی و اصالت و غیرت و بصیرت هستم که این روزها کمتر پیدا می شود .
باید از صفر شروع کنم . یعنی هم ویندوز و هم لینوکس و هم تمام سیستم عاملها را از ذهن ام دور بریزم و یک سیستم ساده را با دست و با زبان ماشین از نو طراحی نمایم .
باید چرخ را از نو اختراع نمایم !
من با بیت و بایت سروکار دارم و دنبال این هستم که سیستم ها را ساده کنم و از پیچیدگی ها و فناوریهای سنگین و چند لایه از قبیل فناوری سنگین و ننگین و حجیم دات نت فریمورک فاصله بگیرم و فرار کنم .
انواع مدلهای برنامه نویسی از جمله برنامه نویسی شیئ گرا را می توانید با زبان ماشین ، عملا پیاده سازی و اجرایی نمایید . کافیست اول فکر کنید بعد تحقیق کنید و بعد آزمایش نمایید . اما باید همیشه سیستم ها را ساده نمایید و از دشواریها و پیچیدگیها و موازی کاری خودداری نمایید .
شعار من اینست :
سیستم ها را ساده کنید .
+
وحید محمدی . وبلاگ وحیدمی
https://vahidmy.blog.ir/rss
https://vahidmy.blog.ir/sitemap.xml