пятница, 18 февраля 2011 г.

Размышления об идеальной архитектуре приложения. Часть 1: Возможно ли это?

Содержание

Часть 1

Пролог

Нет, здесь я имею в виду не язык программирования, а именно вступление к публикации. И терминатор здесь как нельзя кстати, потому что мы будем решать именно задачу построения "Терминатора", как минимум T-100, а дальше как пойдет. Ко всем уважаемым читателям есть огромная просьба выполнять следующие пункты:
  • читать пост до конца
  • если не читаете до конца - просто забейте, и не пишите комментарии.
  • если уж собрались писать, не задавайте, пожалуйста, вопросы о моем возрасте, цвете волос и прочем :)
  • я на них отвечаю тут: мне на момент написания статьи - 21 год, учусь на 5-м курсе института, цвет волос каштановый...
  • на посты типа: "это нереально", отвечаю тут же известной эмпирически созданной формулой группой ученых, пытавшихся создать контроллируемый ядерный взрыв: "энтузиазм = 1/опыт".
Так, с прологом разобрался, всех остальных милости прошу дальше...

Постановка задачи

Тем, кто во время чтения пролога забыл, в чем суть задачи, напоминаю, и переформулирую:

"Существует ли идеальная архитектура приложений, и можна ли создать фреймворк годный для решения всех-всех-всех задач программной инженерии?"

Вот это постановка вопроса! Да? Существует ли ответ на этот вопрос?
Ну, судя по наличию языков программирования, фреймворков и решений... наверное, пока нет.
Стоит ли работать над этим? То есть, стоит ли искать такое решение?
Предположим, что да. Зачем тогда я тут стучу пальцами по клавиатуре?
Являются ли все существующие решения этим самым поиском?
Осмелюсь сказать, что нет. Есть множество шаблонов проектирования, рекомендаций на все случаи жизни, архитектур, и еще много умных слов, аббревиатур, которые успешно и неуспешно используются при создании приложений.
Почему?
Каждый инженер-разработчик работает в своем кругу задач. Общее множество задач растет с каждым днем с развитием аппаратных и программных платформ, поэтому эти самые инженеры-разработчики работают с каждым днем с более узким кругом задач (если брать отношение мощности множества задач к общему множеству всех-всех-всех возникающих задач). То есть, из это следует, что на самом деле мы не приближаемся к решению, а отдаляемся от него.
Пути решения

Если попытаться приближаться к решению, мы стыкаемся с двумя принципиальными моментами:
  1. Тот, кто решает данную задачу, должен набить руку в большом круге областей задач (в идеале на всем множестве возникающих инженерных задач компьютерных наук), и должен быть знаком с лучшими (предпочтительными / идеальными) решениями этих задач. Потом найти пересечение множеств всех подходов к решению задач, и... вуаля! В чем проблема? Наверное в том, что никакой жизни не хватит такой опыт получить :)
  2. Исходя из предыдущего пункта, напрашивается вывод, что с практической стороны подход невозможен, и решать эту задачу (создавать фреймворк) нужно призывая теоретический подход. Хорошо это? Ну, как показывает практика, 100 500 подводных камней могут возникнуть, и, собственно, возникают. Как их избежать?
Выбор пути

Из вышесказанного можно предположить, что только второй путь, по крайней мере, кажется не невозможным. Что я предлагаю? Я предлагаю пойти этим путем, принимая только "аксиоматические" мысли, и отбрасывая спорные. То есть поступать примерно так, как это делают математики: "Определяем аксиомы, на их основе строим теоремы, и доказываем их".

Выводы

Идельной универсальной архитектуры приложений нет ... Пока... Почему-бы не попытаться ее создать? На Python, конечно, на чем же еще? :) "There should be one-- and preferably only one --obvious way to do it." Может, он существует, путь этот, неизбитый?

Благодарности

Особую благодарность хочется выразить моему другу Дмитрию ака semargl89, при участии которого эта злостная публикация появилась, и который со всем написанным согласен :), но требует деталей и продолжения, и участвует в дискуссиях составляя мне оппозицию.
To be continued... maybe soon... maybe later... maybe sometimes...
P.S
Минуту назад зафоловил Шварценеггера в Твиттере :)

8 комментариев:

  1. Универсальний не всегда лучший. С помощью универсального можно решить любую задачу. Но для каждой задачи есть не универсальный подход применение которого лучше (быстрее, эффективнее, проще).
    Математики придумали нейроные сети для решения большой области задач, но реально каждую с них можно решить быстрее другим путем.
    Мне интересно почитать продолжение размышлений. Возможно у меня ошибочные стереотипы.

    ОтветитьУдалить
  2. >>> Универсальний не всегда лучший.
    >>> Математики придумали нейроные сети для решения большой области задач.

    Человек рождается с хорошей нейронной сетью, и он является универсальным и лучшим средством решения задач, создавая для этого калькулятор, молоток или компьютер :)

    Это я о том, что в разработке ПО мы имеем некоторые аксиомы, против которых никто не будет спорить. Например, большую задачу "всегда лучше разбивать задачу на подзадачи" (а вот то, что считать большой задачей, и до какого момента разбивать - это уже вопрос, и как его формализовать - хрен, как говорится, знает).

    На базе их и строить остальное, их я и попытаюсь оформить в следующих постах, и обсуждать.

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

    P.S.
    Лобачевского и паралельные прямые не предлагать...

    ОтветитьУдалить
  3. И в продолжение об универсальности решения...

    Его, собственно мы и ищем. "Универсальное решение не всегда лучше" - так мы и ищем такое, чтоб было хорошее. То есть в общем случае "плохое" решение есть тога, когда есть решение получше, иначе не с чем сравнивать :)

    ОтветитьУдалить
  4. Ростислав, как обстоят дела с покорением мира?
    По моему, гораздо более легкая и обозримая задача.

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

    А пока отвечу уклончиво:

    © "И все-таки она вертится..."

    ОтветитьУдалить
  6. Ну-ну. Конечно, почитаю что ты напридумываешь.

    ОтветитьУдалить
  7. @Андрей Светлов:

    Підкорення світу - це підзадача створення універсального фреймворку :)

    ОтветитьУдалить

В этом гаджете обнаружена ошибка