<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://lib.custis.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yakov-sirotkin</id>
		<title>CustisWiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://lib.custis.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yakov-sirotkin"/>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Yakov-sirotkin"/>
		<updated>2026-04-12T11:48:03Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22844</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22844"/>
				<updated>2011-02-16T16:41:37Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* Ошибки важнее продаж */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соответственно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будущем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее без багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;Tamino XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше десяти insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «Tamino — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а Application Service Provider. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет дилеммы атрибут сделать или тег.&lt;br /&gt;
И в то же время он по-прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQL сделал свой инвертированный индекс.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разрабатывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомендации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой-то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткосрочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сиюминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой код в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22843</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22843"/>
				<updated>2011-02-16T16:39:52Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* Не занимайтесь ерундой */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соответственно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будущем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее без багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;Tamino XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше десяти insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «Tamino — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а Application Service Provider. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет дилеммы атрибут сделать или тег.&lt;br /&gt;
И в то же время он по-прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQL сделал свой инвертированный индекс.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разрабатывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомендации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой-то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткосрочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сиюминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22842</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22842"/>
				<updated>2011-02-16T16:30:26Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* JSON */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соответственно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будущем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее без багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;Tamino XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше десяти insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «Tamino — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а Application Service Provider. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет дилеммы атрибут сделать или тег.&lt;br /&gt;
И в то же время он по-прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22841</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22841"/>
				<updated>2011-02-16T16:28:34Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* XSLT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соответственно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будущем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее без багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;Tamino XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше десяти insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «Tamino — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а Application Service Provider. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет ??? атрибут сделать или тег.&lt;br /&gt;
И в то же время, он по прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22840</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22840"/>
				<updated>2011-02-16T16:26:59Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* Профанам не важно, какие библиотеки использовать */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соответственно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будущем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее без багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;Tamino XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше десяти insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «Tamino — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а education service провайдер. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет ??? атрибут сделать или тег.&lt;br /&gt;
И в то же время, он по прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22839</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22839"/>
				<updated>2011-02-16T16:25:30Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* Профанам не важно, какие библиотеки использовать */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соответственно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будущем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее без багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;Tamino XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше шести insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «CAMINO — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а education service провайдер. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет ??? атрибут сделать или тег.&lt;br /&gt;
И в то же время, он по прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22837</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22837"/>
				<updated>2011-02-16T16:08:15Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* Исправляйте баги */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соответственно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будущем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее без багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;CAMINO XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше шести insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «CAMINO — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а education service провайдер. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет ??? атрибут сделать или тег.&lt;br /&gt;
И в то же время, он по прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22836</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22836"/>
				<updated>2011-02-16T16:03:12Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* Кто виноват? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соответственно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будущем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее из багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;CAMINO XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше шести insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «CAMINO — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а education service провайдер. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет ??? атрибут сделать или тег.&lt;br /&gt;
И в то же время, он по прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22835</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22835"/>
				<updated>2011-02-16T16:02:36Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* Когда дедлайн? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соотвественно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будующем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок на много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может съесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленным.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее из багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;CAMINO XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше шести insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «CAMINO — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а education service провайдер. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет ??? атрибут сделать или тег.&lt;br /&gt;
И в то же время, он по прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22834</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22834"/>
				<updated>2011-02-16T16:01:20Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* Кто будет первым пользователем? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете некоммуникабельными  людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соотвественно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будующем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может сьесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленнен.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее из багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;CAMINO XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше шести insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «CAMINO — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а education service провайдер. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет ??? атрибут сделать или тег.&lt;br /&gt;
И в то же время, он по прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22833</id>
		<title>Как стать героем (Яков Сироткин на ADD-2010)/Стенограмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D1%82%D0%B0%D1%82%D1%8C_%D0%B3%D0%B5%D1%80%D0%BE%D0%B5%D0%BC_(%D0%AF%D0%BA%D0%BE%D0%B2_%D0%A1%D0%B8%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%BD_%D0%BD%D0%B0_ADD-2010)/%D0%A1%D1%82%D0%B5%D0%BD%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=22833"/>
				<updated>2011-02-16T15:55:45Z</updated>
		
		<summary type="html">&lt;p&gt;Yakov-sirotkin: /* На минном поле нет героев */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Введение ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=1|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Сейчас я сделаю небольшой доклад, но сначала несколько слов о себе.&lt;br /&gt;
Не то, чтобы я отличался особым умом и сообразительностью, но больше десяти лет разрабатывал программное обеспечение, и все время сильно переживал, что получается в результате.&lt;br /&gt;
&lt;br /&gt;
Я десять лет делал http://jug.ru, у меня есть ЖЖ, и я люблю выступать на конференциях.&lt;br /&gt;
&lt;br /&gt;
=== На минном поле нет героев ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=2|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, мы поговорим, как мне представляется наша индустрия в целом.&lt;br /&gt;
Есть много программ, у которых есть очень-очень-очень много разных функций.&lt;br /&gt;
А потом, когда начинается внедрение, заказчика проводят, как по минному полю — а вдруг, что-нибудь да внедрится?&lt;br /&gt;
Аналогичная схема с минным полем действует и для многих наших аутсорсеров.&lt;br /&gt;
Т.е. сначала берется как можно больше клиентов, под этих клиентов набирается как можно больше штат, за этот большой штат капает небольшая денежка, а когда деньги заканчиваются, все программисты увольняются, «подрываются».&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Нет смысла без своих мозгов ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=3|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Знаете, даже если вы разрабатываете под IPhone, теоретически вы сможете стать миллионерами. Но статистически вы оказываетесь глубоко в минусе. Была небольшая обзорная статья, которая была посвящена статистике продаж на AppStore, и так получилось, да, что есть очень успешные программы с большими доходами, но большинство получает совершенно смешные суммы.&lt;br /&gt;
&lt;br /&gt;
И я не претендую, чтобы рассказать вам в своем докладе, как делать успешное программное обеспечение.&lt;br /&gt;
Почему я не претендую на это?&lt;br /&gt;
Я глубоко убежден, что нельзя сделать успешный софт, если у вас нет собственных мозгов.&lt;br /&gt;
А собственный мозг я вам не дам.&lt;br /&gt;
Это технически невозможно.&lt;br /&gt;
Но на что я надеюсь? Я надеюсь на то, что я затрону некоторые вопросы, над которыми вам будет полезно подумать.&lt;br /&gt;
Может это вам понравится.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как стать героем ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=5|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Мне бы хотелось услышать ожидания аудитории.&lt;br /&gt;
Какие у вас есть герои, которых вы бы хотели рассматривать как потенциальные примеры для подражания?&lt;br /&gt;
Есть какие-нибудь версии?&lt;br /&gt;
&lt;br /&gt;
''Шум в зале… «Линус Торвальдс», «Сергей Брин», …''&lt;br /&gt;
&lt;br /&gt;
Ну на самом деле, должен вас разочаровать (см. слайд).&lt;br /&gt;
А учится можно у меня, по тому, на что я сам напоролся.&lt;br /&gt;
Моя ролевая модель — Дон-Кихот, который упорно пытается донести свет истины до начальства.&lt;br /&gt;
Ну и для всех остальных.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=6|right|640px]]&lt;br /&gt;
&lt;br /&gt;
Пытается рассказывать правильные вещи, делать правильные вещи, ну как-то двигаться в общем, вперед.&lt;br /&gt;
Бывает очень-очень больно и обидно.&lt;br /&gt;
Не советую.&lt;br /&gt;
&lt;br /&gt;
Капитан Очевидность несколько полегче.&lt;br /&gt;
Некоторые думают, что это неинтересно, но практика показывает, что всегда находятся желающие поспорить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Опасные вопросы ===&lt;br /&gt;
&lt;br /&gt;
=== Зачем? ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=7|right|384px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А теперь перейдем к вопросу главному — зачем становится героем?&lt;br /&gt;
Вот смотрите — зарплаты в России, они небольшие очень.&lt;br /&gt;
Программисты обычно получает вдвое больше, чем в среднем по стране.&lt;br /&gt;
Если программист обладает какими-то дополнительными качествами, то он получает еще в двое больше, чем средний программист.&lt;br /&gt;
А качества могут быть разные — знания Java, умение хорошо вести себя на интервью, хороший английский… буквально за что угодно.&lt;br /&gt;
&lt;br /&gt;
И смотрите, как может получится — вот вы пришли на работу, хотите разрабатывать разумное доброе вечное.&lt;br /&gt;
А ваш начальник хочет смотреть футбол.&lt;br /&gt;
Кто победит?&lt;br /&gt;
&lt;br /&gt;
:''Шум и волнения в зале… ''&lt;br /&gt;
&lt;br /&gt;
Больной вопрос…&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Какие задачи вы поручите Бобруйскому филиалу? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос связан с нашей территориальной распределенностью, удаленностью от многих наших заказчиков.&lt;br /&gt;
Вот представьте себе, что у вашей компании есть филиал в Бобруйске.&lt;br /&gt;
Поручите ли  вы этому филиалу задачу, за которую вам дадут медаль?&lt;br /&gt;
&lt;br /&gt;
Подумайте сами, зачем вам давать задачу в Бобруйск, если вы ее сделаете сами и вам за нее дадут медаль.&lt;br /&gt;
Вы ее не отдадите. Кроме одного случая — эту задачу невозможно сделать.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → В бобруйске ее за меньшие деньги сделают!''&lt;br /&gt;
&lt;br /&gt;
Бобруйск получит свои меньшие деньги. Медаль он не получит.&lt;br /&gt;
Медаль это больше, чем маленькие деньги.&lt;br /&gt;
&lt;br /&gt;
: ''Шум в зале → Медаль получим мы! А он — меньшие деньги. А большие деньги получат те, кто поручили Бобруйску.''&lt;br /&gt;
&lt;br /&gt;
В общем — Бобруйск медали не получит.&lt;br /&gt;
&lt;br /&gt;
Так вот, извините, когда вы из Сан-Франциско смотрите, то там все равно — Бобруйск или Санкт-Петербург.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто будет первым пользователем? ====&lt;br /&gt;
&lt;br /&gt;
Кроме глобальной такой древнерусской тоски, есть еще вопросы, которые помогают выяснить, что вообще происходит,&lt;br /&gt;
и вообще, насколько большие разрушения у вас в проекте.&lt;br /&gt;
&lt;br /&gt;
Хочу сразу предупредить, эти вопросы нужно задавать очень осторожно, потому что если вы их будете задавать очень часто, вы прослывете уникальными людьми, асоциальными типами.&lt;br /&gt;
&lt;br /&gt;
Кто будет первым пользователем?&lt;br /&gt;
&lt;br /&gt;
''Use-case'' простой: вы делаете прототип для министра.&lt;br /&gt;
Я вам по секрету скажу — министр, как бы вот он, вот он сидит, а вот (показывает на стол в 5 метрах) компьютер.&lt;br /&gt;
И министр вот так вот смотрит с трех метров.&lt;br /&gt;
Ему глубоко все равно, там работающий код, или презентация в пауэрпоинте.&lt;br /&gt;
&lt;br /&gt;
Поэтому, если ваша цель прототип министру разработать, то особо программировать и вообще ничего не нужно, вы так, для вида, для галочки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Кто виноват? ====&lt;br /&gt;
&lt;br /&gt;
Другой вопрос — кто виноват? Представьте, что вот вы — делаете систему.&lt;br /&gt;
И выпустили ничего. Вот год работали, а релиза — нет.&lt;br /&gt;
Ничего не случилось. Сплошные баги. Кого накажут?&lt;br /&gt;
&lt;br /&gt;
Очень часто, анализ показывает, что не накажут никого.&lt;br /&gt;
Потому что, тот человек, который по идее главный за этот проект, он еще по совместительству и владелец компании, и у него еще десять других более интересных и нужных проектов. Т.е. его не накажут, а вас — уволят. Вот и все.&lt;br /&gt;
Ну и соотвественно вину на вас легко переложат, это легко.&lt;br /&gt;
&lt;br /&gt;
: ''Значит накажут испольнителя …''&lt;br /&gt;
&lt;br /&gt;
Ну как можно наказать? — можно уволить — ну значит уволят.&lt;br /&gt;
Еще могут поругать — поругать могут, относитесь к этому спокойно.&lt;br /&gt;
&lt;br /&gt;
Вы понимате, что очень тяжело сделать проект, если в его успехе заинтересованы только вы, но не тот человек, который выделяет на него ресурсы.&lt;br /&gt;
&lt;br /&gt;
Этот вопрос — хороший, потому что если окажется, что кто-то действительно виноват, то вы сможете от этого человека получить поддержку.&lt;br /&gt;
Если с вами работает менеджер, которого снимут, в случае провала проекта, вы сможете ему объяснить, что «есть угроза», и он вам поможет.&lt;br /&gt;
&lt;br /&gt;
:''Т.е. вопрос скорее звучит «кто виноват кроме меня»?''&lt;br /&gt;
&lt;br /&gt;
Это вопрос несколько в будующем — «кто будет виноват в крахе?»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Когда дедлайн? ====&lt;br /&gt;
&lt;br /&gt;
Вопрос менее критичный.&lt;br /&gt;
Если вы Blizzard, вам наверное все равно, вы и так опережаете рынок много лет.&lt;br /&gt;
&lt;br /&gt;
Но если вы делаете коммерческий софт, и вдруг внезапно оказывается, что неважно, когда вы его сделаете,&lt;br /&gt;
это значит, что кто-то просто забыл посчитать, насколько ваша деятельность экономически выгодна.&lt;br /&gt;
&lt;br /&gt;
Когда у вас дедлайн сколь угодно далеко, то проект может сьесть сколь угодно много денег.&lt;br /&gt;
Это значит, он может оказаться сколь угодно экономически бессмысленнен.&lt;br /&gt;
&lt;br /&gt;
Так что если дедлайна нет, то тоже есть повод задуматься.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Create a Product Definition Statement ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=12|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Теперь таки поговорим о том, как все-таки сделать успешный проект.&lt;br /&gt;
Позволю себе процитировать заголовок из руководства для разработчиков айфона.&lt;br /&gt;
«Формулируйте что вы делаете, для кого вы делаете и что именно».&lt;br /&gt;
&lt;br /&gt;
Это очень сильно облегчает жизнь. Руководство, кстати, рекомендую почитать в оригинале, его неглупые люди писали и достаточно неплохо у них получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Что делать? ===&lt;br /&gt;
&lt;br /&gt;
Когда у вас есть определение того, что вы сделали, это помогает вам не тратить время на пустые обсуждения.&lt;br /&gt;
Например, мы делали проект для Министерства экономического развития Российской Федерации.&lt;br /&gt;
И нам нужно было построить модель экономического развития регионов по 17 параметрам.&lt;br /&gt;
Параметры совершенно от балды, мы в них ничего не понимали.&lt;br /&gt;
Неясно было совершенно, что делать.&lt;br /&gt;
Я предложил простую модель — «мы будем суммировать эти параметры с произвольными коэффициентами».&lt;br /&gt;
Это абсолютно понятная модель, которую мы назвали «СуперСумматор».&lt;br /&gt;
&lt;br /&gt;
Дали возможность пользователям менять коэффициенты, и смотреть при этом, какой регион, при каких коэффициентах выходит в топ.&lt;br /&gt;
Мы ни минуты не спорили о том, что мы делаем.&lt;br /&gt;
Мы это сразу понимали. Мы выпустили продукт с идеальным качеством.&lt;br /&gt;
&lt;br /&gt;
По функциональности были небольшие замечания, но они никого не волновали.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Сопротивление бесполезно ===&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=14|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Чем еще полезно иметь цель?&lt;br /&gt;
Вы можете преодолевать сопротивление!&lt;br /&gt;
&lt;br /&gt;
Еще один случай из моей практики — мне достался менеджер, который в принципе не хотел работать.&lt;br /&gt;
У него были какие-то другие интересы в жизни.&lt;br /&gt;
Запускать какие-то задачи в разработку ему не хотелось, и все, он их практически не запускал.&lt;br /&gt;
Но, он один раз ушел в отпуск, а наверху произошла небольшая рокировка, мне достался верхний, совсем высокоуровневый менеджер, который мне поставил достаточно четкоопределенную задачу.&lt;br /&gt;
Я эту задачу сделал, начиная от согласования спецификаций, и кончая поддержкой пользователей, несмотря на то, что менеджер был по прежнему против того, чтобы это делать.&lt;br /&gt;
&lt;br /&gt;
Был против того чтобы ездить согласовывать требования, был против того, чтобы запускать разработку, был против того, чтобы внедрять.&lt;br /&gt;
Но так как была четкая цель, все равно все получилось.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== The Joel Test: 12 Steps to Better Code ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=15|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Давайте поговорим о процессах. Был такой, вернее есть такой человек, ''Joel Spolsky'',&lt;br /&gt;
который сделал для нас [http://stackoverflow.com stackoverflow.com].&lt;br /&gt;
&lt;br /&gt;
И он десять лет назад, написал статью «[http://local.joelonsoftware.com/wiki/%D0%A2%D0%B5%D1%81%D1%82_%D0%94%D0%B6%D0%BE%D1%8D%D0%BB%D0%B0:_12_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BC%D1%83_%D0%BA%D0%BE%D0%B4%D1%83 The Joel Test: 12 Steps to Better Code]», в которой изложил по пунктам критерии нормального процесса разработки.&lt;br /&gt;
&lt;br /&gt;
Давайте спросим себя, как отреагировала индустрия на статью Джоэля Спольски?&lt;br /&gt;
&lt;br /&gt;
Индустрия положила большой болт на статью Джоэла.&lt;br /&gt;
&lt;br /&gt;
Вы приходите в новый проект, там нет багтрекера.&lt;br /&gt;
&lt;br /&gt;
«У вас нет багтрекера, да как же так? — А нет и нет, нам все равно, мы такие.».&lt;br /&gt;
&lt;br /&gt;
Все, полная автономность.&lt;br /&gt;
Я сейчас позволю себе немного творчески пересказать идеи Джоэла, но с точки зрения реальности.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Процесс ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=16|right|480px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Может не очень хорошо видно, но это классический комикс про качели. Про то, как разные стороны понимают проект, как они его видят.&lt;br /&gt;
Понятно, что видение у всех различное.&lt;br /&gt;
Это видение нужно синхронизировать, и чтобы с этим справится, вам придется затрачивать усилия, время, спорить, писать письма грамотно,&lt;br /&gt;
может быть даже собирать совещания и выбивать себе командировки, т.е. за это надо как-то бороться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Wiki должен победить ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Есть хороший метод, как решить эту проблему.&lt;br /&gt;
Нужно использовать Wiki.&lt;br /&gt;
&lt;br /&gt;
Вики используется личным примером, в него пишутся тексты, просите коллег писать,…&lt;br /&gt;
есть успешные примеры, когда вики успешно запускается, и успешно развивается.&lt;br /&gt;
&lt;br /&gt;
И в итоге, получаются спецификации, практически в том виде, в том формате, про  который писал Джоел, у него есть несколько статей, о том, как писать спецификации.&lt;br /&gt;
&lt;br /&gt;
«Wiki должен победить» — кого он должен победить?&lt;br /&gt;
Обычно, он должен победить Sharepoint.&lt;br /&gt;
Это такое большое хранилище документов, в него менеджеры иногда кладут вордовый документ.&lt;br /&gt;
Кладут вордовый документ, потом его пробуют прочитать.&lt;br /&gt;
Говорят «что-то ничего непонятно вообще, ерунда какая-то».&lt;br /&gt;
Менеджер говорит — «ОК, ребята, я понял, действительно ничего не понятно, много вопросов, я перепишу».&lt;br /&gt;
&lt;br /&gt;
Через неделю, коммитит новую версию — ну исправлено что-то в двух местах, по мелочи.&lt;br /&gt;
Легче не становится.&lt;br /&gt;
Sharepoint для совместной работы — я не видел, чтобы он когда-нибудь работал.&lt;br /&gt;
Вики в принципе работает. Бывает тяжело, но работает.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Возможно, вас заинтересуют&lt;br /&gt;
&lt;br /&gt;
успешные кейсы использования вики-систем:&lt;br /&gt;
* [[Knowledge Management: От Склада к Потоку (Software People-2010)|Knowledge Management: От Склада к Потоку]]&lt;br /&gt;
* [[MediaWiki — Серебряная пуля или швейцарский нож?]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:''Из зала — а у нас обратный пример. Вики умер, а шарепоинт победил.''&lt;br /&gt;
&lt;br /&gt;
Это удивительно.&lt;br /&gt;
&lt;br /&gt;
:''Вики оказался неудобен тем, что там крайне неудобно редактировать''.&lt;br /&gt;
&lt;br /&gt;
Вы справились, вы молодцы, но вот реальный программист…&lt;br /&gt;
А если линуксоид? Он даже толком не подконнектится, он скачать документ еще сможет, а отредактировать уже нет.&lt;br /&gt;
&lt;br /&gt;
Вики гораздо проще в редактировании документов!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Исправляйте баги ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=18|right|512px]]&lt;br /&gt;
&lt;br /&gt;
Этот слайд обусловлен глубокими личными переживаниями.&lt;br /&gt;
Что будет, если вы будете исправлять баги?&lt;br /&gt;
&lt;br /&gt;
Во-первых, вы получите уважение коллег&amp;lt;ref&amp;gt;&lt;br /&gt;
[[Файл:Сарказм Теория Большого Взрыва.jpg|center|512px]]&amp;lt;/ref&amp;gt;! «Яша исправляет баги… , подумаешь… » — угу, не очень полезная деятельность.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, вас могут легко уволить!&lt;br /&gt;
Вот вы, пишите какую-то компоненту, и написали ее из багов.&lt;br /&gt;
Все, она работает, вас можно уволить. Так бывает, я знаю.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вы приходите на интервью, вас спрашивают, «что вы сделали? — я исправлял баги… — а делали то что?».&lt;br /&gt;
Вот и все. Иди нафиг, нам нужны люди, которые без багов пишут.&lt;br /&gt;
&lt;br /&gt;
Вы может и не свои баги исправляли, но вот на интервью бывает грустно.&lt;br /&gt;
&lt;br /&gt;
Зачем же все-таки исправлять?&lt;br /&gt;
Дело в том, что когда вы исправляете баги, вы все-таки делаете свое приложение лучше.&lt;br /&gt;
И иногда эффект бывает неожиданным. Вы получаете больше, чем ожидаете.&lt;br /&gt;
&lt;br /&gt;
Вот например, у вас был процесс сборки, который занимал полчаса, и при этом требовал каких-то действий руками генерального директора.&lt;br /&gt;
А вы взяли, и написали автоматический скрипт. И получилось, что вы можете быстрее разработать программное обеспечение,&lt;br /&gt;
и вам стало качественно лучше жить.&lt;br /&gt;
&lt;br /&gt;
Другой момент — иногда реально баги нужно править.&lt;br /&gt;
Реальный пример — приходит ко мне начальник, и говорит «через две недели релиз, а у нас одни баги… релиз все-таки, надо бы поправить…».&lt;br /&gt;
Ну ничего, переписал потихонечку, за две недели.&lt;br /&gt;
&lt;br /&gt;
Третий момент — вот смотрите, есть айфон. В принципе, Nokia, HTC, Microsoft могут сделать девайс, который будет конкурентным по любым параметрам.&lt;br /&gt;
Цену могут занизить, дисплей поставить, не хуже, по крайней мере, процессор большой поставить, акселерометр, совершенно не проблема.&lt;br /&gt;
Что они не могут сделать? Они не могут сделать платформу, которая не будет глючить. Т.е. сделать без багов, это очень тяжело.&lt;br /&gt;
Это реально становится конкурентным преимуществом.&lt;br /&gt;
&lt;br /&gt;
Когда бьются две поисковые системы, на простейших вопросах они совершенно одинаковые, однако выясняется, что на каких-то запросах одна система работает лучше, чем другая. И постепенно, все пользователи переходят на ту поисковую систему, на которых багов меньше.&lt;br /&gt;
Т.е. на конкурентном рынке очень важно, чтобы исправлять баги.&lt;br /&gt;
&lt;br /&gt;
А написать приложение с багами, может любой студент, это не фокус.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Как быстро вы исправите опечатку? ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=19|right|384px]]&lt;br /&gt;
&lt;br /&gt;
Этот следующий слайд, он про то, чтобы у вас был процесс разработки программного обеспечения.&lt;br /&gt;
Т.е. вы должны понимать, как выпускать релизы.&lt;br /&gt;
&lt;br /&gt;
Допустим такую ситуацию — вы выпускаете релизы раз в год.&lt;br /&gt;
Что это означает? Это означает, что те люди, которые выпускали прошлый релиз, покинули компанию.&lt;br /&gt;
&lt;br /&gt;
И вы начинаете выпускать релиз. Вы не понимаете, как это делать.&lt;br /&gt;
Вы это делаете впервые. Естественно, у вас получается плохо.&lt;br /&gt;
Поэтому релиз вы выпускаете не раз в год, а раз в два.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
{{SideBar|&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]]: Если вы не верите в такие&lt;br /&gt;
&lt;br /&gt;
долгие циклы релизов, см. [[Agile_«по-крупному»_(встреча_AgileRussia.ru_2009-04-21)#Waterfall2Agile-1|видеорассказ]]&lt;br /&gt;
&lt;br /&gt;
о трехлетнем цикле выпуска продуктов.}}&lt;br /&gt;
&lt;br /&gt;
Один год вы что-то разрабатываете, а потом еще год допиливаете, чтобы как-то выпустить.&lt;br /&gt;
&lt;br /&gt;
Иногда это кончается сверху, и вы не выпускаете релиз вообще.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Теория ===&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=20|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Это мы поговорили об общей какой-то инфраструктуре, но если вы хотите работать эффективно, вам нужны какие-то теоретические знания.&lt;br /&gt;
Я бы хотел посоветовать почитать вам пару книг, первая из них это рефакторинг Мартина Фаулера, которая изменила мою жизнь — я сильно прибавил в кодировании после ее прочтения.&lt;br /&gt;
&lt;br /&gt;
Но сейчас я хочу остановится на ее названии, вернее подзаголовке — «улучшение существующего кода».&lt;br /&gt;
В чем ведь революционная идея рефакторинга?&lt;br /&gt;
В том, что теперь мы код не выбрасываем, мы его улучшаем.&lt;br /&gt;
&lt;br /&gt;
Теперь мы не говорим о том, что мы сейчас придем и напишем вторую версию кода заново, и она будет более правильная, мы берем существующую версию и начинаем ее дорабатывать.&lt;br /&gt;
И постепенно дорабатывая, мы получаем более хороший результат.&lt;br /&gt;
&lt;br /&gt;
И теперь, программное обеспечение делается именно так. Никто не делает сразу идеальный продукт, который потом никто не трогает.&lt;br /&gt;
Все теперь сначала делают первую версию, потом смотрят на реакцию пользователей и дорабатывают.&lt;br /&gt;
&lt;br /&gt;
Т.е. теперь программное обеспечение не столько разрабатывается, сколько улучшается существующее.&lt;br /&gt;
И начальная разработка, она может длится год.&lt;br /&gt;
А доработка может длится пять, десять лет, в зависимости от того, насколько ваш продукт успешен.&lt;br /&gt;
Чем более продукт успешен, тем дольше длится доработка.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Как стать героем (Яков Сироткин).pdf|page=21|right|256px]]&lt;br /&gt;
&lt;br /&gt;
Другая книга — «Effective Java», рекомендуется читать второе издание, оно просто по Java 5,  более актуальное,&lt;br /&gt;
по-моему есть оно только на английском.&lt;br /&gt;
&lt;br /&gt;
Джошуа Блох часто выступает, можно смотреть его презентации, видео, слайды, … не обязательно покупать его книжку на Амазоне.&lt;br /&gt;
&lt;br /&gt;
Более актуальная — «Паттерны», есть знаменитая книжка «банды четырех» про паттерны проектирования, но она плохо переведена,&lt;br /&gt;
и ее применение на практике часто оборачивается, скажем так, не очень желательными результатами, а здесь это все более понятно,&lt;br /&gt;
и достаточно много мозгов в эту книгу вложено.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Кирпичики ===&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
==== Профанам не важно, какие библиотеки использовать ====&lt;br /&gt;
&lt;br /&gt;
Еще один момент в том, что современное программное обеспечение базируется на уже готовых программных компонентах, на чем-то, что уже разработали другие люди.&lt;br /&gt;
Это сильно сокращает сроки, повышает качество, и в принципе тенденция понятная и правильная.&lt;br /&gt;
&lt;br /&gt;
Есть один минус. Если человек — идиот, то никакие библиотеки ему не помогут.&lt;br /&gt;
Вот хочет человек использовать SOAP, и ему наплевать, что из-за этого у него получается время реакции на минуту больше, и памяти жрется в три раза больше.&lt;br /&gt;
Ему просто наплевать, вот хочется и он использует, ему все равно.&lt;br /&gt;
И если этот проект начинали не вы, то часто приходится с вместе с этим делом …&lt;br /&gt;
вот у меня был случай, система для проведения опросов через интернет.&lt;br /&gt;
У нее внутри было &amp;lt;tt&amp;gt;CAMINO XML Database&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Все было очень хорошо, я давно работал с XMLем, но у него была одна проблема — он не мог сделать больше шести insert-ов в секунду.&lt;br /&gt;
Как вы понимаете, десять инсертов в секунду это очень мало.&lt;br /&gt;
Мы никак не можем с этим справиться, мы должны использовать что-то другое, хоть ORACLE можно, он умеет делать, хоть сто в секунду.&lt;br /&gt;
Не проблема совершенно, вот перейдем на оракл и не будет у нас никаких проблем.&lt;br /&gt;
Но начальство говорило, «CAMINO — это наш ребенок, мы его сами сюда вот вкорячили, и мы его вот так просто не отдадим».&lt;br /&gt;
А десять инсертов в секунду — это мнээ, никак…&lt;br /&gt;
Ну меня уволили, потом там все заменили, но — частично…&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== XSLT ====&lt;br /&gt;
Положительный пример — это &amp;lt;tt&amp;gt;XSLT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Позволяет отделять данные от представления.&lt;br /&gt;
Например, если вы делаете SaaS-сервис, т.е. у вас есть один большой сервер и много клиентов, которые запускают на вашем сервере свои приложения. Вы хотите их кастомизировать, под каждого конкретного клиента.  XSLT дает вам такую возможность.&lt;br /&gt;
&lt;br /&gt;
У нас был пример, мы писали  SaaS-сервис, тогда он назывался не SaaS-, а education service провайдер. И клиентская часть была сделана через XSLT, а админская — нет.&lt;br /&gt;
И клиент переодически спрашивал нас — «А можно админскую часть на XSLT сделать, как клиентскую?».&lt;br /&gt;
Мы говорили — «ну вот, надо переписать на XSLT». «Переписать — это что-то дороговато.»&lt;br /&gt;
А потом, через некоторое время снова спрашивал…&lt;br /&gt;
&lt;br /&gt;
Да, кастомизация через XSLT она очень удобна и помогает сильно, работает именно когда вам нужно кастомизировать под разных клиентов.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== JSON ====&lt;br /&gt;
&lt;br /&gt;
JSON. Допустим у вас есть два сервера. JSON очень хороший формат, чтобы обмениваться информацией между ними.&lt;br /&gt;
JSON лучше, чем XML.&lt;br /&gt;
Он более компактный, он более стандартизированный, у него нет ??? атрибут сделать или тег.&lt;br /&gt;
И в то же время, он по прежнему человекочитаемый, и очень легко обрабатывается программой.&lt;br /&gt;
И в него можно добавлять произвольные новые данные.&lt;br /&gt;
Очень рекомендую, по-крайней мере обращать на него внимание и знать, что это такое.&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
==== Асинхронная обработка задач ====&lt;br /&gt;
&lt;br /&gt;
Еще один такой, большой enterprise pattern, это асинхронная обработка задач.&lt;br /&gt;
Когда он применим?&lt;br /&gt;
&lt;br /&gt;
Допустим, что у вас есть сервер.&lt;br /&gt;
И на него сыпется большое количество задач.&lt;br /&gt;
Наивный подход — синхронный, когда вы каждую задачу стремитесь немедленно обработать.&lt;br /&gt;
В реальной жизни у вас могут случится две неприятности:&lt;br /&gt;
* У вас будет очень-очень-очень много задач, которых вы не сможете обработать синхронно.&lt;br /&gt;
* Вам начали приходить задачи с ошибками. И у вас вообще, крыша едет.&lt;br /&gt;
&lt;br /&gt;
Асинхронная обработка задач — это когда вы сначала задачу записываете, а обрабатываете ее потом.&lt;br /&gt;
И тогда вы можете попытаться ее обработать один раз, потом второй раз, если есть какие-нибудь ошибки, вы можете обрабатывать их постепенно,&lt;br /&gt;
если их приходит слишком много, вы получаете практически полный контроль.&lt;br /&gt;
&lt;br /&gt;
Я применял это решение начиная с «Яндекс.Денег», под руководством Фила Дельгядо, и практически во всех остальных проектах очень это сильно облегчает жизнь,&lt;br /&gt;
есть подробная очень статья, отсылаю вас к ней:&lt;br /&gt;
&lt;br /&gt;
* http://www.telamon.ru/articles/async.html&lt;br /&gt;
&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Не занимайтесь ерундой ===&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Sphinx — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
У Джоэла есть еще одна статья, про то, что программное обеспечение разрабатывается десять лет. Хорошее.&lt;br /&gt;
У Джоэла на примере Excel-а, у меня есть свои примеры.&lt;br /&gt;
&lt;br /&gt;
Я бы хотел поговорить о Sphinxe, вот в зале тут присутствует Андрей Аксенов, я тут на разогреве, он будет выступать после меня, редкая возможность на него посмотреть.&lt;br /&gt;
У меня тоже много личного в этом слове. Я просто десять лет назад делал поисковую систему для российских музеев.&lt;br /&gt;
Я изобрел велосипед.&lt;br /&gt;
Я делал все на базе SQLя, верхний индекс… , как он называется? В общем, на базе SQL сделал велосипед.&lt;br /&gt;
А полноценный полнотекстовый поиск не делал, это «и не в рамках бюджета и вообще не требуется».&lt;br /&gt;
&lt;br /&gt;
В это время начинался Lucene, в это время начинался Sphinx.&lt;br /&gt;
Т.е. я не заметил, что есть ниша для кастомных поисковых движков.&lt;br /&gt;
Я не заметил, что существует Lucene, и продолжал, как бы страдать ерундой на работе.&lt;br /&gt;
А мог бы тогда присоединится к Lucene, и может быть, если бы я тогда к нему присоединился, он бы получше конкурировал с Sphinx.&lt;br /&gt;
Но не судьба.&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
PhantomOS — 10 лет}}&lt;br /&gt;
&lt;br /&gt;
Другой пример был вчера, ОС Фантом.&lt;br /&gt;
Дмитрий Завалишин только начал его делать, а думал над тем, как его делать точно больше десяти лет.&lt;br /&gt;
И поэтому, я хочу вам сказать, что если у вас есть какая-то идея, поймите, что…&lt;br /&gt;
JUnit, который за ночь написали, это мелочи… если вы хотите сделать серьезное программное обеспечение, которым будут пользоваться люди, будьте готовы к тому, что вы будете разработывать его долго.&lt;br /&gt;
Может быть не десять лет, но год на первую версию у вас может легко уйти, будьте к этому готовы.&lt;br /&gt;
&lt;br /&gt;
Нельзя разработать хороший софт без труда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Не занимайтесь ерундой}}&lt;br /&gt;
&lt;br /&gt;
Теперь уже такие более общие вопросы, рекомедации.&lt;br /&gt;
Понимаете, есть такой конфликт, когда вы работаете программистом.&lt;br /&gt;
&lt;br /&gt;
Допустим, вы хотите разработать хорошее программное обеспечение, чтобы оно было популярным, чтобы оно очень много и без проблем работало.&lt;br /&gt;
Вам на это нужно полгода-год, ну какой то пусть существенный промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Но в то же время, у вас есть начальник, не заказчик, он может, и он вам ставит краткострочные цели.&lt;br /&gt;
И очень часто, эти краткосрочные цели входят в конфликт, с конечным, долгосрочным результатом.&lt;br /&gt;
&lt;br /&gt;
Заказчик очень хочет посмотреть по часам конкретно чем мы занимались.&lt;br /&gt;
Или у него есть какие-то сюеминутные хотелки, что сейчас вот обязательно сделайте вот так и по быстрому.&lt;br /&gt;
Или он просто хочет с вами поговорить и поэтому созывает бессмысленный митинг, на котором вы вообще ничего совсем не понимаете, о чем он говорит.&lt;br /&gt;
&lt;br /&gt;
Мой вам совет — старайтесь поменьше заниматься ерундой. &lt;br /&gt;
Это деморализует, и в итоге получается плохой результат.&lt;br /&gt;
&lt;br /&gt;
Свежий пример из моей практики.&lt;br /&gt;
Заказчик, более-менее внезапно, сказал что он больше не хочет автокоммитов, при каждом запросе,&lt;br /&gt;
а он хочет все, ну просто все транзакцией.&lt;br /&gt;
Я подумал чуть-чуть и сказал, что если он настаивает на автокоммитах, то давайте контракт разорвем сейчас,&lt;br /&gt;
ибо что-то мне не нравится идея.&lt;br /&gt;
Заказчик подумал, и сказал: «Да, Яша, ты продал мне автокоммиты».&lt;br /&gt;
&lt;br /&gt;
Т.е. поймите: не заниматься ерундой  — это рискованная позиция.&lt;br /&gt;
&lt;br /&gt;
Как только вы начинаете перечить руководству, сразу над вами нависает риск увольнения.&lt;br /&gt;
Но иногда получается, если вы можете что-то объяснить, то руководство часть соглашается.&lt;br /&gt;
Дали приказ, а потом увидели, что вы недовольны — «а, ну мы и не настаиваем».&lt;br /&gt;
&lt;br /&gt;
Т.е. в принципе — говорить, говорить, — иногда помогает.&lt;br /&gt;
Иногда нет.&lt;br /&gt;
{{clearfloat}}&lt;br /&gt;
&lt;br /&gt;
=== Ошибки важнее продаж ===&lt;br /&gt;
&lt;br /&gt;
Тут еще один такой печальный момент.&lt;br /&gt;
Если вы много разрабатываете, пишете, часто делаете релизы, то рано или поздно вы ошибетесь.&lt;br /&gt;
&lt;br /&gt;
Если вы делаете релиз раз в год, вы ошибетесь один раз в год. Но конкретно.&lt;br /&gt;
А если вы делаете релиз раз в неделю — пять релизов нормально, десять релизов нормально, а на двадцатом — опа, и ошиблись.&lt;br /&gt;
Конечно, о вас скажут все, что о вас думают. «Как вы могли! Такой ответственный проект!…»&lt;br /&gt;
&lt;br /&gt;
На самом деле — без ошибок не бывает.&lt;br /&gt;
И смиритесь с тем, что за ошибки вас будут ругать, ну в известных пределах конечно смиритесь.&lt;br /&gt;
&lt;br /&gt;
Если вы вообще код без багов писать не умеете, и у вас каждый первый релиз падает, то надо конечно качество повысить, или другим каким делом заняться, но иногда ошибки бывают у всех. Простым людям следуюет с этим смирится.&lt;br /&gt;
&lt;br /&gt;
Есть еще параллельный процесс, что ваше программное обеспечение пытаются кому-то продать.&lt;br /&gt;
И часто ситуация бывает такая — «Мы это уже продали, больше ничего не трогайте».&lt;br /&gt;
А продали… да там пользователь может данные потерять, если ничего не трогать.&lt;br /&gt;
И продажи очень часто давят.&lt;br /&gt;
&lt;br /&gt;
Совсем плохой случай, когда продажники что-то пообещали какому-то крупному клиенту, за какие-то большие деньги, а вас поставили перед фактом — вот «мы это уже продали».&lt;br /&gt;
Пожалуйста, срочно сделай!&lt;br /&gt;
&lt;br /&gt;
И из-за этого, буквально вся система утыкивается костылями.&lt;br /&gt;
Я буквально видел такую ситуацию, когда полсистемы обслуживает одних клиентов, а другая половина обслуживает только одного клиента. Практически полный копипаст!&lt;br /&gt;
Т.е. реально, прогибаясь под одного клиента, вы превращаете свой сок (???) в руины просто. Снижаете скорость его разработки на порядок.&lt;br /&gt;
&lt;br /&gt;
И поймите — если вы хотите сто новых клиентов, то вы не должны концентрироваться на одном клиенте. Нам нужно именно смотреть в будущее, стремится разрабатывать быстрее, и не пытаться подстроится под одного конкретного клиента.&lt;br /&gt;
Учитывать его мнение — да, конечно. Но не жертвовать всей разработкой.&lt;br /&gt;
&lt;br /&gt;
Как раз двадцать минут до конца доклада, я закончил.&lt;br /&gt;
&lt;br /&gt;
=== Вопросы ===&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А если клиент один и больше нет? И если ты не сделаешь этот прототип завтра, у тебя не будет денег, нечего будет кушать. [шум в зале]… десять человек окажутся без работы… Что делать?''&lt;br /&gt;
&lt;br /&gt;
Если у вас один клиент, вы от него полностью зависимы.&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Все его хотелки это глас божий?''&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''Но ты же сказал, что делать надо по-уму!''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Нет, если у вас…&lt;br /&gt;
Ситуации бывают разные.&lt;br /&gt;
Доклад о том, как стать героем.&lt;br /&gt;
Если у вас один клиент, который на вас сливает, свои, как бы странные фантазии, то вы будете их выполнять.&lt;br /&gt;
Вопрос в том, сколько вам за это денег платят.&lt;br /&gt;
Я думаю, вам платят не очень много. И до максимума не поделятся ничем.…&lt;br /&gt;
Один клиент — это очень мало. Очень мало и очень рисковано.&lt;br /&gt;
&lt;br /&gt;
Ну, кто-нибудь еще хочет разработать программное обеспечение? Спросите меня как.&lt;br /&gt;
Время еще есть.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: я не хочу… меня заставляют!''&lt;br /&gt;
&lt;br /&gt;
Понимаете, если вам приходится заставлять себя программировать, то может быть есть смысл подумать о том, что есть много других хороших профессий (???).&lt;br /&gt;
&lt;br /&gt;
:''Из зала: менеджер… продукт-менеджер, да.''&lt;br /&gt;
&lt;br /&gt;
Нормальный программист, этот тот, кто делает за деньги то, что ему нравится.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: о-о-о-о-о … Яша, это не программист уже, а научный сотрудник. Яша, как известно наука это способ удовлетворить свое любопытство за деньги государства. А программист соответственно, будет удовлетворять любопытство своего начальника за деньги своей компании. Мои по-меньшей мере, удовлетворяют мое.''&lt;br /&gt;
&lt;br /&gt;
Ну вот видишь, ты сегодня уже с начальниками дружишь.&lt;br /&gt;
Но в принципе, это хорошая мысль, что надо самому себе стать начальником, прекрасно иллюстрируешь личным примером.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: Я готов уволиться! [шум] ''&lt;br /&gt;
&lt;br /&gt;
В принципе, если отвлечься от моральных издержек, вспоминая свои увольнения, я могу констатировать, что в финансовом плане, это было очень хорошо.&lt;br /&gt;
Потому что, у нас была такая система мотивации, что самый большой бонус, который они могли получить — это при увольнении, когда платят выходное пособие.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: За отпуск, который не дали! [шум]''&lt;br /&gt;
&lt;br /&gt;
Я получал и за отпуск, и за увольнение! Это просто, просто коммунизм!&lt;br /&gt;
&lt;br /&gt;
:''Из зала: [шум] надо каждые полгода увольнятся! [шум] это путь истинного офисного самурая! …''&lt;br /&gt;
&lt;br /&gt;
У тебя какие-то странные представления.&lt;br /&gt;
&lt;br /&gt;
:''Из зала: это не у меня!''&lt;br /&gt;
&lt;br /&gt;
Доклад вообще-то о том, как программное обеспечение разрабатывать, и что вам за это будет.&lt;br /&gt;
Просто не приукрашиваю.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Вопрос про рефакторинг [шум] Windows 7 [шум] переделали нафиг [шум]…''&lt;br /&gt;
&lt;br /&gt;
Стоп, Windows 7, Windows Phone 7, это история даже не про семь лет, а про пятнадцать. Потому что платформа на самом деле очень древняя. Микрософт черта с два сделал виндовс-фон-семь, если бы в свое время не было бы виндовс-мобайл, виндовс-фон…&lt;br /&gt;
т.е. микрософт давно делает коммуникаторы, это не новая для них ниша. Они победили Palm в ходе конкуренции, потом пришел IPhone, убил виндовс, теперь вот виндовс наносит ответный удар. Это очень длинная борьба.&lt;br /&gt;
Тут реально годы разработки, и виндовс-семь разрабатывался годами.&lt;br /&gt;
Понятно, что Билл Гейтс, видя успех Эппл, он серьезно переживал, что эппл нанесла всем этим микрософтам, HTC, и так далее, очень большой удар. Выкатили продукт, до которого было как до луны. И понимали, что его надо нагонять, серьезная обида, тут десять лет в полный рост.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{question}} ''Надо понимать две вещи про Микрософт. Первое — это цитадель добра, где умирают старые программисты. И второе — это инновационная компания, крайне! Она берет инновации у своих конкурентов, и делает все как надо. ''&lt;br /&gt;
&lt;br /&gt;
Ты немного недооцениваешь масштабы проблемы. Дело в том, что Эппл изменил паттерн использования мобильных устройств. У Микрософта в принципе были мобильные устройства, был броузер, была почта.&lt;br /&gt;
Эппл сделал устройство, с которого начали ходить в интернет.&lt;br /&gt;
Т.е. реально, Эппл, имея долю в десять процентов устройств, обеспечил 80% просмотров веб-страниц.&lt;br /&gt;
Я могу немного наврать в цифрах, но Эппл изменил паттерн использования.&lt;br /&gt;
А если вы ходите в интернет через Эппл, то это означает, что вы пользуетесь тем поисковым движком, который жестко в айфоне зашит.&lt;br /&gt;
А если вы пользуетесь этим поисковым движком, это означает, что все деньги за контекстную рекламу, идут через вас.&lt;br /&gt;
Поэтому так всполошился гугл с андроидом, ну и микрософт тоже на рынке контекстной рекламы пытается работать.&lt;br /&gt;
Потому что вы, как пользователь контекстной рекламы, можете вполне, на сотню долларов рекламы нащелкать легко.&lt;br /&gt;
Это серьезная, серьезная игра.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{SideBar|&lt;br /&gt;
Яков Сироткин&lt;br /&gt;
&lt;br /&gt;
разрабатывает программное&lt;br /&gt;
&lt;br /&gt;
обеспечение&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
:{{question}} ''А на последнем слайде, какой знак препинания пропущен — вопросительный или восклицательный? ^_^ [смех в зале]''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что тут просто нет никакого знака.&lt;br /&gt;
Ну еще кто-нибудь хочет чего-то спросить?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:{{question}} ''Видит ли себя Яков Сироткин в шестьдесят лет программистом?''&lt;br /&gt;
&lt;br /&gt;
Я кто будет программировать то? Да, я доживу!&lt;br /&gt;
Я до сих пор еще не умер, и думаю, это хороший знак.&lt;br /&gt;
&lt;br /&gt;
:''…Жизнь начинается после программирования…''&lt;/div&gt;</summary>
		<author><name>Yakov-sirotkin</name></author>	</entry>

	</feed>