Андрей Халецкий
3563 сообщения
#10 лет назад
У программиста спрашивают: в чём сложность поддержки большого проекта?

Программист: ну представь, что ты писатель и поддерживаешь проект «Война и мир». У тебя ТЗ — написать главу как Наташа Ростова гуляла под дождём по парку. Ты пишешь «шёл дождь», сохраняешь, вылетает сообщение об ошибке «Наташа Ростова умерла, продолжение невозможно». Почему умерла? Начинаешь разбираться. Выясняется, что у Пьера Безухова скользкие туфли, он упал, его пистолет ударился о землю и выстрелил в столб, а пуля от столба срикошетила в Наташу. Что делать? Зарядить пистолет холостыми? Поменять туфли? Решили убрать столб. Получаем сообщение «Поручик Ржевский умер.» Выясняется, что он в следующей главе облокачивается о столб, которого уже нет…
Серафима Л.
10571 сообщение
#10 лет назад
SmartDesign, Насмешили. Точно отражает суть
Екатерина Г.
2818 сообщений
#10 лет назад
Это в приколы надо было)
Елена Б.
6863 сообщения
#10 лет назад
Класс!!!
Андрей Халецкий
3563 сообщения
#10 лет назад
Цитата ("greatkat"):
Это в приколы надо было)
куда там приколы, это жизнь =)
Олег Казакевич
702 сообщения
#10 лет назад
Цитата ("SmartDesign"):
Что делать? Зарядить пистолет холостыми? Поменять туфли?


Решение: Пьер Безухов со своими скользкими туфлями и пистолетом выносится в
отдельный компонент, который взаимодействует с Наташей Ростовой только через
очень "узкий" интерфейс, обложенный со всех сторон ограничениями, проверкой
инвариантов и тестами. Смертельный рикошет исключен. Падение Безухова локально и
не распостраняется за scope компонента. Скользкие туфли фиксятся подошвой с зубцами.

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

Класс пистолета переписывается таким образом, чтобы при его случайном падении
выстрел был исключен. Если случайный выстрел все-таки где-то необходим, пишется
подкласс "ненадежный пистолет", стреляющий при падении. Объекты такого пистолета
также создаются абстрактно, через фабрику.

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

Поручик Ржевский вообще исключается из кода, как персонаж, не существовавший в романе.
Разумеется, делается это только в отдельной ветке разработки, аккуратно, которая
сливается с главной веткой после тщательного тестирования и проверок, что все гладко...
Андрей Андреев
798 сообщений
#10 лет назад
SmartDesign, Очень удачное сравнение.
Спасибо Вам.

Недавно возникла аналогия как объяснить стадии жизни сайта "Дизайн->Верстка->Программирование->Продвижение" человеку не сведущему.
Разработка сайта -> Постройка много этажного дома.
Дизайн -> Архитектурный проект который чертит инженер. Еще не чего нету есть - есть только на бумаге.
Верстка -> Вывод каркаса здания. Результат: дом есть но жить в нём еще не возможно - нет коммуникаций, внутренней отделки и тд. Есть только двери и окна.
Программирование -> Подключение коммуникаций к зданию, штукатурка покраска и тд. Результат: дом пригоден для жизни но там еще не кто не живет.
Продвижение -> Заселение дома жильцами. Результат: Дом готов, в нём живут квартиранты и платят аренду.

Может немного наивное сравнение, но мне иногда помогает объяснить что к чему
Анжела Б.
5 сообщений
#10 лет назад
С одной стороны люди всё поняли, а с другой нет
Андрей Халецкий
3563 сообщения
#10 лет назад
Цитата ("okman"):
Цитата ("SmartDesign"):
Что делать? Зарядить пистолет холостыми? Поменять туфли?


Решение: Пьер Безухов со своими скользкими туфлями и пистолетом выносится в
отдельный компонент, который взаимодействует с Наташей Ростовой только через
очень "узкий" интерфейс, обложенный со всех сторон ограничениями, проверкой
инвариантов и тестами. Смертельный рикошет исключен. Падение Безухова локально и
не распостраняется за scope компонента. Скользкие туфли фиксятся подошвой с зубцами.

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

Класс пистолета переписывается таким образом, чтобы при его случайном падении
выстрел был исключен. Если случайный выстрел все-таки где-то необходим, пишется
подкласс "ненадежный пистолет", стреляющий при падении. Объекты такого пистолета
также создаются абстрактно, через фабрику.

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

Поручик Ржевский вообще исключается из кода, как персонаж, не существовавший в романе.
Разумеется, делается это только в отдельной ветке разработки, аккуратно, которая
сливается с главной веткой после тщательного тестирования и проверок, что все гладко...
Следующий вопрос после такого: а почему мне одна глава стоит как и 3 тома до этого?
И да, Ржевский не ваш, но столб использует именно этот (и фиг знает кто еще его использует), так что сценарий вполне может повториться =)