Co Jest Ważne Przy Rozwoju Oprogramowania

Link: https://blog.ometer.com/2012/08/13/what-matters-in-software-development/

Dużo ruchu na Twitterze na temat postu Steve’a Yegge definiującego widmo „ideologii oprogramowania”. Myles Recny przeprowadził ankietę, aby pomóc Ci znaleźć się w tym spektrum.

Zastanawiając się nad tym w weekend, nie mogę zidentyfikować się z tym ramowym rozwojem oprogramowania. Te pytania ankietowe nie wydają się obejmować tego, co myślę o większości w mojej własnej pracy z oprogramowaniem; w rzeczywistości byłbym trochę zaniepokojony, gdy zobaczyłem kolegów skupionych na niektórych z nich.

Oto, co należy myśleć o tym, że można nazwać ideologią.

Widok ideologiczny 1: Ryzyko = pogorszenie się w średniej

Niezależnie od tego, czy mówimy o diecie, finansach czy oprogramowaniu, przepływy mają większe znaczenie niż zapasy .

Ryzyko, o które się martwię, to: czy dodajesz błędy szybciej niż naprawiasz je? Czy twój techniczny dług rośnie? Czy ten kod jest coraz gorszy?

Jeśli średni kierunek jest „gorszy”, prędzej czy później twój kod będzie niezrozumiałą, beznadziejną katastrofą, której nikt nie będzie chciał dotknąć. Ryzykiem jest zejście w niekończący się chaos, w którym wszyscy zaangażowani nienawidzą swojego życia, a oprogramowanie przestaje działać. Byłem tam w marszu śmierci.

Błędy a funkcje: pytanie kontekstowe!

W poście Steve’a mówi, że konserwatyści koncentrują się na bezpieczeństwie (błędy w produkcji), podczas gdy liberałowie koncentrują się na funkcjach. Nie mam ideologicznego poglądu na „błędy w ryzyku produkcyjnym”; to jest kontekstowe.

Na przykład: Red Hat utrzymuje zarówno Fedorę, jak i Enterprise Linux, dwie gałęzie tego samego projektu oprogramowania, w większości z tym samym zespołem, ale z odrębnymi profilami ryzyka „błędów w produkcji” i odrębnymi procesami do dopasowania. Red Hat używa tego samego kodu i tych samych ludzi do wspierania różnych kompromisów w różnych kontekstach. Może to firma post-partyzancka?

Gdybym pracował nad oprogramowaniem dla łazika marsjańskiego, usilnie sprzeciwiałbym się ciągłemu wdrażaniu . (Może powinniśmy przetestować tę aktualizację oprogramowania, zanim wypchniemy ją na Marsa?) Gdybym pracował nad I Can Has Cheezburger , błędy w produkcji nie przeszkadzałyby mi zbyt wiele, więc chętnie utrzymam ten proces lekki.

Ale w obu przypadkach nie chcę, aby kod stawał się coraz gorszy, ponieważ w obu przypadkach chciałbym utrzymać ten kod przy życiu przez lata. Taka jest ideologia, która pozostaje stała.

Projekt, który średnio się pogarsza, nie zapewni ani bezpieczeństwa, ani funkcji. Zdrowy projekt może mieć oba (choć nie w tym samym strumieniu wydania).

Jak uniknąć pogorszenia

Aby uniknąć ryzyka stałego pogarszania się , za każdym razem pojawia się kilka problemów.

Widok ideologiczny 2: Jasność i prostota są dobre

Czy zespół może to zrozumieć?

Jest to relacja do zespołu. Jeśli twój zespół nie zna języka XYZ, nie możesz pisać kodu w tym języku. Jeśli twój API jest przeznaczony dla głównych programistów, nie może być pełen niszowego żargonu. Jeśli twój zespół nie mówi po niemiecku, nie możesz pisać komentarzy po niemiecku. Itp.

Deweloperzy oprogramowania uczą się osądzać o złożoności i nad-inżynierii. Te połączenia są niezliczone, kontekstowe i zawsze dotyczą kompromisów. Doświadczenie ma znaczenie.

Definicja „kompetentnego programisty” z pewnością obejmuje:

  • martwią się o złożoność i mogą oceniać, kiedy jest to warte
  • mogą pisać zarówno prozę, jak i kod, tak aby reszta zespołu to rozumiała

Nie wszystkie zespoły mają taką samą złożoność, ale wszystkie mają pewien limit, a dobre wykorzystują mądrze.

Widok ideologiczny 3: Proces: mieć jeden

Widziałem wiele różnych metodologii i procesów. Optymalizują różne umiejętności zespołu lub różne poziomy ryzyka „błędów w produkcji”. Uważam, że potrzebujesz trochę szaleństwa; coś innego niż free-for-all. Przykłady:

  • Dobre pokrycie testu jednostkowego z obowiązkowym pokryciem nowego kodu.
  • LUB przegląd kodu twardego. (Hardass = recenzent spędza dużo czasu, a większość poprawek jest co najmniej raz poprawiana. Większość recenzji nie będzie „wyglądała dobrze dla mnie”).
  • LUB tylko jeden programista na bazie kodu jest na tyle mały, aby trzymać go w jednej głowie.
  • LUB Podejście Joela .

Nie potrzebujesz tych wszystkich, ale potrzebujesz przynajmniej jednej takiej rzeczy . Musi istnieć jakiś zwyczaj codzienny lub strukturalny, który zwalcza entropię, bez względu na to, jak inteligentni są poszczególni członkowie zespołu.

Firmy mogą mieć oparte na regułach lub oparte na zaufaniu kultury i wybierać różne procesy. Wiele różnych podejść może działać.

Streszczenie

Ideologiczne linie w piasku kształtujące moje myślenie o tworzeniu oprogramowania:

  • Ryzyko = projekt staje się trudny do rozwiązania.
  • Warunek uniknięcia tego ryzyka: musisz być zrozumiały i zrozumiały.
  • Przetwarzaj, aby uniknąć tego ryzyka: mieć jedno i trzymać się go.

Jeśli możesz napisać jasny, możliwy do utrzymania kod i zachować go w ten sposób, używając swojego systemu operacyjnego, edytora tekstu, języka dynamicznego, języka statycznego, struktury skonfigurowanej w języku XML, procesu zwinnego lub cokolwiek innego , to jestem otwarty na twoje podejście .

Jeśli tworzysz złożoność, która nie opłaca się, nie ma sensu dla reszty zespołu, nie masz działającego procesu itp. , Jestem przeciwko temu .

„Ile błędów w produkcji jest OK”, „języki statyczne a dynamiczne”, „czy potrzebujemy do tego specyfikacji”, „czy potrzebujemy tutaj schematu”, „co mam nazwać tą funkcją”: są one pragmatyczne, kwestie zależne od kontekstu. Lubię je rozpatrywać indywidualnie.

Postscript: Me me me

Wiele z nich przykład „liberalny / konserwatywny” oświadczenia czuć ego napędzane. Źle wyglądałbym, gdybyśmy wysłali błąd, jestem mądry i potrafię się uczyć, nigdy nie piszę wolnego kodu, zawsze piszę mały kod, bla bla.

Nie chodzi o Ciebie.

Kiedy zgadzasz się lub nie zgadzasz z „programistami są tylko nowicjuszami przez jakiś czas” – czy myślisz o stworzeniu oprogramowania jako testu IQ dla programistów? Celem nie jest „stłumienie” kodu lub udowodnienie, że nie musi tak być.

Pozwolę sobie zaproponować lepsze kadrowanie: czy ta złożoność jest tego warta (w kontekście naszych klientów i naszego zespołu). Jeśli staramy się zmaksymalizować przydatność naszego oprogramowania do pewnego poziomu złożoności, z którym nasz zespół może sobie poradzić, czy powinniśmy korzystać z naszych cykli mózgowych w tym rogu kodu lub w innym rogu?

Kiedy zgadzasz się lub nie zgadzasz z „oprogramowaniem powinno być wolne od błędów przed jego uruchomieniem” – czy masz taką samą opinię zarówno na temat lądownika Marsa, jak i icanhascheezburger? Jeśli to zrobisz, może będziesz musiał skupić się na świecie zewnętrznym, który ma obsługiwać nasze oprogramowanie.

Lepsze kadrowanie: musi działać .

Rozumiesz, o co mi chodzi …