تعریف واژه های برنامه نویسی: ساده، آسان، پیچیده، قدرتمند

راستش را بخواهید مطلب پیش روی شما بیشتر با هدف تولید یک «منبع» شخصی نگارش شده! یعنی اساس انتشار آن این است که من بتوانم در آینده هنگامی که نیاز به استفاده از این مفاهیم در نوشته‌های دیگرم داشتم، خواننده‌ها را به این منبع ارجاع دهم تا لازم نباشد در هر مطلب جدیدی که می‌نویسم مدام چنین مفاهیمی رو دوباره توضیح دهم.

ساده (Simple)

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

آسان (Easy)

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

پیچیده (Complex)

خصوصیتی است که به نبود، یا کمبود سادگی اشاره می‌کند. پیچیدگی ربطی به آسانی ندارد. ممکن است ابزاری پیچیده باشد، اما کار با آن آسان‌تر از یک ابزار ساده باشد. مثال: چکش و میخ، به نسبت ابزاری مانند دریل بسیار ساده تر‌اند. اما برای سوراخ کردن یک دیوار، کار با دریل بسیار آسان‌تر خواهد بود.

قدرتمند (Powerful)

خصوصیتی که باعث می‌شود در مورد «قابل انجام بودن کاری» توسط یک ابزار اطمینان حاصل کنیم. قدرتمند بودن ربط خاصی به هیچ کدام از فاکتورهای سادگی، آسانی، یا پیچیدگی ندارد. مثال: تانک یک خودروی بسیار قدرتمند است. ولی آیا ساده است؟ آیا رانندگی با آن آسان است؟ برای یک تانک، این مشخصه‌ها بی ارزش است، تانک فقط باید قدرتمند باشد، به هر قیمتی!

جمع بندی:

  • حاصل سادگی، در اغلب اوقات آسانی خواهد بود. اگر یک ابزار ساده باشد، احتمال اینکه کار با آن آسان باشد بسیار بالاست.
  • حاصل پیچیدگی، نبود سادگی و سختی بیشتر برای درک و شناخت ابزار است.
  • یک ابزار پیچیده، ساده نیست، اما می تواند آسان باشد!
  • حاصل قدرت، اطمینان از انجام یک کار و به سرانجام رساندن آن است. این که در طول انجام آن کار، چقدر سختی کشیده باشید، زیاد مهم نیست!
درک تفاوت بین «سادگی» و «آسانی» بسیار مهم است. یک ابزار ممکن است ساده باشد، اما آسان نباشد! و همینطور یک ابزار ممکن است آسان باشد، ولی ساده نباشد!

و مثالی که من همیشه برای توضیح این موارد در زمینه‌ی برنامه‌نویسی میزنم:

زبان C را در نظر بگیرید. C یک زبان «ساده» است. زبانی کوچک است که درک مفاهیم آن بسیار راحت است (با فرض بر اینکه شما به عنوان یک برنامه‌نویس درک مناسبی از مباحث سخت افزار دارید). اما کار با C ابدا آسان نیست! فرضا اگر بخواهید یک وب سرور روی پورت ۸۰۸۰ اجرا کنید چه می‌کنید؟

از آن طرف، جاوا اسکریپت یک زبان «آسان» است. مثال وب سرور بالا با دو سه خط جاوا اسکریپت قابل پیاده سازی هست؛ اما زیاد زبان ساده ای نیست! درک این مطلب که کدها در پشت صحنه چه اوضاعی دارند اصلا کار راحتی نیست. همین کتابخانه‌ی معروف jQuery را در نظر بگیرید، خیلی ها از آن استفاده می کنند بدون اینکه کوچک‌ترین تصوری از این داشته باشند که در پشت صحنه چگونه کار می کند. رفتارهای زبان هم در خیلی از اوقات قابل پیش‌بینی نیست. نتیجه‌ی نداشتن درک مناسب از رفتارهای این زبان، باعث می‌شود برنامه نویس حتی در کدهای کوتاه و کوچک، با خطاها و باگ‌های عجیب و غریبی مواجه شود که هیچ وقت نمیتوانست انتظارش را داشته باشد.

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

در همین حال، شاید بتوان گفت C قدرمند‌ترین زبان کامپیوتری است (اگر ماشین و اسمبلی را در لیست زبان‌های قابل استفاده‌ی روزانه قرار ندهیم). و تا جایی که من میبینم هنوز هم بعد از ۴۳ سال یکی از محبوب ترین زبان‌های برنامه‌نویسی دنیاست! (خیر، آن محیط آبی رنگی که دوره‌ی دبیرستان یا ترم اول دانشگاه با آن آشنا شدید، سی نیست!) آیا می‌توانید با C یک کامپایلر بنویسید؟ آیا می‌تونید با C یک سیستم عامل طراحی کنید؟ جواب دادن به این سوالات بسیار راحت است. بعله، می توانیم. چون توسط آن ده‌ها زبان مختلف و سیستم عامل کوچک و بزرگ طراحی و ساخته شده. پس ما به اینکه C می تواند چنین کارهایی را انجام دهد اطمینان کامل داریم، بنابراین می‌گوییم که C یک زبان قدرتمند است.

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

سادگی، آسانی، و قدرتمند بود، همگی حالت نسبی دارند. بکار بردن این صفات درباره‌ی یک ابزار، قالبا در مقایسه با ابزار دیگری معنی پیدا می‌کند.

همانطور که می‌دانید، C هرچقدر هم که قدرتمند باشد، برای استفاده‌ی روزانه اصلا زبان مناسبی نیست. وقتی پروژه‌ای از راه می‌رسد، هیچ کس پیش خودش فکر نخواهد کرد که آن پروژه را با C پیاده‌سازی کند. اینکه این قضیه یک حسن است یا یک نقص، جای بحث دارد!

(انتخاب C و جاوااسکریپت در این مثال، به خاطر آشنایی اکثر مخاطب‌ها با این دو زبان بوده و دلیل دیگری نداشته است.)

برقراری تناسب بین «سادگی»، «آسانی»، «پیچیدگی»، و «قدرت»، مهم‌ترین هدف در طراحی هر ابزاریست. یک ابزار مناسب، ابزاری است که بتواند به بهترین شکل این تناسب را برقرار سازد؛ و البته منطق فکری شما هم به عنوان مخاطب آن ابزار، نقش تعیین کننده ای دارد. فرضا ممکن است شخصی با هدف سهولت در انجام کاری، پیچیدگی‌های ممکن را پذیرا شود یا به قدرت کمتر راضی شود. در آخر همه چیز به این ختم می‌شود که شما در قبال چیزی‌هایی که دریافت می‌کنید، حاضر باشید از چه چیزهایی گذشت کنید! چون هیچ ابزاری نیست که بتواند تمام مفاهیم بالا رو با هم داشته باشد!

نظرات

comments powered by Disqus