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.
źródło
Odpowiedzi:
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.
źródło
Rzuć monetą. Wszystkie duże projekty Open Source muszą być genialne, aby przetrwać. Projekty Apache, Linux i GNU są genialne.
źródło
źródło
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.
źródło
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
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.
źródło
Zasugeruję IntelliJ Community Edition, ponieważ wspominasz, że lubisz narzędzia programowe.
http://www.jetbrains.org/
Co mi się w tym podoba:
(co prawda jestem fanboyem JetBrains)
źródło
Sam szukałem takiego projektu i zdecydowałem się na
CLang
.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.
źródło
Blender jest dobrze skonstruowany i dobrze zaprojektowany.
źródło
Joomla, to bardzo dobrze zrobione. Ale nie jestem pewien, czy to 100 000 linii
źródło
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.
źródło