راز سادگی در برنامه نویسی

چگونه ابر توسعه دهندگان، ارزش های 10 برابری نسبت به سایرین پدید می آورند؟

آیا میانبری برای تبدیل شدن به یک ابر توسعه دهنده وجود دارد؟ آیا راز جادویی وجود دارد که اگر فقط آن را می دانستید، می توانست دنیای کاملی از تسلط و بهره وری توسعه نرم افزار را به روی شما باز کند؟

ابر توسعه دهنده (ترجمه روان مترجم از واژه 10x Developer به معنای لغوی توسعه دهنده 10 برابر) فردی است که تصور می شود به اندازه 10 نفر دیگر در زمینه خود بازدهی دارد. ابر توسعه دهنده می تواند 10 برابر نتایج سایر همکاران، در یک محیط تولید، مهندسی یا طراحی نرم افزار خروجی داشته باشد. یک ابر توسعه دهنده همچنین به عنوان یک ابر برنامه نویس (10x Programmer) یا ابر مهندس (10x Engineer) شناخته می شود.

اینجا جایی است که کسانی که تردید دارند، فکر می کنند “هیچ میانبری وجود ندارد! همه باید تمرین کنند تا خوب شوند!” و البته این تا حدی صادق است؛ اما متخصصان بهره وری نرم افزار چه چیزی را تمرین می کنند و اینکه آیا نکته اساسی وجود دارد که می تواند تفاوت بزرگی ایجاد کند؟

در جواب باید گفت که بله! وجود دارد!

اما حتی اگر من آن را با شما به اشتراک بگذارم، حتی اگر آن را بدهم و جزئیات آن را برای شما شرح دهم، ممکن است 10 سال طول بکشد تا در آن رشد کرده و ازسادگی‌اش قدردانی کنید.

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



این راز یک تفاوت اساسی بین بهره وری متوسط و بهره وری 10 برابر است. شما می توانید با استفاده از اهرمی که این راز در اختیار شما قرار می دهد، کارایی بیشتری داشته باشید.

شما می توانید کدی بنویسید که قابلیت استفاده مجدد بیشتری داشته باشد و احتمال شکستن آنها با معرفی نیازهای جدید و تغییر اوضاع در کدهای اطراف، کمتر باشد.

راز کارآیی 10 برابری، بدست آوردن تسلط بر انتزاع است. بسیاری از توسعه دهندگان با “انتزاع” مانند یک کلمه کثیف رفتار می کنند. شما توصیه هایی مانند “خیلی زود انتزاعی نکنید” یا ذن معروف پایتون را “صریح بهتر از ضمنی است” می شنوید، دلالت بر اینکه عینی و ملموس بهتر از انتزاعی است. و همه اینها توصیه های خوبی است – بسته به شرایط.

انتزاع یا تجرید یا تجزیه در علوم رایانه به معنای “اطلاعات جزئی را کاهش دادن به‌ طوری که شخص بتواند روی مفاهیم مهم‌تری تمرکز کند” می باشد.

اما برنامه های مدرن از مقدار زیادی کد استفاده می کنند. اگر کد منبع 10 برنامه برتر مدرن را چاپ کنید، دسته کاغذها با ارتفاع آسمان خراش ها رقابت خواهند کرد؛ و نرم افزار هزینه زیادی برای نگهداری آن می پردازد. هرچه کد بیشتری ایجاد کنید، هزینه بیشتری نیز خواهد داشت.

انتزاع کلید رمز سادگی در کدنویسی است

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

سادگی، یعنی از صراحت کم کنید و به معنا بیفزایید.
کتاب قوانین سادگی (جان مائدا – John Maeda)

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

  • تعمیم – حذف قسمت های مکرر (آشکار) و پنهان کردن آنها در پشت انتزاع.
  • تخصص – استفاده از انتزاع برای مورد خاص استفاده، اضافه کردن چیزی که باید متفاوت باشد (معنی دار).

کد زیر را در نظر بگیرید:

در این کد هیچ چیزی اشتباه نیست، اما حاوی جزئیات زیادی است که ممکن است برای این برنامه خاص مهم نباشد.

  • این شامل جزئیات ساختار داده ظرف یا انتقال (آرایه) می باشد، به این معنی که فقط با آرایه ها کار خواهد کرد. این شامل وابستگی به حالت است.
  • این شامل منطق تکرار است، به این معنی که اگر به عملیات دیگری نیاز دارید که باید به عناصر موجود در ساختار داده نیز مراجعه کنید، باید منطق تکرار بسیار مشابه را در آن کد تکرار کنید. این کار تکرار را مجبور به نقض DRY می کند. (Don’t Repeat Yourself – خودتان را تکرار نکنید)
  • این کار شامل یک وظیفه صریح است، نه اینکه بطور کلی، عملی که باید انجام شود را توصیف کند. واضح است.

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

اگر با آگاهی عمیق چیزی را لمس کنید، همه چیز را لمس کرده‌اید.
تیچ نات هان

با استفاده از عملکرد نقشه (map operation)، می توانیم کد را با یک بار حذف کردن کد واضح (قسمت هایی که احتمالاً با کد مشابه آنها را تکرار می کنیم) کاهش دهیم و تمرکز خود را روی معنی (فقط مواردی که برایمان دارای کاربرد متفاوتی است) قرار دهیم. مثلا:

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

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

جرمی اشکناس (Jeremy Ashkenas) چندین عملیات را در JavaScript رایج کرد و راه را برای بسیاری از میانبرهای دستوری عالی که اکنون در جاوا اسکریپت به آنها ارجاع می شود با پیشدستی در استفاده از آنها در CafeScript هموار کرد. او Underscore را خلق کرد که Lodash (که هنوز هم محبوب ترین کتابخانه برنامه نویسی کاربردی JavaScript است) و Backbone را پدید آورد که معماری MVC (کنترل کننده نمای مدل – Model View Controller) را در جاوا اسکریپت محبوب کرد و صحنه را برای Angular و React مهیا کرد.

جان ریزگ (John Resig) کتابخانه jQuery را ساخت، که بسیار محبوب و تأثیرگذار بود؛ او بزرگترین مجموعه ماژول های جاوا اسکریپت قابل استفاده مجدد، محصور شده را تشکیل داد (افزونه های جی کوئری) تا اینکه چندین سال بعد ماژول های استاندارد Node و ماژول های ES6 ظاهر شدند. API انتخاب کننده jQuery آنقدر تأثیرگذار بود که اساس API های انتخاب DOM امروز را تشکیل می دهد. من هنوز هم تقریباً هر روز از API انتخاب jQuery هنگام تست واحد اجزای React استفاده می کنم.

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

شما نمی توانید یک نرم افزار پیچیده و بدون انتزاع بسازید. حتی زبان اسمبلی از انتزاعات استفاده می کند؛ نام هایی برای دستورالعمل ها، متغیرهایی برای آدرس های حافظه، نشانه گذاری های کد برای پرش به زیر روال ها (مانند تماس های عملکردی) و غیره. نرم افزارهای مدرن یک کیک لایه ای از انتزاع های مفید هستند و آن لایه ها به شما قدرت می دهند.

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

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


منبع

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *