Прочитал сегодня интересную статью посвященную архитектуре софта и программированию в целом. Многое в ней так до боли знакомо, а кое-что прямо с языка сорвали.
Кто читал старые книги по программированию помнит термины “программирование сверху вниз”, “программирование снизу вверх”, и, самое невероятное – “от центра к краям”. Удивительная особенность этих терминов в том, что они просты и понятны, но ни один нормальный человек, примеряя объяснения на себя, понимает, что так работать не может. Это модели понятные, но к реальности никак не относящиеся. Так же, как и «легенда агилистов о ватерфоле».
Действительно. Как раз тот случай, когда “в теории между теорией и практикой не должно быть различий, а на практике…”. Далее автор описывает два граничных подхода: push и pull.
Приступая к задаче, вы осознаете, что есть некая общая проблема, для разработки которой совершенно необходимо разработать фреймворк… Программисты любят это. Занимаясь фреймворком, они, подобно фундаментальным математикам, уходят в небеса абстракций, теряя контакт с внешней решаемой проблемой. Это психологически очень комфортно. Не приходится иметь дело с практикой, которая способна внести в теорию свои неожиданные и неприятные коррективы. Вернее, этот момент оттягивается. И это приятно.
Это первый экстремальный подход. Разработка фреймворка ради самого фреймворка. Глаз радует структура и красота кода, но часто на практике не все работает так идеально как хотелось бы. И хорошо, если до осознание этого вообще доходят.
Это у нас гордые и способные программисты. Они, бывает, называют программистов, описанных выше “архитектурными астронавтами”. Почему? Да потому, что они ерундой какой-то занимаются, когда надо просто взять и написать код. И они умеют колбасить этот код тоннами, и делать это быстро. И этот код – работает.
И еще, они обычно работают в одиночку. Либо у них весь жизненный опыт такой, либо они просто не любят работать в группах. Либо, когда они пытаются работать в группах, их гонят оттуда коллеги ссаными тряпками то у них не складывается. Ибо, для того, чтобы продуктивно писать код группой, надо хоть как-то договорится о том, каковы общие принципы устройства этого кода, а это – “архитектурная астронавтика”.
А вот такие большинство флэшеров фрилансеров. Что уж тут, сам таким был, ога.
С другой стороны, ясно, что избегая контакта с изначальной проблемой (для решения которой и примененяется фреймворк) – невозможно понять, хорош он, или плох… Вы пишете набросок кода, пытаясь решить проблему «без фреймворка». Получается плохо. Вы продолжаете это, пока точно не поймете, почему именно и в каком месте оно получается плохо. Не надо этот код отлаживать, и запускать – это набросок, делающийся с целью понять, как он вообще выглядеть будет.
Вот тут я улыбнулся. Я думал я один сижу в блокноте накидываю примеры кода, которые могли бы использовать проектируемую библиотеку. Получаются такие мини-тесты, которые не компилируются и не выполняются, но по ним уже видны разного рода косяки и неудобства API.
В общем, читайте дальше.
