دربارهی ادیسون افسانههای زیادی در سر زبانهاست. از جمله این که پس از این که ده هزار بار (از هفتصد تا ده هزار بار نقل شده) در ساخت لامپ رشتهای شکست خورد، بالاخره موفق شد این وسیله را آن طور که میخواهد اختراع کند. و وقتی دربارهی شکستهایش از او پرسیدند، گفت:
«من شکست نخوردم بلکه موفق شدم ده هزار راه اختراع نکردن لامپ را بیابم.»
I have not failed. I've just found 10,000 ways that won't work. +
فارغ از این که آیا این جمله را ادیسون گفته یا نه (این جا در این باره بحثی وجود دارد)، به نظرم نگاه به موفق نشدنها و شکستها باید همین باشد. یعنی تا وقتی از زندگی سیلی نخوری، نمیتوانی واقعا موفق باشی. سیلیهایی که درد دارند اما نابود نمیکنند. یعنی از جمله زخمهایی نیستند که صادق هدایت میگوید در انزوا روح آدم را میتراشند بلکه از جمله زخمهاییاند که نیچه میگوید:
آنچه مرا نکُشد، نیرومندترم میسازد؛ این را در مدرسهٔ جَنگِ زندگی آموختهام. +
در یادگیری زبان خارجی، مفهومی هست به نام «زبان میانی». یعنی زبانی که زبانآموز ساخته است و چیزی شبیه زبانی است که در حال یادگیری آن است اما آن زبان نیست (همین مفهوم در یادگیری زبان توسط کودک هم وجود دارد). زبانآموز تلاش میکند قواعد واژهسازی و جملهسازی زبان مقصد را تقلید کند و گاه به ساختارهای عجیبی میرسد که برای اهل آن زبان خندهدارند اما اگر عمیق شوید، میبینید که این اشتباهات به معنی تلاش او برای یادگیری هستند و این یعنی او در مسیر درستی برای یادگیری قرار دارد (برای آشنایی با این ساختارها در زبان کودک به سایت childes مراجعه کنید و برای آشنایی با این ساختارها در یادگیری زبان بزرگسال به پیکرههای زبانآموز). حالا هنر زبانآموز این است که از اشتباه خود (مانند ادیسون) درس بگیرد و از طرف دیگر هنر معلم این است که با بازخورد (فیدبک) مناسب دادن به او باعث شود یادگیریاش عمیقتر شود.
در یادگیری زبانهای برنامهنویسی هم همین اتفاق میافتد. گاهی برنامهنویسان تازهکار سوالاتی میپرسند که به نظر خندهدار میآید و جواب آن بدیهی است اما وقتی عمیق میشویم میبینیم که فهم عمیق پاسخ این سوالها (و نه فقط پاسخ سطحی به آنها) چقدر مهم است. مثلا برنامهنویس تازهکاری میپرسد چرا باید جلوی نام تابع پرانتز باز کنیم؟ یا چرا نمیتوانیم مقدار ثابتها را تغییر دهیم؟ و سوالاتی از این دست.
از سوی دیگر همهی ما در هنگام اجرای کدهای خود با خطاهای زیادی روبرو میشویم. گاهی خطای ما به سادگی نگذاشتن یک نقطهویرگول («؛») در پایان خط است. اگر کسی در هنگام کدنویسی کنار ما باشد، شاید از این اشتباهات خندهاش بگیرد و بگوید مگر میشود چیز سادهای مثل این را فراموش کنی؟ اما ما یاد گرفتهایم که خطا (error و warning) جزئی از برنامهنویسی است و اتفاقا اگر با خطایی روبرو نشدیم باید بترسیم! یادم نمیرود که در سال دوم دانشگاه، یکی از دوستانم که تازه به دانشگاه آمده بود با من درد دل میکرد و میگفت یک برنامه نوشتم که وقتی کامپایلش کردم 7 تا خطا داشت! این را با شرمندگی میگفت و من بیشتر از شرمندگی او تعجب میکردم.
و البته من به جز این نوع خطاهای مرسوم برنامهنویسی، با خطاهای دیگری هم روبرو شدهام که باعث شده حواسم را بیشتر جمع کنم! مثلا در درس «اسمبلی» در دانشگاه یک بار تکلیفم را انجام نداده بودم و از دوستم خواستم تکلیفش را برای من بفرستد تا کمی تغییر دهم و برای کمکاستاد (TA) ایمیل کنم (خدا از سر تقصیراتم بگذرد). تکلیف را فرستاد و تغییرات را اعمال کردم اما وقتی خواستم بفرستم اشتباهی فایل دوستم را پیوست کردم و فرستادم... البته بعد دوباره فایل خودم را فرستادم و توضیح دادم که فایل قبلی اشتباه بود به این امید که کمکاستاد فایل قبلی را باز نکند و بررسی نکند. از همین اشتباه دو درس عمده گرفتم: یکی این که امکان Undo را در جیمیل فعال کنم و دوم این که پیش از ارسال ایمیل و پیوست کردن هر فایلی، یک بار دقیق متن و فایلهایم را بررسی کنم. و البته تا یادم نرفته این درس را هم گرفتم که تقلب نکنم!
اشتباه دیگری که به خاطر دارم یک اشتباه مدیریتی بود. برای درس «مهندسی نرمافزار» باید سامانه ثبت نام دانشجویی (گلستان) را بازنویسی میکردیم. مدیریت گروه چهار نفرهی ما بر عهدهی من بود و علاوه بر تهیهی راهنمای سیستم باید آن را برای استاد پرزنت میکردم. پیش از اجرا، با برنامهنویس ارشدمان هماهنگ نکردهبودم و مثالی که از کارکرد سیستم زدم، جزو معدود بخشهایی بود که هنوز راهاندازی نشده و فقط دکمههای آن طراحی شده بود! نتیجه این که استاد گمان کرد ما فقط ظاهر سایت را ساختهایم و جزء به جزء آن را بررسی کرد (که البته نتیجهی کار بد نبود). درسی که از این اتفاق گرفتم این بود که پرزنت هم جزئی از پروژه است و باید روی آن وقت گذاشت و با اعضای تیم دربارهی آن مشورت کرد.
خلاصه این که امروز به این نتیجه رسیدهام که از اشتباه کردن نترسم اما به آن عادت نکنم.