کدنویسی خوب و شفاف
از دیدگاه طراحان، کد خوب چه ویژگی‌هایی دارد؟
چه چیزی باعث به وجود آمدن سورس کدهای خوب نرم‌افزاری می‌شود؟ آیا کدی که از یک منطق هوشمند، یک الگوریتم، کمترین خطوط موردنیاز برای برنامه‌نویسی یا از یک قالب‌بندی مناسب استفاده می‌کند؟ طراحان نرم‌افزار جواب‌های مختلفی به این سؤال داده‌اند. در نظرسنجی که به تازگی انجام شده است نشان می‌دهد، یکی از معیارهای خوب بودن یک کد ساده بودن آن است و ویژگی‌های دیگری همچون خوانایی و قابل فهم بودن در مکان‌‌های بعدی قرار دارند. نتیجه این نظرسنجی که توسط سازمان IntentHQ مستقر در انگلستان انجام گرفته و تمرکزش روی شرکت‌کنندگان دارای مهارت و تخصص است، به تازگی منتشر شده است.

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

1. کدنویسی خوب، خیلی ارزان‌ بوده و در زمان نوشتن جذابیت بیشتری نسبت به کدنویسی بد دارد.

2. اگر در زمان ساخت یک برنامه، کدها به خوبی نوشته شوند، شانس‌ بیشتری برای فروش محصولی که ساخته خواهد شد وجود دارد.

3. سومین و شاید مهمترین دلیل کدنویسی خوب، هدفی است که ما به دنبال آن هستیم.

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

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

متدولوژی

آلبرت پاسترانا؛ مدیرعامل Intent HQ گفت‌وگویی با تعدادی از طراحان در این زمینه انجام داده است. به عنوان بخشی از فرآیند مصاحبه او از همه طراحان شرکت‌کننده در این مصاحبه یک سوال مشترک پرسیده است: "احساس و تعریف شما از یک کد خوب چیست؟" یا "یک کد خوب را چگونه تعریف می‌کنید؟"

 این سوال در خلال ژانویه 2014 تا ژانویه 2015 از طریق تماس تلفنی یا پرسشنامه از طراحان پرسیده شده بود. از مجموع جواب‌های به دست آمده از شرکت‌کنندگان، 65 نمونه از این جواب‌ها برگزیده شدند. البته جواب‌هایی مورد توجه قرار گرفتند که از طراحان با سابقه که حداقل 5 سال تجربه و مهارت در به کارگیری جاوا یا اسکالا داشتند، گرفته شد. ( Scala یک زبان برنامه‌نویسی شی‌گرای تابعی است  که برای طراحی نرم‌افزارها مورد استفاده قرار می‌گیرد. این زبان برای ساخت برنامه‌هایی مقیاس‌پذیر به روش سریع و چابک مورد استفاده قرار می‌گیرد. )

جواب‌ها در 31 گروه مختلف تفکیک و دسته‌بندی شدند. مابقی جواب‌ها چندان مطرح و مهم نبودند. اما اصلی‌ترین محوری که شرکت‌کنندگان در این مصاحبه بر آن اتفاق نظر داشتند حول محور خوانا بودن کدها قرار داشت. جواب‌هایی که با محوریت خوانا بودن از شرکت‌کنندگان به دست آمد؛ عبارت بودند از:

خوانا بودن

قابل فهم بودن برای انسان

خودتوضیح بودن

مردم بتوانند آن‌را بخوانند

فهم آن‌ها ساده باشد

در کمتر از 5 دقیقه قابل فهم باشند

بتوانید آن‌را بخوانید، آن‌را درک کنید، بدون آن‌که نیازی به مستندات باشد

قابلیت فهم آسان، به طوری‌که طراحان جدید به آسانی آن‌را متوجه شوند

به آسانی قابل فهم باشند حتی اگر یک متن ساده باشند

خواندن آن ساده باشد.

به اندازه کافی مستقیم و سرراست باشد

نتایج به دست آمده

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

78 درصد بر خوانا بودن کدها تأکید داشتند، به طوری که این گزینه هم در گروه خود و هم در مجموع کل دسته‌بندی‌ها بیشترین امتیاز را به خود اختصاص داد.

29.23 درصد به قابلیت تست‌پذیری اشاره کردند. یک کد خوب باید ویژگی تست خودکار را پوشش داده یا حداقل پیاده‌سازی این ویژگی روی آن امکان‌پذیر باشد.

24.62 درصد طراحان کدی را خوب می‌دانستند که به درستی و مطابق با انتظارات کار کرده و  به دور از پیچیدگی باشد.

21.54 درصد قابلیت نگهداری را کلیدی اصلی یک کد خوب توصیف کردند.

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

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

نکته جالب توجه در این فهرست وجود دو نقطه نظر یکسان در بیشتر گروه‌ها بود. به طوری که اکثر طراحان وجود مستندات و درج کامنت‌ برای کدها را ضروری می‌دانستند. به عقیده تعدادی از طراحان کدها باید ویژگی خودتعریفی داشته و نیازی به تشریح این که اکنون چه اتفاقی در یک بلوک از کدها رخ داده وجود نداشته باشد، در حالی‌که عده دیگری بر این باور بودند که وجود  نظرات (comments) در کنار کدها نه تنها برای نشان دادن توابع مهم، ضروری است؛ بلکه نشان می‌دهد شما در کدهای خود چه کرده‌اید.

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

قابلیت نگهداری

میزان تأثیرگذاری و بازدهی برای اعمال تغییرات در یک محصول نرم‌افزاری را قابلیت نگهداری گویند. شاید به اعتقاد برخی از طراحان کدی که قابل خواندن باشد در نتیجه قابل نگهداری هم خواهد بود.

قابلیت کار کردن

نوشتن یک کد همیشه باید یک هدف داشته باشد، برآورده ساختن نیازهایی که مخاطب به دنبال آن است. نوشتن کدی که به درستی کار کند. ( به عبارت دیگر برآورده ساختن نیازهای مشتری یکی از اصلی‌ترین اصولی است که در متدولوژی‌های نرم‌افزار مورد توجه است. بسته به نوع متدولوژی مورد استفاده در یک شرکت نرم‌افزاری میزان مشارکت و تعامل کاربران نهایی با تیم‌های کاری متغیر است.)

قابلیت تست پذیر بودن

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

مؤثر بودن

عجیب است بعد از گذشت 40 سال از جمله معروف Donald Knuth که گفت: « ما باید بازدهی کوچک را فراموش کنیم، نزدیک به 97 درصد مواقع، بهینه‌سازی زودرس ریشه همه مشکلات است. » عده‌ای از طراحان بر اهمیت نوشتن کدهای مؤثر تأکید داشتند، در حالی که عده دیگری بهینه‌سازی زودرس را ریشه همه مشکلات می‌دانستند.

یک تعریف واحد

سرانجام، اگر بخواهیم یک تعریف واحد از یک کد خوب داشته باشیم. ابتدا باید ابعاد و دامنه این موضوع را مشخص کنیم. با توجه به جواب‌های به دست‌آمده و از میانگین 4.46  که از این جواب‌ها به دست آمد، تیم پرسشگران تصمیم گرفتند 5 عنصر؛ خوانا، آزمایش‌پذیر/آزمایش شده، کاری، ساده و قابل نگهداری بودن را به عنوان شاخص‌های اصلی تعریف خود در نظر گرفته و از ترکیب این شاخص‌ها یک کد خوب را این گونه تعریف کنند:

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

 

برچسب: