نیازهای توسعه نرم افزار مدرن به این معنی است که از برنامه نویسان خواسته می شود تا کد بیشتری بنویسند و عملکردهای جدید را سریعتر از همیشه ارائه دهند. ضرب المثل “اختراع مجدد چرخ” به بسیاری از آنها میانبرهایی برای ارائه سریع و در بیشتر موارد قابل اعتماد ارائه کرده است.
به جای نوشتن چیزی از ابتدا، توسعهدهنده نرمافزار باید چیزی مناسب را در یک کتابخانه برنامهنویسی یا مخزن کد منبع پیدا کند. این روزها توسعه دهندگان این فرصت را نیز دارند تا از قدرت موجود در میکروسرویس ها استفاده کنند.
میکروسرویس ها به شدت در حال تغییر هستند رابطه بین توسعهدهنده نرمافزار و کد مورد نیاز برای دستیابی به عملکرد مورد نظر، همانطور که Shaun O’Meara، مدیر ارشد فناوری Mirantis توضیح میدهد: «در گذشته، شما معمولاً یک توسعهدهنده یا یک تیم کوچک از توسعهدهندگان داشتید که هر جزء از برنامه را توسعه میدادند. سیستم، زیرا هر کدام توافق می کنند که روی اجزای مختلف کار کنند.
او میگوید که تیم مجبور بود همه چیز را از ابتدا بسازد، اما وقتی کتابخانههای نرمافزاری در دسترس قرار گرفتند، توسعهدهنده توانست از قابلیتهای از پیش ساخته شده استفاده کند. تغییر بزرگ در میکروسرویسها این است که ذهنیت توسعهدهندگان نرمافزار تغییر کرده است – آنها اکنون میتوانند کارهای توسعهیافته توسط افراد دیگر را مصرف کنند و میتوانند با انجام این کار به دستاوردهای بهرهوری عظیمی دست یابند.
او میگوید تأثیر آن این است که کدهایی که از میکروسرویسها استفاده میکنند، نسبت به کدهایی که به روش سنتیتر توسعه یافتهاند، میزان بیشتری از زیرساخت فناوری اطلاعات را مصرف میکنند.
افزایش ناکارآمدی کدگذاری
ناکارآمدی در حال حاضر در توسعه نرم افزار رایج است. اندی پاول، مدیر ارشد فناوری در دانشگاه کانتربری کریست چرچ، می گوید: «ابزارهای مدرن مردم را تنبل کرده اند. زمانی که داشتم وبسایتها را مینوشتم – این قبل از Net و در ASP کلاسیک بود [active server pages] – شما باید همه اشیاء خود را بنویسید.
هنگامی که مردم از طریق اتصال مودم با پهنای باند کم از وب سایت ها بازدید می کردند، او می گوید: «شما باید از اندازه تصویر، شیوه نامه و اندازه صفحه آگاه باشید. شما باید از مقدار داده ای که به لوله ارسال می کنید آگاه باشید زیرا زمان بارگذاری مهم بود.
برای پاول، از منظر توسعه اپلیکیشن، این بدان معناست که توسعه دهندگان کارایی کد را در نظر می گیرند. شما باید با لایه پایگاه داده و API خود واقعاً کارآمد باشید [application programming interface] لایه،” او می گوید.
پرس و جوهای سیستم های تراکنشی به گونه ای نوشته شده بود که حداقل مجموعه داده های قابل دوام را برمی گرداند، در حالی که اکنون او می گوید: “شما 100000 رکورد یا تاپل دریافت می کنید و می روید و هر چیزی را که می خواهید از آن انتخاب می کنید. [dataset] در حافظه چون حافظه بسیار ارزان شده است.
مقابله با نفخ کد
امروزه، توسعه دهندگان پهنای باند را به عنوان یک منبع و قدرت پردازش تقریبا نامحدود در نظر می گیرند و حافظه و ذخیره سازی ارزان و فراوان هستند. این منجر به شکاف کد شده است، جایی که توسعهدهندگان دیگر بر روی نوشتن نرمافزاری تمرکز نمیکنند که تا حد امکان کارآمد باشد و از کوچکترین فضای ذخیرهسازی، حافظه و قدرت پردازش استفاده کند.
Mav Turner، مدیر ارشد محصول و استراتژی در Tricentis، اشاره می کند که bloat کد معمولاً از چندین منبع ناشی می شود، مانند نحو بیش از حد پرمخاطب، توابع اضافی یا استفاده نشده و عدم بهینه سازی در طول توسعه. او همچنین میگوید که پایگاههای کد قدیمی میتوانند بدهیهای فنی را در طول زمان انباشته کنند، که منجر به پیادهسازیهای متورم و پیچیده میشود.
با این حال، همانطور که ترنر توضیح می دهد، “با اتخاذ شیوه های کدنویسی تمیز، اصول طراحی مدولار، و بازسازی منظم، توسعه دهندگان می توانند نفخ کد را کاهش دهند و پایه های کد ساده تر و قابل مدیریت تر را حفظ کنند.”
رهبران فناوری اطلاعات باید عوامل و مشوق هایی را در نظر بگیرند که باعث می شود توسعه دهندگان کد با کارایی کمتری بنویسند. “هیچ کس قصد ندارد این کد متورم شود. او می گوید: «توسعه دهندگان در صدد تخریب محیط زیست نیستند موریس کالینوفسکی، مدیر تولید Qt.
با این حال، همانطور که کالینوفسکی اشاره می کند، عوامل زیادی وجود دارد که باعث ناکارآمدی ناخواسته می شود. به عنوان مثال، او میگوید: «اغلب نمونههای اولیه به دلیل فشارهای زمانی که چرخههای تحویل کوتاه را به تیمهای توسعه تحمیل میکند، به محصول ختم میشوند. این منجر به بدهی فنی بعداً در چرخه عمر توسعه می شود که به نوبه خود اثرات جانبی آسیب رساندن به کارایی را دارد.
به گفته کالینوفسکی، در نظر گرفتن دامنه برنامه و استفاده از کد در حال توسعه بسیار مهم است. “اگر در حال توسعه کد “هدف عمومی” هستید، آیا ورودی نیاز به اعتبار سنجی معنایی دارد؟ آیا این کد همه سناریوهای بالقوه، از جمله سناریوهایی که ممکن است هرگز اتفاق نیفتند را پوشش دهد؟
حتی کدهای بسیار کارآمد را می توان در معرض موارد استفاده اضافی قرار داد که نیاز به اعتبارسنجی و پردازش متفاوتی دارند. کالینوفسکی هشدار می دهد که این منجر به موارد بیشتر و بیشتری می شود که کد برای پشتیبانی از این استثناها نوشته می شود. با انباشته شدن این کدها، کد به نقطه ای می رسد که ممکن است مزایای عملکردی که در ابتدا برای آن طراحی شده بود از بین رفته باشد.
کالینوفسکی میگوید رهبران فناوری اطلاعات باید آن بخشهایی از کد را که متورم شدهاند، بازسازی کنند. “البته، ابتدا باید بدانید که کدام یک از پروژه های شما در وهله اول متورم هستند. اینجاست که بسیاری از ابزارهای توسعهدهنده مانند تجزیه و تحلیل کد استاتیک و پویا، پروفایلسازی و نمونهبرداری پیشرفته وارد عمل میشوند.»
تست ناکارآمدی ها
ترنر تریسنتیس از تصمیم گیرندگان فناوری اطلاعات می خواهد که از این موضوع استقبال کنند توسعه آزمایش محور (TDD) به عنوان یک روش IT پایدار. در تجربه خود، TDD تکنیک قدرتمندی را ارائه می دهد که می تواند به طور قابل توجهی به ایجاد کد سبز با کیفیت و کارایی بالاتر کمک کند.
ترنر میگوید: «TDD با تأکید بر ایجاد آزمایشها قبل از نوشتن کد، اطمینان میدهد که توسعهدهندگان درک روشنی از رفتار و عملکرد مورد انتظار کدشان از ابتدا دارند».
ود سن، رئیس نوآوری در TCS انگلستان و ایرلند، با نگاهی به آزمایش در طول توسعه برنامه، میگوید رهبران فناوری اطلاعات نیز باید تأثیر آزمایش رگرسیون را بر محیط زیست در نظر بگیرند.
او میگوید: «وقتی تست رگرسیون انجام میدهید، در نهایت بسیاری از چیزها را بارها و بارها آزمایش میکنید تا ببینید آیا برنامه خراب میشود یا خیر. اما هر بار که تست رگرسیون را انجام می دهید، منابع بیشتری مصرف می کنید و هر کدام کمی ردپای کربن ایجاد می کنند.
به گفته Sen، باید امکان ساخت روشهای هوشمندانهتری برای آزمایش وجود داشته باشد تا توسعهدهندگان مجبور نباشند بارها و بارها یک مورد مشابه را آزمایش کنند.
سن اشاره میکند که اگر توسعهدهندگان نرمافزار از انجام آزمایشهای بیرحمانه اجتناب کنند، میتوانند ردپای محیط فناوری اطلاعات را برای آزمایش و توسعه به میزان کم اما قابل توجهی کاهش دهند، که در مجموع برابر با تأثیر بیشتر بر سبزتر کردن فناوری اطلاعات و مصرف کمتر کربن است.
فراتر از کدنویسی، رهبران فناوری اطلاعات می توانند تأثیر کلی محیطی محیط توسعه و آزمایش نرم افزار مورد نیاز توسعه دهندگان خود را نیز در نظر بگیرند.
صحبت کردن در KubeCon + CloudNativeCon در پاریس در ماه مارس، Gualter Barbas Baptista، مشاور اصلی ایجاد پلت فرم و استراتژی در Deutsche Bahn، در مورد تلاشهای مداوم اپراتور راهآهن برای نظارت و به حداقل رساندن اثرات زیستمحیطی برنامههای مبتنی بر ابر خود بحث کرد. Baptista در مورد توانمندسازی توسعه دهندگان صحبت کرد و توسعه دهندگان نرم افزار را به عنوان “به طور مؤثر افرادی که تصمیمات روزانه را در مورد آنچه در نرم افزار می رود، می گیرند” توصیف کرد.
او میگوید: «اگر توسعهدهندگان را درگیر نکنیم و ابزارها را در اختیار آنها قرار ندهیم، نمیتوانیم تفاوتی در نحوه توسعه کد و مدیریت زیرساختها ایجاد کنیم.
در چند سال گذشته، دویچه بان بر گردآوری کل شرکت های تابعه برای اجرای استانداردسازی تمرکز کرده است. او می گوید این به این معنی است که “ما می توانیم از اثرات استفاده کنیم و سطح بالاتری از استانداردسازی را ارائه دهیم.”
Kubernetes ابزار ساخت پلتفرم مورد استفاده در Deutsche Bahn است. مانیتورینگ به مدیران فناوری اطلاعات اجازه میدهد تا میزان استفاده از CPU را ببینند و با بهینهسازی آنها برای نیازهای بار کاری، حجم کاری کانتینر را بهطور خودکار تنظیم کنند.
این برنامه همچنین برای کمک به دویچه بان استفاده میشود تا اطمینان حاصل کند که محیطهای توسعه و آزمایش را میتوان در زمانی که توسعهدهندگان کار نمیکنند به حالت خواب درآورد و در توان پردازش صرفهجویی کرد.
هوش مصنوعی محوطه سازی
چشم انداز فناوری اطلاعات به طور مداوم در حال تغییر است، به این معنی که انعطاف پذیری فناوری اطلاعات یک هدف متحرک است. در یک بحث پانل در رویداد KubeCon + CloudNativeCon، چاک دوبوک، رئیس بازاریابی مستقیم محصول برای OpenShift در RedHat، هشدار داد که هوش مصنوعی (AI) Kubernetes را به جایی می برد که قبلا نبوده است.
او گفت: “وقتی هوش مصنوعی را به یک برنامه اضافه می کنید، مصرف انرژی را 10 برابر افزایش می دهید.”
نگاهی به رویکردهایی برای سبزتر کردن هوش مصنوعی، الیور کینگ اسمیت، مدیر عامل SmartR AIمیگوید محققان در حال توسعه روشهای کارآمد برای ایجاد و استفاده از هوش مصنوعی هستند، مانند استفاده مجدد از مدل، ReLora، مدلهای ترکیبی کارشناسان (MoE) و کوانتیزهسازی.
کینگ اسمیت در بحث استفاده مجدد از مدل میگوید این تکنیک شامل آموزش مجدد مدلی است که قبلاً آموزش دیده برای هدفی جدید، صرفهجویی در زمان و انرژی در مقایسه با آموزش از ابتدا. او میگوید: «این رویکرد نه تنها باعث صرفهجویی در منابع میشود، بلکه اغلب منجر به مدلهای کارآمدتر میشود». متا و میسترال هر دو در عرضه مدل های قابل استفاده مجدد کار خوبی انجام داده اند.
با نگاهی به ReLora و Lora، King-Smith می گوید که آنها برای کاهش تعداد محاسبات مورد نیاز هنگام آموزش مجدد مدل ها برای استفاده های جدید طراحی شده اند. این باعث صرفه جویی در مصرف انرژی می شود و امکان استفاده از کامپیوترهای کوچکتر و کم مصرف را فراهم می کند. او میگوید: «این بدان معناست که به جای تکیه بر سیستمهای بزرگ و پرقدرت مانند DGX انویدیا، یک کارت گرافیک متوسط اغلب برای آموزش مجدد کافی است.
مدلهای MoE، مانند مدلهایی که اخیرا توسط Mistral منتشر شدهاند، پارامترهای کمتری نسبت به مدلهای معمولی دارند. کینگ اسمیت می گوید که این باعث محاسبات کمتر و کاهش مصرف برق می شود. مدلهای MoE تنها واحدهای مورد نیاز را در هنگام استفاده فعال میکنند، مشابه خاموش کردن چراغها در اتاقهای بلااستفاده، که منجر به کاهش 65 درصدی مصرف انرژی میشود.
کینگ اسمیت کوانتیزاسیون را تکنیکی توصیف می کند که اندازه مدل های هوش مصنوعی را کاهش می دهد. “با کمی کردن یک الگو، تعداد بیت های مورد نیاز برای نمایش هر پارامتر کاهش می یابد. این امر اندازه مدل را کاهش میدهد و امکان استفاده از سختافزار کمقدرتتر و کارآمدتر انرژی را میدهد.»
اگرچه کوانتیزاسیون ممکن است تأثیر کمی بر دقت مدل داشته باشد، کینگ اسمیت استدلال می کند که برای بسیاری از کاربردهای عملی این مبادله قابل توجه نیست.
پرداختن به نفخ کد و سطوح غیر ضروری تست رگرسیون به سبزتر شدن کدنویسی کمک می کند. همچنین گزینه هایی برای استفاده از میکروسرویس ها یا الگوریتم های کارآمدتر وجود دارد. اما اتفاق نظر کلی در بین کارشناسان صنعت این است که تغییر چیزی که توسعه دهندگان نرم افزار به آن عادت دارند بسیار دشوار است.
O’Meara از Mirantis فرصتی برای پرداختن به فناوری اطلاعات سبز در توسعه نرم افزار از دیدگاه زیرساخت فناوری اطلاعات می بیند. او میگوید: «اگر بتوانیم پیچیدگی را حذف کنیم و فقط اجزای زیرساخت فناوری اطلاعات مورد نیاز را ارائه دهیم، میتوانیم یک لایه نازک در سراسر زیرساخت فناوری اطلاعات ایجاد کنیم.
Kubernetes همچنین می تواند مورد استفاده قرار گیرد تا اطمینان حاصل شود که محیط های توسعه و آزمایش نرم افزار از منابع IT بی جهت استفاده نمی کنند.
چنین تکنیکهایی به زیرساختهای فناوری اطلاعات اجازه میدهند تا سبک وزن و انرژی کارآمد باشند. همانطور که Kalinowski از Qt اشاره می کند، می توان از یک تکنیک مشابه در کدنویسی برای کاهش تعداد سناریوهای استثنایی مختلف که کد توسعه باید مدیریت کند استفاده کرد.