Wiele się mówi na temat najlepszych praktyk 1 w zakresie tworzenia oprogramowania. Widziałem co najmniej trzy główne kwestie, które mają dużo dyskusji zarówno na temat SE, jak i gdzie indziej:
- Co kwalifikuje się jako najlepsza praktyka i dlaczego?
- Czy warto przede wszystkim omawiać najlepsze praktyki, ponieważ uzasadnione jest twierdzenie, że żadna praktyka nie jest „najlepszą” praktyką?
- Kiedy należy zrezygnować z najlepszej praktyki - a może większości najlepszych praktyk - albo dlatego, że wydaje się ona nie mieć zastosowania, albo z powodu ograniczeń zewnętrznych (czas, pieniądze itp.), Które sprawiają, że kompromis jest niepraktyczny?
Coś, co wydaje się pojawiać znacznie rzadziej, ale częściej niż nigdy, jest pojęciem zdrowego rozsądku w tworzeniu oprogramowania. Ostatnie doświadczenia sprawiły, że pojęcie to znów pojawiło się w mojej głowie.
Moje pierwsze wrażenie jest takie, że jest to dyskusja inna niż najlepsze praktyki, ale może z pewnym zapyleniem krzyżowym.
Kiedy ogólnie myślę o zdrowym rozsądku, myślę o zestawie zasad, które albo wychwyciłeś, albo których nauczyłeś, i które dają ci podstawy do uzasadnienia i podejmowania decyzji. Przestrzeganie zdrowego rozsądku to dobry sposób na uniknięcie zestrzelenia całej nogi. Ale poza dość niskim poziomem odniesienia zdrowy rozsądek ustępuje miejsca potrzebie podejmowania wykształconych decyzji, a wykształcone decyzje mogą nawet zastąpić zdrowy rozsądek, gdy dowody wydają się wystarczająco przekonujące. Być może bawię się trochę z definicją tutaj, ale myślę, że jest wystarczająco blisko, aby przewodzić mojemu przykładowi.
Kiedy myślę o zdrowym rozsądku w tworzeniu oprogramowania, myślę o wszystkich zasadach podstawowej higieny, aby zapobiec szybkiemu rozkładowi bazy kodu w niezrozumiały bałagan. Jako przykłady można wymienić: nieużywanie jednej globalnej struktury do utrzymywania i komunikowania stanu w nietrywialnym programie; niestosowanie nazw zmiennych / metod / klas, które są po prostu przypadkowym bełkotem; rzeczy, które prawdopodobnie bardzo dokładnie przypominają to, co nazywamy anty-wzorami. W przypadku stosowania najlepszych praktyk praktycznego odpowiednika wzorców uczenia się, stosowanie zdrowego rozsądku można postrzegać jako praktyczny analog uczenia się wzorców uczenia się.
Mając to na uwadze, chciałbym zadać kilka pytań, na które zapoznanie się z odpowiedziami innych osób mogłoby mi pomóc w przemyśleniu tego.
Czy inni uważają, że w tworzeniu oprogramowania panuje zdrowy rozsądek? Byłbym zainteresowany, znając uzasadnienie w obu przypadkach.
Jeśli tak, czy warto to omówić? Czy jest to coś, na co powinniśmy naciskać tak często, jak robimy to przy zastosowaniu najlepszych praktyk? Czy jest coś, co warto naciskać jeszcze mocniej?
Jeśli analogia do anty-wzorów wydaje się rozsądna, ogólną zasadą jest, że anty-wzory są stosowane tylko wtedy, gdy nie ma innego sposobu, a nawet tylko w bardzo ograniczonych okolicznościach. Jak elastyczna powinna być możliwość pozwalania bazie kodowej na odstąpienie od zdrowego rozsądku? Wydaje się nieuzasadnione, że odpowiedź brzmi „wcale”, ponieważ czasem celowość wymaga odchyleń. Ale wydaje się, że jest to inny rodzaj argumentu niż stosowanie „najlepszej praktyki”. Może nie jest; jeśli nie uważasz, chciałbym dowiedzieć się, dlaczego.
Jest to o wiele bardziej otwarte zakończenie i być może samo w sobie warte dalszego pytania, jakie rodzaje rekomendacji wskazałbyś na to , co wydaje się kwestią zdrowego rozsądku?
Inne myśli są również mile widziane.
1 Być może lepiej nazwałbym je „często powtarzającymi się wzorcami domen”, ale nazwa „najlepsze praktyki” jest na tyle powszechna, że wszyscy wiedzą, czym są, nawet jeśli się nie zgadzają. Jeśli przeszkadza ci „najlepsza” część, wyobraź sobie, że zastąpiłem „najlepsze praktyki” czymś mniej wiarygodnym.
źródło
Odpowiedzi:
Najlepsze praktyki to takie, które sprawdziły się w stosunkowo szerokim zakresie okoliczności. Problem polega na tym, że A) wyrażenie jest czasem nadużywane w celach marketingowych, a B) jako ustalone reguły, nie są wystarczająco elastyczne; żaden zestaw ustalonych reguł nie powinien być przestrzegany bez zastanowienia się, czy dotyczą one obecnej sytuacji.
Najlepsze praktyki są świetne, gdy zawierają wyjaśnienia, dlaczego są „najlepsze” i w jakich okolicznościach należy je stosować. Następnie możesz ustalić, kiedy ich nie używać.
Problem z „zdrowym rozsądkiem” polega na tym, że jest zbyt elastyczny - można go wykorzystać do uzasadnienia praktycznie wszystkiego, i nie można tak naprawdę prowadzić racjonalnej dyskusji, gdy ludzie się nie zgadzają i obaj twierdzą, że ich stanowisko jest „zdrowy rozsądek”. Dobrze jest mieć, ale słabo jako wskazówkę dla zespołu do naśladowania.
źródło
Myślę, że masz to wstecz.
Ucząc programistów podstaw bezpieczeństwa, zawsze uczę ich obsługi
best practices
, a jednak w kontaktach z ekspertami ds. Bezpieczeństwa (lub więcej programistów „doświadczonych w dziedzinie bezpieczeństwa”) nigdy nie będę dyskutowaćbest practices
, w rzeczywistości często ich naruszam.Lepszą definicją byłoby:
Oznacza to, że nie można twierdzić, że jest „zdrowy rozsądek”, dopóki nie ma wystarczającej wiedzy specjalistycznej w danej dziedzinie, aby zrozumieć subtelne kompromisy; a kiedy to zrobisz, nie powinieneś już ślepo stosować się do „najlepszych praktyk” dotyczących obcinania ciasteczek.
„Najlepsze praktyki” to tymczasowe symbole zastępcze, dopóki nie będziesz mieć wystarczającego doświadczenia, aby zastosować własny „zdrowy rozsądek”.
źródło
Najlepsze praktyki -> „najpierw poznasz zasady”. Doświadczenie -> „wtedy uczysz się, kiedy i jak je złamać”.
Chęć eksperymentowania z alternatywami (oczywiście w niekrytycznym kodzie - najlepiej osobiste projekty i wyrzucenia) może pomóc w zdobyciu doświadczenia, którego potrzebujesz.
Oczywiście zdrowy rozsądek nie jest tym samym, co doświadczenie, i nie zawsze potrzebujesz dużego doświadczenia, aby dostrzec wadę stosowania dobrej techniki w niewłaściwym miejscu - ale bardzo łatwo jest zbudować fałszywe racjonalizacje zarówno w przypadku nadmiernego stosowania, jak i niedostateczne stosowanie techniki, a ponieważ „zdrowy rozsądek” wyraźnie nie jest wrodzoną wiedzą na temat programowania, sens ten jest wyraźnie „powszechny” tylko w obrębie określonych grup.
Bardzo łatwo jest „opowiedzieć się po stronie”. W rzeczywistości nie da się tego uniknąć - czasami jedna strona naprawdę ma rację, a druga naprawdę jest w błędzie, a argumentowanie za równowagą byłoby irracjonalne. Problem polega na tym, że prawdziwe piekło nie tyle waży jedną najlepszą praktykę pod względem istotności, ale gdy zderzają się dwie sprzeczne opinie na temat najlepszych praktyk.
Radzenie sobie z tym prawdopodobnie bardziej dotyczy umiejętności ludzi niż umiejętności technicznych. Jestem w tym bardzo zły :-(
Mimo to nadal ważne jest, aby uczyć się na podstawie doświadczeń innych ludzi, a także własnych - tzn. Dowiedzieć się, jakie są najlepsze praktyki, dlaczego są stosowane i jakie są zalety (i wady).
źródło
Wydaje mi się, że to pytanie jest podstępem semantycznym. Jeśli użyjemy tych definicji, nie będzie pytania:
Najlepsza praktyka: sprawdzony w praktyce sposób rozwiązywania problemu w danej dziedzinie (tzn. Najlepsze praktyki w czasie rzeczywistym są całkowicie obce najlepszym praktykom baz danych)
Common Sense: doświadczenie zawodowe, które ma na celu ostrzec programistę przed pułapkami, których należy unikać
Ostatecznie, najlepsza praktyka to meta projekt wzorca, który rozwiązuje określoną zgodność problemów i jest wybierana na podstawie rzeczywistych doświadczeń, podczas gdy Common Sense jest przewodnikiem rozwiązywania problemów na podstawie ogólnej obserwacji wielu zestawów problemów.
źródło
źródło
Ciekawy czas. W ubiegłym tygodniu opublikowano ten artykuł, w którym omówiono, dlaczego zdrowy rozsądek niekoniecznie jest idealny we wszystkich sytuacjach.
Zdrowy rozsądek jest doskonale przystosowany do radzenia sobie ze złożonością, która pojawia się w codziennych sytuacjach ... A ponieważ działa tak dobrze w takich sytuacjach, jesteśmy skłonni zaufać mu we wszystkich sytuacjach
(moje słowa pogrubione)
Zasadniczo - ludzie nie są dobrzy w stosowaniu zdrowego rozsądku w obszarach takich jak ten, w którym nie opracowaliśmy zakorzenionego systemu, dlatego ZAWSZE powinniśmy stosować udokumentowany zestaw standardów i nie polegać na naszym zdrowym rozsądku!
źródło
Zdrowy rozsądek nie odpowiada na uczenie się anty-wzorów, nie różni się od najlepszych praktyk ani nie jest w przeciwieństwie do nich.
Pierwszym problemem ze zdrowym rozsądkiem jest jego nazwa - prowadzi do wniosku, że jest on zarówno powszechny, jak i rozsądny. Jak zwykle używany, podlega atakowi z obu powodów. Na twoim przykładzie:
Rozumiem, że nie w ten sposób powstają anty-wzory. Pochodzi z przyrostu czynników kulturowych i społecznych; lekceważenia najlepszych praktyk i standardów przez znaczny okres; ignorowania kosztów w przyszłości w celu osiągnięcia krótkoterminowych korzyści - na przykład dotrzymania terminu przy użyciu skrótu, który jest koszmarem w zakresie konserwacji; itd. Żadne ciało nie zamierza celowo przyjmować anty-wzoru - po prostu rosną.
Równie często zbyt często używa się zdrowego rozsądku, by oznaczać, że „robi się to powszechnie” i usprawiedliwia brak myślenia, wglądu i ciężkiej pracy przy rozwiązywaniu problemów związanych z zapewnieniem rozwiązania. Służy również jako uzasadnienie „tak, jak ja to robię, więc oczywiście jest to zdrowy rozsądek” - oraz jako obrona przed przeglądem i krytyką.
Jeśli chodzi o najlepsze praktyki, pierwsze dwa akapity Michaela są doskonałym podsumowaniem najlepszych praktyk - zasobem, który pomoże wszystkim ulepszyć to, co robią. Zapewnia również przejrzystość decyzji (szczególnie decyzji projektowych) oraz możliwość uczenia się od innych. Minusem najlepszej praktyki jest generowanie kultury listy kontrolnej - „Zaznaczyłem wszystkie pola, więc to, co zrobiłem, musi być w porządku” - bez zwracania uwagi, troski i uwagi na naturę zastosowania listy kontrolnej.
źródło
Jest to śliski argument, który często przekształca się w wojnę religijną.
Prawie każdej najlepszej praktyce można przeciwdziałać za pomocą uzasadnionego przypadku przeciwnego.
Niektóre najlepsze praktyki są bardziej „najlepsze” niż inne. Globalne zmienne stanu są prawie zawsze lepiej wykonywane w inny sposób, a GOTO jest zwykle złym pomysłem, ale kiedy przejdziesz do argumentów wzorzec / anty-wzorzec lub bezpośrednie dane / abstrakcyjne dane, staje się to nieco mniej jasne. Tym bardziej, gdy zaczynasz mówić o metodologiach i praktykach programistycznych.
W niektórych sytuacjach zdrowy rozsądek i najlepsze praktyki są nawet sobie przeciwne.
Nie ma organu zarządzającego najlepszymi praktykami i żadna pojedyncza grupa, nawet gdyby istniała, nie mogłaby zdefiniować każdego możliwego „najlepszego” dla każdej możliwej sytuacji. Wiele rzeczy oznaczonych jako najlepsze praktyki to po prostu zły marketing, próbujący sprzedawać niedoinformowane narzędzia lub szkolenia.
Nawet jeśli cały zespół zgadza się, że coś jest najlepsze, nie zawsze jest możliwe wdrożenie tego w ten sposób dla różnych czynników ograniczających.
IMHO musisz użyć najlepszych praktyk jako przewodnika, co należy uważniej rozważyć w swoim projekcie. Być może masz uzasadniony powód odstępstwa, ale prawdopodobnie musisz upewnić się, że wszyscy inni w zespole wyrażą zgodę, zanim pójdziesz i zbudujesz coś dziwnego.
Niektóre argumenty na temat najlepszych praktyk po tym punkcie sprowadzają się raczej do tego, że nie zbudujemy czegoś, czego nienawidziłby następny programista, który będzie nad nim pracował. Wszyscy nienawidzą kodu, który nie jest w ich stylu, i wszyscy obwiniają wszystko za każdego, kto odejdzie, więc albo wytłumaczycie to następnemu twórcy, gdy coś narzeka, albo nie będzie was tam i nie będzie się źle mówiło niezależnie od tego, jak to kodujesz. To sprawia, że obawa ta jest w większości nieistotna.
źródło
Zdrowy rozsądek nie zawsze daje najlepsze wyniki. Sprawdzono jednak najlepsze praktyki. To sprawia, że najlepsze praktyki są bardziej wiarygodnym źródłem informacji.
źródło
Najlepsze praktyki nie są najlepsze, a zdrowy rozsądek nie jest powszechny. ;-)
Dla najlepszych praktyk lub zdrowego rozsądku lubię myśleć o nich jak o wzorach; Zapamiętaj definicję wzorca: Rozwiązanie w kontekście rozwiązuje siły w wynikowym kontekście .
Cokolwiek chcesz zrobić, powinieneś znać kontekst, którego dotyczy, siły, które rozwiązuje, i wynikowy kontekst, który tworzy. Następnie zdecyduj w swoim zespole, jakie wzorce zamierzasz ogólnie zastosować. (Może to być formalne lub nieformalne, ale tak czy inaczej, jest znacznie większe niż tylko książka Gang of Four. Obejmuje idiomy języków i lokalne biblioteki pomocników, a nie tylko opublikowane wzorce.)
Jeśli na podstawie własnego doświadczenia czujesz, że w pewnych okolicznościach lepiej byłoby nie używać określonego wzorca, ale zrobić coś innego, daj innym znać. Prawdopodobnie kontekst lub siły są tutaj inne (a może wynikowy kontekst byłby niepożądany). Nie obchodzi mnie, czy jest to spotkanie, komentarz do kodu itp., Ale jeśli wyjaśnisz, że celowo złamałeś wzór , będziesz mile przed sobą.
źródło
Najlepszą praktyką jest to, czego uczą cię w szkole, zdrowy rozsądek jest tym, czego szef chce od ciebie. Ten pierwszy tworzy oprogramowanie, które spełnia określone standardy elegancji, stylu i tym podobne. Ten ostatni płaci rachunki / zarabia pieniądze, dzięki czemu otrzymujesz zapłatę co tydzień.
Jedna to sztuka, druga to biznes, zbyt wielu z nas o tym zapomina.
źródło
Aby nieco przesadzić: Różnica polega na tym, że zdrowy rozsądek to uprzedzenie, najlepszą praktyką jest (powinna być) nauka
Z mojego doświadczenia wynika, że „zdrowy rozsądek” jest używany, gdy nie chce się przedstawiać dowodu ani przynajmniej argumentów na rzecz robienia rzeczy. To nie znaczy, że droga jest niepoprawnie zła, ale to nie znaczy, że jest też dobra.
Wśród rzeczy, które spotkałem, które zostały zracjonalizowane jako zdrowy rozsądek, są te klejnoty.
Zabawne w „zdrowym rozsądku” jest to, że nie jest to takie powszechne: wybierz dwie drużyny i pozwól im powiedzieć, co to jest „zdrowy rozsądek”, i ciesz się wojnami religijnymi.
Z drugiej strony, jako „najlepsza praktyka” zastanowiłbym się nad sposobami robienia rzeczy, które są nieco bardziej „recenzowane”. Aby uznać coś za „najlepszą praktykę”, spodziewałbym się, że zostanie sformułowany wystarczająco jasno, aby można go było przedstawić jako koncepcję („programowanie strukturalne” to najlepsza praktyka, „gotos są mylące, unikaj ich” to zdrowy rozsądek), i zastosowano więcej niż jeden raz, z dobrymi wynikami.
źródło