تنوع گیاهی و برنامه‌نویسی کامپیوتری
والتر مایرز/ ترجمه: امیرحسین لطیفی

۲۱ ژانویه ۲۰۲۱

من قبلا مقاله‌ای نوشته بودم در این باره که عملکرد موجودات زیستی شباهتی عجیب و باورنکردنی با برنامه‌های کامپیوتری‌ای که انسان تولید می‌کند دارند. حالا می‌خواهم همین مضمون را براساس مشاهداتی که اخیرا در حیاط پشتی خانه‌ام انجام داده‌ام ادامه دهم. در خانه‌ام در کالیفرنیای جنوبی من گلدان‌های شمعدانی، دو درخت زیتون و سه درخت کاج دارم. یکبار از باغبانم پرسیدم که چه‌طور با گذشت این همه سال مقدار خاک درون گلدان تقریبا ثابت مانده است؟ باغبانم توضیح داد که اگر چه سطح خاک به دلیل متراکم شدن و شسته شدن و از دسترس خارج شدن از کف ظرف اندکی کاهش پیدا می‌کند، اما شمعدانی تنها مقدار بسیار ناچیزی از خاک به خصوص از مواد معدنی ضروری مانند نیتروژن، سولفور، فسفر و عناصری از این دست را استفاده می‌کند. به عبارت دیگر، خاک محیطی برای رشد و انتقال آب لازم برای ساخت گیاه فراهم می‌کند. به‌گونه‌ای خارق العاده ۹۹% رشد گیاه از سه چیز حاصل می‌شود: کربن‌دی‌اکسید هوا، آب و انرژی خورشید.

هر کدام از قسمت‌های شمعدانی، درخت زیتون و درخت کاج و همه‌ی گیاهان دیگر از آب و ریزمواد مغذی خاک ساخته می‌شوند و این فرایند معجزه‌آسای فتوسنتز در گیاهان است که آب و کربن دی‌اکسید هوا را تجزیه می‌کند و آن‌ها را در فرایندی که انرژی‌اش را نور خورشید تامین می‌کند در قالب گلوکز ترکیب می‌کند. این فرایند شیمیایی اگر چه ساده است اما فرایندی بنیادین و اساسی است. محصولات فتوسنتز شامل گلوکز، اکسیژن و آب می‌شود و اکسیژن و آب به درون جو آزاد می‌شوند. گلوکزی هم که این فرایند تولید می‌کند به صورت رشته‌هایی طویل به هم متصل می‌شوند و سلولز را می‌سازند که بلوک‌های ساختمانی اصلی گیاهان از جمله شمعدانی، درختان زیتون و کاج است. در حقیقت هر کدام از بخش‌های انواع گیاهانی که نام بردم از جمله تنه، شاخه، گل‌ها، برگ‌ها، تیغ‌ها، زیتون‌ها یا مخروط کاج از آب و سلولز ساخته شده‌اند.

کدها از کجا میآیند؟

گرچه میان گیاهان من، و به طورکلی همه‌ی گیاهان، تفاوت‌های دراماتیک و ظاهری دیده می‌شود، تنها تفاوت واقعی میان آن‌ها کدی است که درون سلول‌های گیاهان و در بخش‌های مختلف هر گیاه اجرا می‌شود. این کد است که قرمزی درخشان گل‌های شمعدانی، مزه‌ی دل‌نشین زیتون‌های درخت زیتون و توالی‌های فیبوناچی ظریف مخروط‌های کاج را می‌سازد. این کد در هر یک از سلول‌های گیاهان، بسته به محل خاصی که سلول در گیاه قرار دارد، به شکل متفاوتی عمل می‌کند؛ همان‌طور که پوسته‌ی درخت عملکرد متفاوتی نسبت به برگ آن دارد و یک برگ هم عملکرد متفاوتی نسبت به مخروط دارد. بنابراین، همه‌ی تنوعات این گیاهان و سایر گیاهان صرفا به تفاوت میان کد و محلی که آن کد اجرا می‌شود بستگی دارد.

با این حال این کد به سادگی و به خودی‌خود نوشته نمی‌شود. هیچ برنامه‌نویسی کدی نمی‌نویسد که مشخصات نوشتاری یا زبانی پیشینی‌ای نداشته باشد. کد عملکردی باید یک مقصد معین داشته باشد و از نوعی اندیشه‌ی پیچیدگی مشخص[۱] که ویلیام دمبسکیِ ریاضی‌دان به شکلی عالی درباره‌ی آن بحث کرده است، سخن بگوید. هیچ برنامه‌نویسی برنامه‌ای نمی‌نویسد که کدهای تصادفی‌ای بسازد که قرار باشد در نهایت چیزی کاربردی بسازند، بلکه هر برنامه‌ی کامپیوتری مجموعه‌ای از واحدهای به دقت ساخته شده است که با رابط‌های کاربری به دقت تعریف شده و با هم همکاری می‌کنند تا یک عملکرد خاص ارایه دهند؛ مانند پروتئین‌هایی که در هر سلول منفرد درون گیاه عمل می‌کنند. همان طور که برنامه‌های کامپیوتری پیچیده می‌توانند هزاران ماژول داشته باشند گیاهان هم هزاران پروتئین دارند که در هر سلول وظیفه‌ی خودشان را اعمال می‌کنند و هر کدام با دیگری تعامل می‌کنند تا سلول را زنده نگاه دارند. به علاوه، هر سلول در گیاه با سلول‌های دیگر کار می‌کند تا کل سلول را زنده نگه دارند.

همان طور که یک برنامه‌ی کامیپوتری از ماژول‌های منفردی ساخته شده است که می‌توانند بارها و بارها و برای انواع برنامه‌ها مورد استفاده قرار گیرند، برنامه‌ای که درون گیاهان اجرا می‌شود هم به همین صورت است. برای مثال، در یک گوشی هوشمند شما یک ماژول ارتباط بی‌سیم، یک ماژول تصویر، یک ماژول صدا، یک ماژول اعلان و یک ماژول احراز هویت دارید. شما همین طور پی خواهید برد که همه‌ی این‌ها به صورت یک کتابخانه‌ی مشترک هستند که برای دستگاه‌های مختلف مورد استفاده قرار می‌گیرند (برای مثال کامپیوترها، ترموستات‌ها یا سیستم امنیتی). زمانی که می‌خواهید ماژولی را فراخوانی کنید، باید به طور دقیق نقطه‌ی ورودی آن را بیابید. یک جستجوی تصادفی ممکن است به شما اجازه دهد که نقطه‌ی ورودی را بیابید اما این به این معنا نیست که می‌دانید چه‌گونه با آن ماژول تعامل دو سویه برقرار کنید چون این ماژول منتظر ورودی‌هایی است که به طرزی دقیق برای شما کدگذاری شده‌اند تا هر برون‌داد معناداری را که می‌خواهید به دست بیاورید. به عنوان یک تشابه در جهان زیست‌شناختی، حتی اگر یک جهش روی یک پروتئین در حال کار اتفاق بیفتد که تعدادی عملکرد جدید به وجود بیاورد، این عملکرد پروتئین باید از قبل تثبیت شده باشد. بنابراین، همان‌طور که نیاز است بدانید چه ماژولی را فرا می‌خوانید و این ماژول چه عملکردی در برنامه‌ی کامپیوتری فراهم می‌کند، سلول هم باید بداند که چه پروتئینی چه عملکرد مشخصی را تامین می‌کند و همه‌ی این‌ها به این بستگی دارد که این سلول در کجای موجود قرار دارد. برای مثال، شما نمی‌خواهید همه‌ی پروتئین‌هایی که درون یک سلول مغز فعال می‌شوند، در یک سلول پوست یا یک سلول معده هم فعال شوند. پروتئین‌ها برای یک عملکرد خاص وجود دارند و باید براساس عملکرد خاص خودشان هم فراخوانی شوند. در دنیای کامپیوتری، یک بیت بد منفرد یا تغییر یک بیت در میان میلیاردها بیت دیگر می‌تواند برای برنامه فاجعه‌آمیز باشد، به خصوص در میان مسیرهای حیاتی.

موازاتی دیگر با موجودات زنده

کار دیگری که برنامه‌های کامپیوتری به موازات موجودات زنده در سطح سلولی انجام می‌دهند این است که به طور مداوم به بررسی شرایط خطا می‌پردازند و با ظرافت تمام خطاها را بهبود می‌دهند. اگر یک جای کار بلنگد برنامه باید سردر بیاورد که آیا این اشکال به خودی خود بهبود می‌یابد و تنها به مقداری ورودی خاص از جانب کاربر نیاز دارد تا به کارش ادامه دهد یا باید صرفا خاموش شود. همچنین بیش‌تر برنامه‌های امروزه ماژول‌های نظارتی دارند که برای بررسی سلامت برنامه و بررسی اجرای بهینه‌ی برنامه ساخته می‌شوند. با این نظارت، برنامه‌نویس می‌تواند یاد بگیرد که آیا برنامه برای اجرای کارآمدتر و افزایش بازدهی نیاز به بهینه‌سازی‌های بیش‌تری دارد یا نه. برنامه‌هایی وجود دارند که به طور خاص برای حفاظت سایر برنامه از ویروس‌ها و بدافزارها نوشته می‌شوند و می‌توانند برنامه‌هایی را که آلوده شده‌اند تعمیر کنند. این عملکرد به دستگاه ایمنی موجودات زنده بسیار شبیه است. تعداد بسیار زیادی از «برنامه‌های» سطح بالاتر وجود دارد که در موجود فعالیت می‌کنند تا موجود را سالم و زنده نگه دارند.

سه نرمافزار معروف

اغلب می‌شنویم که فرگشت‌گرایان داروینی می‌گویند انسان‌ها و شامپانزه‌ها ۹۹ درصد مشابهت ژنتیکی با هم دارند. دقیق نبودن این موضوع اثبات شده است، با این حال این چیزی نیست که این دو نخستی را آن طور که انتظار دارید از نظر عملکرد مشترک مشابه هم سازد  بلکه این موضوع اشاره به تفاوت‌های آن‌ها است. بیاید سه برنامه‌ی مشهور آیفون اپل را با هم مقایسه کنیم: فیسبوک، اینستاگرام و تیک‌تاک. فضای ۱۴-iOS  در حال حاضر حدود ۲/۲ گیگابایت است. فیسبوک MB250، اینستاگرام MB141و تیک‌تاک حدود MB191 است. این به این معنا است که فیسبوک حدود ۱۳/۱ درصد از کل حجم کدهای نوشته شده است. ایستاگرام ۶/۰ درصد و تیک‌تاک ۹/۰ درصد. بنابراین، اساسا این سه برنامه ۹۹ درصد مشابه‌اند، اما هیچ کس نمی‌گوید که این سه برنامه ۹۹ درصد با هم یکسان‌اند. هر کدام از این برنامه‌ها ماهیت و کدهای اجرایی منحصر به فرد خودشان را دارند که از  یک کد مشترک در سیستم عامل iOS فراخوانی می‌شوند. در عین حال که همه‌ی آن‌ها از بسیاری از ماژول‌/کتابخانه‌های یکسان iOS استفاده می‌کنند، اما واقعا میلیون‌ها مسیر مختلف وجود دارد که ممکن است سیستم کد تنظیمی زیربنایی آن را دنبال کند. این مسیرها به آن‌چه کاربر وارد می‌کند تا برنامه در لحظه براساس آن کاری انجام می‌دهد، بستگی دارد. اگر از منظر اشتراک‌گذاری اجزای مشابه یا یکسان بودن سطوح پایین‌تر نگاه کنیم، مشابه همین را در دنیای زیست‌شناسی هم می‌بینیم. مورد مشابه دیگر پاسخ موجودات به تغییراتی است که در شرایط محیطی ایجاد می‌شود.

به طور خلاصه، مشابهت‌های شگفت‌انگیزی بین برنامه‌های کامپیوتری پیچیده و موجودات زنده وجود دارد، با این حال موجودات زیستی ده‌ها مرتبه پیچیده‌تر از هر برنامه‌ای هستند که تاکنون انسان نوشته است، زیرا موجودات زنده توانایی این را دارند که هم در سطح سلولی و هم در سطح موجود خودشان را همانندسازی کنند و همچنین می‌توانند در صورت آسیب دیدن خودشان را بازسازی و ترمیم کنند. بنابراین، همان‌طور که ما فرض می‌کنیم پیچیدگی بسیار زیاد برنامه‌های کامپیوتری‌ای که پیشرفت و کامیابی جامعه‌ی مدرن ما را امکان‌پذیر می‌سازند، ساخته‌ی ذهن انسانی هوشمند است، به همین ترتیب هم باید فرض کنیم که موجودات زنده هم ساخته‌ی یک ذهن (یا ذهن‌های) بسیار عالی‌تر و هوشمندتر هستند.

منبع:

Plant Diversity and Computer Programming

 

[۱] specified complexity

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا