раз

advertisement
Secret magic of developer
productivity
2013
Почему я об этом
рассказываю
• Производительность разработчиков может
отличаться в 10-20 раз
• Часто люди склонны свою сравнительно
низкую производительность списывать на
обстоятельство необоримой силы
(сопроцессор в голове )
• Хочется развенчать идею о генетически
запрограммированном превосходстве
Вопрос слушателям
У кого сколько лет опыта
разработки ПО?
«О любви не говори,
о ней все сказано»(с)
• В какой-то мере эта строчка относится и к
производительности труда разработчика
• Книг на эту тему очень много. Если их все
читать, то времени на собственно
разработку не останется.
• К счастью правило 20/80 тут работает, и
путем незначительных улучшений можно
достичь значительного прогресса
Step back: чем же занимаются
разработчики?
Мне нужна ваша помощь… 
Жмут на клавиши
• На самом деле результат нашей работы в
сыром виде это код. Да, мы решаем проблемы
заказчика, делаем бизнес-анализ,
коммуницируем. Но все-таки 95% работы
разработчиков, в конечном счете, это код
программ (работающих).
• Чтобы писать код, надо тупо жать на клавиши.
Очевидно, что надо жать в правильном
порядке на нужные клавиши.
История о игре Life на Turbo Pascal
Немного математики
• За день в зависимости от проекта
разработчик производит примерно в
среднем от 10Кб до 30Кб кода.
• 30Кб кода с современными IDE (code
complete и т.п.) это где-то 6000 раз нажать
на клавиши. При довольно невысокой
скорости печати в 120 знаков в минуту это
получается 50 минут.
Ого!!!
• Получается, что для того чтобы за день
добиться более чем впечатляющего
результата (для сравнения 30Кб это код
класса java.util.HashMap), надо потратить
всего 50 минут.
• Почему-то в реальной жизни так не
получается. Мы делаем паузы и жмем на
кнопки с перерывами.
Что надо чтобы жать на клавиши
без остановки?
Quick answers
1. Драйв/Мотивация
2. Знания
3. Фокус
4. Правильная организация работы в проекте
5. Умение «ловить поток» и не терять его
6. Научная организация труда aka ясная голова
7. GTD
… список можно продолжать, но остановимся на
красивой цифре 7
Драйв он же правильная
мотивация
• Вам должно нравиться (очень очень нравиться)
–
–
–
–
–
Программировать вообще
Программировать на этой платформе
Работать над этим конкретным проектом
Работать с этими людьми
Работать …
Без этой «чалмы» магия не работает. Вообще.
Крутые профессионалы могут компенсировать
отстствие драйва высокой з/п, но не долго и далеко не
все. И им нравится быть профессионалами (что тоже
драйв).
Знания
• Надо много знать. Чтобы понимать какие
кнопки жать.
• Не знание одного конкретного аспекта это 1%
вероятности фэйла и ступора. Количество
вещей, которые надо знать для создания
среднего проекта – >1000
• Часто львиную долю времени работы
разработчика отнимает чтение StackOverflow и
документации /именно в таком порядке  /
Учите матчасть (с) анекдот
Фокус
• Четко понимать, что надо делать, как и
зачем.
• Есть очень много путей к цели
• Исселедуя библиотеки, читая
документацию, создавая свою архитектуру,
слои бизнес логики и utility классы, можно
потерять месяцы времени, не
приблизившись к цели ни на шаг
Организация работы в
проекте
• Требования
• План работ
• Координация, QA, utility tasks (design, веб
верстка, нарезка картинок etc.)
• Кто за что отвечает, где, кого и что искать, кого
спрашивать
• И т.д.
В общем-то обычно это забота менеджера, но
если человек не знает что ему надо, ему очень
тяжело «продать» требования, план работ и т.д.
Умение «ловить поток»
и не терять его
• Что такое поток и как его «поймать», я
рассказывать не буду. На всякий случай, в
двух словах….
• В общем-то если бы вы этого не умели, то
вы бы меня наверное сейчас не слушали 
Поток: что тут важно
• Понимание что нет потока – нет кода. Если решили
отвлечься, отвлечься – отвлекайтесь. Решили работать –
ловите поток. Будете смешивать – не отдохнете и не
поработаете.
• Умение не сбиваться. Сидеть на горной вершине с
ноутбуком и кодить – не получится, и то что к вам
приходят коллеги и пытаются вас из состояния потока
выбить это нормально. Надо учиться не отвлекаться.
• По моим наблюдениям наиболее ушлые синьеры из
потока не выходят, а интерфейс с внешним миром
умело эмулируют, находясь непосредственно в потоке –
сбить с мысли их либо очень сложно, либо вообще
невозможно. Но у этого состояние есть хорошо
известные недостатки. 
GTD
Search wiki: GTD aka
«Умение разобраться с
делами»
Будьте позитивны
• Есть два очень неприятных стереотипа:
– «ААА! Мы занимаемся планированием иттерации, а
заказчик спросил у меня чатом какого цвета кнопка на
странице sales.php. О ужас! Как так можно работать! Он
совершенно не понимает кошерный скрам, нас же
нельзя отвлекать. Все плохо-плохо-плохо!!!»
– «Ты посмотри, какой нехороший человек! Он написал
i=i+1 вместо i++. Убить, расчленить и съесть.»
Оба этих варианта не позитивны, не делают Вам чести
как профессионалу и совершенно не конструктивны.
Интересное
наблюдение
• Если раньше программа = алгоритмы + структура
данных
• Сейчас это структуры данных + архитектура
• Фактически доля классических ветхозаветных
программистов в современном мире <0,1%
остальные, сейчас фокус сместился в сторону того,
что 30-40 лет назад называли архитектурой.
• При этом культура во многом не изменилась, и
далеко не все это изменение осознают. Это
изменение привело к появлению некоторого
количества мифов – правил, которые работали
раньше но не работают сейчас.
Мифы
Мифы: серебрянная
пуля
• «Мы перепишем 1000000 строк с Java на Ruby, т.к. на
Ruby разрабочики пишут быстрее.»
• На самом деле, все современные mainstream
платформы в плане производительности труда
разработчиков совершенно одинаковы. Разница может
быть в пределах 5-10%.
• Да, исторически переход с Assembler на C/Pascal дал
высокий прирост. Появление Delphi дало прирост в разы
(особенно для специфичных задач).
• Появление Java-like плаформ тоже дало прирост, но уже
довольно небольшой.
• Увы, все, что появлялось после, улучшало ситуацию
очень не значительно.
• Почему тогда это работает?
• Новая платформа == драйв == высокая
производительность.
• В этом нет ничего плохого, и эффект надо
использовать – он есть. Просто не надо
думать, что прирост производительности
происходит от того, что вы используете язык
X. Если Вы так считаете, то Вы обманываете
сами себя.
Мифы:
работает – не трожь
• Один из самых живучих мифов, ибо
распространяется джуниорами, а джуниорами
в той или иной форме были все.
• На самом деле «не трожь развалится» – это
один их первых симптомов плохого кода
• Хороший код в правильно сделанном проекте
от этого только хорошеет 
• Часто существование в проекте таких «черных
ящиков» существенно снижает
производительность команды
Мифы: отладчик
• «Я тут весь день код дебажил (я крут, сижу за
монитором с непонятными закорюками и
вообще все девушки мои).
• Зачем нужен отладчик (для чего его
придумали)
– Отладка реально сложных алгоритмов/устройств
(кто/когда последний раз програмиировал хоть
какой-то алгоритм?)
– Работа с библиотеками с плохой документацией (а
что у нас в регистре R14 после этого вызова)
• Зачем на самом деле используют отладчик в
99% случаев?
– В коде бардак, и вместо того, чтобы переписать по
нормальному, некоторые пытаются
реанимировать мертвое тело посредством
некромантии с отладчиком
– Лень почитать доку, и вместо этого человек
пытается угадать, как работает метод пользуясь
отладчиком
– Тупить, глядя в отладчик, всяко легче, чем решать
проблемы и вообще работать, при этом совесть
чиста. Я код 8 часов отлаживал, и вообще фиг знает
когда баг починится.
– Т.е. это прекрасный способ прокрастинации
Реальный случай
«8 часов борьбы с отладчиком vs 5 минут
внятно рассказать голосом в чем проблема»
aka метод резинового утенка.
Вопросы
Email: lc@yandex.ru
Skype: denis.tsyplakov
Спасибо
Download