Co firma programistyczna może zrobić, aby zmniejszyć swój ślad węglowy
W miarę jak świat staje się bardziej świadomy wpływu zmian klimatycznych, wiele firm podejmuje kroki w celu zmniejszenia swojego śladu węglowego, a firmy programistyczne nie są tu wyjątkiem
Vieolo to przede wszystkim firma programistyczna i jest duża szansa, że ty, czytelnik tego artykułu, również pracujesz w branży oprogramowania.
Postęp w dziedzinie oprogramowania był mieczem obosiecznym dla środowiska. Z jednej strony, branża programistyczna zbiorowo przyniosła niezrównaną efektywność wielu zadaniom i zapobiegła zużyciu bilionów arkuszy papieru. Z drugiej strony, aktywnie pracowaliśmy nad zwiększeniem zużycia danych przez przeciętnego obywatela, co w efekcie spowodowało własne problemy środowiskowe w postaci e-odpadów i zużycia energii.
Niezależnie od ogólnego pozytywnego efektu naszej pracy, musimy uznać, że nasze operacje i produkty mają negatywny wpływ na środowisko, i wszyscy powinniśmy zobowiązać się do zrobienia naszej części, aby zmniejszyć nasz ślad węglowy, choćby niewielki.
Rozumiemy, że nasz ślad węglowy to może być kropla w morzu w porównaniu do innych firm i branż, ale mimo to od początku 2022 roku staraliśmy się przyjąć następujące strategie.
Prewencja zamiast kompensacji
Choć kompensacja zużycia energii poprzez kredyty węglowe lub inne mechanizmy może być ważną częścią naszej ogólnej strategii zrównoważonego rozwoju, redukcja naszego zużycia energii powinna być najwyższym priorytetem.
Istnieją fundamentalne problemy z obecnym podejściem do kompensacji węglowej. Skuteczność kompensacji węglowej zależy od założenia, że projekt kompensacyjny nie zostałby zrealizowany bez inwestycji kompensacyjnej. Jednak trudno to udowodnić, i zdarzyło się wiele przypadków, w których projekty offsetowe wdrożono nawet bez finansowania z offsetu.
Dodatkowo, obecnie nie ma szeroko uznanych kryteriów dla udanego projektu kompensacji węglowej. Skuteczność projektu w dużej mierze zależy od stwierdzeń sprzedawcy i większość firm nie może niezależnie zweryfikować ich skuteczności. W rezultacie wybór projektu kompensacyjnego, w chwili pisania tego tekstu, polega na losowym wyborze projektu i poleganiu na szansie.
W większości przypadków firmy nie dbają o wpływ na środowisko i biorą udział w projekcie kompensacji węglowej albo aby spełnić wymagania regulacyjne albo jako chwyt marketingowy, mimo że takie chwyty marketingowe zazwyczaj nie przynoszą firmom korzyści wizerunkowych.
Chociaż autentyczne programy kompensacyjne mają swoje zalety, powinniśmy skupić się na obniżeniu naszego zużycia energii w pierwszej kolejności, zamiast próbować rekompensować jego szkody później.
Oczywiście, duża część energii, którą zużywamy, dotyczy ogólnych operacji podobnych do każdej innej firmy, takich jak energia wykorzystywana w naszych biurach i transporcie. Tutaj skupiamy się na strategiach oszczędzania energii, które są unikalne dla firm programistycznych.
Języki programowania i narzędzia
Uruchamianie fragmentu kodu wymaga energii i istnieje duża szansa, że energia, którą zużywa twój kod, pochodzi z paliw kopalnych. Energia, którą zużywa nasz kod, jest głównie wydatkowana na moc obliczeniową (CPU, GPU itp.) i RAM. Poprzez obniżenie zużycia CPU i pamięci, możemy bezpiecznie założyć, że zużywamy mniejszą ilość energii.
Ilość energii, którą zużywa nasz kod, jest w dużej mierze zależna od języka programowania, którego używamy. Ogólnie rzecz biorąc, języki interpretowane (które polegają na środowisku uruchomieniowym) i te z kolektorem śmieci zużywają więcej pamięci RAM i CPU w porównaniu do tych, które są kompilowane i nie mają kolektora śmieci odpowiednio.
Na przykład, prosty program w Pythonie zużywa dużo więcej CPU i pamięci RAM niż podobny program napisany w C, ponieważ program w Pythonie musi uruchomić i używać interpretera Pythona, podczas gdy program w C nie ma takiego narzutu.
Chociaż możemy bezpiecznie założyć, że języki takie jak C czy Rust są bardziej energooszczędne niż języki takie jak Javascript i Python, ilościowe określenie tej efektywności energetycznej jest dość trudne. Najbardziej wiarygodnym źródłem informacji jest pojedyncze badanie przeprowadzone przez naukowców z Uniwersytetu Minho w Portugalii. To badanie twierdzi, że na przykład Javascript i Python zużywają około 4 i 75 razy więcej energii w porównaniu do C i Rust odpowiednio.
Chociaż możemy dyskutować o dokładności tego pomiaru, ogólna teoria była wielokrotnie potwierdzana, zarówno w małych, jak i dużych setupach. Na przykład, Discord przepisuje jedną ze swoich usług, wcześniej napisaną w Go, używając Rusta. Chociaż Go jest już wydajnym językiem, implementacja w Rust udało się pobić implementację w Go w każdej metryce, jednocześnie obniżając zużycie pamięci i CPU.
Używanie języków programowania i narzędzi, które nie polegają na interpreterach i środowiskach uruchomieniowych, jest jednym z najbardziej niezawodnych sposobów zmniejszenia zużycia energii, które mamy w przemyśle oprogramowania.
W małej skali różnica w zużyciu energii między najbardziej a najmniej efektywnymi językami jest znikoma. Różnica energii między małym programem w Pythonie i w Rust działającym na twoim lokalnym komputerze jest tak mała, że prawdopodobnie nie można jej nawet zmierzyć.
Jednak bez względu na znikomą różnicę w małej skali, deweloperzy polegają na kodzie już napisanym przez innych, podczas gdy kod, który piszą, może stać się podstawą i długiem technicznym dla przyszłych projektów. Na przykład, w 1995 roku Brendan Eich stworzył Javascript dla Netspace 2, rzekomo w ciągu 10 dni, aby umożliwić wykonywanie podstawowych funkcjonalności na stronach internetowych. Na dzień 2023, Javascript stał się najczęściej wykorzystywanym językiem programowania. Nawet jeśli szanse są bardzo małe, projekt, nad którym obecnie pracujesz, może zostać uruchomiony na milionach urządzeń.
Używając konkretnego języka programowania, aktywnie uczestniczymy w rozwoju i tworzeniu jego ekosystemu i długu technicznego. Poprzez świadomy wybór bardziej efektywnych i wydajnych języków, które mogą być poza naszym komfortem, możemy zapewnić mniejszy ślad węglowy naszego kodu w przyszłości.
Nie oznacza to jednak, że wszyscy powinniśmy porzucić Pythona, Rubyego i Javascript i zacząć pisać kod w Rust lub C. Każde z tych narzędzi zostało stworzone z określonego powodu i ma swoje zastosowania.
Poza energią wykorzystywaną przez końcową aplikację, my deweloperzy również zużywamy niemałą ilość energii podczas tworzenia wspomnianej aplikacji. W dużych aplikacjach, energia wykorzystana w cyklu rozwoju jest prawdopodobnie nieistotna w porównaniu do energii używanej do uruchomienia aplikacji. Ale w niektórych przypadkach, energia, którą zużywasz, pisząc i debugując bardziej złożony język, taki jak Rust, może być tak wysoka, że lepiej byłoby użyć Pythona na początku.
Również z powodu istniejących fundamentów i baz kodu, jesteś zmuszony używać określonego języka w określonych sytuacjach. Jeśli tworzysz stronę internetową, MUSISZ użyć Javascript, ponieważ jest to główny język, który obsługują przeglądarki. Nawet jeśli używasz innego języka programowania, twój kod zostanie najpierw transpilewd do Javascript. Możesz używać języków takich jak C czy Rust na stronie za pomocą Web Assembly, ale chyba że masz konkretny przypadek użycia, lepiej skorzystać z Javascript.
Wybór wydajnego sprzętu
Choć branża programistyczna często ma ograniczony wpływ na kierunek rozwoju sprzętu, mamy więcej mocy w naszych rękach, niż myślimy.
Chociaż jesteśmy zależni od dostawców sprzętu, aby uruchamiać nasz kod, sukces komercyjny produktu sprzętowego w dużej mierze zależy od dostępnego oprogramowania, które może uruchomić. Bez względu na to, jak dobry jest kawałek sprzętu, jest całkowicie bezużyteczny, jeśli nie ma kompatybilnego oprogramowania wysokiej jakości. Więc kiedy zdecydujemy się poświęcić nasz czas i energię na pisanie oprogramowania kompatybilnego z danym sprzętem, przyczyniamy się do jego sukcesu finansowego i trwałości projektu.
Jeśli mamy możliwość wyboru (i wdrożenia) sprzętu niezbędnego do uruchomienia naszego kodu, powinniśmy podjąć wysiłek, aby wybrać najbardziej energooszczędne produkty.
Na przykład, procesory ARM są bardziej energooszczędne niż ich odpowiedniki x86. Badanie dwa przez brazylijskich naukowców stwierdza, że ARM-based SOCs (System on Chip), gdy są używane jako serwery HTTP i SQL, są 3 do 4 razy bardziej energooszczędne niż systemy x86. Wybierając pisanie oprogramowania dla i wspieranie ARM-based SOCs zamiast x86, przyczyniamy się do sukcesu finansowego i dalszego rozwoju bardziej wydajnego sprzętu.
Używaj AI, gdy jest to naprawdę potrzebne
Postępy w zakresie sztucznej inteligencji to jedne z największych osiągnięć współczesnej inżynierii, rozwiązujących unikalne problemy, które konwencjonalne architektury nie mogą rozwiązać.
Aby stworzyć model AI, musimy przeanalizować, przygotować i przetworzyć ogromny zbiór danych. Model AI wykorzysta analizę zbioru danych do wykonania określonego zadania, gdy otrzyma nowy kawałek danych, którego wcześniej nie widział. Proces ten znany jest jako trenowanie.
Trenowanie modelu AI to bardzo energochłonny proces. Według badań Uniwersytetu Massachusetts Amherst, trenowanie jednego modelu AI może emitować tyle węgla, co produkcja i użytkowanie pięciu samochodów w ciągu ich życia.
Dlatego przed podjęciem decyzji o trenowaniu nowego modelu AI, musimy zadać sobie dwa pytania. Jeśli odpowiedź na oba te pytania brzmi "nie", tylko wtedy powinniśmy rozpocząć proces trenowania własnego modelu AI.
Czy problem, który mamy do rozwiązania, można efektywnie rozwiązać za pomocą konwencjonalnego oprogramowania? Jeśli tak, powinniśmy trzymać się konwencjonalnego oprogramowania. Konwencjonalne rozwiązanie jest niemal zawsze bardziej energooszczędne niż model AI, a nawet jeśli rozwiązanie jest mniej wydajne niż wytrenowany model AI, rozwiązanie może nigdy nie być używane na tyle, aby przekroczyć zużycie energii podczas treningu.
Czy problem można rozwiązać skutecznie za pomocą wytrenowanego modelu AI? Jeśli tak, powinniśmy użyć wytrenowanego modelu. Na przestrzeni lat wiele deweloperów trenowało różne modele AI, które rozwiązują typowe problemy do zadowalającego poziomu. Używanie wytrenowanego modelu zaoszczędzi ogromną ilość energii potrzebnej do trenowania modelu od zera.
Zużycie energii w procesie treningu jest jednym z ważnych wyzwań, z którymi branża technologiczna, w tym my, będzie musiała się zmierzyć w nadchodzących latach.
Mądrzejszy proces rozwoju produktu
My, deweloperzy, jesteśmy równie mocno podatni na modę na nowe technologie, jak każda inna grupa ludzi. Z drugiej strony wszyscy piszemy oprogramowanie, które mamy nadzieję, że będzie używane przez dużą liczbę osób, z powodów ekonomicznych lub osobistych.
Na przestrzeni lat branża oprogramowania starała się włączyć lub zintegrować niektóre z trendowych technologii w produktach, które rozwijają. W pewnym momencie wszystko miało element blockchain lub starało się być zdecentralizowane. W innym momencie wszystko było pisane w Javascript. Obecnie wszystko ma generatywne AI lub jest "AI-powered", nawet jeśli dodanie AI może być całkowicie bezsensowne. W wielu przypadkach dodanie tych modnych funkcji nie przekłada się na sukces czy trwałość projektu. W rzeczywistości efekt może być odwrotny.
Porażka i opóźnienie jakiegokolwiek projektu oznacza, że cała energia i zanieczyszczenia powstałe przy tworzeniu produktu poszły na marne, a problemy, które próbowano rozwiązać, pozostaną nierozwiązane. Mając bardziej sensowny rozwój produktu, zamiast forsowanie modnych elementów w celu uzyskania krótkoterminowego szumu, zwiększamy żywotność naszych produktów, a w dłuższej perspektywie przyczyniamy się do redukcji naszego śladu węglowego.
Twoje interesy są zgodne z interesami środowiska
Poza oczywistymi korzyściami wynikającymi ze zmniejszenia naszego śladu węglowego, w zasadzie to leży w naszym własnym interesie, aby to zrobić. Większość z wymienionych powyżej rzeczy także pozwala nam zaoszczędzić pieniądze i/lub poprawić nasze produkty.
Zmniejszenie zużycia pamięci i CPU naszej aplikacji pozwala nam uruchamiać nasz kod przy użyciu tańszego sprzętu lub infrastruktury chmurowej. Posiadanie bardziej energooszczędnego systemu zmniejsza nasze rachunki za energię. Skupienie się na podstawowych funkcjonalnościach naszych produktów, zamiast próbować włączać niepotrzebne technologie, obniża koszty rozwoju naszych produktów i pomaga w jego długoterminowym sukcesie.
Wdrożenie niektórych z tych pomysłów jest łatwiejsze w słowie niż w działaniu, ale my, w przemyśle programistycznym, musimy zrobić swoje, aby zapobiegać i łagodzić nasz negatywny wpływ na środowisko i klimat.