Цитата:
И, наверное, за счёт гибкости своей отлично подходящая для задач самого разного рода...
В общем такой подход может и покажется кому-то избыточным, но опыт говорит, что решения получаются более надёжными...
На позапрошлой работе время от времени случались «наезды», что вот мол опять что-то засбоило и пошло не так. В связи с тем, что коллектив был образован и работал до моего прихода уже долгое время, естественно, что вдруг участившиеся случаи сбоев и аварий, все автоматически связали с добавлением в систему переделанных мною модулей... Тем более, что именно в моих логах чаще всего оказывалась «посмертная запись» о недопустимых режимах или выходе значений параметров за безопасные диапазоны (туда, где система просто по логике не могла существовать).... Но, в конце концов, оказалось, что это предыдущий товарищ, разрабатывавший эту подсистему, просто не «уделял столь пристального внимания» логике «ловли» нестандартных состояний системы. То есть, мои модули оказались в роли попугая, которого представлял Хазанов в 80-х годах («Товарищи! В зоопарке тигру не докладывают мяса!») - я, «всего лишь», констатировал факт появления и распространения по системе ошибки. До смены модулей на мои варианты, всё было «тишь да гладь, да божья благодать»! Ну правда иногда связь с антенной прерывалась или её несло чёрти куда с трассы спутника, или картинка на экране «несколько отличалась» от реального положения, или по каналам управления «мусор» принимался, или вдруг программа зависала с ошибками «взаимный дэдлок на канале»...
Дальше – больше. Я мысленно «положил» на все увещевания «делать проще» и претензии и продолжал тихо свою «борозду перелопачивать» - переписывал и совершенствовал свою часть... И вот, на определённом этапе, я, по логам своих модулей, стал указывать что могло привести к очередной ошибке в других модулях, не видя и не зная их внутреннего устройства... :о)))))
Что бы было понятно. Модули мои были просты в плане программной реализации. Но что бы достичь этой простоты ой-как много пришлось мозгами поскрипеть! Та «простота», к которой меня призывали, потом обернулась бы настоящей головной болью! Опыт в этом у меня уже, к сожалению, есть.
Когда-то я зарёкся поддаваться на такие призывы! Пусть зубами скрипят – хоть сточат их нафиг! Мне сознание гарантированной надёжности важнее! Даже если код будет через некоторое время выброшен, опыт, наработанный в процессе обдумывания архитектуры, поиска решений, написания кода, для меня важнее во сто крат!
Буквально во всех системах я стараюсь подходить к первому решению с максимально обобщённой позиции. Как в физике – сначала тяжело получить обобщённое решение. Но, за то потОм его «настройка» на конкретные случаи – лишь «сокращение» переменных одного порядка при заданных условиях и «оконстанивание» переменных... То есть, например, движение спутника можно и по формуле Ньютона считать, но – это – довольно частный случай... Модель движения антенны можно и с равномерными угловыми скоростями считать, но вообще-то там – 80 тонн крутящегося металла + переходные процессы с системе управления + пусковые токи в десятки ампер в обмотках двигателей... Так, что, если хотим достичь точностей порядка долей угловой минуты на всей траектории сопровождения объекта, про линейности надо сразу же забыть!
Или вот сейчас. Возникла задача по отображению траектории полёта самолёта на земную поверхность. Чего проще – точки считал и нарисовал в масштабе карты (а генштабовские карты можно и скачать и Сети)... Угу... просто... А вот когда ставится задача показать полёт над ЛЮБЫМ участком Земли – начинаешь «чесать репу»! Просто? Ну тогда дайте это своим студентам: карта Земли должна быть масштабируема (от изображения всей земли на экране (но не меньше экранна по соотвествующей координате) и до порядка одной тысячной секунды на пиксел), зациклена на прокручивании вдоль экватора («по горизонтали») и позволяла бы выводить полёт самолёта, облетевшего земной шар два раза примерно по экватору... Маленькое уточнение: трасса полёта должна прорисовываться не только точками, но и линиями, между этими точками. Система координат: 0-ой меридиан – Гринвич, 0-ая параллель – экватор, значения восточной долготы и северной широты – положительные углы, а западной долготы и южной широты – отрицательные углы ( -180...+180 и -90...+90 ). Ещё одним контрольным заданием для адекватности представленного решения задачи пусть послужит следующий тест: самолёт взлетает из Анкориджа на Аляске и летит в Елизово на Камчатке, потом – на Гаваи, оттуда – в Новую Гвинею, затем – в Чили и, наконец - в Велингтон в Новой Зеландии. Пусть при этом он постоянно пересекает 180-й меридинан. Пусть студенты нарисуют трассу полёта!... :о) Заранее предупреждаю, что простым циклом в котором выводится массив промасштабированных координат точек трассы полёта ваши студенты не обойдутся... :о) Вспомните хотя бы позапрошлогодний инцидент с Ф-22, вылетевшими из Гаваев в Японию... А ведь там бортовое ПО писАли настоящие зубры вроде... :о))))
Простота простоте – рознь!
Простота средства реализации тоже разной бывает!
Истинная простота может только из обобщённости идти. Никогда не поверю в простоту набора кусочных подходов и решений. Обобщённость лишена «конфликтов на стыках», как в кусочно-базированных средствах реализации. По-моему, именно это в англоязычной литературе называют словом seamllessness...
Кусочные решения создают иллюзии легкости (той или иной глубины заблуждения)... А потом проходит время, противоречия накапливаются и всем ясно, что пришли опять не туда и надо что-то делать... Но делают опять «куски», потому, что таков подход: проблема тоже не обобщается! Ситуативный подход выглядит как подход с набором правильных шагов... Но кто сказал, что цепочка из правильных шагов ведёт в нужном направлении? Завяжите человеку глаза (или даже – напустите туман на ровную, как стол, степь :о) ) и через несколько десятков шагов человек начнёт заворачивать... Чем меньше «горизонт видения» (обобщения), тем меньше гарантий, что последовательность из, по отдельности правильных действий, ведёт в правильном направлении...
Цитата:
На самом деле, когда я выше говорил, что "хочется метапринципов", я, конечно, не имел в виду "методики". "Принципов" - в смысле, каких-то контуров, подстраховывающих от ошибок и подсказывающих, в каком направлении копать...
Хм... Хотя и существует высказывание, что программист, освоивший ООП/ООД, подобен ребёнку с молотком – везде начинает видеть только гвозди, но я думаю, что парадигма привнесла массу полезных инструментов и подходов в упорядочивание представлений о мире...
Когда-то я попросил одного своего знакомого, закончившего универовский иняз с отличием, разъяснить мне один вопрос из английской грамматики. Человек впал в ступор. Английский стал его вторым языком, можно сказать – родным. Конечно, когда-то он его «изучал», но, по прошествии некоторого времени обучения, активного применения знаний и накопления опыта, сами формализованные правила забылись. Человек уже не осознаёт их, а просто «применяет»...
Конечно, и в нашем случае можно произнести нечто вроде «во всякой, вновь анализируемой предметной области стремитесь прежде всего найти объекты с такими признаками:............... . Потом, с такими: .......... . Потом сформируйте объекты, отвечающие за связи между уже найденными с такими: .............. .»
Много ли это даст?
То, что сформировало моё понимание и подходы сложилось из чтения литературы и выполнения работ по самым разным направлениям. Тут и просто классики вроде Буча и Гаммы, и Дэйтовское введение в системы баз дынных, и книги по STL, и разработка встроенного ПО на QNX, и изучение работ виртовского коллектива...
Ну что будут, вообще говоря, «для народа» значить слова «находите элементы и связи между ними»? Банальность? Конечно!
Это я знаю, по опыту, «куды бечь» в новом проекте, а кому-то, работающему рядом, я могу только сказать «Делай как я, спрашивай, почему я так делаю и читай книжки, которые я тебе дал!» :о)
Всё конечно зависит от задач.
Кому-то, кто вполне успешно «на потоке» «клепает» веб-приложения, это может показаться лишними рассусоливаниями, кто-то прекрасно обходится знанием boost+STL, кто-то законченно умилился книгами Александреску, кто-то видит «конец истории» в появлении Си-шарпа и дотНЕТа... Наверное это или им повезло, или мне – не очень... :о) Мне до сих пор как-то не попадались задачи с чётко очерченными границами в рамках одного подхода или полностью 1-в-1 ложащиеся на фреймвок или на ту или иную библиотеку...