*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

воскресенье, 30 октября 2011 г.

Сколько дней в году работает программист

Как вы оцениваете потенциальную продуктивность програмистов?

Понятно, что все зависит от типа работы, поэтому даю конкретный пример.

Дано: работа программиста над устоявшимся продуктом, который имеет major релизы раз в год; в течение года выпускаются minor релизы и критические исправления; плюс в поддержке находятся релизы последних 5-6 лет.

Вот мой расчет:

365 дней в году
365 / 7 = 52 недели в году
52 * 5 = 260 рабочих дней в году
260 - 25 = 235 рабочих дней в году за вычетом отпуска
235 - 10 = 225 рабочих дней в году за вычетом еще и государственных выходных
225 - 15 = 210 еще минус две недели в среднем "по болезни"

Итак: 210 человеко-восьмичасовых-дней.

Общение с несколькими менеджерами программистов показало, что цифра "100 дней" является весьма распространенной как оценка сверху на то, сколько новой разработки планировать в год на человека.

Получается, что после поддержки, затрат на внутренюю инфраструктуру, совещаний и обучений реально на разработку остается только половина времени.

вторник, 25 октября 2011 г.

Закомментированные куски кода

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

Ребята купили в офис "Test Driven Development for Embedded C" от James W. Grenning.

Хоть там и много про hardware, но примеры как можно и нужно изолировать зависимости для упрощения тестирования на языке С очень полезные. Кроме того описаны пара xUnit библиотек для этого языка (хотя cmockery нет).

Итак, цитата (как есть, без сокращении и перевода).

Commented-out Code

Sources files littered with commented-out code are an ugly mess. New or returning programmers are faced with questions about what the code is supposed to do. "Should the code be uncommented?" "It is no longer needed?" "When will it be needed and under what circumstances is it needed?" "What's that for?"

The solution to this code smell is simple; delete the commented-out code. It can always be recovered from your source repository.

Посты по теме:

среда, 19 октября 2011 г.

Запрещенные слова для комментариев и имен

Мы договорились в команде, что слова "new", "now" и "old" являются запрещенными для употребления в комментариях, именах переменных окружения, описаниях коммитов, когда речь идет об изменении поведения чего-либо.

Например, переменная окружения, включающая "старый" алгоритм генерации ключа: вместо "OLD_KEY_ALGORITHM" должно быть "USE_ABCDEF_ALGORITHM".

Вместо ссылок на прошлое или будущее надо описывать конкретное поведение, так как характеристики "new", "now" and "old" становятся неактуальными уже через неделю. А еще хуже, что они приводят к появлению таких имен как "OLD_2_KEY_ALGORITHM" или "NEW_2_KEY_ALGORITHM".

пятница, 14 октября 2011 г.

сonst везде, где только можно

Интересно, что далеко не все мне знакомые программисты исповедуют радикальный подход по использованию "const": использовать "const" абсолютно везде, где это не приводит к ошибкам компиляции.

Я не имею ввиду очевидные применения const для аргументов функций и константных методов.

Я имею ввиду, что любая переменная, которая не меняется с момента ее создания, должна быть const. Само название "переменная" значит, что объект должен меняться. Если он не меняется, то это уже не переменная. Сделать переменную непемеренной в C/C++ можно с помощью ключевого слова const.

Пара примеров, где люди часто не ставят const (выделено жирным):

const int sz = very_long_name_to_calculate_size(...);
for (int i = 0; i < sz; ++i) {
...
const VeryLongClassName var(a, lot, of, different, parameters);
int a = var.getX();
// Only "const" functions of "VeryLongClassName" are called further down.

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

Посты по теме:

воскресенье, 2 октября 2011 г.

Chromebook Samsung 5 3G

Прочитал я, что Google открыл в Лондоне офлайновый магазин по продаже Хромбуков.

Поехал посмотреть и магазин и Хромбук.

"Магазин" - это стойка из двух столов в десятком демо ноубутов в зале огромного PC World'а. Рядом отдел Apple, Sony и т.д. То есть это не целый отдельный магазин, как у Apple, например.

Хромбук, который там демонстрируется и продается - Samsung Series 5 3G.

Ниже будут не очень хорошего качества фотографии моего часового знакомства с данным устройством.

В закрытом виде.

Слева - питание, странного вида видео-разъем, USB и аудио.

Справа - еще один USB.

Спереди - SD.

Разъем питания в целом хлюпковат.

Посмотрим клавиатуру.

Над шифтом есть интересная кнопка Search, которая просто открывает в браузере новую пустую закладку и устанавливает курсор в строку поиска. По сути это CTRL-T. Мне эта кнопка очень понравилась.

В верхнем ряду кнопки для интернета. Та, что между полноэкранным режимом и яркостью - переключение между окнами Хрома, если их открыто несколько.

Кнопок Ins, Del, Page Up и Page Down нет.

После включения через 8 секунд появляется приглашение логина и пароля от вашего гугловского аккаунта (я воспользовался демо-логином), и затем появляется главный экран.

Все, что есть в Хромбуке - это браузер Хром. Войти/выйти из него нельзя. Можно только открывать новые табы и окна.

Сам Хром отличается от обычной десктопной версии разными дополнительными меню. Например, сетевые найстройки.

WiFi

Русский язык можно также добавить в настройках.

Печатать можно либо подключив USB-принтер (есть спискок поддерживаемых моделей), либо "правильным" гугловым методом через Cloud Print.

В Хромбуке можно хранить локальные файлы. Их можно приаттачивать к письмам, например.

В самом локальном хранилище реально можно что-то делать только с файлами определенного типа, например, фотографиями или видео. Их можно закачивать на WebPicasa.

В локальное хранилище попадают все скачиваемые файлы и скриншоты.

Скайпа тут быть не может, поэтому я проверил GTalk (в окне моя бритая голова).

Настройки GTalk.

После небольшего ерзанья GTalk все же упал.

Конечно я зашел на правильный сайт.

И еще на один.

И еще на один для оценки производительности.

Линукс загрузился за 33 секунды. На моем Mac Air Core Due оно грузится за 8 секунд. А вот богомипсы почему-то такие же - ~20.

Теперь мой субъективный вывод.

Стоит эта музыка 400 фунтов (~630 долларов), что, как мне кажется, является запредельно нереальной ценой. Сам ноут крайне прост и не является супер легким и тонким ультрабуком, за который можно было бы драть такую цену.

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

Даже в магазине, где был четкий вайфай, работать с полным онлайном все же напряжно, так как сетевые тормоза там сям начинают очень быстро нервировать. Стандартный офлайновый GMail там есть, но работать в нем реально нельзя.

Если цена была бы 50 фунтов - лично я купил бы его прямо там, так как использую продукты Google и рад поиграться с подобной "консолью от Гугл", но за 400 фунтов - как-нибудь обойдусь.