<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>bishop-it.ru</title>
	
	<link>http://bishop-it.ru</link>
	<description>IT епископ про разработку ПО, программирование и вирусы.</description>
	<pubDate>Wed, 10 Mar 2010 07:25:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/bishop-it/LaoT" /><feedburner:info uri="bishop-it/laot" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Самый простой способ изучить C++ за 21 день</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/6y-S5IXtzo4/</link>
		<comments>http://bishop-it.ru/2010/03/learncppin21day/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 07:25:03 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[Программирование]]></category>

		<category><![CDATA[Юмор]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=879</guid>
		<description><![CDATA[


 Понравилась статья? Подпишись на RSS!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://abstrusegoose.com/249"><img src="http://bishop-it.ru/wp-content/uploads/2010/03/learncin21day.png" /></a><br />
<br/><br />
<br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/6y-S5IXtzo4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/03/learncppin21day/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/03/learncppin21day/</feedburner:origLink></item>
		<item>
		<title>Один день из жизни Программиста</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/mNqXAq7a5cg/</link>
		<comments>http://bishop-it.ru/2010/03/onedayofprogrammerslife/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 17:26:57 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[IT]]></category>

		<category><![CDATA[Про меня]]></category>

		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=869</guid>
		<description><![CDATA[Пятница - лучший день для работы, ибо впереди отдых. А в эту пятницу Программисту предстояло начинать изучение нового большого компонента, так что день сулил много интересного.
Утро, как обычно, началось с ежедневного SCRUM собрания минут на 10 и еще с пары совещаний. Потом были письма и ответы на них и быстрый обед.
Зато после этого Программист выгрузил [...]]]></description>
			<content:encoded><![CDATA[<p>Пятница - лучший день для работы, ибо впереди отдых. А в эту пятницу Программисту предстояло начинать изучение нового большого компонента, так что день сулил много интересного.<br />
Утро, как обычно, началось с ежедневного SCRUM собрания минут на 10 и еще с пары совещаний. Потом были письма и ответы на них и быстрый обед.<br />
Зато после этого Программист выгрузил Outlook и Skype и исчез для всех (ибо нет ничего хуже для программиста, чем постоянное отвлечение).<br />
Исчез для всех, кроме второго Программиста, который разработал этот большой компонент, который предстояло изучать. Для ускорения передачи знаний было решено поработать несколько дней в паре за одним компьютером (ибо pair programming офигительно хорош для передачи знаний).<br />
Начали с попыток скачать и сбилдить проект на новом компьютере, для чего надо было установить и прописать в системе кучу нужных SDK и тулзов. К счастью многое уже было установлено и все ограничилось установкой и настройкой QT и Python26. После небольшого колдовства (а QT без колдовства, как известно, не работает), билд заработал. И еще как!<br />
Ребилд на не сильно мощной машине Программиста занял 40 минут!<br />
<i>&#8220;Вот оно - приключение&#8221;</i>, подумал Программист и сказал второму:<br />
<i>&#8220;Я не смогу работать над тем, что билдится 40 минут. Сейчас мы с тобой ускорим билд в несколько раз!&#8221;</i><br />
Второй Программист не очень-то поверил (ибо уже год мучался с таким медленным билдом), но первый настоял, ибо знал, что <i>лучше 1 день потерять, но зато потом за 5 минут долететь.</i> (ибо время билда - один из самых важных факторов в программировании. Сделай долгий билд и никто не сможет вносить легко и просто изменения в компонент, т.к. цикл изменение-проверка будет занимать слишком много времени - тут уже никакие юнит тесты и test automation не помогут. А сделай билд и тестирование мгновенными и получишь легко расширяемый компонент)<br />
И они приступили к ускорению билда.<br />
<span id="more-869"></span><br />
<br/><br />
Что первым делом надо сделать, чтобы ускорить билд? Конечно же проверить правильность precompiled headers. Проверили - они вообще не используются. Тут первый подумал <i>&#8220;Оба-на, сейчас будет Voodoo magic&#8221;</i> и сказал второму:<br />
<i>&#8220;Чувак, сейчас я тебя сильно удивлю.&#8221;</i> (Ибо неиспользовать precompiled headers - это главная из глупостей, которые программист совершает (т.к. сделать просто и помогает), хотя не все со мной согласятся в этом).<br />
Включить precompiled оказалось непросто, ибо проекты генерировались с помощью qmake, но терпенье и Google все перетрут. Сначала было найдено, что qmake поддерживает параметры PRECOMPILED_HEADER и PRECOMPILED_SOURCE, в которых можно указать хедер и cpp, а в дефайны надо добавить USING_PCH.<br />
Был добавлен stable.h, в который включены все нужные QT инклюды. Естественно, сразу это не заработало, ибо не всем нужны были эти инклюды, а в паре мест C-API юнит-тестировался с помощью .c файлов, которые с precompiled просто не живут, так что пришлось применять разные трюки.<br />
В итоге через пару часов precompiled заработал и ускорил билд в 5 раз! Было 40 минут, а стало 8. И из этих 8 минут 2 занимает работа qmake и 6 - ребилд 30 проектов. Неплохое ускорение.<br />
Потом было обнаружено, что проекты билдятся в 1 поток.<br />
<i>&#8220;Оба-на, еще одно приключение&#8221;</i> - подумал первый Программист и сказал:<br />
<i>- А давай-ка сделаем билд на много потоков и ускорим его еще в пару раз!</i> (Ибо 1 поток - это прошлый век и не масштабируется).<br />
Начали. В итоге оказалось, что qmake создает невалидные .sln для Visual Studio 2005 и они не могут быть сбилжены с помощью vcbuild, а только с devenv, а для devenv нельзя указать число потоков.<br />
Но настоящего джедай-программиста такое не остановит - был быстренько написан скрипт, исправляющий невалидность .sln и скоро всё заработало! На многопроцессорной системе билд ускорился еще в пару раз и занимал уже не 40 минут, а 5! Впечатляющее ускорение.<br />
На этом решено было остановиться с ускорением билда (Ибо можно провести сколько угодно времени улучшая environment, но нужно знать и меру и уметь вовремя остановиться).<br />
Параллельно с ускорением билда, второй Программист передавал знания про систему билда компонента, так что кроме очевидной пользы ускорения процесса сборки, заодно была еще изучена эта система сборки - двойная польза.<br />
А до конца рабочего дня оставался еще час.<br />
<br/><br />
А что можно сделать за час? Правильно - открыть багтрекер и исправить пару багов (да и изучать код проще, исправляя баги в нем).<br />
Первый баг - компонент не выгружается, когда ему шлют сообщение &#8220;Выйти&#8221;. Нашли код - функция OnExit пустая. Понятно, как исправить.<br />
Но сначала <a href="http://bishop-it.ru/2009/05/reproduce-first-debugging-%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%B5%D0%BD%D0%B8%D0%B5/">надо научиться повторять баг</a>, ибо иначе не проверить исправление. Быстренько пишется скриптик, посылающий событие на выход. Запускается скрипт - не выходит компонент.<br />
Добавляется код в onExit, запускается скрипт - выходит компонент. Отлично, работает. Скрипт сохранен, чтобы впоследствии добавить его в Test Automation (Ибо наличие regression тестирования - важный шаг к будущему качеству продукта).<br />
Опять открывается багтрекер и берется второй баг. Креш при выходе в Win7 64bit. Дамп плюс магия WinDBG  показывают всё про баг. Анализ кода показывает банальнейший race condition в сильно многопоточном коде. Лечится вроде как легко добавлением одной критической секции. Но опять же - прежде чем фиксить, надо повторить.<br />
Пара минут обсуждений и получена идея скрипта для повторения бага. Еще 5 минут и скрипт готов и, о чудо, он сразу крешит компонент в том же месте! Отлично!<br />
Теперь добавляем код исправления, билдим, запускаем скрипт и, о чудо, ничего больше не крешится!<br />
Правда скрипт оказался настолько хорош, что кроме этого бага выявил и еще один - компонент не крешится, зато зависает при выходе в результате работы скрипта. Отлично, пофиксим еще один баг и скрипт для проверки исправления бага уже написан!<br />
Но рабочий день закончился и второму Программисту надо убегать.<br />
<i>&#8220;Продолжим в понедельник?&#8221;</i><br />
<i>&#8220;Конечно - это было очень интересно.&#8221;</i><br />
<br/><br />
На этом рабочая пятница закончилась и началась совсем другая история&#8230;<br />
<br/><br />
<br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/mNqXAq7a5cg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/03/onedayofprogrammerslife/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/03/onedayofprogrammerslife/</feedburner:origLink></item>
		<item>
		<title>10 заповедей для программистов</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/v6HwX73mKMQ/</link>
		<comments>http://bishop-it.ru/2010/03/10commandments/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 21:07:13 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[Программирование]]></category>

		<category><![CDATA[Юмор]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=852</guid>
		<description><![CDATA[
10 заповедей для программистов от it-епископа:
 1. Программирование - твоя главная страсть. И да не будет у тебя страсти главней.
2. Не сотвори себе кумира из конкретной технологии. Ибо программирование требует постоянного развития, а технологии-кумиры останавливают развитие.
3. Не возноси хвальбу программированию в неподходящей компании. Ты сам себя накажешь, ибо будешь не понят, и люди отвернутся от [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bishop-it.ru/wp-content/uploads/2010/03/10commandments.jpg" alt="" /><br />
<strong>10 заповедей для программистов от it-епископа:</strong></p>
<ol> 1. Программирование - твоя главная страсть. И да не будет у тебя страсти главней.</p>
<p>2. Не сотвори себе кумира из конкретной технологии. Ибо программирование требует постоянного развития, а технологии-кумиры останавливают развитие.</p>
<p>3. Не возноси хвальбу программированию в неподходящей компании. Ты сам себя накажешь, ибо будешь не понят, и люди отвернутся от тебя.</p>
<p>4. Работай много и хорошо, но не забывай и про отдых. Ибо нет ничего страшнее, чем код усталого, засыпающего программиста.</p>
<p>5. Уважай учителей и учеников своих. Постоянно учись и учи окружающих, чтобы было тебе всё легче и легче делать всё более и более сложные вещи.</p>
<p>6. Не убий в себе ребенка. Не забывай эмоции от первого запуска первой написанной тобой программы и воспринимай каждую следующую, как ту - первую.</p>
<p>7. Не изменяй программированию. Ибо программист может стать кем угодно, но этот кто угодно обратно программистом уже не станет.</p>
<p>8. Не кради код ближнего своего.</p>
<p>9. Не программируй то, что может принести вред другим. Ибо встав раз на путь дьявола - на нем и останешься.</p>
<p>10. Не завидуй ближнему твоему, если он умеет лучше программировать. Ибо программирование - это божественный дар, но его можно развить. Так что не завидуй, а развивай.<br />
<br/><br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></ol>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/v6HwX73mKMQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/03/10commandments/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/03/10commandments/</feedburner:origLink></item>
		<item>
		<title>Непрограммирующие программисты</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/hmimmdemSyk/</link>
		<comments>http://bishop-it.ru/2010/02/nonprogrammingprogrammers/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 14:52:35 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[Про меня]]></category>

		<category><![CDATA[Программирование]]></category>

		<category><![CDATA[Статья]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=831</guid>
		<description><![CDATA[
Джефф Атвуд несколько дней назад написал еще одну статью про непрограммирующих программистов.
В ней он пишет, что 3 года назад он вдруг осознал, что многие люди, приходящие на собеседование на должность программиста, не могут написать даже простейшей программы. Также он пишет о том, как это понимание изменило его подход к интервьюированию программистов - теперь он всегда [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bishop-it.ru/wp-content/uploads/2010/02/parttime.gif" /><br />
Джефф Атвуд несколько дней назад написал еще одну статью <a href="http://www.codinghorror.com/blog/2010/02/the-nonprogramming-programmer.html">про непрограммирующих программистов.</a><br />
В ней он пишет, что 3 года назад он вдруг осознал, что многие люди, приходящие на собеседование на должность программиста, не могут написать даже простейшей программы. Также он пишет о том, как это понимание изменило его подход к интервьюированию программистов - теперь он всегда просит писать код, даже самый простейший, чтобы сразу отсеять тех, кто совсем не может ничего написать. Причем он делает это еще до того, как приглашает людей на личное интервью - по телефону или через интернет.<br />
<br/><br />
Интересно, что те же самые мысли у меня были еще лет 5 назад, когда я был главным программистом и руководил отделом программирования в геймдевелоперской компании. Мы тогда начали активно набирать народ. Так активно, что метод рекоммендации уже не срабатывал и пришлось размещать объявления на сайтах поиска работы и проводить интервью - очень много интервью. Работа у программистов в геймдеве очень специфическая, требует постоянного развития и отличного умения программировать, поэтому мало кто на эту должность подходит. К тому же зарплаты в геймдеве были гораздо ниже, чем по отрасли в целом. В итоге, по статистике, я проводил 10-20 личных собеседований, чтобы взять 1 человека. А еще больше отсеивалось на уровне резюме и телефонных звонков или email-ов. Наверняка и кого-то из отличных программистов не взяли, но неважно.<br />
Зато те, кого в итоге брали - это были бриллианты. Готов лично поручиться практически за каждого, кто прошел мое собеседование и испытательный срок, хотя были и те, кто в итоге не выдерживал гонки геймдев-разработки и уходил.<br />
Как же я проводил собеседования?<br />
<br/><br />
<span id="more-831"></span></p>
<p>Когда я начал звать народ на собеседования, то быстро понял, что в простом разговоре невозможно понять уровень программиста. Есть люди, у которых на сложные вопросы есть ответы, которые знают неплохо теорию, но на практике делают все медленно, а то и вообще не могут ничего сделать.<br />
К тому же я был увлечен Джоэлем Сполски и сильное влияние оказала его фраза &#8220;Лучше не нанять 10 хороших программистов, чем нанять 1 плохого&#8221;. В итоге весь процесс собеседований был направлен именно на то, чтобы не взять плохих программистов.<br />
Сначала я критически читал резюме. Тут я применял небольшой трюк: если человек был без опыта работы или студент, то я часто звал его на собеседование, так как слишком часты бриллианты среди студентов, к тому же переучивать его не надо и банально - платить ему можно меньше. Если же человек был с опытом работы, то я просил его расписать подробнее чем он занимался и чего достиг за предыдущие годы. Если ничего внятного человек написать не может - я его не приглашал на собеседование, ибо, если программист не достиг ничего за несколько лет, то почему он должен измениться?<br />
В конце я также применял несколько раз телефонные интервью и это помогло отсеять несколько кандидатов. Но я себя неуютно чувствовал, разговаривая по телефону, поэтому не практиковал это очень часто.<br />
<br/><br />
С теми, кто попал на личное интервью, я сначала беседовал на личные темы, про старую работу, про прочитанные профессиональные книги, про лучший проект или код, который они написали и т.п. - это дает отличное представление о личности человека. Эта вступительная часть собеседования была направлена на то, чтобы человека раскрепостить. Это был не допрос - это было общение. Я водил претендента по офису, показывал наши рекламные ролики и игры, показывал, как мы работаем и чем занимаемся. Узнавал, что человеку интересно, а что нет. Мы никогда не сидели, разделенные столом, а все собеседования проходили в неформальной обстановке - на стульях в большой комнате у доски.<br />
Потом я давал претенденту компьютер с открытым блокнотом и просил написать несколько простейших программ, типа &#8220;напишите функцию конвертирования int в строку&#8221; и &#8220;есть 100000 объектов в игре. для объекта X напишите функцию поиска 10 ближайших объектов в 3D мире. предложите будущие методы оптимизации этой функции.&#8221;. Мне не нужна была работающая версия всех функций и правильность синтаксиса. Мне нужно было видеть, как человек думает и как быстро может соображать.<br />
Удивительно, но чуть ли не 90% претендентов проваливали этот тест совершенно. И их код был настолько неработоспособен и страшен, что было очевидно - мы не сработаемся. На этом их интервью заканчивалось.<br />
Остальные делали что-то (а кто-то делал всё - и это были лучшие программисты в итоге) и получали задание на дом.<br />
Да, после всего этого я давал еще и серьезное задание на дом, на которое разрешалось потратить вплоть до недели (чтобы проверить, я сам выполнил все эти задания. У меня ушло на каждое от 4 до 12 часов). Задания были типа &#8220;Написать игру &#8220;змейка&#8221;". Или &#8220;сделать физическую симуляцию колодца, в который кидают шары в 2d или 3d&#8221;.<br />
Если программист прошел такое интервью и сделал домашнее задание, то он безусловно умеет программировать и учиться. Такие брались на испытательный срок.<br />
На испытательном сроке они уже проверялись на реальных проектах и тут уже даже самый сильный программист может не выдержать пресса геймдева, что и случалось пару раз.<br />
Еще интересное наблюдение - обычно очень сложно отказать человеку по результатам домашнего тестового задания, если он его выполнил, но не очень хорошо. Например, код некрасивый или неоптимально сделано, или глючит и падает. Кажется, что сделал ведь человек - надо брать. Но в итоге каждый раз оказывалось, что и в работе человек такой же, как и в тестовом задании. Я через себя тогда так и не смог перешагнуть и не помню, чтобы отказывал кому-то, кто выполнил тестовое задание, даже если оно мне не нравилось.<br />
Сейчас бы я был жестче и простого плохого выполнения тестового задания было бы уже недостаточно.<br />
<br/><br />
Вот такой вот подход у меня был.<br />
Конечно, кому-то он может показаться слишком жестким. Далеко не каждый программист может за час прямо на собеседовании написать требуемый код или потратить дома несколько часов\дней на написание тестового задания. Но в геймдеве нужны были именно такие, кто может и первое и второе. И я считаю, что именно такой метод интервьюирования и принцип &#8220;Лучше не нанять 10 хороших программистов, чем нанять 1 плохого&#8221; - позволили нам в свое время создать отличную команду, которая была готова к подвигам и совершала их.<br />
А еще было очень приятно потом слышать от тех, кто проходил моё интервью, что они меня помнят и отзываются об интервью очень хорошо, даже если не прошли его. Оставить хорошее впечатление и не обидеть человека - это очень важно для интервьюера.<br />
<br/><br />
Похожие записи:<br />
<a href="http://bishop-it.ru/2009/08/rususgamedevus/">Православный Геймдев во всей его красе </a><br />
<a href="http://bishop-it.ru/2009/02/%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D1%8B-%D0%B4%D0%B5%D0%BD%D1%8C%D0%B3%D0%B8/">Книги + программисты = деньги  </a><br />
<a href="http://bishop-it.ru/2010/02/shuhari/">Shu-ha-ri для программистов </a><br />
<a href="http://bishop-it.ru/2010/02/25errors/">25 самых опасных программистских ошибок </a></p>
<p><br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/hmimmdemSyk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/02/nonprogrammingprogrammers/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/02/nonprogrammingprogrammers/</feedburner:origLink></item>
		<item>
		<title>25 самых опасных программистских ошибок</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/FxDJ_gZgDzQ/</link>
		<comments>http://bishop-it.ru/2010/02/25errors/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 23:42:13 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=822</guid>
		<description><![CDATA[Некоммерческая организация MITRE и институт SANS опубликовали список из 25 наиболее распространенных ошибок в программировании, которые могут сыграть на руку хакерам.
На первых трех местах - &#8216;Cross-site Scripting&#8217;, &#8216;SQL Injection&#8217; и &#8216;Classic Buffer Overflow&#8217;. Первые 2 - чисто интернетные ошибки, а вот переполнение буфера - классическая ошибка, до сих пор встречающаяся повсеместно.
Я здесь привожу переведенный краткий [...]]]></description>
			<content:encoded><![CDATA[<p>Некоммерческая организация MITRE и институт SANS<a href="http://cwe.mitre.org/top25/"> опубликовали список из 25</a> наиболее распространенных ошибок в программировании, которые могут сыграть на руку хакерам.<br />
На первых трех местах - &#8216;Cross-site Scripting&#8217;, &#8216;SQL Injection&#8217; и &#8216;Classic Buffer Overflow&#8217;. Первые 2 - чисто интернетные ошибки, а вот <a href="http://cwe.mitre.org/top25/#CWE-120">переполнение буфера</a> - классическая ошибка, до сих пор встречающаяся повсеместно.<br />
Я здесь привожу переведенный краткий список всех 25 ошибок.</p>
<p>По ссылке в описании каждой ошибки гораздо больше информации - детальное описание ошибки, методы обнаружения, тестирования и исправления. Так что стоит всё это прочитать для ошибок, существенных для вас.<br />
<span id="more-822"></span></p>
<table id="Detail" border="2" cellspacing="2" cellpadding="2" width="100%">
<tbody>
<tr>
<th>Ранг</th>
<th>Баллы</th>
<th>Ссылка</th>
<th>Название</th>
</tr>
<tr>
<td><strong>[1]</strong></td>
<td>346</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-79">CWE-79</a></td>
<td>&#8216;Cross-site Scripting&#8217;</td>
</tr>
<tr>
<td><strong>[2]</strong></td>
<td>330</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-89">CWE-89</a></td>
<td>Неправильная обработка специальных элементов в SQL командах (&#8217;SQL Injection&#8217;)</td>
</tr>
<tr>
<td><strong>[3]</strong></td>
<td>273</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-120">CWE-120</a></td>
<td>Копирование буффера без проверки размера входных данных (&#8217;Classic Buffer Overflow&#8217;)</td>
</tr>
<tr>
<td><strong>[4]</strong></td>
<td>261</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-352">CWE-352</a></td>
<td>Подделка кросс сайтных запросов (CSRF)</td>
</tr>
<tr>
<td><strong>[5]</strong></td>
<td>219</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-285">CWE-285</a></td>
<td>Неправильный контроль доступа (Authorization)</td>
</tr>
<tr>
<td><strong>[6]</strong></td>
<td>202</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-807">CWE-807</a></td>
<td>Полагание на ненадежные данные при принятии Security решений</td>
</tr>
<tr>
<td><strong>[7]</strong></td>
<td>197</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-22">CWE-22</a></td>
<td>Неправильное ограничение имени пути к конфиденциальной папке (&#8217;Path Traversal&#8217;)</td>
</tr>
<tr>
<td><strong>[8]</strong></td>
<td>194</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-434">CWE-434</a></td>
<td>Незапрещенная загрузка файлов с опасными расширениями</td>
</tr>
<tr>
<td><strong>[9]</strong></td>
<td>188</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-78">CWE-78</a></td>
<td>Неправильная санитарная обработка специальных элементов, используемых в командах ОС (&#8217;OS Command Injection&#8217;)</td>
</tr>
<tr>
<td><strong>[10]</strong></td>
<td>188</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-311">CWE-311</a></td>
<td>Отсутствие криптования секретных данных</td>
</tr>
<tr>
<td><strong>[11]</strong></td>
<td>176</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-798">CWE-798</a></td>
<td>Использование захардкоженных конфиденциальных данных (логин и пароль, например)</td>
</tr>
<tr>
<td><strong>[12]</strong></td>
<td>158</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-805">CWE-805</a></td>
<td>Доступ к буферу с неправильной длинной</td>
</tr>
<tr>
<td><strong>[13]</strong></td>
<td>157</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-98">CWE-98</a></td>
<td>Неправильный контроль имени файла для Include/Require оператора в PHP (&#8217;PHP File Inclusion&#8217;)</td>
</tr>
<tr>
<td><strong>[14]</strong></td>
<td>156</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-129">CWE-129</a></td>
<td>Неправильная проверка индекса массива</td>
</tr>
<tr>
<td><strong>[15]</strong></td>
<td>155</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-754">CWE-754</a></td>
<td>Неправильная проверка необычной или исключительной ситуации</td>
</tr>
<tr>
<td><strong>[16]</strong></td>
<td>154</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-209">CWE-209</a></td>
<td>Раскрытие конфиденциальной информации в сообщение об ошибке</td>
</tr>
<tr>
<td><strong>[17]</strong></td>
<td>154</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-190">CWE-190</a></td>
<td>Переполнение целого (Integer Overflow)</td>
</tr>
<tr>
<td><strong>[18]</strong></td>
<td>153</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-131">CWE-131</a></td>
<td>Неправильное вычисление размера буфера</td>
</tr>
<tr>
<td><strong>[19]</strong></td>
<td>147</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-306">CWE-306</a></td>
<td>Отсутствие идентификации для критической функции</td>
</tr>
<tr>
<td><strong>[20]</strong></td>
<td>146</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-494">CWE-494</a></td>
<td>Скачивание кода без проверки целостности</td>
</tr>
<tr>
<td><strong>[21]</strong></td>
<td>145</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-732">CWE-732</a></td>
<td>Некорректные права доступа к критическим ресурсам</td>
</tr>
<tr>
<td><strong>[22]</strong></td>
<td>145</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-770">CWE-770</a></td>
<td>Выделение ресурсов без ограничения или тротлинг (Throttling)</td>
</tr>
<tr>
<td><strong>[23]</strong></td>
<td>142</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-601">CWE-601</a></td>
<td>URL перенаправление на ненадежные сайты (&#8217;Open Redirect&#8217;)</td>
</tr>
<tr>
<td><strong>[24]</strong></td>
<td>141</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-327">CWE-327</a></td>
<td>Использование сломанного или рискованного криптографического алгоритма</td>
</tr>
<tr>
<td><strong>[25]</strong></td>
<td>138</td>
<td><a href="http://cwe.mitre.org/top25/#CWE-362">CWE-362</a></td>
<td>&#8216;Race Condition&#8217;</td>
</tr>
</tbody>
</table>
<p><br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/FxDJ_gZgDzQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/02/25errors/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/02/25errors/</feedburner:origLink></item>
		<item>
		<title>Shu-ha-ri для программистов</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/gT2mrFZmucg/</link>
		<comments>http://bishop-it.ru/2010/02/shuhari/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 08:54:23 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=808</guid>
		<description><![CDATA[
В японских боевых искусствах есть концепция трехэтапного обучения мастерству - Shu-ha-ri.
  1. Shu (守:しゅ - &#8220;защита&#8221;, &#8220;подчинение&#8221;) — изучение традиционной мудрости — изучение основ, техник, движений.
  2. Ha (破:は - &#8220;отделение&#8221;, &#8220;отклонение&#8221;) — отступление от традиции — поиск исключений в традиционной мудрости, размышление о правильности традиций, поиск новых путей и техник.
  3. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bishop-it.ru/wp-content/uploads/2010/02/shuhari.jpg" alt="shuhari" title="shuhari" width="732" height="302" class="alignnone size-full wp-image-811" /></p>
<p>В японских боевых искусствах есть концепция трехэтапного обучения мастерству - <strong>Shu-ha-ri</strong>.<br />
  1. Shu (守:しゅ - &#8220;защита&#8221;, &#8220;подчинение&#8221;) — изучение традиционной мудрости — изучение основ, техник, движений.<br />
  2. Ha (破:は - &#8220;отделение&#8221;, &#8220;отклонение&#8221;) — отступление от традиции — поиск исключений в традиционной мудрости, размышление о правильности традиций, поиск новых путей и техник.<br />
  3. Ri (離:り - &#8220;покидание&#8221;, &#8220;отделение&#8221;) — превосходство над традицией — нет больше никаких техник или традиционных движений, все движения естественны и рождаются самостоятельно, а не из традиционной мудрости.<br />
<br/><br />
Любое обучение начинается с этапа <strong>Shu</strong>, когда ученик должен преданно следовать всем инструкциям своего учителя. На этом этапе нельзя спрашивать &#8220;почему&#8221;, нельзя ставить под сомнение правильность движения или слов учителя - только полное подчинение и следование инструкциям. На этом уровне ученик еще не готов к вопросам, а точнее - он не готов задавать правильные вопросы и не готов воспринять ответы на них. Только учитель может решить, что ученик готов перейти на следующий этап - этап <strong>Ha</strong>.<br />
<br/><br />
На этапе <strong>Ha</strong> ученик начинает изучать границы своей техники и постоянно должен спрашивать &#8220;Почему?&#8221;. Вопросы позволяют ученику лучше адаптировать под себя фундаментальные знания, которые он получил на этапе <strong>Shu</strong>. Ученик может даже находить новые техники усиляющие его потенциал.<br />
<br/><br />
И вот в определенный момент количество опять переходит в качество и ученик переходит на уровень <strong>Ri</strong>. На этом уровне больше нет никаких правил, точнее ученик сам создает правила. Ученику больше не надо спрашивать &#8220;почему&#8221; - он это уже знает или чувствует. Ученик готов к самостоятельному изучению движений, созданию новых движений, и он видит взаимосвязь между ними.</p>
<p>Каждый следующий уровень включает в себя знания и умения, накопленные на предыдущих уровнях, поэтому невозможно сразу попасть на уровень 3, не проведя долгие месяцы и годы на уровнях 1 и 2.<br />
<br/><br />
А при чем тут IT и программисты, спросите вы?<br />
<span id="more-808"></span><br />
<br/><br />
В книге <a href="http://www.ozon.ru/context/detail/id/1315535/?partner=bishop-it">Agile Software Development</a> Alistair Cockburn применил те же самые 3 уровня развития, 3 уровня зрелости к применению командой методологий разработки ПО.<br />
Что происходит, когда команда (или фирма) решает, что теперь она разрабатывает софт, используя SCRUM (или XP или что угодно)?<br />
Сначала команда находится на уровне <strong>Shu </strong>и следует предписанным правилам - правилам из книг или полученным от консультанта. И книги и консультанты утверждают, что шаг влево-шаг вправо и методология не будет работать, поэтому команда не делает шагов влево или вправо.<br />
Но в какой-то момент кто-то начинает спрашивать &#8220;Почему?&#8221; и команда переходит на уровень <strong>Ha</strong>. Это не всегда случается, например, если руководство давит все попытки что-то изменить (ага - это забавно, когда методология зовется &#8220;гибкой&#8221;, а изменять в ней ничего нельзя). На уровне <strong>Ha</strong> команда начинает менять методологию под себя.<br />
Например, если это SCRUM, то команда может решить, что ей не нужны 5% workshops, или что она не хочет запрещать Product Owner-у добавлять новые задачи внутри итерации, или даже что ежедневные Scrum standup - это waste и их надо делать раз в 2-3 дня.<br />
На уровне  <strong>Ha</strong> команда избавляется от ненужного, что мешало ей в работе, а также может добавить в процесс что-то, что будет помогать. Как результат - рост производительности и самоудовлетворенности команды.<br />
Команда продолжает изучать границы применимости методологии и вот в какой-то момент оказывается, что она уже на уровне <strong>Ri</strong>.<br />
Она уже не ограничена никакими рамками конкретной методологии.<br />
Она может выбирать самое подходящее из разных методологий, пробовать это и решать - подходит или нет.<br />
Она может даже ненадолго полностью отказаться от одной методологии и переключиться на другую только затем, &#8220;чтобы попробовать&#8221;.<br />
Такая команда работает еще эффективнее и это и есть та самая &#8220;команда мечты&#8221;, про которую писали ДеМарко и Листер в <a href="http://www.ozon.ru/context/detail/id/2338486/?partner=bishop-it">Peopleware</a>. Такой команде просто не надо мешать, и тогда она сделает все, что от нее требуется.<br />
<br/><br />
Интересно, как проявляются проблемы с общением между людьми, находящимися на разных уровнях Shu-ha-ri.<br />
Люди на уровне Shu не понимают (и не должны понимать) советов людей с уровней Ha или Ri. Для них эти советы слишком неконкретны и абстрактны, так как они призывают выйти за пределы инструкций, но Shu-человек еще не готов выходить за пределы - он просто хочет следовать конкретным инструкциям! А уж от советов Ri-людей Shu-человека просто коробит - <em>Как это &#8220;Daily standup - это неважно, отмени их?&#8221;. Это же важнейшая часть SCRUM, придурок!</em>.<br />
Примерно такое же недопонимание царит и между уровнями Ha и Ri потому что на уровне &#8220;Ha&#8221; люди готовы исследовать границы методологии, но не готовы выходить за границы.<br />
<br/><br />
Те же самые 3 уровня развития можно применить ко многим вещам.<br />
Например, к умению программировать.<br />
Вначале программист находится на уровне Shu - он изучает язык или языки программирования, изучает алгоритмы, улучшает свои навыки написания программ, изучает предметную область и т.д.<br />
<strong>Shu</strong>-программист может быть вполне успешным и <strong>Shu</strong>-программистов большинство в нашем мире.<br />
Такой программист может отлично делать свою работу, если задание поставлено четко, но с трудом может ставить себе задачу сам. Он следует правилам разработки, принятым в его компании или отрасли и не спрашивает постоянно &#8220;почему?&#8221;, не пытается постоянно изменить что-то. Он &#8220;следует&#8221;, &#8220;течет по течению&#8221; и эти фразы лучше всего описывают таких программистов.<br />
Уверен, что вы знаете немало <strong>Shu</strong>-программистов, потому что, подчеркну, их большинство. А может вы и сам - <strong>Shu</strong>-программист? Тогда читайте дальше и, возможно, вы сможете постичь третью ступень.<br />
Ведь есть и <strong>Ha</strong>-программисты. Обычно они быстро выбиваются в лидеры или на руководящие должности, потому что они активны, задают вопросы, пробуют постоянно свои знания на прочность и расширяют их.<br />
<strong>Ha</strong>-программисты готовы изучать новые языки программирования, переходить в новую отрасль для изучения новых знаний. Они готовы ставить под сомнение каждую задачу, которую они получают и каждую книгу или статью, которую они читают. Именно это постоянное сомнение и стремление к познанию порождает в их мозгу постоянную работу и размышления.<br />
И со временем такой программист может достигнуть просветления и перейти на уровень <strong>Ri</strong>.<br />
<strong>Ri-программист</strong> уже не думает о задаче, как об обособленной проблеме, но думает о ней, как о чем-то, что интегрировано в огромную систему, состоящую из других компоненов. Каждый класс или переменная - это не просто класс или переменная - это просто точка в огромном многомерном графе проекта.<br />
<strong>Ri-программист</strong> не думает о том, как написать класс - он думает о том, как НЕ написать класс.<br />
<strong>Для Ri-программиста</strong> нет задач, которые он не смог бы запрограммировать и главное для него в задаче - это не сложность, а важность.<br />
Когда <strong>Ri-программист</strong> пишет код, то он не думает о языке программирования или операторах цикла - он видит многомерный граф проекта и расширяет его, а код рождается сам по себе.<br />
<strong>Ri-программист</strong> оптимизирует граф проекта, а не конкретные функции, поэтому одно его правильное решение может сократить код проекта вдвое и одновременно улучшить качество или производительность.<br />
Про <strong>Ri-программистов</strong> можно писать и дальше, но проблема, как я уже написал, в том, что невозможно научить быть <strong>Ri-программистом</strong>, невозможно даже описать что это такое - только другой <strong>Ri-программист</strong> сможет понять это. Так что, если вы видите смысл в строках про <strong>Ri-программиста</strong>, то welcome to the club.<br />
<br/><br />
А вы на каком уровне сейчас находитесь?<br />
И, главное, что вы делаете и достаточно ли стараетесь для перехода на другой уровень?<br />
<br/><br />
<br/><br />
Похожие записи:<br />
<a href="http://bishop-it.ru/2010/02/imperfectconversation/">Общение несовершенно - умей управлять несовершенностью.</a><br />
<a href="http://bishop-it.ru/2009/07/kanban-development/">Канбан в IT (Kanban Development).</a><br />
<a href="http://bishop-it.ru/2009/07/softwareengineeringisdead/">Software Engineering is Dead?! </a><br />
<br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/gT2mrFZmucg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/02/shuhari/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/02/shuhari/</feedburner:origLink></item>
		<item>
		<title>Why Software Sucks</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/Li0Ml9MWVeA/</link>
		<comments>http://bishop-it.ru/2010/02/whysoftwaresucks/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 13:17:16 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[Разработка ПО]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=801</guid>
		<description><![CDATA[

Недавно прочитал книгу David S. Platt: Why Software Sucks&#8230; and What You Can Do about It.. Книга небольшая. Написана очень живо и очень простым языком. Не думал, что в ней найдется что-то, что заденет меня за живое, но пришлось ее прочитать, так как ее очень рекомендовал один умный человек.
И я не пожалел. Фактически, для меня [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ozon.ru/context/detail/id/3721400/?partner=bishop-it"><img src="http://ecx.images-amazon.com/images/I/51KASPAA4PL._SL500_AA240_.jpg" /></a><br />
<br/><br />
Недавно прочитал книгу <a href="http://www.amazon.com/Why-Software-Sucks-What-About/dp/0321466756/">David S. Platt: Why Software Sucks&#8230; and What You Can Do about It.</a>. Книга небольшая. Написана очень живо и очень простым языком. Не думал, что в ней найдется что-то, что заденет меня за живое, но пришлось ее прочитать, так как ее очень рекомендовал один умный человек.<br />
И я не пожалел. Фактически, для меня вся эта книга  - это всего 3 очень простые и одновременно очень сложные мысли:</p>
<ol>
<li><strong>Пользователь твоей программы - это не ты</strong>. Разработчики часто, очень часто забывают про это. Они пишут программы, ориентируясь на себя и свой уровень знания, а не на уровень знаний клиентов (пользователей). Отсюда проблемы с кривыми интерфейсами, сложными программами или отсутствием юзабилити  у продуктов. Ведь разработчик думает как? Для него следующее - это очень простая и правильная инструкция: &#8220;Чтобы сохранить документ - найдите папку, куда установлена программа, запустите файл savedoc.exe с параметром командной строки -s и именем файла для сохранения. Вы можете использовать дополнительные параметры: -m &#8230;.. &#8220;. Это простая инструкция? Возможно, да,.. для кого-то. Тогда как юзеру надо не инструкцию, а пункт SAVE в меню и всё. Никаких путей и командных строк. Такие &#8220;недоразумения&#8221; в дизайне случаются всегда, если техническим людям разрешено решать, что для пользователя просто и правильно, а что нет. И дело совсем не в том, что &#8220;пользователи все тупые&#8221;, а в том, что вы не должны требовать наличие у пользователя того же уровня знаний, какой есть у вас.</li>
<li><strong>Нужно делать простые вещи простыми, а не давать возможность делать сложные вещи</strong>. Любовь к созданию сложных вещей - это очень широко распространенная особенность программистов и других технических специалистов. Программисты любят сложности. Они не любят делать простые вещи - они любят делать сложные вещи, которыми можно было бы гордиться. А между тем пользователям не нужны сложности - им нужна возможность очень просто делать простые вещи. Например, вспомните главную страницу гугла - это запатентованный идеал простоты. Невозможно сделать поиск проще. И пользователи это любят. Возьмите любой другой поисковик, где кроме строки поиска еще куча рекламы и другой информации - любят ли пользователи такие поисковики? А ведь казалось бы, что сделать такую поисковую страницу с кучей автоматически генерящейся информации - это в разы сложнее и интереснее для программиста. А страницу гугла может сделать и школьник - никакого удовольствия. Та же проблема пронизывает всю работу программистов - они не любят делать простые удобные дизайны, а лучше сделают что-то супер расширяемое, хоть и неудобное. Они могут заставить пользователя сделать 5 кликов прежде, чем можно нажать кнопку &#8220;Сохранить&#8221; - и все это только потому, что &#8220;зато такой дизайн позволяет до ЛЮБОЙ кнопки добраться всего за 5 кликов&#8221; - но ведь пользователю не нужна &#8220;любая кнопка&#8221; каждые 2 минуты, а только нопка &#8220;Сохранить&#8221;.</li>
<li>Если вы хотите как-то улучшить ситуацию с ПО, то <strong>пишите про каждую найденную неудобность и недоработку разработчику</strong>. А если разработчик не реагирует, то на публичные форумы. Например, если на каком-то сайте что-то не работает или работает, но неудобно, то найдите форму обратной связи и напишите там свои впечатления. Если MS Office глючит или новый интерфейс вам не нравится, то найдите там кнопку Send Feedback и напишите про свои впечатления. Это кажется неважным обычно, но на самом деле это единственный канал, по которому разработчики могут узнать, что в программе или сайте что-то не так. Представьте, что Майкрософт поменял интерфейс в MS Word и новый интерфейс никому не нравится, но никто не шлет отрицательные комментарии. Изменится ли что-то? А если каждый из 100 млн. пользователей напишет отрицательный feedback? То же самое относится и к любому сайту, к любой программе - не ленитесь слать фидбек разработчику. А если вы разработчик, то не ленитесь сделать посыл фидбека максимально простым, ведь улучшение продукта - это в ваших интересах</li>
</ol>
<p><br/><br />
Вся книга - это долгое доказательство на примерах этих трех идей.<br />
Казалось бы, что эти идеи - правильны, просты и понятны. Но я был сильно удивлен, пытаясь донести их до других программистов - далеко не каждый хочет и готов их воспринять.<br />
А вы готовы?<br />
<br/><br />
P.S.:<br />
А вот она и на русский переведена уже, оказывается: <a href="http://www.ozon.ru/context/detail/id/3721400/?partner=bishop-it">Дэвид Платт. Софт - отстой! И что с этим делать?</a>. Рекомендую.<br />
<br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/Li0Ml9MWVeA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/02/whysoftwaresucks/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/02/whysoftwaresucks/</feedburner:origLink></item>
		<item>
		<title>Общение несовершенно - умей управлять несовершенностью</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/b7DQfxmCA30/</link>
		<comments>http://bishop-it.ru/2010/02/imperfectconversation/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 12:19:07 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[Разработка ПО]]></category>

		<category><![CDATA[Статья]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=786</guid>
		<description><![CDATA[
Любой проект - это море общения.
Общение - это далеко не только разговоры девелоперов на кухне, но и практически любая другая проектная активность:

Документация. Написание и чтение оной. Это общение, так как писатель &#8220;общается&#8221; с читателем посредством документации.
Дизайн архитектуры приложения или конкретных фич. Это общение, так как архитектура и фичи не возникают в голове у одного человека. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bishop-it.ru/wp-content/uploads/2010/02/conversation.jpg" /></p>
<p>Любой проект - это море общения.</p>
<p>Общение - это далеко не только разговоры девелоперов на кухне, но и практически любая другая проектная активность:</p>
<ul>
<li>Документация. Написание и чтение оной. Это общение, так как писатель &#8220;общается&#8221; с читателем посредством документации.</li>
<li>Дизайн архитектуры приложения или конкретных фич. Это общение, так как архитектура и фичи не возникают в голове у одного человека. И даже после того, как они возникли - их еще надо донести до окружающих.</li>
<li>Митинги, обсуждения, отчеты.</li>
<li>Планирование работы, постановка задачи. Бывают ли планирования без общения? Возможно, да, в клинических случаях. Но постановка задачи - это уж точно акт общения.</li>
<li>Занесение бага в баг трекер тестером, исправление бага программистом, проверка исправления тестером и т.д.</li>
<li>Обучение, тренинги, посещение конференций и т.п.</li>
</ul>
<p>Можно назвать еще много разных активностей, ведь практически любая активность на проекте связана с общением. Много вы можете перечислить активностей на проекте, в которых &#8220;общение&#8221; не играет никакой роли? Я не могу назвать ни одной.</p>
<p>Итак, получается, что &#8220;общение&#8221; - это один из самых ключевых факторов успеха любого проекта. Ведь если общение буксует и несовершенно, то и проект будет буксовать и не разгонится до максимальной скорости.<br />
<br/><br />
А как достичь совершенства в общении?<br />
<span id="more-786"></span><br />
А никак! Общение между людьми несовершенно по своей природе. Все люди разные, с разными представлениями об обсуждаемой проблеме, с разным уровнем знания, с разным настроением, наконец. То, что одному человеку можно объяснить двуми словами, другому вы будете объяснять полчаса. Фраза, полная сокращений и аббревиатур будет значить очень много для опытного разработчика, знакомого с предметной областью, но для новичка это будет просто набор бессвязных слов.</p>
<p>Если вы смотрите доктора Хауза, то можете вспомнить, как его команда ставит диагноз - они не тратят времени на обсуждение деталей. Они говорят скупые, понятные только им, как профессионалам, слова, дают ссылки на специальные случаи и прошлый опыт и всё - диагноз поставлен. Всего 30-40 секунд и &#8220;подходит. вколите ему хрензнаетчтонин&#8221;.<br />
<br/><br />
Как и почему это работает?</p>
<p><strong>Потому что эти люди отлично умеют управлять несовершенством общения</strong>. У Хауза есть команда профессионалов, разговаривающих на одном языке. Им не надо тратить время на объяснение друг другу, что такое Волчанка и почему после радиационного облучения нельзя заражаться вирусами. Для них одна фраза - это море информации.</p>
<p>Такой же уровень общения возможен и необходим и в успешных софтварных проектах. Все, что для этого нужно - это постоянно помнить про несовершенство &#8220;общения&#8221; на проекте - всех его видов.<br />
<br/><br />
Рассмотрим вкратце разные виды &#8220;общения&#8221; и как их можно улучшить:</p>
<ul>
<li>Документация. Всегда надо точно представлять тех, кто будет читать документацию, которую вы пишете. Если вы пишете для специалистов, для Senior Developer, тогда вы можете использовать совсем другие слова и гораздо меньше текста, чем если вы пишете для начинающих. Документация для начинающих должна содержать гораздо больше информации и не должна содержать аббревиатур или общепринятых в компании терминов, которых начинающий может и не знать пока. Разберитесь вначале, кто  будет читать ту документацию, которую вы собираетесь написать и пишите в подходящем стиле. Не требуйте писать документацию &#8220;для начинающих&#8221;, если начинающие не будут ее читать. И не сажайте начинающего писать документацию для специалистов.</li>
<li>Дизайн архитектуры приложения или конкретных фич. Пригласите на обсуждение архитектуры половину Senior и половину Junior программистов и вы погубите проект. Обсуждение займет бесконечное число времени, так как вы будете тратить больше времени на объяснение понятий и теории, чем на, собственно, архитетуру. Собирайте только людей, находящихся на одном уровне понимания проблемы для обсуждения архитектуры. При этом под джуниорами я понимаю не только тех, кто только начинает работать, но и всех, кто Junior для этой конкретной обсуждаемой проблемы, кто не имеет опыта работы в этой сфере. Например, профессиональный программист с 10 годами опыта работы может быть Junior, если он попал на митинг в другой отдел и обсуждается то, о чем он понятия не имеет.</li>
<li>Митинги, обсуждения, отчеты. Тут совет такой же, как в предыдущем пункте - не пытайтесь совместить людей с разным уровнем понимания проблемы на одном митинге. Если вы хотите все же задействовать Junior-ов в обсуждениях, то соберите вместе 5 джуниоров и 1 senior - этого может быть достаточно.</li>
<li>Планирование работы, постановка задачи. Знайте уровень, на котором нужно планировать. Для Senior достаточно написать краткое описание задачи (User Story) и всё - дальше он все спланирует сам. А для Junior нужно написать детальный план. Но если вы будете тратить время на написание детального плана для Senior, то это как раз и есть неэффективность общения.</li>
<li>Занесение бага в баг трекер тестером, исправление бага программистом, проверка исправления тестером и т.д. Если программист и тестер работаю вместе не первый год, то у них свой язык общения. Они могут описать сложнейший баг одним простым предложением и ссылкой на похожий предыдущий баг. Исправление и инструкция по перепроверке может быть такой же короткой. Так что не разлучайте людей, давно работающих друг с другом.</li>
<li>Обучение, тренинги, посещение конференций и т.п. Не посылайте начинающих на конференции для профессионалов - им от этого не будет толку. И не посылайте Senior людей на тренинги про основы Python или т.п. Также сильно разочаровывает, когда на одном и том же тренинге собираются сотрудники с разным уровнем знаний - им очень сложно понять друг друга и это приводит больше к раздражению друг другом, чем к правильному результату.</li>
</ul>
<p><br/><br />
Этот список можно расширять и дополнять советами практически бесконечно. И для разных уровней подготовки читателей стоило бы подготовить разные списки и советы.<br />
Но ведь мы тут обсуждаем управление несовершенностью общения, так что на этом я заканчиваю - идею я изложил и уповаю на то, что уровня подготовки читателя хватит, чтобы ее понять.<br />
<br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/b7DQfxmCA30" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/02/imperfectconversation/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/02/imperfectconversation/</feedburner:origLink></item>
		<item>
		<title>Масштабы проблемы “нигерийских” писем</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/2Jd7XWGMjtk/</link>
		<comments>http://bishop-it.ru/2010/02/nigeriamailsproblem/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 10:03:26 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=780</guid>
		<description><![CDATA[Год назад я написал статью про нигерийские (африканские) письма. Для меня это исследование тогда было как развлечение, так как я не представлял себе тогда масштабов проблемы.
За прошедший год я получил сотни комментариев к этой статье и пообщался с несколькими людьми, которые попались на удочку &#8220;нигерийцев&#8221;. Из положительного - немало людей прекратило общение с &#8220;нигерийцами&#8221;, прочитав [...]]]></description>
			<content:encoded><![CDATA[<p>Год назад я написал статью про <a href="http://bishop-it.ru/2009/03/%D0%B0%D1%84%D1%80%D0%B8%D0%BA%D0%B0%D0%BD%D1%81%D0%BA%D0%B8%D0%B5-%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0-%D1%81%D1%82%D1%80%D0%B0%D1%81%D1%82%D0%B8-%D0%B8-57%D0%BC%D0%BB%D0%BD/">нигерийские (африканские) письма</a>. Для меня это исследование тогда было как развлечение, так как я не представлял себе тогда масштабов проблемы.<br />
За прошедший год я получил сотни комментариев к этой статье и пообщался с несколькими людьми, которые попались на удочку &#8220;нигерийцев&#8221;. Из положительного - немало людей прекратило общение с &#8220;нигерийцами&#8221;, прочитав мою статью, хотя уже собирались отправить им деньги.<br />
В комментариях к статье люди помогали друг другу советами и даже обнаружили, что некоторые письма приходят не из африки, а очень даже из России, а значит и найти отправителя возможно (хотя никто этого не пытался пока сделать).<br />
<br/><br />
И вот несколько дней назад Ultrascan опубликовал <a href="http://www.ultrascan-agi.com/public_html/html/pdf_files/419_Advance_Fee_Fraud_Statistics_2009.pdf">документ</a>, в котором описываются глобальные масштабы этой пробламы в 2009 году.<br />
В 2009 году ущерб от этого вида мошенничества превысил 9,3 млрд. долларов (из них 105 млн. потеряли русские)! В 2008 он составлял &#8220;всего&#8221; 6,3 млрд.<br />
<br/></p>
<p>А теперь шок: если верить википедии, то весь бюджет Нигерии (построенный на продаже нефти) всего раза в 2-3 больше этой суммы! Нафига нигерийцам вообще торговать нефтью, если у них есть такой выгодный источник дохода, как &#8220;нигерийские&#8221; письма? Легализовать их и писать их всей страной и всё - проблема нефтяной зависимости экономики решена в пользу более современной &#8220;зависимости&#8221; <img src='http://bishop-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<br/><br />
Правда, уже сейчас рассылкой этих писем занимается больше 250 тыс человек, большинство из которых живет в Нигерии! 250 тыс! В России исследователи нашли 6 действующих «нигерийских» группировок, в состав которых входят более 50 человек (по предположительным оценкам 280).<br />
<br/><br />
Еще интересный и ожидаемый при таких масштабах прибылей <a href="http://www.securelist.com/ru/weblog/32400/Ultrascan_o_masshtabakh_nigeriyskogo_moshennichestva">факт</a>:<br />
<i><br />
Ultrascan отмечает, что международным центром отмывания денег, помимо Греции, теперь является Малайзия, конкретно — ее столичные банки. Зачастую «нигерийцы» оказываются владельцами национальных представительств Western Union или Moneygram. По консервативным оценкам, около 10% таких агентств осознанно пособничают скамерам, получая от них дивиденды.</p>
<p>Помимо служб денежных переводов, «нигерийцы» контролируют банки, интернет-кафе, таможни, агентства по продаже и прокату автомобилей, гостиницы. У одной из таких мошеннических группировок, занесенных в базу данных Ultrascan, есть свои люди в почтовой службе, в банке, кредитной организации, страховом агентстве, на транспорте, в нефтяной компании, в посольстве, аэропорту, полиции, службе иммиграции, клинической больнице, разведуправлении и государственном учреждении.<br />
</i><br />
<br/><br />
Так что &#8220;нигерийские&#8221; письма - это глобальная проблема. Этот вид мошеннечества растет на 50-100% в год и уже через пару лет &#8220;доход&#8221; от такого рода деятельности может обогнать, например, доход всей игровой индустрии или даже киноиндустрии.<br />
<br/><br />
При этом риски от занятия этим родом деятельности равняются нулю - нет ни законов ни органов, которые пытаются противодействовать этому виду мошенничества. Насколько я понимаю, из 250 тыс. участников за все время не был арестован никто!</p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/2Jd7XWGMjtk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/02/nigeriamailsproblem/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/02/nigeriamailsproblem/</feedburner:origLink></item>
		<item>
		<title>О вреде общения</title>
		<link>http://feedproxy.google.com/~r/bishop-it/LaoT/~3/rfZOotGa9-I/</link>
		<comments>http://bishop-it.ru/2010/01/evilconvrsations/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 21:52:58 +0000</pubDate>
		<dc:creator>bishop</dc:creator>
		
		<category><![CDATA[Разработка ПО]]></category>

		<guid isPermaLink="false">http://bishop-it.ru/?p=765</guid>
		<description><![CDATA[ 
Если вы работаете в средней или крупной компании, то вам наверняка знакомо ощущение беспомощности, когда куча входящих емейлов, постоянные митинги, обсуждения, согласования и т.п. ерунда просто мешает выполнять реальную работу. Когда за несколько дней не получается написать ни строчки кода, зато получается отправить 20-30 емейлов и посетить 5-10 бесполезных по сути митингов и докладов. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bishop-it.ru/wp-content/uploads/2010/01/meeting.jpg" > <img src="http://bishop-it.ru/wp-content/uploads/2010/01/meeting.jpg" width="264px" /></a></p>
<p>Если вы работаете в средней или крупной компании, то вам наверняка знакомо ощущение беспомощности, когда куча входящих емейлов, постоянные митинги, обсуждения, согласования и т.п. ерунда просто мешает выполнять реальную работу. Когда за несколько дней не получается написать ни строчки кода, зато получается отправить 20-30 емейлов и посетить 5-10 бесполезных по сути митингов и докладов. Когда (при достаточной вовлеченности) берешь домой ноутбук и начинаешь работать дома, чтобы хоть что-то сделать.<br />
Эта проблема существует везде и многими даже не осознается, как проблема. Например, я встречал команды, которые в свои планы просто забивали &#8220;30% оверхед от митингов&#8221;, но даже этого оказывалось мало, т.к. программист - существо тонкое и, вырвав его из контекста, вернуть его обратно иногда не получается аж до конца рабочего дня. Так что &#8220;30% оверхед от митингов&#8221; превращался в &#8220;40% оверхед от митингов&#8221; через месяц, а потом и в 50%. И это, естественно, не решало никаких проблем, а только позволяло закрывать глаза и узаконить чудовищный under commitment (under commitment - это когда человек или команда обещает сделать заведомо меньше, чем может).<br />
<br/><br />
В чем же проблема? Зачем компании сами себе создают эти проблемы, устраивая по нескольку важных митингов в день и рассылая письма сотрудникам о каждом чихе компании?<br />
Всё дело тут в общении, в коммуникации.<br />
<span id="more-765"></span><br />
У коммуникации в большой компании есть 2 аспекта:<br />
1. Если ты не будешь ничего никому сообщать, то никто не будет работать эффективно, т.к. никто ничего не знает. В клинической форме такое врядли встречается. А вот недостаток информации - это частый источник проблем. Например, когда один программист увольняется и целый кусок кода или даже весь продукт становится &#8220;черным ящиком&#8221;, в котором никто ничего не понимает. Или когда геймдизайнер в игре пишет дизайн документ и его никто не читает, а программисты параллельно пишут игру и в нее никто не играет, а художники рисуют графику и никуда ее не подставляют и все они видят игру по-разному. В итоге в момент сведения всего этого воедино получается православная компьютерная игра.<br />
2. А если ты будешь сообщать всё всем, то никто не будет работать эффективно, т.к. все будут только и делать, что поглощать информацию. Опять же в клинической форме не встречается, но в близкой к клинической наверняка. Например, близко к клинике, когда по громкой связи на всю компанию объявляют о том, что кто-то кому-то звонит и просят взять телефон на линии 1. Или когда на всю компанию идет емейл рассылка с обсуждением сорта кофе, который закупить на следующий год (и поверьте, такая рассылка получит сотню комментариев, которые уйдут тоже в общий лист рассылки на всю компанию). Примеры можно приводить бесконечно.<br />
<br/><br />
Общая идея проблемы с общением очень проста.<br />
Когда в компании работает 2 человека, то между ними есть только 1 связь. Если 3, то уже 2 связи. Если 4, то уже 6 и так далее. Между 10 человеками уже есть 45 связей и если каждый должен обсудить каждую деталь со всеми остальными, то это катастрофа. А для 45 человек (небольшой такой отдел в большой компании) число связей переваливает уже за 1000!<br />
Заставь каждого из 45 человек согласовывать каждое свое решение со всеми остальными и ты получишь совершенно неработоспособный отдел - никто не будет принимать решения, а будут только обсуждать.<br />
Кто не верит - есть отличный пример из реальной жизни от Microsoft: <a href="http://moishelettvin.blogspot.com/2006/11/windows-shutdown-crapfest.html">Как делали меню в Vista</a> (я бы назвал это &#8220;200 строчек кода за год&#8221;).<br />
<br/><br />
В большинстве своем все программисты, да и другие сотрудники IT компаний, всегда стремятся получить информацию обо всем. Спроси любого:<em> &#8220;Я тут сдизайнил новый вид нашего сайта - хочешь заценить?&#8221; </em>и получишь ответ<em> &#8220;Конечно!&#8221;.</em> Спроси у другого<em> &#8220;У меня есть идея, как сделать новую фичу в наш продукт&#8221;</em> и получишь ответ <em>&#8220;Не надо дизайнить это в одиночку - давай соберемся все вместе и все обсудим&#8221;</em>.<br />
Из этих вопросов и ответов видно, что люди готовы работать и даже делать то, что их вообще не касается. Они готовы обсуждать дизайн сайта целый час напролет даже если нифига не понимают в дизайне и считают, что лучший дизайн на сайтах bash.org.ru и linux.org.<br />
<br/><br />
Проблема еще усугубляется, когда что-то идет не так и люди начинают ощущать страх. Страх потерять работу, страх получить плохую оценку от менеджера или коллег, страх сделать что-то не так. Страх не заставляет людей работать эффективнее. Как раз наоборот - страх заставляет людей тратить время на внешнюю защиту. Испуганные сотрудники начинают посещать все подряд митинги, чтобы &#8220;не дай бог что-то важное не пропустить&#8221; и &#8220;еще разочек засветиться и что-то умное сказать&#8221;. Испуганные сотрудники созывают бесполезные митинги, куда приглашают как можно больше важных людей, чтобы показать всем, что работа движется и разрешить какую-нибудь небольшую проблему. Испуганные сотрудники мешают остальным работать, так как просто требуют все документировать и согласовывать с ними, ибо &#8220;иначе они ничего не могут обещать&#8221;.<br />
Вообще, испуганные сотрудники - большая проблема для компании. Их легко создать, начав наказывать направо и налево за минимальные провинности, зато убрать страх из сотрудника и вернуть его доверие потом уже очень и очень сложно.<br />
<br/><br />
В итоге получается, что эффективность работы зависит от коммуникации, но нет никакой формулы, чтобы определить нужные рамки коммуникации для каждой конкретной фирмы. Все компании изобретают свой подход к этой проблеме.<br />
Кто-то требует документировать (а документация - это тоже один из свособов общения) каждый чих и в итоге зарывается в документации, которую никто не читает.<br />
А кто-то не требует вообще документации и в итоге получает кучу &#8220;черных ящиков&#8221;, когда ключевые разработчики уходят.<br />
Кто-то каждый день собирает всю компанию на общий митинг, а кто-то выстраивает жесткую иерархию в каждом отделе и все собрания проходят только внутри отделов, а все внешние связи только через руководителя.<br />
Есть много подходов, но все они исходят из того, что компания устанавливает правила. А именно это и является проблемой.<br />
<br/><br />
<strong>Общение - это социальный процесс и его нельзя определить и расписать для каждого конкретного случая</strong>. В каждом конкретном случае только сотрудник знает - нужно ему созывать митинг или нет, нужно ему делать документацию или нет, нужно ему посылать письмо всем и каждому с новым вариантом картинки для главной страницы сайта или нет.<br />
Если компания задает правила, то сотрудник будет им следовать и будет всегда делать что-то неэффективно - либо не созовет важный митинг, когда у него сомнения, ибо нелья, либо наоборот будет созывать митинги из-за каждой мелочи.<br />
Если же сотруднику оказано доверие самому решать что и как делать, если он при этом несет ответственность за свою работу и при этом не боится ошибиться, то он сам найдет как сделать свою работу наиболее эффективно.<br />
В крупных же компаниях слишком много людей, которые якобы принимают и утверждают решения, а на деле просто замедляют весь процесс.<br />
<br/><br />
Так что, если вы этот самый программист в большой компании, который делает реальную работу, то начните обращать внимание на то, куда уходит ваше время. Начните пропускать митинги и удалять ненужные письма. Перестаньте пытаться вникнуть во все подряд и сконцентрируйтесь на выполнении своей работы быстро и хорошо. Это сразу изменит отношение окружающих к вам, ибо вы станете делать в разы больше, чем те, кто по-прежнему тратит время на ненужное общение.<br />
<strong>Общайтесь с умом, не мешайте общению отвлекать вас от реальной работы.</strong><br />
<br/><br />
Новая статья Джоеля Сполски на эту же тему: <a href="http://www.inc.com/magazine/20100201/a-little-less-conversation.html">A Little Less Conversation</a></p>
<p><br/><br />
<a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT"><img style="vertical-align:middle;border:0" src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" width="32" height="32" /></a> <a rel="alternate" type="application/rss+xml" href="http://feeds2.feedburner.com/bishop-it/LaoT">Понравилась статья? Подпишись на RSS!</a></p>
<img src="http://feeds.feedburner.com/~r/bishop-it/LaoT/~4/rfZOotGa9-I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bishop-it.ru/2010/01/evilconvrsations/feed/</wfw:commentRss>
		<feedburner:origLink>http://bishop-it.ru/2010/01/evilconvrsations/</feedburner:origLink></item>
	</channel>
</rss>
