Dobrze zaprojektowane / wysokiej jakości oprogramowanie typu open source [zamknięte]

32

Biorę klasę projektowania oprogramowania, w której powinienem wybrać oprogramowanie open source do analizy z punktu widzenia projektowania oprogramowania.

To musi być duży projekt: nie mniej niż 100 000 linii kodu.

Naprawdę chciałbym wybrać oprogramowanie, które jest bardzo dobrze zaprojektowane i zaprojektowane tak, aby mieć dobry wgląd w dobre projektowanie oprogramowania.

Przez dobry projekt rozumiem takie rzeczy, jak znaczące klasy i architektura, dobre wykorzystanie wzorów (projektowych), dobre wykorzystanie abstrakcji, dobra organizacja komponentów, wysoka kohezja i niskie sprzężenie między komponentami itp.

Czy masz jakieś oprogramowanie, które mi zasugeruje?

Pamiętaj, że oprogramowanie musi mieć dobry projekt, projekt nie musi być dokumentowany! :)

Nie musi to być aplikacja dla użytkownika końcowego ... Może to być również biblioteka, narzędzie itp.

Andrea Zilio
źródło
3
Dlaczego pytasz nas? Co cię interesuje? Gdybym zaproponował pakiet księgowy i uważasz, że księgowość jest nudna, nie byłaby to dobra odpowiedź, prawda? Jakiego rodzaju pakiet Cię interesuje? Najpierw spójrz na te, a następnie zapytaj nas o konkretne pakiety, które oglądałeś.
S.Lott,
Dzięki za zwrócenie na to uwagi. Muszę powiedzieć, że zainteresują mnie narzędzia do tworzenia oprogramowania.
Andrea Zilio
Jakaś konkretna platforma, której chcesz użyć?
3
Spójrz na architekturę aplikacji Open Source, która opisuje wiele dobrze zaprojektowanych aplikacji typu open source.
Richard,
Wiersze miary kodu są niejednoznaczne. Rozmiar pliku wykonywalnego i wszystkich bibliotek DLL, od których zależy, może ci coś powiedzieć. jeśli istnieje dobra biblioteka, sensowne jest jej użycie. Czy zatem liczę wiersze biblioteki jako część mojej całkowitej liczby LOC, czy nie? Powiedziałbym, że wiele frameworków (bibliotek, interfejsów API, zestawów SDK lub dowolnej innej nazwy) wydaje się być bardzo dobrych (często trafiają pod każdym kątem, więc błąd można szybko znaleźć i powinien zostać szybko naprawiony). Ponieważ dobre kodery wykorzystają inne dobre biblioteki, rzeczywisty LOC nie musi być duży w przypadku złożonej aplikacji.
Job

Odpowiedzi:

23

Przez dobry projekt rozumiem takie rzeczy, jak znaczące klasy i architektura, dobre wykorzystanie wzorców projektowych, dobre wykorzystanie abstrakcji, dobra organizacja komponentów, wysoka kohezja i niskie sprzężenie między komponentami

Po pierwsze, dobre lub złe oprogramowanie nie żyje w samotności - modeluje rzeczywisty scenariusz, który ludzie postrzegają jako problem, a zatem zawsze jest ściśle powiązany z czymś, co nazywa się „domeną aplikacji”. Tak więc, ilekroć mówisz o oprogramowaniu, najpierw poznaj i przestudiuj domenę - dopiero wtedy możesz osiągnąć dyskrecję dobra i zła.

  • git - nie tylko dobry, ale niesamowity design. U podstaw nie leży kontrola wersji, tylko system plików. Cienki fornir funkcjonalny na górze rdzenia sprawia, że ​​jest to system kontroli wersji. Poznaj wnętrze git, a twoje poczucie projektowania oprogramowania zostanie oświecone.

  • jQuery - niezbyt dobrze udokumentowana (wewnętrznie) biblioteka, ale inspirujące źródło pokazujące, w jaki sposób kod JavaScript po stronie klienta może robić cuda.

  • NodeJS - jeśli chcesz tworzyć serwery, ten projekt ma odświeżająco nowe pomysły i wzorce do zaoferowania.

  • v8 - bardzo dobry kod C ++, fantastyczna biblioteka do nauki / studiowania implementacji maszyn wirtualnych.

  • Projekty NoSQL - Couch, Mongo, Redis, Cassandra - projekty te pokazują inteligentne sposoby rozwiązywania problemów związanych z trwałością. Obejmują także ideę uporczywości poliglotów.

  • Zwiększ biblioteki - dobra dawka C ++.

  • OpenStack - bardzo dobre projekty dotyczące przetwarzania w chmurze i wirtualizacji.

  • Fundacja Apache Software Foundation - Wybierz dowolny ze swoich projektów i przestudiuj go. Modułowa struktura HTTPd jest doskonałym źródłem, jeśli chcesz zobaczyć, jak komponują się komponenty. APR (przenośne środowisko wykonawcze Apache) - także bardzo dobra biblioteka.

  • mod_wsgi - jeden z najlepszych programów w języku C.

„dobre wykorzystanie wzorców projektowych” - NIE jest ważne, aby kod odpowiadał dobrze znanemu wzorowi projektowemu - ważniejsze jest, aby rozwiązał problem „inteligentnie” - aby był możliwy do utrzymania, wielokrotnego użytku i czytelny. Jeśli kod jest wciśnięty w określony „kształt” - tylko w celu zachowania wzoru - może to być zły kod.

„nie mniej niż 100 000 wierszy kodu” - od kiedy liczba wierszy stała się miernikiem dobrej jakości - zasmakowanie „dobrze zaprojektowanego / zarchiwizowanego oprogramowania” nie wymaga WIELKIEGO.

Ponownie pamiętaj, aby najpierw przestudiować naturę i niuanse problematycznej dziedziny, a następnie zagłębić się w czytanie kodu.

AKTUALIZACJA: październik 2015 r

InfluxDB - https://influxdb.com/ Projekt Go jest w fazie rozwoju i wciąż NIE jest zbyt skomplikowany. Możesz więc zacząć od zagłębiania się w kod stosunkowo łatwo niż w coś takiego jak OpenStack.

treecoder
źródło
13

Rzuć monetą. Wszystkie duże projekty Open Source muszą być genialne, aby przetrwać. Projekty Apache, Linux i GNU są genialne.

S.Lott
źródło
4
Wszystkie duże projekty OSS prowadzone przez społeczność muszą być co najmniej przyzwoite, aby przetrwać. Nie powiedziałbym genialnie. W przypadku najczęściej powiedzianych projektów rządowych wykonywanych wyłącznie przez pracowników jakość kodu nie zawsze jest najwyższa na liście priorytetów. Ale +1 za twoje przykłady.
TZHX
8
czy Wordpress jest genialny?
Drew
9
  • Chrom
  • Firefox
  • Apacz
  • MySQL
  • PostgreSQL
  • Linux
  • GNU ANTYLOPA
Michael JV
źródło
2
Czy jesteś pewien, że Firefox nie jest zaśmiecony zastałymi fragmentami kodu napisanymi na początku lat 90.? To nie wydaje się być dobrym kawałkiem kodu do studiowania współczesnych praktyk kodowania
TheLQ
3
Kod źródłowy Firefoksa i MySQL to okropne bzdury, których nigdy nie należy używać jako przykładów dobrego projektowania oprogramowania.
Jordan
7

Pyton. W szczególności CPython, podstawowa implementacja. W wersji 3.2 interpreter uruchamia około 50 KB kodu C, standardowa biblioteka ponad 400 KB kodu Pythona. Biorąc pod uwagę bardzo wysoką jakość języka i zachęcanie do zasad czytelności i dobrego projektu, uważam, że cały ten kod byłby całkiem dobry.

Tom Zych
źródło
4

TeX wraz z MetaFontem są naprawdę warte nauki: http://www.tug.org/

Twoja lokalna biblioteka może Ci pomóc z drukowanymi wersjami źródeł.


źródło
3

Poleciłbym przeczytać następującą książkę przed wyborem projektu typu open source. To daje wgląd w to, co można uznać za dobry / zły kod.

Greg Wilson
Tworzenie oprogramowania, co naprawdę działa i dlaczego wierzymy w
architekturę aplikacji Open Source

Oto także jego wywiad dotyczący wymiany stosów blogów, jeśli chcesz posłuchać autora przed spojrzeniem na jego
http://blog.stackoverflow.com/2011/06/se-podcast-09/

Co ogólnie uważa się za oprogramowanie wysokiej jakości? Samo pytanie jest bardzo subiektywne. Użytkownicy mają różne pomiary jakości. Jeden użytkownik może uznać pakiet oprogramowania za wysokiej jakości w zależności od zalet technicznych. Gdzie inni użytkownicy mogą oceniać jakość w oparciu o estetykę interfejsu użytkownika i ogólne wrażenia użytkownika.

Z perspektywy biznesowej zazwyczaj mierzą jakość oprogramowania w zależności od tego, czy spełnia ono oczekiwania klienta, czy też spełnia zobowiązania umowne klienta. Istnieje również profesjonalne postępowanie, ale zależy to od tego, z której strony ogrodzenia go widzisz.

Z punktu widzenia programistów, jak elegancki jest projekt i konstrukcja interfejsu API w momencie tworzenia oprogramowania. Ten sam standard projektowania lub kodu można uznać za nieprofesjonalny, gdy postawy i poglądy programistów zmieniają się w czasie.

Czad
źródło
2

Zasugeruję IntelliJ Community Edition, ponieważ wspominasz, że lubisz narzędzia programowe.

http://www.jetbrains.org/

Co mi się w tym podoba:

  1. Jest to narzędzie, które robi coś, a nie ramy
  2. Robią naprawdę interesujące rzeczy, takie jak statyczna analiza kodu i analiza przepływu danych, które bardzo mi się podobają, gdy widzę szczegóły.
  3. Fajną rzeczą jest to, że możesz go użyć do przeprowadzenia badania, ponieważ ma on również możliwość przeprowadzenia całej analizy kodu na sobie.

(co prawda jestem fanboyem JetBrains)

sylvanaar
źródło
2

Sam szukałem takiego projektu i zdecydowałem się na CLang.

  • Jest stosunkowo nowy (potomek LLVM, który ma zaledwie 10 lat), więc nie ma (lub nie, że widziałem) przestarzałego kodu
  • Modułowa konstrukcja (jak LLVM), bardzo dobrze przemyślana, co moim zdaniem jest obecnie bardzo ważne
  • Bardzo czysty kod, dobrze skomentowany (często widzisz cytaty ze Standardu, aby wyjaśnić różne rzeczy)
  • Bardzo ładnie zaprojektowany zestaw testów / środowisko testowe

Tam nie ma wielu Wzorów Projektowych, kilku Odwiedzających tu i tam, ale o to chodzi. Hierarchie klasowe są proste i proste ... Właściwie myślę, że prostota jest celem, nie wydaje się, aby trwała nadmiar inżynierii.

To powiedziawszy, ponieważ krytyczne pod względem wydajności, niektóre decyzje projektowe mogą wydawać się wątpliwe (unikanie funkcji wirtualnych dla wielu obiektów, kompilacja bez RTTI / wyjątków), więc nie wszystko ma zastosowanie do codziennego oprogramowania.

Matthieu M.
źródło
1

Blender jest dobrze skonstruowany i dobrze zaprojektowany.

dan_waterworth
źródło
0

Joomla, to bardzo dobrze zrobione. Ale nie jestem pewien, czy to 100 000 linii

Imran Omar Bukhsh
źródło
5
Hahahaha naprawdę?
Salman von Abbas,
0

A więc kolejny wariant - co z językiem programowania Nemerle ?

Nie jest tak popularny (ale GitHub właśnie dodał wyróżnianie dla Nemerle) i można tam znaleźć wiele dobrych punktów.

cnd
źródło