Я учусь на уроке дизайна программного обеспечения, где мне следует выбрать программное обеспечение с открытым исходным кодом для анализа с точки зрения дизайна программного обеспечения.
Это должен быть большой проект: не менее 100 000 строк кода.
Я действительно хотел бы выбрать программное обеспечение, которое очень хорошо разработано и спроектировано, чтобы иметь хорошее представление о хорошем дизайне программного обеспечения.
Под хорошим дизайном я имею в виду такие вещи, как значимые классы и архитектура, хорошее использование шаблонов (дизайна), хорошее использование абстракции, хорошая организация компонентов, высокая когезия и низкая связь между компонентами и т. Д.
У вас есть программное обеспечение, чтобы предложить мне?
Обратите внимание, что программное обеспечение просто должно иметь хороший дизайн, дизайн не должен быть задокументирован! :)
Это не должно быть приложение для конечного пользователя ... Это также может быть библиотека, инструмент и т.д ...
источник
Ответы:
Во-первых, программное обеспечение, хорошее или плохое, не живет в одиночестве - оно моделирует сценарий реального мира, который люди воспринимают как проблему, и поэтому всегда тесно связан с чем-то, называемым «областью приложения». Поэтому, когда вы говорите о программном обеспечении, сначала узнайте и изучите предметную область - только тогда вы сможете достичь усмотрения добра и зла.
мерзавец - не просто хороший, а удивительный дизайн. По сути, это не контроль версий, а файловая система. Тонкий шпон функциональности в верхней части ядра делает его системой контроля версий. Познакомьтесь с внутренностями 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.
источник
Бросить монету. Все крупные проекты с открытым исходным кодом должны быть блестящими, чтобы выжить. Проекты Apache, Linux, GNU великолепны.
источник
источник
Python. В частности, CPython, первичная реализация. Для версии 3.2 интерпретатор выполняет около 50 тыс. Слов кода C, стандартная библиотека - более 400 тыс. Слов кода Python. Учитывая чрезвычайно высокое качество языка и его поддержку принципов читабельности и хорошего дизайна, я думаю, что весь этот код будет довольно хорошим.
источник
TeX вместе с MetaFont действительно заслуживают изучения: http://www.tug.org/
Ваша местная библиотека может помочь вам с печатными версиями источников.
источник
Я бы порекомендовал прочитать следующую книгу, прежде чем выбирать проект с открытым исходным кодом. Это даст вам представление о том, что можно считать хорошим / плохим кодом.
Грег Уилсон
делает программное обеспечение, что действительно работает, и почему мы верим в
архитектуру приложений с открытым исходным кодом
Вот также его интервью по обмену стека блогов, если вы хотите послушать автора, прежде чем заглянуть в его
http://blog.stackoverflow.com/2011/06/se-podcast-09/
В целом, что считается программным обеспечением высокого качества? Сам вопрос очень субъективен. Пользователи имеют разные измерения качества. Один пользователь может считать программный пакет высококачественным в зависимости от технических достоинств. Где другие пользователи могут оценивать качество на основе эстетики пользовательского интерфейса и общего пользовательского опыта.
С точки зрения бизнеса они обычно измеряют качество программного обеспечения в зависимости от того, соответствует ли оно ожиданиям клиента или выполняет договорные обязательства клиента. Существует также профессиональное поведение, но это зависит от того, с какой стороны забора вы просматриваете его.
С точки зрения программиста, насколько изящен дизайн и конструкции API в момент создания программного обеспечения. Один и тот же дизайн или кодовый стандарт может считаться непрофессиональным, когда отношение и взгляды программистов со временем меняются.
источник
Я предлагаю IntelliJ Community Edition, поскольку вы упоминаете, что вам нравятся программные инструменты.
http://www.jetbrains.org/
Что мне нравится в этом:
(правда, я фанат JetBrains)
источник
Я сам искал такой проект и согласился
CLang
.Там не так много шаблонов дизайна, есть несколько посетителей, но это все. Иерархия классов проста и прямолинейна ... На самом деле, я считаю, что целью является простота , похоже, что не происходит никакого чрезмерного проектирования.
Тем не менее, будучи критичным к производительности, ряд проектных решений может показаться сомнительным (избегать виртуальных функций для многочисленных объектов, компилировать без RTTI / исключений), поэтому не все применимо к повседневному программному обеспечению.
источник
Блендер хорошо структурирован и хорошо спроектирован.
источник
Joomla, это очень хорошо сделано. Но я не уверен, если его 100 000 строк
источник
Итак, еще один вариант - как насчет языка программирования Nemerle ?
Это не так популярно (но GitHub только что добавил подсветку для Nemerle), и вы можете найти много хороших моментов там.
источник