وقتی رد تمام جهان دیجیتال را میزنیم!

امروز ایده برنامهنویسی در خلوت خود و به دور از همکاری با دیگر برنامهنویسان، فاصله زیادی با واقعیت دارد. شاید در آغاز عصر نرمافزار، یک برنامهنویس نرمافزار بهتنهایی در اتاقش و به دور از شبکهای از همکاران کار میکرد و درصدد بود چیز ارزشمندی تولید کند؛ اما امروز سیستمهای نرمافزاری را صدها هزار برنامهنویس تولید میکنند که هر یک در زمینهای تخصص دارند. آیا این بدان معنا است که افزون بر کدنویسی به مهارتی دیگر نیز برای توسعه یک نرمافزار نیاز است؟
به گزارش ستاد ارتباطات و ترویج بنیاد علم و فناوری مصطفی(ص)، حدود بیست سال پیش، جنبش نرمافزاری متنباز (اوپنسورس) آغاز به کار کرد که به واسطهاش هر کسی میتوانست پروژهای را شروع کند، افرادی بهعنوان همکار داشته باشد، نوآوری کند و درباره موضوع مورد پژوهش، به نتایج قابلقبولی برسد. این همکاریها همچنین بسیاری از باگهایی که از نظر یک برنامهنویس پنهان مانده ولی هزاران برنامهنویس دیگر به آنها پرداختهاند را به آسانی آشکار میکند و کیفیت کار را ارتقا میدهد. برای درک بهتر کیفیت، میتوان مثال یک تلفن همراه را در نظر گرفت. وقتی از برنامههای موبایل خود استفاده میکنید و نرمافزار آن، پاسخگوی نیاز شما نیست، موبایل شما داغ میکند یا باتری با سرعت تخلیه میشود یا حتی برنامه بهطور ناگهانی متوقف میشود؛ تمام اینها خبر از بیکیفیتی نرمافزار گوشی شما میدهد. البته شاید شما تصمیم بگیرید به کار با تلفن همراه خود با همان وضعیتی که دارد ادامه دهید. مسئله این است که همیشه داستان به همینجا ختم نمیشود. چرا که در بسیاری موارد شما با نرمافزارهایی بسیار حیاتیتر سروکار دارید که حساب بانکی یا خودروی شما را هدایت میکند یا حتی به یک هواپیما یا شاتلی فضایی مرتبط است و کوچکترین اشتباهی با خسارتهای جانی و مالی هنگفت روبرو میشود. اینجاست که کوچکترین باگی را در نرمافزار خود تحمل نخواهید کرد و کیفیت نرمافزار برای شما جنبهای حیاتی پیدا میکند.
حال که تعامل گسترده در دستیابی به نرمافزار کارآمد، ضروری و گریزناپذیر است، پرسشی دیگر به میان میآید. این همکاری با چه سازوکاری شکل میگیرد؟ چگونه میتوان به انبوه اطلاعات برنامهنویسان دیگر دست پیدا کرد و از تکرار راههای ناکام آنها جلوگیری کرد؟ احمد حسن استاد دانشگاه کویینز کانادا راهکاری نبوغآمیز برای این چالش مطرح کرده است. او درباره این چالش میگوید: امروزه با نگاهی به سیستمهای نرمافزاری متوجه میشویم که این سیستمها شبکههای بسیار پیچیدهای متشکل از مؤلفههای مختلفاند که با هم تعامل دارند. با طراحی سیستمهای نرمافزاری پیچیدهتر، تصور اینکه یک فرد و یا حتی یک تیم صد نفره در یک مکان کار کنند دیگر عملی به نظر نمیرسد. در واقع تیمهای گستردهتری متشکل از طراحانی از سراسر جهان با هم در تعاملاند و با هم کار میکنند. هر کدامشان دانش و تخصص خاص خود را به کار میگیرند و با دانش و تخصص طراحان دیگر تلفیق میکنند. به همین دلیل، پیچیدگی سیستمهای نرمافزاری هر روز بیشتر و بیشتر میشود. این پیشرفت نرمافزارها و افزایش پیچیدگی سیستمهای نرمافزاری با بالاتر رفتن انتظارات کاربران درباره کیفیت و راحتی کاربران نیز همراه است و حسن بر همین اساس، این همکاری را جوهر اصلی برنامهنویسی میداند.
ایده حسن برای این همکاری همهجانبه برنامهنویسان در سراسر جهان در دستاوردش، «کاوش مخازن نرمافزاری (MSR)» جلوهگر میشود. او در این باره میگوید: حدود ٢٠ سال پیش، ایدهای در ذهن من شکل گرفت که مسیر جدیدی را برای توسعه نرمافزارها نشان داد. آن زمان متوجه شدم که هر قدمی که توسعهدهندگان نرمافزار در پروژههایشان برمیدارند، اثری دیجیتالی از خود به جا میگذارد. از تغییرات کدها گرفته تا دادههایی که از استفاده کاربران از نرمافزارها به دست میآید. در گذشته، این دادهها تنها ذخیره میشدند و هرگز به شکلی مؤثر برای بهبود کیفیت یا بهرهوری پروژههای نرمافزاری مورد استفاده قرار نمیگرفتند. ایده اصلی این بود که این دادهها را چگونه میتوان پاکسازی و ساماندهی کرد تا بتوانند در خدمت توسعهدهندگان قرار گیرند؟ به این معنا که بتوانیم به کمک این دادهها بهرهوری توسعهدهندگان را افزایش دهیم یا کیفیت سیستمهای نرمافزاری را بهبود ببخشیم.
امروز همه این تجربه را در فروشگاههای برخط دارند که پس از یک خرید، گزینههای دیگری نیز بر اساس انتخابهای کاربران دیگر به آنها معرفی میشود. این پژوهشگر مهندسی نرمافزار میگوید: زمانی که در فروشگاه کتاب برخطی وارد میشوید و کتابی میخرید، معمولاً به شما پیشنهاد میکند که: مشتریانی که این کتاب را خریدند، کتابهای دیگری مثل این را هم خریدند. حالا تصور کنید چنین سیستمی را برای برنامهنویسان طراحی کنیم و به آنها بگوییم: اگر این بخش از کد را تغییر دادید، ۹۹ درصد مواقع توسعهدهندگان دیگر بخش دیگری از کد را هم تغییر دادهاند. این فرایند میتواند از بروز بسیاری از مشکلات در آینده جلوگیری کرده و تأثیرات منفی آنها بر مشتریان را به حداقل برساند. یکی از نمونههایی که بر اساس همین ایدهها شکل گرفت، ابزار شناختهشدهای به نام GitHub Copilot است. این ابزار زمانی که توسعهدهنده در حال نوشتن کد است، میتواند ادامه خطوط یا حتی بخشهای بزرگتری از کد را پیشبینی و پیشنهاد دهد. این فناوری با استفاده از تحلیل حجم عظیمی از کدهای موجود در جهان و ایجاد الگوهای آماری، بر پایه هوش مصنوعی ساخته شده است. در واقع، میتوان گفت این ابزار مانند یک پیشگو عمل میکند که احتمال واژه پیشنهادی یا عبارت بعدی را حدس میزند. این ارتباط عمیق بین هوش مصنوعی، توسعه نرمافزار و چالشهایی است که برنامهنویسان با آنها دست و پنجه نرم میکنند.
دستاورد احمد حسن به معنای نقش بیسابقه تعاملات در توسعه نرمافزارها است. بر همین اساس، او برای پرسش آغازین این گزارش، پاسخی روشن و البته غافلگیرکننده دارد: «امروز، کدنویسی پانزده یا حداکثر بیست درصد از وقت طراح را به خود اختصاص میدهد. هشتاد درصد بقیه، صرف همکاری و تعامل با دیگران و برنامهریزی میشود.»
آنچه خواندید پیشتر در شماره دوم نشریه بینالمللی رصدخانه منتشر شده بود.