вторник, 23 сентября 2014 г.

[prog.memories] Vim, Ruby, Mxx_ru -- десять лет в пути...

Проработать на одном месте или над одним проектом долгое время -- это, блин, уникальный опыт. Причем долгое -- это где-то около 10 лет. Такой срок позволяет разглядывать некоторые вещи в действительно исторической перспективе. То, что когда-то нравилось и казалось удачным решением, с течением времени оказалось выброшенной пустышкой или же стало непозволительно дорогим при сопровождении. И наоборот, какая-то мелочь, которая была придумана сходу и которой не придавали особого значения, выдержала проверку временем и стала одной из немногих вещей, за которые реально не стыдно. А потом все поменялось :) Происходит что-то, что переводит старую разработку из дорогой в сопровождении во вполне себе хороший инструмент, который востребован, уже адаптирован под текущие нужды и не так уж много времени и сил требует на поддержание своей работоспособности. Тогда как вещь, которая верой и правдой служила тебе 7-8 лет подряд, и которой ты долгое время гордился, потихонечку отправляется куда-то на задворки в ожидании очередного поворота истории :)

Чем вызвано такое пространное введение? Тем, что пять лет назад, в сентябре 2009 года, у меня в блоге появилось две заметки под общим названием "Vim, Ruby, Mxx_ru -- пять лет в пути!" (часть первая, часть вторая). Прошло еще пять лет и нужно подводить итоги писать продолжение. А десять лет в нашей индустрии -- это все-таки не хухры-мухры. Отсюда и такой философический взгляд на вещи :)

Ну что можно сказать по поводу трех инструментов, названия которых вынесены в заголовок. Пока они все со мной. Разной степени изношенности и востребованности, правда :) Но пойдем по-порядку.

Vim. Служит верой и правдой. Лучший текстовый редактор из тех, которые доводилось пробовать. По крайней мере, для набора кода и документации в виде LaTeX/ReST/Doxygen. Пока был менеджером Vim-ом практически не пользовался. Тогда у меня основными рабочими инструментами были почтовый клиент и браузер, к которым добавлялся Acrobat Reader и, время от времени, какие-то из офисных программ: Word, PowerPoint, Excel, Visio. Но основным, безусловно, был почтовый клиент. Работая в котором зачастую чертыхался, когда по привычке нажимал какую-то удобную комбинацию клавиш из Vim-а, а это приводило лишь к появлению нескольких не нужных в тексте символов.

Когда от менеджерства вновь возвращался к программизму, то Vim опять становился главным инструментом для работы с кодом. Удобная штука. Да и цветовая гамма среди готовых нашлась очень удобная для меня, глаза не устают. После 24 лет работы с компьютерами, это очень немаловажный фактор.

В общем, 10 years with Vim and steel learning :) And happy Vimmming!

Ruby. А вот тут большие перемены. Пять лет назад Ruby, действительно, использовался и мной, и моей командой весьма широко. На нем, в частности, были реализованы весьма важные операции по импорту статистической информации из текстовых файлов в СУБД для последующей обработки. Да и их обработка так же была реализована на Ruby. Но уже тогда объемы обрабатываемых данных были близки к пределу возможностей Ruby по производительности. Поэтому в течении нескольких последующих лет Ruby-иновые скрипты для обработки больших объемов информации были заменены на C++ные программы. Которые делали все то же самое, но в разы, если не в десятки раз, быстрее.

Потом, опять же, были периоды менеджерства. Когда код самому писать не приходилось вообще. От слова совсем :) А когда я к программизму возвращался, то это был C++. Так что Ruby основательно подзабылся. И, когда приходит время слабать какой-нибудь мелкий скриптик для одноразовой, но муторной операции, я некоторое время туплю, пытаясь извлечь что-то из глубин старческого склероза, но, в итоге, руки-то вспоминают! :) Так что в качестве скриптового языка Ruby пока еще со мной.

Довольно длительный период работы с Ruby только упрочил мое мнение, к которому я пришел через пару-тройку лет после начала плотной работы с динамически типизированными языками (и которое, если не ошибаюсь, озвучивал на разных площадках): динамически-типизированные языки становятся слишком дорогими в сопровождении при достижении некоторого предела. Причем придел это не столько в количестве строк кода, сколько в размере команды. Небольшая команда, меньше обмен кодом, лучшие коммуникации в команде, проще и дешевле обмен знаниями -- тем большего объема проект будет нормально жить и развиваться. Но стоит команде увеличиться сверх 4-5 человек, как количество проблем начинает расти, а у проекта начинаются сложности. Впрочем, это мое частное мнение, никому его не навязываю.

Вот что с динамически-типизированными языками вообще, и Ruby в частности, делать просто и приятно, так это unit-тесты писать. Ну и, соответственно, чем больше unit-тестов, тем больше запас уверенности в правильности работы кода. Но это, опять же, мое частное мнение, никому его не навязываю ;)

А вообще, честно признаюсь, есть некоторое теплое чувство внутри от осознания, что 10 лет назад я оказался одним из первых евангелистов Ruby (по крайней мере в рамках RSDN). Да и моя старая статья, Ruby-новые грани, до сих пор лучшее из того, что я написал.

Mxx_ru. А вот Mxx_ru -- это замечательное подтверждение бессмертной цитаты из Экзюпери: "мы в ответе за тех, кого приручаем". Уже давно нет возможности уделять Mxx_ru должного внимания. Но и отказаться от его использования так же тяжело, как выгнать из дома подросшего и переставшего быть милым и забавным щенком взрослого пса. Можно, наверное, высказаться и более жестко: "и тащить тяжело, и бросить жалко", но я надеюсь, что все еще не так плохо. Ведь я использую Mxx_ru каждый день. И, в буквально смысле, без него, как без рук.

Есть в Mxx_ru несколько вещей, которые плотно на нем держат и не дают уйти еще куда-то. Например, то, что Mxx_ru -- это полноценный build tool, а не Makefile generator. Только под Windows я обычно имею дело с 4-мя разными вариациями компилятора: VC++2013 32- и 64-bit, MinGW GCC и Cygwin GCC. А если нужно какой-то старый код подправить, то еще две вариации добавляются -- VC++2012 (32-/64-bit). А скоро будет еще и VC++2014... Колупаться с 4-ря разными проектными файлами всего на одной платформе... Мне лично это кажется диким. Поэтому переходить на какой-нибудь CMake, qbs, Gyp, Bakefile и т.д. совсем не тянет. Раньше из альтернатив, которые мне нравились, был разве что SCons. Давно на него не смотрел, надеюсь, что жив и прекрасно себя чувствует.

Так же Mxx_ru демонстрирует пример того, как первоначально принятое архитектурное решение, которое позволило быстро и дешево получить хороший результат, со временем стало главным тормозом, мешающим двигаться дальше. Если бы я делал Mxx_ru сейчас, то реализовал бы внутренности так, чтобы в памяти формировалось make-tree. И это make-tree можно было обрабатывать тем или иным способом. Это было бы перспективнее, хотя та же кодогенерация, которая сейчас в Mxx_ru делается на раз-два, была бы сложнее и муторнее. Наверное.

Надеюсь, что если все будет нормально, то перезалью исходники Mxx_ru на какой-нибудь другой ресурс (будь то GitHub, Coogle Code или даже SourceForge). И внесу пару мелких дополнений дабы выпустить версию 1.6.3. Ну а дальше будем посмотреть. Будущее нам не ведомо, может дело когда-нибудь дойдет и до Mxx_ru-2.0. А может я окончательно уйду из программизма и проект зачахнет сам собой окончательно.


Ну вот, собственно, какие-то промежуточные итоги. Даже самому интересно, будет ли через пять лет заметка "Vim, Ruby, Mxx_ru -- пятнадцать лет в пути!" и, если будет, то что я там буду писать :)

Да, а читателям, которые все это время читают мой блог -- большое спасибо за внимание! Не переключайтесь, пожалуйста :)

Отправить комментарий