Category: криминал

Верхний пост :)

Основной мой вид деятельности на данный момент - разработка ПО в области embedded. Опыт работы - с 2001 года. Сайт-визитка по этой теме: http://avl2.info/.

Кроме этого, есть еще несколько направлений, мне интересных, в которых я в той или иной степени "продвинулся". Никак не связанных с программированием.

1. Естественные роды. Все - на основании собственного (почти :)) опыта рождения двух детей. Я оба раза присутствовал на родах, во второй раз мы вместе с женой составляли план родов, выбирали и общались с акушерками, ходили на курсы подготовки и многое-многое другое :) Опыт вылился в сайт http://ru.naravniporod.com/. Буду рад ответить на вопросы, если кого-то мой опыт заинтересует подробнее.

Если же кому-то предстоят роды в Словении и его будет страшить неизвестность и неопределенность - как, где, с кем и т.п., тоже буду рад помочь, пишите!

2. Фотография. Началось это увлечение еще с 1996 года, с фотоаппарата "Смена 8М" и черно-белой пленки, проявки ее в бачке и печати фотографий в ванной под увеличителем и красным фонарем. Кое-что из того, что получается сейчас, можно увидеть здесь по тегу "Фото". Коммерческое предложение с ценами и вариантами - на еще одном моем сайте http://www.lepitrenutki.com/, который, правда, на словенском языке - для целевой аудитории.

И если вы планируете поездку в Словению (или ближайшие ее окрестности) и хотите, чтобы у вас на память остались фотографии, на которых бы были запечатлены и вы тоже (или вы вдвоем с партнером, или вся ваша семья) - буду рад оказать такую услугу. По себе знаю, что тот, у кого в руках фотоаппарат, очень редко сам оказывается в кадре. К тому же, часто приходится выбирать: сфотографировать момент или прожить его. И не лучше ли будет выбрать "прожить", а для "сфотографировать" нанять фотографа? :) Особенно в поездке в такую красивую страну, как Словения :)

3. Гимнастика для новорожденных. С первым ребенком я открыл для себя динамическую гимнастику. Со вторым - познакомился с абсолютно другим подходом, автором которого является словенка Андрея Семолич, и который она назвала "Педокинетика". (Сайт тоже на словенском). Подход очень и очень интересный, отлично дополняет собой динамическую гимнастику, со вторым ребенком я прошел всю ее методику, начав с 6 недель и закончив моментом, когда малыш начал делать первые шаги. И очень доволен результатом. В мае 2013 года я получил сертификат инструктора "Педокинетики" первого уровня (после двух лет обучения, в том числе более 200 часов практики с реальными детьми и 6-часового экзамена на реальных и непростых группах). Впереди еще минимум три года обучения :) Так что в ближайшее время появится еще одно направление в моей деятельности :) По которому я тоже буду рад помочь тем, кого это заинтересует!

28. Позвольте трупу упасть

(В оригинале - Don't Nail Your Program into the Upright Position)

Однажды я написал шутливую программку на С++, в которой я с некоторой долей сатиры реализовал следующую концепцию: при помощи множества try...catch конструкций по всему коду не дать программе аварийно завершиться. Результат мы назвали «труп, не падающий потому, что он прибит гвоздями к стене».

Несмотря на легкомысленность примера, я вынес из него некоторый опыт.

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

Для этого мы сплели сеть из множества обработчиков исключений. Мы смешали в кучу как «родные» обработчики, так и обработчики Windows. Когда что-то не работало, мы вызывали это снова и снова. Оглядываясь назад, мне нравится сравнивать написание конструкций try..catch, вложенных в другие ветви catch, с решением свернуть с широкой дороги проверенных практик на манящую, но опасную для здоровья узкую тропинку, ведущую непонятно куда. Однако, это уже «здравый смысл постфактум».

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

Я бы не стал об этом писать, если бы не недавно состоявшийся диалог с челом, чей академический статус должен был говорить «Я знаю лучше». Мы обсуждали Java-код в удаленной транзакции. Он настаивал, что в случае ошибки код должен перехватить исключение на своей стороне. «И что ему потом с ним делать?» - спросил я, – «Приготовить на ужин?»

Он процитировал правило дизайнера пользовательского интерфейса: «НИКОГДА НЕ ПОЗВОЛЯЙТЕ ПОЛЬЗОВАТЕЛЮ ВИДЕТЬ СООБЩЕНИЕ ОБ ОШИБКАХ», не задумываясь о том, что КАПС и НИКОГДА – не самые лучшие аргументы. Я спросил, не он ли писал софт для банкоматов, «синий экран» которых так любят фоткать и выкладывать в инет, за что получил по голове.

В общем, если вы с ним встретитесь, то улыбайтесь и соглашайтесь со всем, что он говорит, пока будете медленно продвигаться к двери.

Автор оригинала - Verity Stob

Перевод мой, при использовании ссылка на мой живой журнал обязательна!

15. Коммит без проверки - убийца производительности

(В оригинале Commit-and-run is a crime.

Вторая половина дня. Команда дописывает последние фрагменты новой функциональности очередной итерации, и вы буквально слышите, как кипит работа. Однако Джон сегодня слегка спешит. Он уже опаздывает со своей задачей, однако планирует сегодня закончить. Он набирает код, компилирует его, помещает в систему контроля версий и убегает. А еще через несколько минут все рушится. Билд в нерабочем состоянии. У Джона не было времени запустить автоматические тесты перед помещением своего кода, поэтому он поместил его просто так, без проверки. И тем самым подвесил весь проект. Работа, кипевшая еще несколько минут назад, начинает остывать. Каждый понимает, что если он сейчас сделает uplate из системы контроля, то его локальная копия тоже станет нерабочей. Однако без этого он не может опубликовать свои изменения. А поскольку именно сегодня вечером всей команде нужно интегрировать свои наработки для выпуска предстоящей демо-версии, то ситуация весьма неприятная. Джон очень эффективно убил производительность всей команды, потому что интеграция стала невозможной без необходимости отменить все его изменения.

Такой сценарий происходит достаточно часто. Коммит без проверки – преступление, потому что убивает поток. Очень часто один разработчик, желая сэкономить свое время, вызывает потерю времени всей команды, и это весьма неучтиво. Однако, это происходит практически везде. Почему? Обычно потому, что правильный цикл сборки и тестирования занимает слишком много времени.

И здесь вам, как архитектору, нужно вступать в игру. Если вы постараетесь создать гибкую архитектуру, обучите людей agile-практикам, к примеру, разработке через тестирование, настроите интеграционный сервер, то тем самым вы воспитаете культуру, в которой не будет правильным тратить чье-либо время впустую. Чтобы это стало реальным, вы должны быть уверены, что система, кроме всего прочего, имеет подходящую для автоматизированного тестирования архитектуру. Это изменит поведение разработчиков. Если тесты будут выполняться быстро, то их будут запускать чаще, что хорошо уже само по себе, однако главное – это то, что разработчики не будут оставаться наедине с испорченным кодом. Если тесты зависят от внешних систем, если требуется база данных, то измените их так, чтобы их можно было запускать локально с использованием симуляторов или заглушек, или хотя бы с использованием локальной копии базы данных, и пусть тесты выполняются автоматически. Люди не должны ждать, потому что в противном случае они будут придумывать обходные пути, что часто приводит к описанным выше проблемам.

Инвестируйте время в создание систем, которые будут работать быстро. Это ускоряет весь поток, делая разработку более быстрой. Используйте симуляторы, уменьшайте зависимости, разбивайте систему на маленькие модули – делайте то, что считаете нужным. Главное – обеспечьте, чтобы у людей не было причин даже думать о том, чтобы сделать коммит без проверки.

Автор оригинала - Niclas Nilsson

Перевод мой. Если вы решите использовать его полностью или частично, не забудьте указать ссылку на мой живой журнал!