منبع اصلی نوشتار زیر در این لینک قرار دارد

تیغ اوکام

william_ockham
William Ockham

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

ویلیام اوکام فیلسوف و منطق‌دان انگلیسی که ۷ قرن پیش زندگی میکرده. از عمده دلایل شهرتش اینهمه سال پس از مرگ، «اصل تیغ اوکام» یا با اسم دیگه «اصل اختصار تبیین» هست.

حالا این تیغ اوکام چی هست و چی میگه؟

ویکیپدیا میگه به شکل ترجمه عامیانه از لاتین تیغ اوکام این رو میگه:

در توضیح و توصیف، بخش‌های ناضروری را حذف کن.

ولی این که حالا این یعنی چی باز ویکی پدیا اینو میگه:

میان دو نگره که توان توصیف و پیش‌بینی یکسانی دارند، ساده‌ترین را بگزین.

خب فکر کنم یکم مشخص شده باشه که چی میگه.

تا اینجا که تمام استنادمون به ویکیپدیا بوده پس از همونجا یک مثال هم میارم براتون:

چرا در یخچال خانه هیچ غذایی نیست؟! آیا گروهی ازسارقان بین‌المللی آن را خالی کرده‌اند؟ آیا یخچال شیئی ساخته فضایی هاست که هر غذایی را ناپدید می‌سازد؟ یا اینکه دلیل خالی بودن یخچال، این است که هم اتاقی من و دوستانش دیشب گرسنه بوده‌اند؟

دیگه حس میکنم زیادی از حد مشخص شد یعنی چی! توی مثال بالا اینکه سارقین بین‌المللی غذاهارو دزدیده باشن ممکنه ولی خب واقعا ساده ترین حالت ممکن نیست و باید خیلی از موارد وارد داستان بشن تا بشه همچین چیزی رو توجیح کرد ولی اینکه یکی گشنش شده و غذای توی یخچال رو خورده یک نظریه خیلی سادست و لازم نیست داستان پیچیده ای برای انجام شدنش داشته باشیم.

ولی ایرادات زیادی به تیغ اوکام وارده که یکی از مهمتریناش معیار سادگی هست. وقتی که گفتیم «میان دو نگره که توان توصیف و پیش‌بینی یکسانی دارند، ساده‌ترین را بگزین.» ساده ترین اصلا کدوم یکی هست؟ ما به چی میگیم ساده؟!

تا اینجای داستان برای همه بود و هر کسی میتونست بخونه و ازش استفاده کنه. ولی از اینجا دیگه مربوط میشه به کامپیوتر و برنامه نویسی…

خب مثالمو با زبان برنامه نویسی CPP میزنم.

یک برنامه ای رو اجرا میکنید و خروجی Hello World رو دریافت میکنید. به نظر شما برنامه نویس توی سورس برنامه چی نوشته که خروجیش این شده؟ خط اول، دوم یا سوم کد زیر؟

cout << "H" << "e" << "l" << "l" << "o" << "" << "W" << "o" << "r" << "l" << "d";
cout << "Hello" << " " << "World";
cout << "Hello World";

تمام خروجی های هر سه خط کد بالا عبارت Hello World است، ولی معمولا یک برنامه نویس برای اینکه این عبارت را چاپ کند از حالتی شبیه به خط سوم استفاده میکند تا دیگر خط ها. تغریبا میتوان تشخیص داد که خط سوم نسبت به خطوط اول و دوم ساده تر است.

گفتیم که از ایرادات وارد به تیغ اوکام بررسی سادگی هست. ولی خب شاید بتونیم توی برنامه نویسی معیار های خوبی برای سادگی بیاریم.

مثلا میشه به نظر من اینارو معیار های خوبی قرار داد و به اونهایی که این ویژگی هارو دادند برنامه های ساده تر گفت:

  • تعداد حلقه های کمتر
  • تعداد شرط های کمتر
  • تعداد متغیر های کمتر
  • خطوط کوتاهتر
  • و…

ابته منظورم از خطوط کوتاهتر خطوط کمتر نیست ها!! منظورم طول هر خط هست. به نظر من تعداد خطوط معیار مناسبی برای سادگی نیست.

البته موارد بالا چیز قطعی برای سادگی نیستند و من فقط نظر شخصی خودم رو گفتم. البته فکر هم نکنم هیچ وقت برای سادگی یک استاندارد کامل داشته باشیم.



برچسب ها : ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد