пятница, 26 апреля 2019 г.

[prog.thoughts] Проектирование -- это искусство возможного

Давно уже хотел эту незамысловатую мысль выразить словами. Тем более, что при написании последних статей для Хабра ее актуальность подтверждалась снова и снова. Так что вот: говорят, что политика -- это искусство возможного. Но и проектирование программ, программных библиотек или даже отдельных частей программы/библиотеки, -- это так же искусство возможного.

Речь о том, что качество ваших проектных решений определяется вашими текущими возможностями.

Например, количеством информации, которой вы располагаете. Количеством и качеством формализированных и неформализированных требований. Их (не)противоречивостью. Способностью повлиять на требования. Или хотя бы выяснить их происхождение и степень "жесткости".

Наличием опыта. Как вообще, так и опыта в конкретной прикладной нише. Возможностью обратиться к чужому опыту. И качеством этого самого чужого опыта. Впрочем и качеством своего опыта так же.

Если речь о библиотеках и фреймворках (что актуально для меня и нашей маленькой компании), то наличием чувства вкуса. Ибо выбор удобных и запоминаемых имен для API библиотеки -- это та еще задача.

Но, наверное, самое главное -- это наличием времени. Ибо одно дело, когда у вас в распоряжении неделя. Совсем другое -- когда два дня. И уж совсем другое -- когда счет идет на часы.

К чему я все это веду?

К тому, что любое проектное или архитектурное решение -- это результат какого-то компромисса. Вероятно, полученного при всем прочем, в условиях недостатка времени, информации, знаний, опыта. А иногда и желания.

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

Так что, перефразируя Сальвадора Дали: к совершенству нужно стремиться, но достичь его не получится. И это нормально.

вторник, 23 апреля 2019 г.

[prog.c++] Продолжение истории про отсутствие в C++ полноценного static if-а

Тема, которая началась несколько дней назад постом "Тот случай, когда жалко, что C++ный if constexpr не дотягивает до D-шного static if :(" завершилась созданием нужной мне реализации средствами C++ных шаблонов и написанием статьи про получившуюся реализацию.

Вот эта статья на Хабре: "С сожалением об отсутствии в C++ полноценного static if или…" Желающие сказать своё "Фи" могут сделать это на Хабре или прямо здесь.

В планах еще одна статья на тему шаблонной магии в дебрях реализации SObjectizer-а (точнее основанного на Asio диспетчере в so5extra). Надеюсь, что смогу опубликовать ее в начале следующей недели.

Еще хочется затронуть вот какой момент. Складывается ощущение, что меня воспринимают как отличного программиста или, что еще хуже, люди думают, что я сам себя всерьез считаю отличным программистом.

Это не так и вряд ли когда-либо так было. Мне повезло, и с момента окончания школы я всегда оказывался в коллективах, где все окружающие были умнее, образованнее и способнее меня. Так что потешить свое самомнение не удавалось, даже если такое желание и возникало. Посему мне думается, что по пятибальной системе я, в лучшем случае, тяну на четверочку. Точнее тянул в лучшие свои годы.

Поэтому какой бы код я ни написал, я всегда знаю, что можно сделать лучше (просто не знаю как). Что практически всегда подтверждается. Так что у меня нет оснований считать себя мега-хакером или супер-программистом. Пишу как получается. Получается, к счастью, более-менее работающий и более-менее понятный код. Что, как я сумел выяснить за 25 лет в профессии, отнюдь не рядовое явление. Вот такая вот унылая реальность в нашей профессии, имхо.

Поэтому когда вы будете оценивать код из этой или какой-либо другой моей статьи, то не оценивайте его как лучший код, который можно вообще написать на C++. Это то лучшее, что получилось у меня в текущих условиях (т.е. как правило, в условиях нехватки времени).