Dowody empiryczne na wybór paradygmatu programowania w celu rozwiązania problemu

11

Wiki C2 ma dyskusję na temat dowodów empirycznych dla programowania obiektowego, która zasadniczo stwierdza, że ​​nie ma odwołania do autorytetu. To było ostatnio edytowane w 2008 roku. Wydaje się, że dyskusja tutaj potwierdza : pytania, czy OO jest nieaktualny , kiedy programowanie funkcjonalne jest złym wyborem, a na zalety i wady AOP odpowiadają opinie autorów bez polegania na dowodach.

Oczywiście opinie uznanych i uznanych praktyków są mile widziane i cenne, ale są bardziej prawdopodobne, gdy są zgodne z danymi eksperymentalnymi. Czy istnieją takie dowody? Wiem, że inżynieria oprogramowania oparta na dowodach to rzecz, ale czy mogę ćwiczyć w tym kontekście? W szczególności, jeśli mam szczególny problem, Pktóry chcę rozwiązać, pisząc oprogramowanie, czy istnieje bogata wiedza, badania i badania, które pozwoliłyby mi zobaczyć, jak wynik rozwiązania podobnych problemów Pzależał od wyboru paradygmatu programowania?

Wiem, że który paradygmat wyłania się jako „właściwa odpowiedź”, może zależeć od tego, na jakie wskaźniki zwraca uwagę dane badanie, na jakich warunkach badanie jest stałe lub różne i bez wątpienia także od innych czynników. Nie wpływa to na moje pragnienie znalezienia tych informacji i ich krytycznej oceny.

Staje się jasne, że niektórzy myślą, że szukam rozwiązania „przekręć korbę” - jakiejś maszyny do kiełbas, w której umieszczam informacje o moim problemie, z której pochodzi słowo takie jak „funkcjonalny” lub „uporządkowany”. To nie jest moja intencja. To, czego szukam, to badanie, w jaki sposób - przy wielu zastrzeżeniach i założeniach, że nie będę się tutaj zajmował, ale dobra literatura na ten temat - pewne właściwości oprogramowania różnią się w zależności od problemu i wyboru paradygmatu.

Innymi słowy: niektórzy twierdzą, że „OO daje większą elastyczność” lub „programy funkcjonalne mają mniej błędów” - (część) o to proszę. Reszta prosi o dowody przeciwko temu lub założenia, na podstawie których te stwierdzenia są prawdziwe, lub dowody wskazujące, że te rozważania nie są ważne. Istnieje wiele opinii na temat tego, dlaczego jeden paradygmat jest lepszy od drugiego; czy kryje się za tym jakikolwiek cel?

Społeczność
źródło
1
wyszukiwanie w sieci opartej na dowodach inżynierii oprogramowania pokazuje wiele linków
gnat
@gnat EBSE polega na systematycznym podsumowywaniu literatury i wyciąganiu ogólnych wniosków na temat tego, w jaki sposób możemy ulepszyć praktykę. Moje pytanie brzmi, czy ta literatura istnieje; czy jest wystarczająco dużo, aby systematyczne przeglądy lub metaanalizy były produktywne.

Odpowiedzi:

12

W przypadku poprzedniego ujęcia zobacz wersję 1 tej odpowiedzi . Jednak komentarze i zmiany do pytania wyjaśniają, czego szuka pytanie, i pozwalają mi być bardziej klarownym.

Tak, inżynieria oprogramowania oparta na dowodach (EBSE) to coś. Wydaje się, że podjęto kilka wysiłków w kierunku baz danych EBSE, takich jak ten na Durham University i SEED, który został zapoczątkowany przez profesora z Cal Poly . Wszystkie te wysiłki, a także te omówione w wielu artykułach, które można znaleźć za pośrednictwem serwera IEEE Xplore lub biblioteki cyfrowej ACM(wymagana subskrypcja lub zakup wielu artykułów w obu), oparte są na medycynie opartej na dowodach. Zapewniają przegląd literatury opublikowanych danych empirycznych (obserwacyjnych i eksperymentalnych). W rzeczywistości uwzględnienie „przeglądu literatury” w ciągu wyszukiwania dowolnej wyszukiwarki publikacji dostarcza informacji na większość tematów - ponad 14000 trafień w ACM i ponad 1000 w bazie danych IEEE (przy ograniczeniu do tylko zagadnień komputerowych).

Patrząc na ogólne typy tematów omawianych w tych bazach danych EBSE i przeglądach literatury, widzę wspólny wątek - są one zwykle niezależne od technologii. Wydaje się, że nacisk kładziony jest głównie na proces i metodologię, a nie na konkretne narzędzia wykorzystywane do przeprowadzania inżynierii oprogramowania.

Tak więc ta koncepcja istnieje w inżynierii oprogramowania. Academia jest świadoma koncepcji opartej na dowodach i może z powodzeniem zastosować ją w inżynierii oprogramowania.

W szczególności pytanie dotyczy zastosowania technik EBSE do wyboru paradygmatu wydaje się trudne ze względu na samą liczbę zmiennych, które wymuszają przyjęcie założeń, a także ograniczają możliwość powtórzenia eksperymentu lub obserwacji. Jest powiedziane wprost w pytaniu - „jaki paradygmat wyłania się jako„ właściwa odpowiedź ”może zależeć od tego, na jakie wskaźniki zwraca uwagę dane badanie, na jakich warunkach badanie jest stałe lub różne, i bez wątpienia także od innych czynników” . Chociaż nie oznacza to, że badanie, który paradygmat jest „najlepszy” w danej sytuacji, sprawia, że ​​jakikolwiek przegląd literatury tych dokumentów jest niezwykle trudny do uzupełnienia i nadal wyodrębnia informacje.

Zdecydowanie nie ma rozwiązania „obróć korbą” do wyboru paradygmatu.

Biorąc pod uwagę paradygmat programowania, można znaleźć badania w różnych akademickich i branżowych bazach danych na temat tego, jak ten paradygmat wpływa na różne aspekty rozwoju oprogramowania - jakość, wady, wydajność itd. - w różnych specyficznych warunkach, począwszy od wiedzy i doświadczenia zespół do domeny problemu. Każdy rygorystyczny dokument powinien jasno określać warunki, w jakich dane były gromadzone, i założenia. Problemem staje się próba wyodrębnienia czynników, które czynią go dobrym w każdym z tych warunków.

Naukowo istnieją pewne stwierdzenia, które można łatwo zbadać. Na przykład stwierdzenie, że paradygmat funkcjonalny dobrze nadaje się do aplikacji wymagających współbieżności, wynika z twierdzenia Churcha-Rossera . Z tego powodu jest prawdopodobne, że system oprogramowania napisany w języku funkcjonalnym będzie miał mniej wad związanych z współbieżnością niż ten sam system napisany w języku proceduralnym lub obiektowym.

Jednak z praktycznego punktu widzenia zespół programistów nie zawsze może stosować „najlepsze” narzędzie lub technikę do pracy tylko dlatego, że wskazują na to badania. Chociaż dążymy do produkcji systemów oprogramowania najwyższej jakości, działamy w ramach ograniczeń. Często widzę, że ograniczenia te są zminimalizowane (lub nawet usunięte z równania) podczas omawiania skuteczności dowolnej metodologii.

Jako praktykujący, kiedy biorę udział w wyborze technologii do zastosowania, staram się znaleźć najlepsze możliwe narzędzia. Ale potem ograniczam się do tego, co jest znane i dobrze rozumiane przez zespół, który mam. Wracając do mojego poprzedniego przykładu, jeśli mam zespół dobrze zorientowany w tworzeniu współbieżnych aplikacji w C ++ i brak doświadczenia w Haskell, nie ma sensu proponować zbudowania systemu w Haskell, ponieważ prawdopodobnie nie będę w stanie ograniczenia harmonogramu i budżetu, a moja jakość prawdopodobnie ucierpi z powodu braku doświadczenia w łańcuchu narzędzi.

Reasumując, inżynieria oprogramowania oparta na dowodach jest ogólnie dobrą rzeczą, a istnieją przeglądy literatury i są łatwo dostępne. Istnieją jednak aspekty inżynierii oprogramowania, w których zastosowanie podejścia opartego na dowodach ma niewielką wartość. Jednym z nich jest wybór paradygmatu programowania do prac rozwojowych na dużą skalę.

Jeśli chcesz dowiedzieć się, w jaki sposób obiektowa orientacja rozwiązuje problem ponownego użycia lub defektów w programowaniu funkcjonalnym - z łatwością znajdziesz publikacje na ich temat. Jednak nie znalazłem (ani nie zaufałbym) publikacji, która byłaby w stanie skutecznie zająć się wyborem paradygmatu w szerokim zakresie rzeczywistych projektów inżynierii oprogramowania.

Thomas Owens
źródło
Sekcja na temat kompletności Turinga ignoruje kompromisy, które chcę, aby ujawniono i porównano. Podam konkretny przykład. Wiele osób mówi mi, że programowanie funkcjonalne doskonale nadaje się do unikania błędów współbieżności. Teraz dowiadujemy się, że Schemat, podobnie jak Pascal, jest kompletny w Turinga. Dlatego powinno być możliwe proceduralne pisanie kodu bezpiecznego dla współbieżności. Zgoda. Ale czy to świetnie ? Czy są zalety wyboru jednej metody? Czy można zmierzyć takie zalety?
1
@GrahamLee Potwierdzenie lub odrzucenie twojej hipotezy wymaga obiektywnych dowodów, które nie istnieją. Istnieją subiektywne powody, aby stworzyć nowy paradygmat i nowy model reprezentujący dokładnie te same możliwości obliczeniowe - i nie jest to ograniczone do języków programowania, ale także do podstawowej reprezentacji matematycznej tych języków . Te obiektywne przyczyny obejmują celowanie w określoną grupę demograficzną (matematyk obliczeniowy kontra analityk biznesowy - ich sposób myślenia jest inny, wymaga innego paradygmatu).
Thomas Owens
2
@Thomas: Twoja sugestia, że ​​praktyki programowania są wyjątkowo nieprzejrzyste dla nauki, jest szczególna. Trwa wiele badań. Często cytowanym przykładem jest grupa badawcza Lutza Prechelta . Nie znam tego obszaru wystarczająco dobrze, aby wiedzieć, czy ktokolwiek poradził sobie z konkretnymi pytaniami Grahama, ale nie ma powodu, by sądzić, że nie można ich zastosować do metod stosowanych przez Prechelta i innych.
Cris,
1
@Chris Nie wierzę, że są nieprzejrzyste dla nauki. Uważam jednak, że są pewne rzeczy, które - jak mówi Graham w pytaniu - dodają do badań „wiele zastrzeżeń i założeń”, nie są już przydatne dla praktyków. W tym momencie, z praktycznej perspektywy w okopach, bardziej efektywne jest podejmowanie decyzji na podstawie historii i doświadczenia. Posiadanie dobrych, twardych, prawidłowych danych jest bardzo dobrą rzeczą. Ale przychodzi moment, kiedy jest to zbyt trudne do zdobycia lub jest ważne tylko w bardzo specyficznej sytuacji, która nie jest przydatna dla przemysłu.
Thomas Owens
1
@Thomas Wątpię w to. Ogólna praktyka medyczna jest co najmniej tak sytuacyjna i wrażliwa na kontekst, jak inżynieria oprogramowania, i, ee, rośnie liczba dowodów na to, że GP oparte na dowodach przynosi wymierne ulepszenia. Jest to w dużej mierze kwestia ilości i jakości badań.
Cris,
7

Czytałem The Art of Unix Programming autorstwa Erica S. Raymonda. Ma kilka bardzo ciekawych spostrzeżeń historycznych na temat rzeczy, które teraz bierzemy za pewnik. Przytacza kilka dobrych badań z oprogramowania IEEE, które wykorzystują dowody empiryczne, takie jak gęstość wad. To może być dobre źródło, jeśli szukasz studiów w stylu akademickim.

Nawet techniki takie jak modularyzacja przy użyciu funkcji nie zawsze były powszechną praktyką. Jeden z moich ulubionych cytatów z tej książki:

Dennis Ritchie zachęcał do modułowości, mówiąc wszystkim, że wywołania funkcji były naprawdę bardzo tanie w C. Wszyscy zaczęli pisać małe funkcje i modularyzować. Wiele lat później odkryliśmy, że wywołania funkcji były wciąż drogie na PDP-11, a kod VAX często spędzał 50% swojego czasu na instrukcji CALLS. Dennis nas okłamał! Ale było za późno; wszyscy byliśmy uzależnieni ...

- Steve Johnson

Są jednak naprawdę dwa problemy ze zbytnim doświadczeniem. Po pierwsze, jakość kodu jest bardzo subiektywna. Kod może być okropny i nadal być poprawny. Ludowej postrzeganie paradygmatu programowania jest bardzo ważny parametr, ponieważ kod jest napisany dla ludzi, aby czytać jak w przypadku komputerów, jeśli nie więcej.

Drugi problem polega na tym, że 50% programistów ma poniżej przeciętnego talentu programistycznego. Nie ma znaczenia, czy Twój najlepszy programista jest bardziej produktywny przy użyciu programowania funkcjonalnego, jeśli „motłoch” ma trudności z pisaniem działającego oprogramowania, nie mówiąc już o pięknym, dobrze zaprojektowanym oprogramowaniu. Podobnie z językami programowania TMTOWTDI , twój najlepszy programista nadal będzie pisał czysty, modułowy kod, ale mniej utalentowani koderzy piszą szum linii z powodu braku narzuconej struktury.

Dlatego myślę, że OOP zyskał najwyższą popularność pomimo swoich braków. Nie jest tak restrykcyjny, że hobbluje najbardziej utalentowanych, ale jego struktura zapewnia zwięzły sposób komunikowania się i narzucania dobrych zasad projektowych najmniej utalentowanym.

W naszej pracy mamy tendencję do oceniania rozwiązania w oparciu o same zalety techniczne. Udane przedsięwzięcie musi również uwzględniać ludzką stronę równania.

Karl Bielefeldt
źródło
„jakość kodu jest bardzo subiektywną rzeczą” - zgadza się - musisz uważać na to, co mierzysz, a postrzeganie jest ważnym czynnikiem. Ale postrzeganie, podobnie jak wiele innych rzeczy, jest również plastyczne: spójrz na wzrost i spadek i wzrost programowania funkcjonalnego, aby przekonać się, że to, co ludzie myślą o tym, jak pracują, nie jest bezpośrednio związane z tym, jak działają. Niedawno ponownie przeczytałem TAOUP. Częścią mojej motywacji do tego pytania jest znalezienie we wczesnej literaturze rozwiązań problemów, które są obecne w inżynierii oprogramowania.
+1, „Drugi problem polega na tym, że 50% programistów ma talent programistyczny poniżej średniej”. To zdanie jest dla mnie ulgą. Jest lepszy niż wiele tabletek, które wypróbowałem :)
NoChance
3

Istnieją konkursy programistyczne, które wykorzystują komputerowy system oceniania i umożliwiają pisanie w różnych językach oraz publikowanie wszelkiego rodzaju wyników i rzeczy. Założę się, że mają dla ciebie dobre dane. Oto lista 8: http://www.makeuseof.com/tag/8-onlineprogramming-contests-challenge-win/

Wyobrażam sobie, że można dokonać sensownych porównań rozwiązań bardzo prostych i jednoznacznych problemów, takich jak suma kwadratów lub seria Fibonacciego, lub narysować linię prostą za pomocą algorytmu linii Bresenhama. Większość rzeczywistych zadań programistycznych nie ma tak jednoznacznych celów, a każdy język ma swoje ulubione punkty. Duża część zalet języka jest subiektywna. Bardziej sensowne dane można znaleźć, badając zadowolenie programistów i klientów, niż licząc wiersze kodu lub liczbę błędów.

Pamiętam, jak spędziłem pół dnia, pisząc jeden z moich pierwszych programów Awk, pomyślałem, że zajęłoby mi to cały tydzień, aby zrobić to samo w Javie. Ale to dlatego, że moje rozwiązanie Java koncentrowało się na byciu solidnym, ponieważ rozwiązanie Awk było szybkie i brudne i wymagało ręcznego dostrajania wejścia i wyjścia i było naprawdę wyrzucane, kiedy skończyłem. Awk i Java są świetne, ale nie do tych samych rzeczy.

Myślę, że mówię o tym, że w rzeczywistych aplikacjach porównywanie języków lub narzędzi w znaczący sposób jest niezwykle trudne - problem starych jabłek i pomarańczy. Powodzenia! Chciałbym zobaczyć, co się dowiesz.

GlenPeterson
źródło
2

Od ponad 30 lat badam różne sposoby tworzenia oprogramowania. Istnieje niewiele dobrych opublikowanych dowodów na wybór paradygmatu.

Złożyłem dużą przeszukiwalną bibliografię ASCII. Obejmuje to wiele artykułów i artykułów IEEE i ACM. Oznaczam elementy dostarczonym dowodem. Oto najczęstsze tagi:

...
133 =EXPERIMENT
177 =HISTORY
233 =IDEA
267 =SURVEY
338 =ESSAY
395 =THEORY
454 =ADVERT
491 =EXPERIENCE
500 =DEMO

Teraz wyszukaj PARADIGM i policz tagi

  1 =ESSAY
  1 =EXPERIENCE
  1 =HISTORY
  1 =IDEA
  1 =POLEMIC
  1 =SURVEY
  1 =TALK

Jeśli chcesz kopać głębiej, http://cse.csusb.edu/dick/lab.html i mam nadzieję, że to pomoże ...

Richard John Botting
źródło
1

Wydaje się, że w wielu przypadkach nie ma wystarczająco dużego zbioru badań lub wystarczająco wysokiej jakości, aby można było wyciągnąć ogólne wnioski na temat tego, czy jedna praktyka w inżynierii oprogramowania jest lepsza od innej. W szczególności szukałem badań nad pracą w różnych paradygmatach, ale brak dostępności nie ogranicza się do tej dziedziny, więc sformułuję swoją odpowiedź w szerszym znaczeniu.

Artykuł z 2004 r., Inżynieria oprogramowania oparta na dowodach autorstwa Kitchenham i in. , Opisuje w zwięzły sposób korzyści płynące z podejścia opartego na dowodach oraz problemy z jego wdrożeniem w inżynierii oprogramowania. Nie będę tutaj omawiał strony korzyści (z pytania wynika, że ​​chciałbym móc w ten sposób pracować), ale problemy są istotne jako odpowiedź na pytanie, które zadałem.

  • po pierwsze, jeśli nie jesteś członkiem ACM, prawdopodobnie nie możesz w ogóle przeczytać powyższego linku, który obejmuje pierwszy problem: nie wszystkie istniejące badania są w rzeczywistości dostępne dla praktyków.
  • wiele praktyk inżynierii oprogramowania odbywa się w tajemnicy jako część poufnych procesów handlowych, więc nie ma wglądu w to, co działało lub nie działało dla tych ludzi.
  • inżynieria oprogramowania to wykwalifikowana praktyka, więc zorganizowanie odpowiednio zaślepionego badania jest trudne (nie niemożliwe, tylko trudne).
  • różne części cyklu życia oprogramowania wpływają na wyniki innych w stopniu trudnym do kontrolowania w żadnym eksperymencie.
  • jak pokazują dyskusje tutaj, wielu praktyków nie uważa, że ​​„literatura” (lub ogólnie akademicka strona inżynierii oprogramowania) jest istotna dla ich pracy.

Więc odpowiedź, której szukam, brzmi „nie”, prawdopodobnie dowodów, których szukam, nie ma. Powinienem wybrać mój paradygmat w oparciu o istniejące popularne kryteria tego, co wiem, co jest fajne i eksperta.


źródło
2
na podstawie streszczenia cytowanego artykułu, podkreśl moje: „Czynnik umiejętności oznacza , że eksperymenty z inżynierią oprogramowania są podatne na uprzedzenia podmiotowe i eksperymentalne . Współczynnik cyklu życia oznacza, że trudno jest określić, jak zachowają się technologie po wdrożeniu . Wnioski: Inżynieria oprogramowania skorzystałaby na przyjmując, co może, z podejścia opartego na dowodach, pod warunkiem że zajmuje się konkretnymi problemami wynikającymi z natury inżynierii oprogramowania . ” Do czego dodałbym: powodzenia! ;)
Steven A. Lowe
Steven: częścią motywacji stojącą za EBSE jest przejście od „Mogę odgadnąć następujące problemy, dlatego odrzucę wszelkie szanse, że twoje rozwiązanie zadziała”, do analizy wyników według ich własnych zalet. W papierze jest znacznie więcej niż jego streszczenie.
2
Doceniam twój entuzjazm. Nauki medyczne i tworzenie oprogramowania to radykalnie różne dyscypliny. Chociaż analogia jest interesująca, nie jest przełomowa. Pełny artykuł jest dostępny tutaj labada.inf.utfsm.cl/~gvaldes/ESE/docs/… Rozdział 5 odzwierciedla niedopasowanie impedancji wspomniane w streszczeniu. Bardziej bezpośrednim mapowaniem technik medycznych byłoby debugowanie istniejących systemów, a nie budowanie nowych. ;) Jeśli chcesz budować lepsze produkty, buduj lepsze zespoły. Ludzie są o wiele ważniejsi niż narzędzia (por. Peopleware)
Steven A. Lowe
1
uzupełnienie: strona EBSE zawiera przydatne informacje, dur.ac.uk/ebse/evidence.php byłby szczególnie przydatny dla osób początkujących w dziedzinie SE - ale weź udział w ankietach z blokiem soli, ponieważ (1) dostępne dowody jest niewielka i (2) średnie wyniki mogą nie mieć związku z wydajnością zespołu określonych osób o wysoce specjalistycznych umiejętnościach i predyspozycjach.
Steven A. Lowe,
0

Nie wierzę, że tego typu badania istnieją. Można by sądzić, że to nie paradygmat programowania jest tak ważny, jak stosowany algorytm. Na przykład, biorąc pod uwagę każdy nietrywialny system, który opiera się na algorytmach małej przestrzeni, werset pierwszy, który opiera się na algorytmach małego czasu, generowałby różne metryki. Ten, który ma lepszy czas, najprawdopodobniej zostanie uznany za bardziej prawidłowy, chyba że problemem jest miejsce, to odwrotność jest prawdziwa. Uważam, że przypomina to brukowanie drogi. Podczas gdy algorytm lub przepis na wytwarzanie materiałów jest stały we wszystkich procesach, możliwe jest, że jedna firma uważa, że ​​brukowanie dwóch pasów jednocześnie (po jednym z każdej strony drogi) jest lepsze niż brukowanie dwóch pasów po tej samej stronie drogi jednocześnie . Pod koniec dnia nie ma to znaczenia, ponieważ proces tworzenia czarnego blatu jest nadal taki sam, jedyną różnicą jest podejście. Wracając do programowania, jeśli masz zespół programistów C, napisz kod w sposób proceduralny, jeśli masz zespół programistów Java, napisz go w OO. Nie rozłączaj się z paradygmatem tak bardzo, jak implementacja algorytmu. Ponieważ pod koniec dnia możesz pisać Java jak C i możesz próbować pisać C jak Java.

AKTUALIZACJA

Aby odpowiedzieć na komentarz, Graham mnie zostawił:
Zakładam, że przez architekturę masz na myśli paradygmat programowania. Jeśli zamierzasz korzystać z Clojure, może powinieneś zatrudnić zespół programistów Clojure. Jednak w oparciu o szybkie wyszukiwanie Clojure jest językiem opartym na Javie, tak się składa, że ​​działa. Biorąc pod uwagę te informacje, wziąłbym programistów Java (ponieważ technicznie mogą po prostu napisać Javę i da to te same wyniki) lub szukać funkcjonalnych programistów, takich jak programiści Haskell. Teraz, jeśli chodzi o wybór tego, co najlepsze, jest całkowicie zależne od twojego zespołu. Nigdy nie miałbym zespołu ekspertów ds. Relacyjnych baz danych, który organizowałby dla mnie rozwiązanie w chmurze, ani nie miałbym zespołu funkcjonalnych programistów opracowujących dla mnie rozwiązanie zorientowane obiektowo. Musisz wykorzystać mocne strony zespołu, w którym nie masz uwielbianej wizji, do tego, co zespół „powinien”

Woot4Moo
źródło
Jak wybrać, czy zatrudnić zespół programistów Java, czy zespół programistów C? Czy powinienem je przekwalifikować w Clojure? Po wybraniu mojego algorytmu, jaka architektura jest „najlepszym” sposobem na enkapsulację go w rozwiązaniu programowym, dla danych wartości „najlepszego”?
@GrahamLee zobacz moją aktualizację
Woot4Moo
Wydaje mi się, że omawiamy ten sam problem, ale na różnych poziomach abstrakcji. „Wykorzystanie mocnych stron zespołu” oznaczałoby, że nigdy nie zbuduje się komputera, ponieważ w Bletchley Park nie ma nikogo, kto mógłby budować komputery. Czasami musisz powiedzieć „moglibyśmy stworzyć lepsze rozwiązanie, gdybyśmy tego użyli ”; szukam informacji o tych przypadkach.
0

Różne paradygmaty prowadzą do różnych rozwiązań. To, które dopasowanie jest „najlepsze”, zależy w dużej mierze od:

  • rozwiązanie
  • zespół programistów
  • środowisko operacyjne

Nie znam takich ostatecznych badań i nawet jeśli takie byłyby, nie ufałbym temu.

To jest praca architekta.

Zastąpienie mądrości architekta potencjalnie nieistotnymi wnioskami z badania jest receptą na katastrofę.

Uwaga: komentarz wspomina o podjęciu decyzji o „algorytmie”, a następnie o wyborze języka. Algorytmy są centralnym mechanizmem strukturalnym języków proceduralnych. Języki obiektowe koncentrują się na klasach i wzorcach współpracy / komunikacji. Jeśli jesteś przekonany (jako architekt), że rozwiązanie zorientowane na algorytm jest „najlepsze”, trzymaj się języków proceduralnych lub funkcjonalnych.

Dodatek: brak zaufania do badań nie jest „przesądem”, to zdrowy rozsądek. Eksperymenty naukowe muszą być obiektywne i powtarzalne. Projekty oprogramowania są wysoce subiektywne, ale co gorsza są to niepowtarzalne eksperymenty . Po prostu nie można wdrożyć projektu X z zespołem Y, zmierzyć wyniki, a następnie cofnąć czas, usunąć wspomnienia i ponownie wykonać ten sam projekt z tym samym zespołem. Informacje odkryte lub dorozumiane w badaniach mogą być przydatne dla architekta, ale nigdy nie mogą być ostateczne.

Steven A. Lowe
źródło
1
Czy zatem architekt nie powinien szukać wcześniejszej pracy, na której mógłby zbudować swoją opinię? Prawdopodobnie nie - stąd pytanie, czy i gdzie można znaleźć takie wyniki.
2
Gdyby istniało ostateczne badanie z rozsądną metodą eksperymentalną, wyniki badania mogłyby być interesujące; w tej chwili odpowiedzi te wydają się stwierdzać, że każde badanie jest bezwartościowe bez względu na metodę, która jest trochę zbyt nienaukowa dla mojego gustu
jk.
3
@Steven: słowo „nie ufać wynikom prawdziwie ostatecznych badań” to „przesąd”. Być może to, co naprawdę masz na myśli, to to, że nie wierzysz, że kiedykolwiek mogą istnieć ostateczne badania w SE (które stwierdzenie oczywiście wymagałoby dużego, dobrze popartego materiału dowodowego).
Cris,
1
Jakość metody programowej polega na tym, jak dobrze odpowiada ona lokalnym potrzebom człowieka. Zasadniczo nie ogranicza go prawo fizyki (Scotty). Upłynie dużo czasu, zanim „oprogramowanie” [dyscyplina] zdestyluje swoje niezmienne podstawowe prawa. Na przykład patrz „Wskaźniki jakości oprogramowania: trzy szkodliwe wskaźniki i dwa pomocne wskaźniki” w ppi-int.com/newsletter/SyEN-046.php#feature i ppi-int.com/newsletter/SyEN-047.php#feature
Philip Oakley
1
@Cris: Dla przypomnienia, nie, nie sądzę, aby kiedykolwiek istniały naprawdę ostateczne badania w tej dziedzinie; patrz uzupełnienie. Pomysł, że do podjęcia krytycznej decyzji architektonicznej można zastosować „ostateczne” badanie w celu podjęcia krytycznej decyzji architektonicznej, to „odwołanie się do władzy”, co jest formą logicznego błędu :) Z mojego doświadczenia - i nie robię koca oskarżenia, tylko spostrzeżenie - poszukiwanie takich rzeczy jest najczęściej albo próbą uniknięcia odpowiedzialności za decyzję, albo próbą poparcia już podjętej decyzji.
Steven A. Lowe,