اغلب بین مفاهیم Simple – سادگی و Easy -آسانی خلط مطلب میشود.
Simple و Easy دو کلمه هستند که اغلب با هم اشتباه گرفته میشوند، اما معانی متفاوتی دارند.
- Simple: به معنای ساده، بیپیچ و خم و بدون جزئیات اضافی است. یک چیز ساده ممکن است پیچیدگیهای درونی داشته باشد، اما ظاهر و عملکرد آن برای کاربر آسان باشد.
- Easy: به معنای آسان، راحت و بدون نیاز به تلاش زیاد است. یک چیز آسان معمولاً پیچیدگی کمی دارد و انجام آن نیاز به مهارت خاصی ندارد.
به عنوان مثال تصور کنید میخواهید یک ظرف ماکارونی درست کنید.
- یک دستور پخت ساده برای ماکارونی: ماکارونی را آب جوش بریزید، نمک بزنید و بعد از پخت، سس گوجه فرنگی روی آن بریزید. این دستور پخت مراحل کمی دارد و به راحتی قابل انجام است. اما ممکن است برای تهیه سس گوجه فرنگی نیاز به مهارتهای آشپزی بیشتری باشد.
- یک دستور پخت آسان برای ماکارونی: ماکارونی آمادهای را بخرید و آن را با کمی کره و پنیر گرم کنید. این دستور پخت بسیار آسان است و به هیچ مهارت آشپزی نیاز ندارد. اما نتیجه نهایی به سادگی دستور پخت قبلی نخواهد بود و ممکن است طعم و کیفیت آن متفاوت باشد.
در این مثال همانطور که مشاهده کردید دستور پخت اول (ساده) مراحل کمی دارد و به راحتی قابل فهم است، اما ممکن است برای تهیه تمام مواد اولیه و سس به مهارت بیشتری نیاز باشد.
اما در مورد دستور پخت دوم (آسان) کار بسیار سریع و راحت است، اما نتیجه نهایی به سادگی دستور پخت اول نیست و ممکن است از نظر طعم و کیفیت پایینتر باشد.
در نتیجه میتوان اینطور بیان کرد که یک چیز ساده ممکن است پیچیدگیهای درونی داشته باشد، اما برای استفاده کننده نهایی آسان باشد.
یک چیز آسان معمولاً پیچیدگی کمی دارد، اما ممکن است از نظر کیفیت یا عملکرد، به سادگی چیزی که ساده طراحی شده باشد، نباشد.
اغلب بین مفاهیم سادگی و آسانی خلط میشود. سادگی در طراحی به معنای کاهش پیچیدگیهای غیرضروری برای بهبود کارایی و قابلیت استفاده محصول است. در واقع، سادگی یک هدف است که با درک عمیق از پیچیدگیهای سیستم و مدیریت مؤثر آنها حاصل میشود. این در حالی است که آسانی ممکن است به معنای سادهسازی بیش از حد مسئله و در نتیجه کاهش قابلیتهای محصول باشد.
Complexity
سادگی به معنی آسون یا آبکی بودن نیست. این دو قطعا با همدیگر متفاوت هستند. سادگی طراحی یعنی هندلکردن incidental complexity. در اصل داری این معادله رو کنترل میکنی:
Total Complexity = Essential Complexity + Incidental Complexity
پیچیدگیهای اتفاقی(Incidental Complexity) توسط خود برنامهنویس
در دنیای برنامهنویسی، بسیاری از پیچیدگیها به دلیل تصمیمات و اقدامات خود برنامهنویسها ایجاد میشوند. این پیچیدگیها اغلب به عنوان پیچیدگیهای تصادفی شناخته میشوند و میتوانند به طور قابل توجهی بر کیفیت، نگهداری و توسعه نرمافزار تأثیر بگذارند.
پیچیدگیهای ناشی از طراحی ضعیف
- طراحی بیش از حد پیچیده: استفاده از الگوهای طراحی پیچیده در مواردی که یک راه حل سادهتر وجود دارد.
- عدم رعایت اصل DRY (Don’t Repeat Yourself): تکرار کد در بخشهای مختلف برنامه که میتواند منجر به مشکلات نگهداری و بروزرسانی شود.
- Coupling زیاد بین ماژولها: وابستگی بیش از حد ماژولها به یکدیگر که باعث میشود تغییر در یک بخش منجر به تغییرات در بخشهای دیگر شود.
- عدم استفاده از نامگذاری مناسب برای متغیرها، توابع و کلاسها: نامگذاری مبهم و non self-descriptive میتواند درک کد را دشوار کند.
پیچیدگیهای ناشی از پیادهسازی ضعیف
- خوانایی پایین و سخت کد: استفاده از ساختارهای کنترل پیچیده، متدها( یا توابع) طولانی که خوانایی کد را کاهش میدهد.
- استفاده بیش از حد از ترفندهای برنامهنویسی: استفاده از ترفندهای پیچیده و غیرمعمول که درک کد رو دشوار میکند و احتمال بروز خطا را افزایش میدهد.
- عدم رعایت استانداردهای کدنویسی: عدم رعایت استانداردهای کدنویسی تیم، میتونه منجر به ناسازگاری در کد و مشکلات نگهداری شود.
- پیچیدگی در فرآیند انتشار محصول: پیچیدگی در فاز operation باعث میشود که چرخه دیپلوی محصول به سختی بچرخد و در صورت بروز مشکل سیستم دارای رفتار غیر قابل پیشبینی باشد. همینطور برپایی شرایط محیط عملیاتی بر روی سیستم توسعهدهنده تبدیل به یک معضل بزرگ میشود.
پیچیدگی مسئله و آشنا بودن با مسئله
بعضی واقعا تجارب قبلی یا دانش کسب شده از یک مسئله ممکن منجربه به این بشود که فکر کنیم اون مسئله چقدر آسونه. احتمالا این جمله رو زیاد شنیدم: اینکه خیلی آسونه، اینکه کاری نداره و از این قبیل جملات.
این جملات نهایت به این معنی هست که این مسئله پیچیده برای ما آشناست. همیشه آشنا بودن باعث میشه که پیچیدگی پنهان بمونه.
آشنا بودن با یک مسئله گاهی منجر به این میشود که پیچیدگیهای آن مسئله پنهان بمانند.
سادگی یعنی پیدا کردن سادهترین راه برای کنار هم قرار دادن قطعات، نه اینکه پازلها همیشه آسون باشند. بعضی وقتها پازلها پیچیده هستند، اما با کمی فکر و خلاقیت میشه راه حلی ساده برای اون پیدا کرد.
مثل این میماند که بخواهیم یک ساختمان بلند و پیچیده را طراحی کنیم. سادگی در اینجا به معنای استفاده از خطوط تمیز و ساده در طراحی بیرونی ساختمان است، نه اینکه ساختمان را ساده و بدون امکانات بسازیم. در واقع، پیچیدگیهای زیادی در زیرساختهای این ساختمان وجود دارد که برای کاربر پنهان میمانند. سادگی به ما کمک میکند تا این پیچیدگیها را مدیریت کنیم و تجربه کاربری بهتری را برای ساکنان فراهم کنیم.
سادگی در طراحی به معنای کاهش پیچیدگیهای غیرضروری برای بهبود کارایی و قابلیت استفاده محصول است. در واقع، سادگی یک هدف است که با درک عمیق از پیچیدگیهای سیستم و مدیریت مؤثر آنها حاصل میشود. این در حالی است که آسانی ممکن است به معنای سادهسازی بیش از حد مسئله و در نتیجه کاهش قابلیتهای محصول باشد.