فهرست عناوین

موضوع قبلی

2. یادگیری از روی تکلیف‌ها

موضوع بعدی

4. نشانهٔ تقدیر

3. باگ‌های لعنتی

هیچ‌کس دوست ندارد دربارهٔ باگ (گیر)‌های کامپیوتری صحبت کند. ولی متأسّفانه شما باید مطالبی را در موردشان یاد بگیرید، به خصوص این که چطوری از شرّشان خلاص بشوید.

این درس کمی‌از درس قبلی طولانی‌تر است، ولی من توصیه می‌کنم که آن را دست کم یک بار به طور کامل بخوانید.

3.1. باگ چیست؟

اصل اصطلاح باگ (bug) در واژگان تخصّصی رایانه اغلب به اتّفاقی واقعی نسبت داده می‌شود که در آن یک پروانهٔ بید توی رایانهٔ مارک ۲ دانشگاه هاروارد پیدا شد. ظاهراً این پروانه باعث از کار افتادن رایانه شده بود. این پروانه را گروهی که رهبریش به عهدهٔ گریس موری هاپر بود پیدا کردند. این فرد، دانشمند مشهور رایانه، ریاضیدان و افسر نیروی دریایی بود و کسی بود که مفهوم کامپایلر در زبان‌های برنامه‌نویسی را ابداع کرد. دکتر هاپر در نهایت به درجهٔ دریاسالاری در نیروی دریایی ایالات متّحده رسید. همان طور که در تصویر می‌بینید؛ پروانه با نوار چسبی به دفترچهٔ گزارش‌های هاپر چسبانده و نگهداری شد. جالب است که بدانید؛ آن طور که در تصویر دیده می‌شود؛ در این دفترچه، یادداشتی وجود دارد که می‌گوید: «نخستین نمونهٔ واقعی باگ شناسایی شد.»

image0

عکس از آرشیو عمومی مرکز تاریخی نیروی دریایی ایالات متحده

در حقیقت کلمهٔ باگ به مفهوم فنّی آن در فرهنگ لغت آکسفورد به توماس ادیسون نسبت داده می‌شود. بر طبق فرهنگ لغت آکسفورد ظاهراً این متن شمارهٔ روز ۱۱ مارس ۱۸۸۹ مجلهٔ پَل مَل است:

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

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

3.2. دست و پنجه نرم کردن با باگ‌ها

در اصطلاح رایانه‌ای «باگ» خطایی است که باعث می‌شود برنامه به طرز غیرمنتظره‌ای کار کند. اگر شما یک برنامه‌ برای رایانه می‌نویسید؛ دیر یا زود باگ خواهد داشت -همه همین طورند. برنامه‌نویسان خوب همین که می‌بینند برنامه‌شان به طور غیرمنتظره‌ای کار می‌کند؛ در پی "حذف" یا "تصحیح" باگ برمی‌آیند.

برنامه‌نویس‌های نه چندان خبره هم عنوان می‌کنند که «باگ‌ها» ایراد نیستند؛ بلکه امکانات برنامهٔشان است. برخلاف سازندهٔ ریبرگ که برنامه‌اش منبع و عامل ایرادهاست، شما قرار است که یک برنامه‌نویس خوب بشوید.

../../_images/reeborg_costume.jpg

ریبرگ در اندازهٔ واقعی (نیوجرسی آمریکا) با تشکّر از ای. جادکیس به خاطر عکس

  1. ریبرگ روغن‌ریزی دارد. روغن‌ریزی‌ها به محیط زیست و محل زندگی ما آسیب می‌زنند. این برای ریبرگی که باید مخزنش را توی وقت بی‌کاری پر کند بد است. سازندهٔ ریبرگ ادّعا می‌کند که این یکی از امکانات ریبرگ است که به شما این اجازه را می‌دهد که مسیر حرکت ریبرگ را ردیابی کنید، دقیقاً مثل هر برنامه‌نویس که می‌تواند یادبگیرد چطور اجرای برنامه را ردیابی کند. شما بعداً یاد می‌گیرید که چطور این روغن‌ریزی ریبرگ را تعمیر کنید. روش‌های پیشرفته‌تر ردگیری باگ‌ها فراتر از حدود این درس‌هاست، مثل چیزی که به آن می‌گویند دیباگر (اشکال زدا).

  2. برنامهٔ ساز و کار فرمان ریبرگ درست کار نمی‌کند؛ یعنی: فقط می‌تواند به سمت چپ بچرخد. سازندهٔ ریبرگ، بازهم، ادّعا می‌کند که این یک ویژگی است؛ چون که به شما این فرصت را می‌دهد که در مورد تابع‌ها مطالبی را یاد بگیرید. ریبرگ این مورد را قبول ندارد. شما به زودی یاد می‌گیرید که چطور یک برنامهٔ راه حل موقّت بنویسید که به ریبرگ امکان گردش به راست را می‌دهد، با این که این کار، روش پر ریخت و پاشی است. خیلی بعدتر، شما یاد می‌گیرید که چطور واقعاً ریبرگ را طوری تعمیر کنید که بتواند به سمت راست بچرخد، دقیقاً همان طور که به راحتی به سمت چپ می‌چرخد.

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

  4. ریبرگ می‌تواند ببیند آیا دیوار رو به رویش هست یا نه. هم‌چنین می‌تواند سرش را بچرخاند به سمت راست و ببیند آیا دیواری آن‌جا هست. با این همه یک «گیر» (glitch) نرم افزاری (اصلاح دیگری که تولید کننده‌های نرم افزار استفاده می‌کنند تا نگویند محصولشان باگ دارد) مانع از این می‌شود که برنامهٔ ریبرگ به درستی دیوار را موقع چرخاندن سرش به سمت چپ نشان بدهد.

گاهی هم قطع کردن روند معمول اجرای برنامه می‌تواند به پیدا کردن علّت باگ‌ها کمک کند. برای همین، شما می‌توانید یک یا چند تا از این راه‌کارها را انجام بدهید:

  1. شما می‌توانید برنامهٔ در حال اجرا را با فشردن دکمهٔ مکث (pause) موقّتاً نگه دارید. این کار شبیه به چیزی هست که مردم به آن می‌گویند درج یک نقطهٔ توقّف (breakpoint) در برنامه.

  2. به جای فشردن دکمهٔ مکث، می‌توانید دستور ()pause را هر جایی داخل برنامه بنویسید و ریبرگ به محض رسیدن و اجرای آن درنگ می‌کند و منتظر اجازهٔ شما برای ادامه می‌ماند.

  3. شما می‌توانید با فشردن دکمهٔ اجرای یک دستور و مکث یا همان دکمهٔ گام برنامه را * گام به گام*- به صورت هر بار فقط یک دستور- اجرا کنید. به صورت پیش‌فرض رنگ همان سطری از برنامه که قرار هست اجرا بشود تغییر می‌کند، می‌توانید با کلیک روی کلید بالای ویرایشگر این تغییر رنگ را خاموش کنید.

  4. می‌توانید سرعت اجرای برنامه (همان زمان مکث بین دو دستور) را در هر نقطه‌ای داخل برنامه تغییر بدهید. بعداً برایتان توضیح می‌دهم که چطور می‌توانید این کار را بکنید.

  5. می‌توانید کاری کنید که ریبرگ یک سری اطّلاعات را در هر نقطه‌ای داخل برنامه برایتان بنویسد. باز هم بعداً توضیح می‌دهم چطور این کار را می‌توانید انجام بدهید.

  6. در نهایت، شما می‌توانید با فشردن دکمهٔ ایست برنامه را کاملاً متوقّف کنید. متأسّفانه اگر در برنامهٔتان حلقهٔ بی‌نهایت داشته باشید؛ فشردن این دکمه شاید کار نکند، چون دیگر اوضاع خارج از کنترل ریبرگ است. حتّی اگه وضع از بد هم بدتر شد و بدترین حالت ممکن پیش آمد، همیشه می‌توانید صفحه را دوباره بارگذاری کنید.