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