Хорошо разработанное / высококачественное программное обеспечение с открытым исходным кодом [закрыто]

32

Я учусь на уроке дизайна программного обеспечения, где мне следует выбрать программное обеспечение с открытым исходным кодом для анализа с точки зрения дизайна программного обеспечения.

Это должен быть большой проект: не менее 100 000 строк кода.

Я действительно хотел бы выбрать программное обеспечение, которое очень хорошо разработано и спроектировано, чтобы иметь хорошее представление о хорошем дизайне программного обеспечения.

Под хорошим дизайном я имею в виду такие вещи, как значимые классы и архитектура, хорошее использование шаблонов (дизайна), хорошее использование абстракции, хорошая организация компонентов, высокая когезия и низкая связь между компонентами и т. Д.

У вас есть программное обеспечение, чтобы предложить мне?

Обратите внимание, что программное обеспечение просто должно иметь хороший дизайн, дизайн не должен быть задокументирован! :)

Это не должно быть приложение для конечного пользователя ... Это также может быть библиотека, инструмент и т.д ...

Андреа Зилио
источник
3
Зачем спрашивать нас? Что тебя интересует? Если бы я предложил пакет бухгалтерских услуг, и вы находите бухгалтерский учет скучным, это не будет хорошим ответом, не так ли? Какой пакет вас интересует? Сначала посмотрите на них, а затем спросите нас о конкретных пакетах, на которые вы смотрели.
S.Lott
Спасибо за указание на это. Я должен сказать, что инструменты разработки программного обеспечения были бы интересны для меня.
Андреа Зилио
Какую платформу вы хотели бы использовать?
3
Взгляните на Архитектуру приложений с открытым исходным кодом, в которой описан ряд хорошо разработанных приложений с открытым исходным кодом.
Ричард
Строки кода меры неоднозначны. Размер исполняемого файла и все библиотеки, от которых он зависит, могут вам кое-что сказать. если есть хорошая библиотека, имеет смысл использовать ее. Затем я считаю строки библиотеки как часть моего общего количества LOC или нет? Я бы сказал, что многие из фреймворков (библиотеки, API, SDK или любое другое имя, которое вы предпочитаете) имеют тенденцию быть очень хорошими (их сильно ударили со всех сторон, поэтому ошибки быстро обнаруживаются и должны быстро исправляться). Поскольку хорошие кодировщики будут использовать другие хорошие библиотеки, для сложного применения активный LOC не обязательно должен быть большим.
Работа

Ответы:

23

Под хорошим дизайном я имею в виду такие вещи, как значимые классы и архитектура, хорошее использование шаблонов проектирования, хорошее использование абстракции, хорошая организация компонентов, высокая согласованность и низкая связь между компонентами.

Во-первых, программное обеспечение, хорошее или плохое, не живет в одиночестве - оно моделирует сценарий реального мира, который люди воспринимают как проблему, и поэтому всегда тесно связан с чем-то, называемым «областью приложения». Поэтому, когда вы говорите о программном обеспечении, сначала узнайте и изучите предметную область - только тогда вы сможете достичь усмотрения добра и зла.

  • мерзавец - не просто хороший, а удивительный дизайн. По сути, это не контроль версий, а файловая система. Тонкий шпон функциональности в верхней части ядра делает его системой контроля версий. Познакомьтесь с внутренностями git, и ваше чувство дизайна программного обеспечения будет просвещено.

  • jQuery - не очень хорошо (внутренне) документированная библиотека, но вдохновляющий источник, демонстрирующий, как код JavaScript на стороне клиента может творить чудеса.

  • NodeJS - если вы хотите создавать серверы, у этого проекта есть новые идеи и шаблоны.

  • v8 - очень хороший код на C ++, фантастическая библиотека для изучения / изучения реализаций виртуальных машин.

  • Проекты NoSQL - Couch, Mongo, Redis, Cassandra - эти проекты демонстрируют умные способы решения проблем постоянства. Также они охватывают идею постоянства полиглота.

  • Boost библиотеки - хорошая доза C ++.

  • OpenStack - очень хорошие проекты по облачным вычислениям и виртуализации.

  • Apache Software Foundation - выберите любой из своих проектов и изучите его. Модульная структура HTTPd является отличным источником, если вы хотите увидеть, как компоненты собираются вместе. APR (переносимая среда выполнения Apache) - действительно хорошая библиотека.

  • mod_wsgi - одна из лучших программ на Си, с которыми я сталкивался.

«хорошее использование шаблонов проектирования» - НЕ важно, чтобы код соответствовал общеизвестному шаблону проектирования, - более важно, чтобы он решал проблему «разумно» - чтобы его можно было обслуживать, использовать повторно и читать. Если код втиснут в определенную «форму» - просто для того, чтобы придерживаться шаблона проектирования - это может быть плохой код.

«не менее 100 000 строк кода» - с тех пор, когда количество строк стало метрикой хорошего качества, - чтобы почувствовать вкус «хорошо разработанного / архитектурного программного обеспечения», оно не должно быть БОЛЬШИМ.

Опять же, не забудьте сначала изучить природу и нюансы проблемной области, а затем углубиться в чтение кода.

ОБНОВЛЕНИЕ: октябрь 2015

InfluxDB - https://influxdb.com/ Этот проект Go находится в стадии активной разработки и по-прежнему НЕ очень сложен. Таким образом, вы можете начать копаться в коде относительно легко, чем что-то вроде OpenStack.

treecoder
источник
13

Бросить монету. Все крупные проекты с открытым исходным кодом должны быть блестящими, чтобы выжить. Проекты Apache, Linux, GNU великолепны.

С. Лотт
источник
4
Все крупные проекты OSS, управляемые сообществом, должны быть как минимум достойными, чтобы выжить. Не сказал бы блестящий. Что касается того, что обычно говорят о правительственных проектах, выполняемых исключительно сотрудниками, качество кода не всегда является наивысшим приоритетом в списке приоритетов. Но +1 за ваши примеры.
TZHX
8
Wordpress блестящий?
Дрю
9
  • Хром
  • Fire Fox
  • апаш
  • MySQL
  • PostgreSQL
  • Linux
  • GNU
Майкл СП
источник
2
Вы уверены, что Firefox не завален застойными частями кода, написанными в начале 90-х? Похоже, это не очень хорошая часть кода для изучения современных методов кодирования
TheLQ
3
Исходный код для Firefox и MySQL - это ужасные вещи, которые никогда не следует использовать в качестве примеров хорошего дизайна программного обеспечения.
Джордан
7

Python. В частности, CPython, первичная реализация. Для версии 3.2 интерпретатор выполняет около 50 тыс. Слов кода C, стандартная библиотека - более 400 тыс. Слов кода Python. Учитывая чрезвычайно высокое качество языка и его поддержку принципов читабельности и хорошего дизайна, я думаю, что весь этот код будет довольно хорошим.

Том Зыч
источник
4

TeX вместе с MetaFont действительно заслуживают изучения: http://www.tug.org/

Ваша местная библиотека может помочь вам с печатными версиями источников.


источник
3

Я бы порекомендовал прочитать следующую книгу, прежде чем выбирать проект с открытым исходным кодом. Это даст вам представление о том, что можно считать хорошим / плохим кодом.

Грег Уилсон
делает программное обеспечение, что действительно работает, и почему мы верим в
архитектуру приложений с открытым исходным кодом

Вот также его интервью по обмену стека блогов, если вы хотите послушать автора, прежде чем заглянуть в его
http://blog.stackoverflow.com/2011/06/se-podcast-09/

В целом, что считается программным обеспечением высокого качества? Сам вопрос очень субъективен. Пользователи имеют разные измерения качества. Один пользователь может считать программный пакет высококачественным в зависимости от технических достоинств. Где другие пользователи могут оценивать качество на основе эстетики пользовательского интерфейса и общего пользовательского опыта.

С точки зрения бизнеса они обычно измеряют качество программного обеспечения в зависимости от того, соответствует ли оно ожиданиям клиента или выполняет договорные обязательства клиента. Существует также профессиональное поведение, но это зависит от того, с какой стороны забора вы просматриваете его.

С точки зрения программиста, насколько изящен дизайн и конструкции API в момент создания программного обеспечения. Один и тот же дизайн или кодовый стандарт может считаться непрофессиональным, когда отношение и взгляды программистов со временем меняются.

Чад
источник
2

Я предлагаю IntelliJ Community Edition, поскольку вы упоминаете, что вам нравятся программные инструменты.

http://www.jetbrains.org/

Что мне нравится в этом:

  1. Это инструмент, который делает что-то, а не рамки
  2. Они делают действительно интересные вещи, такие как статический анализ кода и анализ потока данных, которые мне действительно нравятся, когда я вижу детали
  3. Приятно то, что вы можете использовать его для изучения, поскольку он также может выполнять весь анализ кода.

(правда, я фанат JetBrains)

Сильванаар
источник
2

Я сам искал такой проект и согласился CLang.

  • Это относительно новый (потомок LLVM, которому всего 10 лет), поэтому нет (или не то, что я видел) устаревшего кода
  • Модульная конструкция (как LLVM), очень хорошо продуманная, что я считаю очень важным в наше время
  • Очень чистый код, хорошо прокомментированный (вы часто видите цитаты из Стандарта для объяснения вещей)
  • Очень красиво оформленный набор тестов / test-environment

Там не так много шаблонов дизайна, есть несколько посетителей, но это все. Иерархия классов проста и прямолинейна ... На самом деле, я считаю, что целью является простота , похоже, что не происходит никакого чрезмерного проектирования.

Тем не менее, будучи критичным к производительности, ряд проектных решений может показаться сомнительным (избегать виртуальных функций для многочисленных объектов, компилировать без RTTI / исключений), поэтому не все применимо к повседневному программному обеспечению.

Матье М.
источник
1

Блендер хорошо структурирован и хорошо спроектирован.

dan_waterworth
источник
0

Joomla, это очень хорошо сделано. Но я не уверен, если его 100 000 строк

Имран Омар Бухш
источник
5
Хахахаха правда?
Салман фон Аббас
0

Итак, еще один вариант - как насчет языка программирования Nemerle ?

Это не так популярно (но GitHub только что добавил подсветку для Nemerle), и вы можете найти много хороших моментов там.

CND
источник