معمولاً ما آدمها به صفات عالی که به «ترین» ختم میشوند از خود علاقه نشون میدیم. به عنوان مثال:
- گرانترین خودرو دنیا
- خوبترین کشور دنیا
- برترین برند دنیا
- کوچکترین لپتاپ دنیا و ...
حال اگر این سؤال از شما شود که بزرگترین برنامهنویس عالم (دنیا) کیست، چه پاسخی خواهید داشت؟ مسلماً برای پاسخگویی به چنین سؤالی باید ابتدا به ساکن الگوریتمی بنویسیم، سپس یکسری دیتای ورودی به آن داده تا در نهایت پاسخ به سؤال فوق رو دریابیم. به عنوان مثال، در ارتباط با این الگوریتم داریم:
- او کسی است که بیشترین تعداد کلون را داراست.
- او کسی است که روی بزرگترین پروژهها کار کرده است.
- او کسی است که در کامیونیتی اپنسورس فعال است.
- او کسی است که کمترین باگ را در فرایند توسعه ایجاد کرده است.
- او کسی است که پشتیبانی خوبی از نرمافزارهایی که توسعه داده به عمل میاره و ...
با این تفاسیر، چنانچه خلق کائنات رو به یک پروژهٔ نرمافزاری تشبیه کنیم، خیلی نیاز به توضیح نخواهد بود که به خالق چنین پروژهای هم میتوان لقب «بزرگترین برنامهنویس عالم» را داد و او کسی نیست جز خداوند متعال.
پیش از هر چیز عرض کنم که در ادامه اصلاً قصد نداریم بحثی ایدئولوژیک مطرح کنیم، بلکه صرفاً قرار است با مد نظر قرار دادن پروسهٔ رابطهٔ علت و معلولی که مابین اجزای مختلف این دنیا برقرار است، به این نتیجه برسیم که او (خدا) بزرگترین دولوپر تاریخ است (سعی میکنم با ذکر چند مثال از دنیای واقعی، ادعایم رو هم ثابت کنم.)
درآمدی بر زبان برنامهنویسی UniverseScript
فرض کنیم خالق این دنیا مخلوقاتش رو با استفاده از زبانی تحت عنوان UniverseScript دولوپ (خلق) کرده است. این زبان کاملاً شیئگرا (OOP) و به اصطلاح کانکارنت است؛ اینها ویژگیهای خاص زبان یونیورساسکریپت هستند و این در حالی است که ساختارهای معمول که در تمامی دیگر زبانها وجود دارند نیز در این زبان دیده میشود؛ چیزهایی مثل دستورات شرطی، حلقه و ... که در ادامه یکی از این موارد را با ذکر مثال توضیح خواهم داد.
دنیا پُر است از ساختارهای IF ... ELSE
شاید زیاد این گزاره را شنیده باشید که «دنیا دار مکافات است.» اما چهطور چنین چیزی ممکن است؟ مگر میشود بدون وجود برنامهای سنجیده در بکاند کائنات، به کسی بدی کنیم و به صورت رَندُم و شانسی در آینده سزای کار خود رو ببینیم؟ مگر میشود بدون وجود الگوریتمی پیچیده -که موی لای درزش هم نمیرود- در این دنیا به کسی ظلم کنیم و روزی آن هم به صورت خیلی تصادفی مورد ظلم واقع شویم؟ مگر میشود از عمد آبروی انسان شریفی را به صورت غیرواقع ببریم و شهرتش را لگهدار کنیم اما در عین حال چنین کاری از دید دولوپرمان (خالقمان) پنهان بماند؟ (یا مگر میشود ناظم مدرسه، معلم قرآن و به طور کلی کسانی که قرار هست Role Model بچههای ما باشن و نسل بعدی رو تربیت کنن به بچهها ... کنن؟)
خُب یکی از ساختارهای مورد علاقهٔ خداوند متعادل در پروسهٔ توسعهٔ نرمافزار ساختار IF ... ELSE است. به طور مثال، فرض کنیم به کسی ظلم میکنیم؛ در چنین شرایط داریم:
var act, payForIt = null;
if (act === 'evil') {
payForIt = true;
} else {
payForIt = false;
}
در تفسر کدهای فوق بایستی بگوییم که اگر مقدار متغیر act برابر با evil (کاری بد) باشد، مقدار متغیر payForIt برابر با true میشود و در غیر این صورت هم fales (معنی تحتالفظی payForIt «پس دادن تاوان چیزی» است.)
حال ممکن است این سؤال پیش بیاید که از گذشته تا به امروز شاهد تبهکاری، ظلم، ستم، بیعدالتی و بیرحمی برخی مخلوقات خدا بودهایم (به عبارتی شرط داخل if برابر با true است)، اما در عین حال میبینیم که خوب و سرحال، راستراست راه میرن و هیچ اتفاقی هم براشون رخ نمیده!!! خُب خدا فکر چنین Use Case هایی را هم کرده است؛ برای روشنتر شدن این مسئله، اسکریپت زیر را ملاحظه کنید:
var act, payForIt, timeToIncreaseSin = null;
if (act === 'evil') {
if (timeToIncreaseSin == true) {
payForIt = false;
} else {
payForIt = true;
}
} else {
payForIt = false;
}
همانطور که میبینید، خدا این بخش از کد رو ریفکتور کرده و متغیر جدیدی اضافه کرده تحت عنوان timeToIncreaseSin که به صورت تحتالفظی میشود به صورت «فرصت دادن برای غرق در گناه شدن» ترجمه کرد!
در واقع، اگر مقدار متغیر برابر با evil بود و همچنین مقدار متغیر timeToIncreaseSin برابر با true بود، مقدار متغیر payForIt برابر با false میشود. به عبارت دیگر، اگر شخصی بیتقوایی کند و در عین حال روی کارش هم پافشاری کند، خداوند مقدار متغیر timeToIncreaseSin را برایش برابر با true میکند تا فرصت داشته باشد که هرچه بیشتر در کارهای بدش غرق شود اما اگر شخصی یا گروهی کار بدی کرد اما کارش بدش از روی نادانی بود، مقدار متغیر timeToIncreaseSin برابر با false شده تا وی در همین دنیا (که به قول امام علی در دنیای کمیل عذابش اندک و دردش کم است) تقاص کارهای بدی که انجام داده را پس دهد.
اپنسورس بودن همه چیز!
در این دنیا همهچیز اپنسورس (متنباز) است و اگر کسی پیدا شود که حال و حوصلهٔ سورسکد خوانی داشته باشه، همونطور که میتونه به سورسکد کِرنِل لینوکس دست پیدا کنه، به راحتی میتونه از رمز و راز هستی سر دربیاره (البته ظاهرا در برخی موارد به دلایل استراتژیک خداوند متعال از سیاستهای مایکروسافت تبعیت کرده و یکسری چیزهای کلیدی رو متنباز نکرده که از آن جمله میشه به اینکه تَه کائنات کجاست؟ زندگی پس از مرگ چگونه است؟ حکمت برخی اتفاقات ناخوشاید چیست؟ و ... اشاره کرد.)
در پاسخ به این سؤال که یعنی چی همهچیز اپنسورسه؟ باید گفت که مثلاً گرچه DNA خیلی پیچیده هست، اما دانشمندان با تمرکز روی ساختارش (با بهتر بگیم سورسکدش) میتونن ازش سر دربیارن. مسئلهٔ زاد و ولد چیز پیچیدهای است اما باز هم محققین تونستن با رصد کردن رفتار اسپرم و تخمک، لقاح مصنوعی رو درست کنن. درک ساز و کار سلولهای بنیادین (Base Cell) که برای خودش دنیایی است، تونسته این امکان رو در اختیار پزشکان قرار بده تا دست به ساخت اعضای بدن بزنن (احتمالاً هم در برخی لابراتورها شروع به ساخت انسان کردن ولی جرأت نمیکنن بگن کِلون کردیم!)
کار روی پروژههای اینترپرایز و جهانی
اگر فکر میکنید که کرهٔ زمین خیلی بزرگ است، سخت در اشتباهید چرا که این کرهٔ خاکی که پُر است از مخلوقاتی که صرفاً نام «اشرف مخلوقات» رو یدک میکشن، صرفاً یکی از پروژههای دمدستی خدا است و این در حالی است که در برابر هزاران کهکشان دیگر که حتی در مخیلهٔ ما هم نمیگنجد، حرفی برای گفتن ندارد!
ظاهراً خداوند یک کلاس اولیه ساخته مثلاً تحت عنوان Galaxy، سپس از روش تا میتونسته آبجکت ساخته که یکی از آخرین آبجکتهاش هم کهکشان راه شیری هست (اینکه او از چه ورژن کنترلی استفاده میکنه، خودش جای بحث داره!)
ساپورت خوب
برخلاف خیلی از دولوپرهایی که امروزه میبینیم، خداوند متعال فولاستک دولوپری است که ساپورتش بدک نیست! به عبارت دیگه، آبجکتهایی به اسم Human که ساخته رو خوب ساپورت میکنه و هر موقع که در منابعی همچون سرور، رَم، سیپییو کم بیارن، به موقع ریسورس بیشتر بهشون اختصاص میده.
برخلاف دولوپری همچون من که اگر مشتری زنگ بزنه بگه فیچر ریکوئست دارم و من هم میگم ایشالا سه ماه دیگه زنگ بزنم ببینم چهکار میتونم برات بکنم، خداوند متعادل به صورت اصطلاحاً Real-time جواب میده. اما یادمون باشه که این جواب دادن همیشه با پاسخ مثبت عجین نیست بلکه عرض کردم که جواب میده که این پاسخ میتونه منفی هم باشه و همین میشه که گاهی اوقات هرچه درخواست فیچر ریکوئست میدیم (مثلاً زوجی بچه میخواد اما بچهدار نمیشه، آدمی ثروت میخواد اما روز به روز بیپولتر میشه و چیزهایی از این دست)، با در بسته مواجه میشیم.
مثلاً برخی دولوپرها که میگن آقا نمیشه، زمان میبره و یا اینکه میگن این پلتفرم قابلیت ارتقاء نداره و وقتی از این دست پاسخها میشنویم و از دست چنین دولوپرهایی کلافه میشیم، از دست دولوپرمان نیز به بدترین شکل ممکن کلافه شده و گاهی هم دیگر برای فیچر ریکوئست جدید بهش رو نمیاندازیم!!
کمترین تعداد باگ در فرایند توسعهٔ نرمافزار
پیش از این گفتیم که یکی از خصوصیات خداوند متعال این است که دارای کمترین باگ در پروسهٔ طراحی پروژههایش هست (به واژهٔ کمترین خوب دقت کنید.) هرگز نگفتم اصلاً او در حین کدزنی باگی تولید نمیکنه چون بالاخره اون هم مثل بقیه یک دولوپر هست! و برای اثبات چنین ادعایی، توجه شما را به مثالهای زیر جلب میکنم:
- کسانی که به صورت Shemale متولد میشوند!
- کسانی که مثلاً با دو سر متولد میشوند!
- و کسانی که مثلاً به طور مادرزادی ناشنوا هستن!
به نظر میرسه که این دست باگها به اصطلاح Zero Day هستن که دیگه فرصت نشده دیباگشون کنه (برای کسب اطلاعات بیشتر، توصیه میکنم به مقالهٔ آسیبپذیری Zero-day چیست؟ مراجعه کنید.)
اما اینجاست که سیاست اپنسورسی خالق متعال به داد کاربران نرمافزاریاش میرسد؛ به عبارت دیگه، این امکان در اختیار کاربران (انسانها) قرار گرفته تا مثلاً یک Shemale رو به یک Male یا Female تبدیل کنن، و یا کسانی که دو سر دارند رو جراحی کرده و به حالت معمول درآورند الیآخر.
حال نوبت به شماست که بگید چرا UniverseScript یک زبان به اصطلاح OOP و Concurrent باید میبود که از قضا اینگونه هم هست؟
ممنون که وقت گذاشتید. جای نظر، انتقاد و پیشنهاد شما در بخش کامنتینگ است.