Przedmowa
To naprawdę trudne zadanie i jest wiele do zrobienia. Dlatego pokornie sugeruję, że jest to dość obszerny przewodnik dla twojego zespołu, zawierający wskazówki dotyczące odpowiednich narzędzi i materiałów edukacyjnych.
Pamiętaj: są to wytyczne , które jako takie mają zostać przyjęte, dostosowane lub odrzucone w zależności od okoliczności.
Uwaga: zrzucenie tego wszystkiego na zespół najprawdopodobniej zakończy się niepowodzeniem. Powinieneś spróbować wybrać elementy, które dadzą ci najlepszy huk za pot i wprowadzaj je powoli, po jednym na raz.
Uwaga: nie wszystko to dotyczy bezpośrednio Visual Programming Systems, takich jak G2. Aby uzyskać bardziej szczegółowe informacje na temat radzenia sobie z nimi, zobacz sekcję Dodatek na końcu.
Streszczenie dla niecierpliwych
- Zdefiniuj sztywną strukturę projektu za pomocą:
- szablony projektów ,
- konwencje kodowania ,
- znane systemy kompilacji ,
- oraz zestawy wskazówek dotyczących użytkowania infrastruktury i narzędzi.
- Zainstaluj dobry SCM i upewnij się, że umie z niego korzystać.
- Wskaż im dobre IDE dla ich technologii i upewnij się, że wiedzą, jak ich używać.
- Wdróż kontrolery jakości kodu i automatyczne raportowanie w systemie kompilacji.
- Połącz system kompilacji z systemami ciągłej integracji i ciągłej kontroli .
- Za pomocą powyższego zidentyfikuj „punkty aktywne” jakości kodu i refaktoryzuj .
Teraz wersja długa ... Uwaga, przygotujcie się!
Sztywność jest (często) dobra
Jest to opinia kontrowersyjna, ponieważ sztywność jest często postrzegana jako siła działająca przeciwko tobie. Dotyczy to niektórych faz niektórych projektów. Ale kiedy zobaczysz go jako wsparcie strukturalne, ramy, które eliminują zgadywanie, znacznie zmniejsza ilość zmarnowanego czasu i wysiłku. Niech działa dla ciebie, a nie przeciwko tobie.
Sztywność = proces / procedura .
Opracowywanie oprogramowania wymaga dobrych procesów i procedur z dokładnie tych samych powodów, dla których zakłady chemiczne lub fabryki posiadają podręczniki, procedury, ćwiczenia i wytyczne w sytuacjach awaryjnych: zapobieganie złym wynikom, zwiększanie przewidywalności, maksymalizacja wydajności ...
Sztywność pojawia się jednak z umiarem!
Sztywność struktury projektu
Jeśli każdy projekt ma własną strukturę, ty (i nowicjusze) jesteś zagubiony i musisz odbierać od zera za każdym razem, gdy je otwierasz. Nie chcesz tego w profesjonalnym sklepie z oprogramowaniem i nie chcesz tego w laboratorium.
Sztywność systemów kompilacji
Jeśli każdy projekt wygląda inaczej, istnieje duża szansa, że również
zbuduje inaczej . Kompilacja nie powinna wymagać zbyt wielu badań ani zbyt wielu zgadnięć. Chcesz być w stanie zrobić coś kanonicznej i nie trzeba się martwić o specyfice: configure; make install
, ant
,
mvn install
, itd ...
Ponowne użycie tego samego systemu kompilacji i jego ewolucja z upływem czasu zapewnia również stały poziom jakości.
Musisz szybko README
wskazać specyfikę projektu i z wdziękiem poprowadzić użytkownika / programistę / badacza, jeśli taki istnieje.
Ułatwia to również znacznie inne części infrastruktury kompilacji, a mianowicie:
Aktualizuj więc swoją kompilację (podobnie jak swoje projekty), ale z czasem zaostrzaj ją i wydajniej zgłaszaj naruszenia i złe praktyki.
Nie wymyślaj koła ponownie i wykorzystaj to, co już zrobiłeś.
Rekomendowane lektury:
Sztywność w wyborze języków programowania
Nie można oczekiwać, zwłaszcza w środowisku badawczym, że wszystkie zespoły (a tym bardziej wszyscy programiści) używają tego samego języka i stosu technologii. Możesz jednak zidentyfikować zestaw „oficjalnie obsługiwanych” narzędzi i zachęcić do ich używania. Reszta bez dobrego uzasadnienia nie powinna być dozwolona (poza prototypowaniem).
Utrzymaj swój stos technologii prosty, a utrzymanie i szerokość wymaganych umiejętności do absolutnego minimum: mocny rdzeń.
Sztywność konwencji i wytycznych dotyczących kodowania
Konwencje i wytyczne kodowania pozwalają ci rozwijać zarówno tożsamość jako zespół, jak i wspólny język . Nie chcesz się mylić z terra incognita za każdym razem, gdy otwierasz plik źródłowy.
Nonsensyczne reguły, które utrudniają życie lub zabraniają jawnego działania w takim stopniu, w jakim odmowy popełnienia popełnienia przestępstwa na podstawie pojedynczych prostych naruszeń są ciężarem. Jednak:
Podejście osobiste: jestem agresywny, jeśli chodzi o konwencje kodowania, niektórzy nawet mówią naziści , ponieważ wierzę w posiadanie
lingua franca , rozpoznawalnego stylu dla mojego zespołu. Kiedy kod bzdury zostaje zameldowany, wyróżnia się jak zimna rana na twarzy gwiazdy Hollywood: automatycznie uruchamia recenzję i akcję. W rzeczywistości czasami posunąłem się nawet do tego, aby zalecać użycie haków wstępnego zatwierdzania w celu odrzucenia niezgodnych zmian. Jak wspomniano, nie powinno to być zbyt szalone i przeszkadzać w produktywności: powinno je napędzać. Wprowadzaj je powoli, szczególnie na początku. Ale jest to o wiele lepsze rozwiązanie niż poświęcanie tyle czasu na naprawianie wadliwego kodu, że nie można pracować nad prawdziwymi problemami.
Niektóre języki wymuszają to już z założenia:
- Java miała zmniejszyć ilość nudnych bzdur, które można z nim pisać (choć bez wątpienia wielu to robi).
Struktura bloków Pythona według wcięć to kolejny pomysł w tym sensie.
Idź z jego gofmt
narzędziem, które całkowicie zabiera wszelką debatę i wysiłek ( i ego !! ) nieodłącznie związane ze stylem: biegnij gofmt
przed popełnieniem.
Upewnij się, że zgnilizna kodu nie może się przedostać. Konwencje kodu , ciągła integracja i ciągła kontrola , programowanie par i przeglądy kodu to Twój arsenał przeciwko temu demonowi.
Ponadto, jak zobaczycie poniżej, kod jest dokumentacją , a to kolejny obszar, w którym konwencje zachęcają do czytelności i przejrzystości.
Sztywność dokumentacji
Dokumentacja idzie w parze z kodem. Sam kod jest dokumentacją. Ale muszą istnieć jasne instrukcje, jak budować, używać i utrzymywać rzeczy.
Korzystanie z jednego punktu kontroli w dokumentacji (jak WikiWiki lub DMS) to dobra rzecz. Twórz przestrzenie dla projektów, przestrzenie dla bardziej przypadkowych pogawędek i eksperymentów. Niech wszystkie przestrzenie ponownie wykorzystają wspólne zasady i konwencje. Staraj się, aby było to częścią ducha zespołu.
Większość porad dotyczących kodu i narzędzi dotyczy również dokumentacji.
Sztywność w komentarzach do kodu
Komentarze do kodu, jak wspomniano powyżej, są również dokumentacją. Programiści lubią wyrażać swoje uczucia na temat swojego kodu (głównie dumy i frustracji, jeśli mnie pytasz). Nie jest więc niczym niezwykłym, że wyrażają je w nieokreślony sposób w komentarzach (a nawet w kodzie), gdy bardziej formalny fragment tekstu mógł mieć to samo znaczenie przy mniej obraźliwych tekstach lub dramacie. Można pozwolić kilku prześlizgnąć się ze względów historycznych i zabawy: jest to również część rozwoju kultury zespołowej . Ale bardzo ważne jest, aby wszyscy wiedzieli, co jest dopuszczalne, a co nie, a ten komentarz jest po prostu:
hałasem .
Sztywność w dziennikach zatwierdzania
Dzienniki zatwierdzania nie są irytującym i bezużytecznym „krokiem” cyklu życia SCM: NIE omijaj go, aby wrócić do domu na czas lub zająć się kolejnym zadaniem lub dogonić kumpli, którzy wyszli na lunch. Mają znaczenie i, podobnie jak (większość) dobrego wina, im więcej czasu mija, tym bardziej stają się cenne. Więc ZRÓB je dobrze. Jestem oszołomiony, gdy widzę współpracowników piszących jedno linijki dla gigantycznych zmian lub nieoczywistych hacków.
Zatwierdzenia są wykonywane z jakiegoś powodu, a ten powód NIE zawsze jest jasno wyrażony przez twój kod i wprowadzony przez ciebie jeden wiersz dziennika zmian. Jest w tym coś więcej.
Każda linia kodu ma historię i historię . Różnice mogą opowiadać swoją historię, ale musisz napisać jej historię.
Dlaczego zaktualizowałem ten wiersz? -> Ponieważ interfejs się zmienił.
Dlaczego interfejs się zmienił? -> Ponieważ biblioteka L1, która ją definiuje, została zaktualizowana.
Dlaczego biblioteka została zaktualizowana? -> Ponieważ biblioteka L2, której potrzebujemy dla funkcji F, zależała od biblioteki L1.
A co to jest funkcja X? -> Zobacz zadanie 3456 w narzędziu do śledzenia problemów.
To nie jest mój wybór SCM i może nie być najlepszy dla twojego laboratorium; ale Git
robi to dobrze i próbuje zmusić cię do pisania dobrych dzienników więcej niż w większości innych systemów SCM, używając short logs
i
long logs
. Połącz identyfikator zadania (tak, potrzebujesz go) i zostaw ogólne podsumowanie dla shortlog
i rozwiń długi dziennik: napisz historię zestawu zmian .
To dziennik: służy do śledzenia i rejestrowania aktualizacji.
Ogólna zasada: jeśli później szukałeś czegoś na temat tej zmiany, czy Twój dziennik prawdopodobnie odpowie na twoje pytanie?
Projekty, dokumentacja i kod są ŻYWE
Trzymajcie je w synchronizacji, w przeciwnym razie nie tworzą już tej symbiotycznej istoty. Działa cuda, gdy masz:
- wyczyść dzienniki zatwierdzeń w SCM, w / linki do identyfikatorów zadań w narzędziu do śledzenia problemów,
- gdzie same bilety tego modułu śledzącego prowadzą do zestawów zmian w SCM (i ewentualnie do kompilacji w systemie CI),
- oraz system dokumentacji, który prowadzi do wszystkich z nich.
Kod i dokumentacja muszą być spójne .
Sztywność w testowaniu
Reguły kciuka:
- Każdy nowy kod powinien zawierać (przynajmniej) testy jednostkowe.
- Każdy refaktoryzowany starszy kod powinien być dostarczony z testami jednostkowymi.
Oczywiście potrzebują one:
- przetestować coś wartościowego (lub są stratą czasu i energii),
- być dobrze napisane i skomentowane (tak jak każdy inny kod, który się zameldujesz).
Są również dokumentacją i pomagają nakreślić kontrakt twojego kodu. Zwłaszcza jeśli korzystasz z TDD . Nawet jeśli nie, potrzebujesz ich dla spokoju ducha. Stanowią one twoją siatkę bezpieczeństwa, gdy wprowadzasz nowy kod (konserwacja lub funkcja) i swoją strażnicę, aby chronić przed gniciem kodu i awariami środowiska.
Oczywiście powinieneś pójść dalej i przeprowadzić testy integracyjne oraz
testy regresji dla każdego powtarzalnego błędu, który naprawisz.
Sztywność w użyciu narzędzi
Czasami deweloper / naukowiec może wypróbować jakiś nowy moduł sprawdzania statycznego na źródle, wygenerować wykres lub model przy użyciu innego lub zaimplementować nowy moduł przy użyciu DSL. Ale najlepiej, jeśli istnieje kanoniczny zestaw narzędzi, który wszyscy członkowie zespołu powinni znać i używać.
Poza tym pozwól członkom korzystać z tego, czego chcą, o ile są WSZYSCY:
- produktywny ,
- NIE regularnie wymaga pomocy
- NIE regularnie dostosowując się do ogólnej infrastruktury ,
- NIE zaburzając infrastruktury (modyfikując wspólne obszary, takie jak kod, system kompilacji, dokumentacja ...),
- NIE wpływając na pracę innych ,
- MOGŁO terminowo wykonać każde zlecone zadanie .
Jeśli tak nie jest, wymuś przywrócenie wartości domyślnych.
Sztywność a wszechstronność, adaptowalność, prototypowanie i sytuacje awaryjne
Elastyczność może być dobra. Pozwolenie komuś od czasu do czasu użyć hacka, szybkiego i brudnego podejścia lub ulubionego narzędzia dla zwierząt domowych do wykonania zadania
jest w porządku. NIGDY nie pozwól, aby stał się nawykiem i NIGDY nie pozwól, aby ten kod stał się rzeczywistą bazą kodów do obsługi.
Duch zespołu ma znaczenie
Rozwijaj poczucie dumy w swojej bazie kodu
- Rozwijaj poczucie dumy w kodzie
- Użyj tablic ściennych
- tablica liderów ciągłej gry integracyjnej
- tablice ścienne do zarządzania problemami i liczenia wad
- Użyj narzędzia do śledzenia problemów / śledzenia błędów
Unikaj obwiniania gier
- NALEŻY korzystać z gier Continuous Integration / Continuous Inspection: sprzyja dobrodusznej i produktywnej konkurencji .
- NALEŻY śledzić wady: to po prostu dobre utrzymanie domu.
- DO identyfikacji przyczyny : to tylko procesy przyszłość pulchne.
- ALE NIE przypisuj winy : to przynosi efekt przeciwny do zamierzonego.
Chodzi o kod, a nie o programistów
Poinformuj programistów o jakości swojego kodu, ALE spraw, aby widzieli kod jako odłączony byt, a nie rozszerzenie siebie, czego nie można krytykować.
To paradoks: musisz zachęcać do programowania bez ego dla zdrowego miejsca pracy, ale polegać na ego w celach motywacyjnych.
Od naukowca do programisty
Ludzie, którzy nie cenią i są dumni z kodu, nie tworzą dobrego kodu. Aby ta właściwość się pojawiła, muszą odkryć, jak cenna i zabawna może być. Sam profesjonalizm i chęć czynienia dobra nie wystarczą: potrzebuje pasji. Musisz więc zmienić naukowców w
programistów (w szerokim tego słowa znaczeniu).
Ktoś argumentował w komentarzach, że po 10 do 20 latach projektu i jego kodu każdy poczuje przywiązanie. Może się mylę, ale zakładam, że są dumni z rezultatów kodu oraz pracy i jego dziedzictwa, a nie samego kodu lub samego jego pisania.
Z doświadczenia wynika, że większość badaczy uważa kodowanie za konieczność, aw najlepszym razie za rozrywkową rozrywkę. Chcą tylko, żeby to działało. Ci, którzy są już dość obeznani z tym i którzy są zainteresowani programowaniem, łatwiej przekonać do przyjęcia najlepszych praktyk i zmiany technologii. Musisz je zdobyć w połowie drogi.
Utrzymanie kodu jest częścią pracy badawczej
Nikt nie czyta kiepskich prac badawczych. Dlatego są recenzowane, sprawdzane, dopracowywane, przepisywane i zatwierdzane od czasu do czasu, aż zostaną uznane za gotowe do publikacji. To samo dotyczy pracy magisterskiej i bazy kodu!
Wyjaśnij, że ciągłe refaktoryzowanie i odświeżanie bazy kodu zapobiega gniciu kodu i zmniejsza techniczne zadłużenie oraz ułatwia przyszłe ponowne wykorzystanie i dostosowanie pracy do innych projektów.
Po co to wszystko??!
Dlaczego zawracamy sobie głowę powyższym? Dla jakości kodu . Czy jest to
kod jakości ...?
Te wytyczne mają na celu doprowadzić zespół do osiągnięcia tego celu. Niektóre aspekty robią to po prostu wskazując im drogę i pozwalając im to zrobić (co jest znacznie lepsze), a inne biorą ich za rękę (ale w ten sposób kształcisz ludzi i rozwijasz nawyki).
Skąd wiesz, kiedy cel jest w zasięgu?
Jakość jest mierzalna
Nie zawsze ilościowo, ale można to zmierzyć . Jak wspomniano, musisz rozwinąć w zespole poczucie dumy, a pokazanie postępów i dobrych wyników jest kluczowe. Regularnie mierz jakość kodu i wyświetlaj postępy między interwałami oraz ich znaczenie. Wykonaj retrospekcję, aby zastanowić się nad tym, co zostało zrobione i jak to poprawiło lub pogorszyło sytuację.
Istnieją świetne narzędzia do ciągłej kontroli . Sonar jest popularny w świecie Java, ale można go dostosować do dowolnej technologii; i jest wiele innych. Trzymaj kod pod mikroskopem i poszukaj tych irytujących irytujących błędów i drobnoustrojów.
Ale co, jeśli mój kod jest już gównem?
Wszystkie powyższe są zabawne i słodkie jak wycieczka do Never Land, ale nie jest to takie łatwe, gdy masz już (kupę parnego i śmierdzącego) bzdurnego kodu i zespół niechętnie się zmienia.
Oto sekret: musisz gdzieś zacząć .
Osobista anegdota: W projekcie pracowaliśmy z bazą kodu ważącą pierwotnie 650 000+ Java LOC, 200 000+ linii JSP, 40 000+ LOC JavaScript i ponad 400 MB zależności binarnych.
Po około 18 miesiącach jest to 500 000 Java LOC (MOSTLY CLEAN) , 150 000 linii JSP i 38 000 JavaScript LOC, z zależnościami do zaledwie 100 MB (i nie ma ich już w SCM!).
Jak to zrobiliśmy? Właśnie zrobiliśmy wszystkie powyższe. Lub bardzo się starał.
To wysiłek zespołu, ale powoli wprowadzamy nasze regulacje procesowe i narzędzia do monitorowania tętna naszego produktu, jednocześnie pośpiesznie usuwając „gruby”: bzdury, bezużyteczne zależności ... Nie zatrzymaliśmy całego rozwoju, aby róbcie to: od czasu do czasu mamy względny spokój i ciszę, w którym możemy zwariować na bazie kodu i rozerwać go na strzępy, ale przeważnie robimy to wszystko, domyślając się trybu „przeglądu i refaktoryzacji” przy każdej możliwej okazji : podczas kompilacji, podczas lunchu, podczas sprintu naprawiania błędów, w piątkowe popołudnia ...
Było kilka dużych „prac” ... Jednym z nich było przełączenie naszego systemu kompilacji z gigantycznej kompilacji Anta z ponad 8500 XML LOC na wielomodułową kompilację Maven. Następnie mieliśmy:
- przejrzyste moduły (a przynajmniej było już znacznie lepiej, a my wciąż mamy duże plany na przyszłość),
- automatyczne zarządzanie zależnościami (dla łatwej konserwacji i aktualizacji oraz w celu usunięcia bezużytecznych zasobów),
- szybsze, łatwiejsze i odtwarzalne kompilacje,
- codzienne raporty dotyczące jakości.
Innym był zastrzyk „Utility pasów narzędziowych”, chociaż staraliśmy się zmniejszyć zależności: Google Guava i Apache Commons odchudzić swój kod i oraz zmniejszyć powierzchnię za błędy w swoim kodzie dużo.
Przekonaliśmy również nasz dział IT, że być może korzystanie z naszych nowych narzędzi (JIRA, Rybie Oko, Tygiel, Zbieżność, Jenkins) było lepsze niż istniejące. Nadal musieliśmy poradzić sobie z niektórymi, którymi gardziliśmy (QC, Sharepoint i SupportWorks ...), ale było to ogólnie ulepszone doświadczenie, pozostawiając nieco więcej miejsca.
I każdego dnia istnieje od jednego do kilkudziesięciu zobowiązań, które dotyczą tylko naprawy i refaktoryzacji. Od czasu do czasu psujemy rzeczy (potrzebujesz testów jednostkowych i lepiej je wypisz, zanim dokonasz refaktoryzacji), ale ogólnie rzecz biorąc korzyść dla naszego morale ORAZ dla produktu była ogromna. Dostajemy tam jeden ułamek procentowej jakości kodu na raz. I fajnie jest widzieć, jak rośnie !!!
Uwaga: Znowu należy potrząsnąć sztywnością, aby zrobić miejsce na nowe i lepsze rzeczy. Według mojej anegdoty nasz dział IT częściowo ma rację, próbując narzucić nam pewne rzeczy, a inni źle. A może kiedyś mieli rację . Rzeczy się zmieniają. Udowodnij, że są lepszymi sposobami na zwiększenie produktywności. W tym celu są dostępne wersje próbne i prototypy .
Super-Secret Incremental Cykl refaktoryzacji kodu spaghetti dla niesamowitej jakości
+-----------------+ +-----------------+
| A N A L Y Z E +----->| I D E N T I F Y |
+-----------------+ +---------+-------+
^ |
| v
+--------+--------+ +-----------------+
| C L E A N +<-----| F I X |
+-----------------+ +-----------------+
Gdy masz już kilka narzędzi wysokiej jakości w swoim pasku narzędzi:
Przeanalizuj swój kod za pomocą sprawdzania jakości kodu.
Linters, analizatory statyczne lub co masz.
Zidentyfikuj swoje krytyczne punkty dostępu ORAZ nisko wiszące owoce .
Naruszenia mają poziomy dotkliwości, a duże klasy z dużą liczbą poważnych są dużą czerwoną flagą: jako takie pojawiają się jako „gorące punkty” w widokach typu grzejnik / mapa cieplna.
Najpierw napraw hotspoty.
Maksymalizuje Twój wpływ w krótkim czasie, ponieważ mają najwyższą wartość biznesową. Idealnie, krytyczne naruszenia powinny być rozwiązywane, gdy tylko się pojawią, ponieważ stanowią potencjalne luki w zabezpieczeniach lub powodują awarie i stanowią wysokie ryzyko wywołania odpowiedzialności (aw twoim przypadku złej wydajności dla laboratorium).
Wyczyść naruszenia niskiego poziomu za pomocą automatycznych przeglądów baz kodów .
Poprawia stosunek sygnału do szumu, dzięki czemu można zobaczyć znaczące naruszenia radaru, gdy się pojawiają. Często na początku jest duża armia drobnych naruszeń, jeśli nigdy się nimi nie zajęto, a twoja baza kodów została pozostawiona na wolności. Nie stanowią prawdziwego „ryzyka”, ale pogarszają czytelność i łatwość konserwacji kodu. Napraw je albo, gdy je spotkasz podczas pracy nad zadaniem, lub przez duże zadania porządkowe z automatycznymi przeglądami kodów, jeśli to możliwe. Zachowaj ostrożność przy dużych automatycznych przeglądach, jeśli nie masz dobrego zestawu testów i systemu integracji. Pamiętaj, aby uzgodnić ze współpracownikami odpowiedni czas na ich uruchomienie, aby zminimalizować irytację.
Powtarzaj, aż będziesz zadowolony.
Które, najlepiej, nigdy nie powinieneś być, jeśli jest to nadal aktywny produkt: będzie się rozwijał.
Szybkie porady dotyczące dobrego utrzymania domu
W trybie poprawek na podstawie żądania obsługi klienta:
- Zazwyczaj najlepszą praktyką jest NIE zajmowanie się naprawianiem innych problemów, ponieważ możesz niechętnie wprowadzać nowe.
- Przejdź do stylu SEAL: wejdź, zabij robaka, wyjdź i wyślij łatkę. To uderzenie chirurgiczne i taktyczne.
Ale we wszystkich innych przypadkach , jeśli otworzysz plik, ustaw obowiązek:
- zdecydowanie: przejrzyj go (rób notatki, zgłaszaj problemy z plikami),
- może: wyczyść to ( porządki w stylu i drobne naruszenia),
- najlepiej: przebuduj go (zreorganizuj duże sekcje i ich sąsiadów).
Po prostu nie daj się zwieść spędzeniu tygodnia od pliku do pliku i skończyć z ogromnym zestawem tysięcy poprawek obejmujących wiele funkcji i modułów - utrudnia to śledzenie w przyszłości. Jeden problem w kodzie = jeden bilet w twoim trackerze. Czasami zestaw zmian może wpływać na wiele biletów; ale jeśli zdarza się to zbyt często, prawdopodobnie robisz coś złego.
Dodatek: Zarządzanie wizualnymi środowiskami programowania
The Walled Gardens of Bespoke Programming Systems
Wiele systemów programowania, takich jak G2 OP, to różne bestie ...
Brak kodu źródłowego
Często nie dają ci dostępu do tekstowej reprezentacji twojego „kodu” źródłowego: może być przechowywany w zastrzeżonym formacie binarnym, a może przechowuje rzeczy w formacie tekstowym, ale ukrywa je przed tobą. Indywidualne systemy programowania graficznego nie są tak naprawdę rzadkością w laboratoriach badawczych, ponieważ upraszczają automatyzację procesów powtarzalnego przetwarzania danych.
Bez narzędzi
To znaczy poza ich własnymi. Często ogranicza Cię środowisko programistyczne, własny debugger, własny tłumacz, własne narzędzia i formaty dokumentacji. Są to
ogrodzone murem ogrody , chyba że w końcu zainteresują kogoś wystarczająco zmotywowanego do inżynierii wstecznej swoich formatów i budowy zewnętrznych narzędzi - jeśli pozwala na to licencja.
Brak dokumentacji
Dość często są to niszowe systemy programowania, które są używane w dość zamkniętych środowiskach. Ludzie, którzy ich używają, często podpisują NDA i nigdy nie mówią o tym, co robią. Społeczności programowania dla nich są rzadkie. Zasoby są więc ograniczone. Utknąłeś z oficjalną referencją i to wszystko.
Ironicznym (i często frustrującym) elementem jest to, że wszystkie rzeczy, które te systemy robią, można oczywiście osiągnąć za pomocą głównego nurtu i języków programowania ogólnego przeznaczenia, i całkiem prawdopodobnie bardziej wydajnie. Wymaga to jednak głębszej wiedzy na temat programowania, podczas gdy nie można oczekiwać, że biolog, chemik lub fizyk (by wymienić tylko kilku) będzie wiedział wystarczająco dużo o programowaniu, a tym bardziej mieć czas (i chęć) na wdrożenie (i utrzymanie) złożone systemy, które mogą, ale nie muszą, być długotrwałe. Z tego samego powodu, dla którego korzystamy z DSL, mamy te systemy programowania na zamówienie.
Osobista anegdota 2:Właściwie sam nad jednym z nich pracowałem. Nie wykonałem połączenia z prośbą PO, ale mój projekt był zestawem połączonych ze sobą dużych elementów oprogramowania do przetwarzania i przechowywania danych (przede wszystkim do badań bioinformatycznych, opieki zdrowotnej i kosmetyków, ale także dla biznesu dane wywiadowcze lub dowolna dziedzina implikująca śledzenie dużych ilości wszelkiego rodzaju danych badawczych oraz przygotowywanie przepływów pracy przetwarzania danych i ETL). Jedną z tych aplikacji było, po prostu, wizualne IDE, które używało zwykłych dzwonków i gwizdków: interfejsy przeciągnij i upuść, wersjonowane obszary robocze projektu (używając plików tekstowych i XML do przechowywania metadanych), wiele podłączanych sterowników do heterogenicznych źródeł danych oraz wizualne płótno do projektowania rurociągów do przetwarzania danych z N źródeł danych, a na koniec generowania M przekształconych wyników, oraz możliwe błyszczące wizualizacje i złożone (i interaktywne) raporty online. Twój typowy system programowania na zamówienie, cierpiący na syndrom NIH pod pretekstem zaprojektowania systemu dostosowanego do potrzeb użytkowników.
I, jak można się spodziewać, jest to ładny system, dość elastyczny dla swoich potrzeb, choć czasem nieco przesadzony, więc zastanawiasz się „dlaczego zamiast tego nie używać narzędzi wiersza poleceń?” I niestety zawsze prowadzi w średniej wielkości zespoły pracujące nad dużymi projektami dla wielu różnych osób korzystających z różnych „najlepszych” praktyk.
Świetnie, jesteśmy zgubieni! - Co robimy z tym?
Cóż, w końcu wszystko powyższe nadal obowiązuje. Jeśli nie możesz wyodrębnić większości programów z tego systemu, aby korzystać z większej liczby narzędzi i języków głównego nurtu, musisz „po prostu” dostosować je do ograniczeń systemu.
Informacje o wersjonowaniu i przechowywaniu
W końcu możesz prawie zawsze zmieniać wersje , nawet w najbardziej ograniczonym i otoczonym otoczeniem środowisku. Najczęściej systemy te nadal mają własną wersję (która niestety często jest dość podstawowa i po prostu oferuje powrót do poprzednich wersji bez widoczności, zachowując poprzednie migawki). Nie używa dokładnie różnicowych zestawów zmian, jak Twój SCM, i prawdopodobnie nie nadaje się dla wielu użytkowników przesyłających zmiany jednocześnie.
Ale mimo to, jeśli zapewniają taką funkcjonalność, być może Twoim rozwiązaniem jest postępowanie zgodnie z naszymi ulubionymi standardami branżowymi powyżej i przeniesienie ich do tego systemu programowania !!
Jeśli system pamięci masowej jest bazą danych, prawdopodobnie udostępnia funkcje eksportu lub może zostać utworzony kopię zapasową na poziomie systemu plików. Jeśli używa niestandardowego formatu binarnego, być może możesz po prostu spróbować go zaktualizować za pomocą VCS, który ma dobrą obsługę danych binarnych. Nie będziesz miał drobiazgowej kontroli, ale przynajmniej będziesz miał ochronę pleców przed katastrofami i będziesz mieć pewien stopień zgodności z odzyskiwaniem po katastrofie.
O testowaniu
Zaimplementuj testy na samej platformie i użyj zewnętrznych narzędzi i zadań w tle, aby skonfigurować regularne kopie zapasowe. Prawdopodobnie uruchamiasz te testy tak samo, jak uruchamiałbyś programy opracowane z tym systemem programowania.
Jasne, to jest włamanie i zdecydowanie nie odpowiada standardowi, który jest wspólny dla „normalnego” programowania, ale pomysł polega na dostosowaniu się do systemu przy jednoczesnym zachowaniu pozorów profesjonalnego procesu tworzenia oprogramowania.
Droga jest długa i stroma ...
Jak zawsze w niszowych środowiskach i na zamówienie systemach programistycznych, i jak ujawniliśmy powyżej, masz do czynienia z dziwnymi formatami, tylko ograniczonym (lub całkowicie nieistniejącym) zestawem potencjalnie niezręcznych narzędzi i pustką w miejscu społeczności.
Zalecenie: Spróbuj wdrożyć powyższe wytyczne w jak największym stopniu poza własnym systemem programowania. Gwarantuje to, że możesz polegać na „wspólnych” narzędziach, które mają odpowiednie wsparcie i motywację społeczności.
Obejście: Jeśli nie jest to opcja, spróbuj ponownie zainstalować tę globalną strukturę w swoim „pudełku”. Pomysł polega na nałożeniu tego schematu najlepszych praktyk branżowych na system programowania i jak najlepszym wykorzystaniu. Nadal obowiązuje rada: zdefiniuj strukturę i najlepsze praktyki, zachęcaj do zgodności.
Niestety oznacza to, że może być konieczne zanurkowanie i wykonanie ogromnej pracy nóg. Więc...
Słynne ostatnie słowa i pokorne prośby:
- Dokumentuj wszystko, co robisz.
- Podziel się swoim doświadczeniem.
- Open Source dowolne narzędzie do pisania.
Robiąc to wszystko, będziesz:
- nie tylko zwiększa twoje szanse na uzyskanie wsparcia od osób w podobnych sytuacjach,
- ale także pomagać innym ludziom i zachęcać do dyskusji na temat stosu technologii.
Kto wie, można być na samym początku nowej aktywnej społeczności Obscure Język X . Jeśli nie ma, uruchom jeden!
Może w środku jest pięknie , ale do tej pory nikt nie ma pojęcia , więc pomóżcie zburzyć tę brzydką ścianę i pozwólcie innym spojrzeć!