<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Мастерство программирования</title>
	
	<link>http://pro100pro.com</link>
	<description>Блог разработчика - проектирование, разработка и кодирование сайтов</description>
	<pubDate>Sat, 01 Nov 2008 09:13:47 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/pro100pro" type="application/rss+xml" /><item>
		<title>logstalgia - визуализируй свои лог файлы</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/438897208/logstalgia-log-file-vizualizatio</link>
		<comments>http://pro100pro.com/logstalgia-log-file-vizualizatio#comments</comments>
		<pubDate>Sat, 01 Nov 2008 09:02:04 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[Игра]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=129</guid>
		<description><![CDATA[Logstalgia (aka ApachePong) воспроизводит поток доступа к веб сайту (access log) как давно забытую игру аркаду.]]></description>
			<content:encoded><![CDATA[<p>Logstalgia (aka ApachePong) воспроизводит поток доступа к веб сайту (access log) как давно забытую игру аркаду.</p>
<p>Работая с лог файлами каждый день, вам будет интересно увидеть <a href="http://code.google.com/p/logstalgia/" target="_self">новый способ визуализации лог файлов</a>.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/BYYX-h4-dpM&#038;hl=ru&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/BYYX-h4-dpM&#038;hl=ru&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Logstalgia требует поддержки OpenGL и видео картоту с 3D акселерацией.<br />
Для хорошей картинки вам надо, чтоб на ваш сервер было не меньше 100 запросов в минуту. Но вы можете симулировать скорость с помощью параметра -s <секунд>, по умолчанию он установлен 1 к 1.</p>
<p>Команды для интерактивной работы:<br />
   (q) Показать отладочную (дополнительную) информацию<br />
   (c) Показать Logstalgia лого<br />
   (n) Переход к следующей записи в логе<br />
   (+) Увеличить скорость обработки лога<br />
   (-) Уменьшить скорость обработки лога<br />
   (ESC) Выход</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/logstalgia-log-file-vizualizatio">Permalink</a> |
	  <a href="http://pro100pro.com/logstalgia-log-file-vizualizatio#comments">No comment</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/logstalgia-log-file-vizualizatio&amp;title=logstalgia - визуализируй свои лог файлы">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/logstalgia-log-file-vizualizatio" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/linux" title="View all posts in Linux" rel="category tag">Linux</a>,  <a href="http://pro100pro.com/category/web" title="View all posts in Web" rel="category tag">Web</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/438897208" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/logstalgia-log-file-vizualizatio/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/logstalgia-log-file-vizualizatio</feedburner:origLink></item>
		<item>
		<title>Профессиональный веб дизайнер ищет работу</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/415718908/professional-designer-looking-for-job</link>
		<comments>http://pro100pro.com/professional-designer-looking-for-job#comments</comments>
		<pubDate>Thu, 09 Oct 2008 12:02:01 +0000</pubDate>
		<dc:creator>Julia Vorozhko</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=128</guid>
		<description><![CDATA[Меня зовут Юля.
E-mail: kotikua@gmail.com
Тел.: +38-098-223-224-2 (Киевстар Украина)

Я ищу постоянную удаленную работу на полный рабочий день или Freelance (сдельная по проектам)
Портфолио: http://julia.pro100pro.com/

Полное портфолио предоставлю лично.]]></description>
			<content:encoded><![CDATA[<div dir="ltr">Меня зовут Юля.</div>
<div dir="ltr">E-mail: kotikua@gmail.com</div>
<div dir="ltr">Тел.: +38-098-223-224-2 (Киевстар Украина)</div>
<div dir="ltr">
<p><strong>Я ищу постоянную удаленную работу</strong> <strong>на полный рабочий день</strong> <strong>или Freelance (сдельная по проектам)</strong><br />
Портфолио: <a href="http://julia.pro100pro.com/">http://julia.pro100pro.com/</a></p>
<p>Полное портфолио предоставлю лично.</p>
<p><strong>Квалификация</strong></p>
<p>Я хорошо зарекомендовавший себя специалист в области web дизайна. Хорошо разбираюсь в разработке макетов, а так же интерфейсов web-сайтов и аналитических приложений. Занимаюсь веб дизайном, юзабилити, созданием логотипов, фирменного стиля и банеров. Рисую от руки. Очень ответственно отношусь к работе. Опыт работы больше 3-х лет.</p>
<p><strong>Основные Направления:</strong></p>
<p>* Web-дизайн<br />
* Логотипы<br />
* Аналитические сайты<br />
* Фирменный стиль<br />
* Юзабилити<br />
* HTML/XHTML (на уровне чтения кода и понимания)<br />
* CSS (на уровне чтения кода и понимания)</p>
<p><strong>Основные Программы:</strong></p>
<p>* Adobe PhotoShop<br />
* Adobe ImageReady<br />
* Adobe Illustrator<br />
* Corel Draw</p>
<p><strong>Проффесиональный опыт:</strong></p>
<p>Американская компания Frontex c Апреля 2007 г. по Октябрь 2008 г.</p>
<p>* Разработка дизайнов для веб сайтов (практически все сайты для иностранных компаний)<br />
* Разработка дизайнов для аналитических программ (интерфейсы)<br />
* Создание логотипов<br />
* Создание банеров<br />
* Работа с документацией и wireframe (на английском языке)</p>
<p>Удаленная работа FreeLance (Web Дизайнер) - с Января 2007 г. - Апрель 2007 г.</p>
<p>* Создание макетов web-сайтов<br />
* Разработка логотипов</p>
<p>Студия дизайна &#8220;IV Design&#8221; - 2005-2007 г.</p>
<p>* Разработка технического дизайна для web-сайтов<br />
* Поддержка web-сайтов<br />
* Обработка фоторгафий<br />
* Верстка статей (HTML/XHTML) для web-сайтов<br />
* Работа с текстами<br />
* Поиск информации в сети</p>
<p><strong>Образование</strong></p>
<p>Высшее.<br />
Кременчугский государственный политехнический университет 2000-2005 гг. &#8220;Специалист компьютерных систем&#8221;</p>
<p><strong>Языки</strong></p>
<p>Украинский<br />
Русский<br />
Английский (базовый)</p>
<p>C уважением Юлия Ворожко</p>
</div>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Julia Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/professional-designer-looking-for-job">Permalink</a> |
	  <a href="http://pro100pro.com/professional-designer-looking-for-job#comments">No comment</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/professional-designer-looking-for-job&amp;title=Профессиональный веб дизайнер ищет работу">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/professional-designer-looking-for-job" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/uncategorized" title="View all posts in Uncategorized" rel="category tag">Uncategorized</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/415718908" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/professional-designer-looking-for-job/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/professional-designer-looking-for-job</feedburner:origLink></item>
		<item>
		<title>Revision Engine - контроль версий данных для MySQL</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/407956670/revision-engine-mysql</link>
		<comments>http://pro100pro.com/revision-engine-mysql#comments</comments>
		<pubDate>Wed, 01 Oct 2008 06:02:27 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[revision engine]]></category>

		<category><![CDATA[контроль версий]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=127</guid>
		<description><![CDATA[Недавно в списке MySQL internals@list появился анонс, про выпуск нового storage engine. Компания DDengine создала новый движок revision engine, набор встроенных прокси внутри MySQL, которые следят за изменениями данных в вашей базе.]]></description>
			<content:encoded><![CDATA[<p>Автор: Giuseppe Maxia<br />
Оригинал статьи: <a href="http://datacharmer.blogspot.com/2008/09/cool-idea-revision-engine.html">A cool idea - Revision engine</a><br />
Перевод: Ярослав Ворожко</p>
<p>Недавно в списке MySQL internals@list появился анонс, про выпуск нового storage engine. Компания <a href="http://www.ddengine.org/" target="_self">DDengine</a> создала новый движок revision engine, набор встроенных прокси внутри MySQL, которые следят за изменениями данных в вашей базе.</p>
<p>Идея отличная. Вы пишите в свою таблицу, обновляете и удаляете данные, не беспокоясь ни о чем, в то время как revision engine будет сохранять все ваши изменения работая за сценой.</p>
<p>На данный момент revision engine хорошо работает под Linux. Под другие системы пока, что есть проблемы, но это и понятно, так как версия пока еще 0.1.</p>
<p>В документации говорится, что существует два пути использования revision engine. Первый с встроенным хранением, которые тихо изменит структуру таблицы и добавит revision информацию в нее, и второй метод использует две таблицы, одна из которых создается за сценой.</p>
<p>Например:</p>
<pre><code>create table t1 (</code>
<code> id int not null primary key,</code>
<code> c char(10)</code>
<code>) engine=revision comment="InnoDB:DOUBLE";</code>
<code>show tables;</code>
<code>+----------------+</code>
<code>| Tables_in_test |</code>
<code>+----------------+</code>
<code>| t1             |</code>
<code>| t1_revision    |</code>
<code>+----------------+</code>
<code>desc t1;</code>
<code>+-------+----------+------+-----+---------+-------+</code>
<code>| Field | Type     | Null | Key | Default | Extra |</code>
<code>+-------+----------+------+-----+---------+-------+</code>
<code>| id    | int(11)  | NO   | PRI | NULL    |       |</code>
<code>| c     | char(10) | YES  |     | NULL    |       |</code>
<code>+-------+----------+------+-----+---------+-------+</code>

<code>desc t1_revision;</code>
<code>+--------------------+---------------------+------+-----+</code>
<code>| Field              | Type                | Null | Key |</code>
<code>+--------------------+---------------------+------+-----+</code>
<code>| id                 | int(11)             | NO   | PRI | </code>
<code>| c                  | char(10)            | YES  |     |</code>
<code>| revision_id        | int(10) unsigned    | NO   | PRI |</code>
<code>| revision_timestamp | timestamp           | NO   |     | </code>
<code>| revision_deleted   | tinyint(3) unsigned | NO   |     |</code>
<code>+--------------------+---------------------+------+-----+</code></pre>
<p>Ключевое слово &#8220;InnoDB:DOUBLE&#8221; говорит engine, что надо использовать метод двух таблиц для хранения revision info, в данном случае t1_revision создается автоматически.</p>
<p>Операции над таблицами прозрачны.</p>
<pre><code>insert into t1 (id,c) values (1, 'aaa'), (2, 'bbb');</code>
<code>Query OK, 2 rows affected (0.01 sec)</code>
<code>Records: 2  Duplicates: 0  Warnings: 0</code>

<code>insert into t1 (id, c) values (3, 'ccc'), (4, 'ddd');</code>
<code>Query OK, 2 rows affected (0.01 sec)</code>
<code>Records: 2  Duplicates: 0  Warnings: 0</code>

<code>select * from t1;</code>
<code>+----+------+</code>
<code>| id | c    |</code>
<code>+----+------+</code>
<code>|  1 | aaa  |</code>
<code>|  2 | bbb  |</code>
<code>|  3 | ccc  |</code>
<code>|  4 | ddd  |</code>
<code>+----+------+</code>
<code>4 rows in set (0.00 sec)</code>

<code>select * from t1_revision;</code>
<code>Empty set (0.00 sec)</code></pre>
<p>Ничего необычного. Давайте попробуем, что нибудь поменять.</p>
<pre><code>update t1 set c ='changed' where id = 3;</code>
<code>Query OK, 1 row affected (0.00 sec)</code>
<code>Rows matched: 1  Changed: 1  Warnings: 0</code>

<code>select * from t1;</code>
<code>+----+---------+</code>
<code>| id | c       |</code>
<code>+----+---------+</code>
<code>|  1 | aaa     |</code>
<code>|  2 | bbb     |</code>
<code>|  3 | changed |</code>
<code>|  4 | ddd     |</code>
<code>+----+---------+</code>
<code>4 rows in set (0.00 sec)</code>

<code>show variables like '%revision%';</code>
<code>+----------------------+---------+</code>
<code>| Variable_name        | Value   |</code>
<code>+----------------------+---------+</code>
<code>| revision_select_mode | current |</code>
<code>+----------------------+---------+</code>
<code>1 row in set (0.00 sec)</code>

<code>select * from t1_revision;</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>| id | c    | revision_id | revision_timestamp  | revision_deleted |</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>|  3 | ccc  |           1 | 2008-09-30 05:45:49 |                0 |</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>1 row in set (0.00 sec)</code>

<code>delete from t1 where id = 2;</code>
<code>Query OK, 1 row affected (0.01 sec)</code>

<code>select * from t1_revision;</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>| id | c    | revision_id | revision_timestamp  | revision_deleted |</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>|  3 | ccc  |           1 | 2008-09-30 05:45:49 |                0 |</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>1 row in set (0.00 sec)</code>

<code>set revision_select_mode = 'deleted';</code>
<code>Query OK, 0 rows affected (0.01 sec)</code>

<code>select * from t1_revision;</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>| id | c    | revision_id | revision_timestamp  | revision_deleted |</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>|  2 | bbb  |           1 | 2008-09-30 05:47:14 |                1 |</code>
<code>+----+------+-------------+---------------------+------------------+</code>
<code>1 row in set (0.00 sec)</code>

<code>select * from t1;</code>
<code>+----+---------+</code>
<code>| id | c       |</code>
<code>+----+---------+</code>
<code>|  1 | aaa     |</code>
<code>|  3 | changed |</code>
<code>|  4 | ddd     |</code>
<code>+----+---------+</code>
<code>3 rows in set (0.00 sec)</code></pre>
<p>Переменная сессии <em>revision_select_mode</em> , переключает режим отображения данных в revision engine.</p>
<p>На данный момент, механизма отката изменений нет (или есть, но не документирован), но идея отличная, и я думаю этот engine будет очень полезен в будущем.</p>
<p><em>Перевод не оригинальный, текст немного видоизменен, без потери смысла статьи передаваемого Автором текста.</em></p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/revision-engine-mysql">Permalink</a> |
	  <a href="http://pro100pro.com/revision-engine-mysql#comments">No comment</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/revision-engine-mysql&amp;title=Revision Engine - контроль версий данных для MySQL">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/revision-engine-mysql" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/mysql" title="View all posts in MySQL" rel="category tag">MySQL</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/407956670" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/revision-engine-mysql/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/revision-engine-mysql</feedburner:origLink></item>
		<item>
		<title>Рефакторинг для начинающих. Дополнение.</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/390741807/refactoring-dlya-nachinaushih-dopolnenie</link>
		<comments>http://pro100pro.com/refactoring-dlya-nachinaushih-dopolnenie#comments</comments>
		<pubDate>Fri, 12 Sep 2008 15:19:43 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Высококачественный код]]></category>

		<category><![CDATA[Дизайн]]></category>

		<category><![CDATA[Мастерство Программирования]]></category>

		<category><![CDATA[Усовершенствование Кода]]></category>

		<category><![CDATA[методы рефакторинга]]></category>

		<category><![CDATA[рефакторинг]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=126</guid>
		<description><![CDATA[Это статья дополнение, в которой я попытался описать видимые и невидимые проблемы, которые будут стоять перед программистом при провидении рефакторинга. Я не претендую на полноту изложения, пусть это послужит для вас отправной точкой к профессиональному рефакторингу.]]></description>
			<content:encoded><![CDATA[<p>Хочу сказать спасибо всем, кто дал отзыв в первой части статьи «<a href="../refactoring-dlya-nachinaushih">Рефакторинг для начинающих</a>». Особенно спасибо Yury Veretelnikov, за его (в большинстве случаев) справедливую критику, которая открыла мне глаза на проблемы в оформлении и написании статьи.</p>
<p>Это статья дополнение, в которой я попытался описать видимые и невидимые проблемы, которые будут стоять перед программистом при провидении рефакторинга. Я не претендую на полноту изложения, пусть это послужит для вас отправной точкой к профессиональному рефакторингу.</p>
<p>Кратко содержание:</p>
<ul>
<li>Цель рефакторинга</li>
<li>Простые и сложные методы рефакторинга</li>
<li>Когда начинать рефакторинг?</li>
<li>Как начать рефакторинг?</li>
<li>Как не поломать рабочий код?</li>
<li>Когда рефакторинг не нужен?</li>
<li>Каталог методов рефакторинга и 	примеры рефакторинга</li>
</ul>
<p>А теперь кратко по каждому пункту.</p>
<h2>Цель рефакторинга</h2>
<p>Определите задачи, которые перед вами стоят, в большинстве случаев это упрощение ввода новых функций. Но, есть еще и другие цели. Профессиональные программисты знакомые с паттернами проектирования стараются привести структуру кода в порядок в соответствии с подходящими паттернами для улучшения поддержки, расширяемости и повторного использования кода.</p>
<p>Вы также можете использовать автоматизированные средства поиска кода подлежащего рефакторингу, это могут быть функции с большим количеством аргументов или слишком длинные функции. С помощью автоматических средств можно также  выявлять структурное сходство различных методов. Такие функции являются кандидатами на проведение рефакторинга.</p>
<h2>Простые и сложные методы рефакторинга</h2>
<p>Простые методы рефакторинга — это базовые, фундаментальные методы применяемые в рефакторинге. Например это: выделение метода, перемещение поля класса, выделение класса, переименование метода, класса или поля и т.д.</p>
<p>Учите простые методы рефакторинга, так как это фундамент на основе которого строится любой вид рефакторинга. Нельзя начать рефакторинг не зная фундаментальные методы.</p>
<p>Сложные методы рефакторинга — это по сути комбинация простых методов, но решающих одну базовую задачу. Пример сложного метода рефакторинга может быть:  разделение наследования. Который включает в себя: выделение класса, перемещение метода, подъем метода и подъем поля.</p>
<h2>Когда начинать рефакторинг?</h2>
<p>Применяйте рефакторинг при добавлении новой функции. Причина по которой стоит проводить рефакторинг добавляя новую функцию, это возможно несовместимый или неясный дизайн кода для добавления новых функций.</p>
<p>Применяйте рефакторинг, если требуется исправить ошибку. При исправлении ошибок польза рефакторинга в том, что код становиться более понятным. Если мы получаем сообщение об ошибке, то это признак необходимости рефакторинга, потому что код не был достаточно ясным и мы не смогли увидеть ошибку.</p>
<p>Применяйте рефакторинг при разборе кода. Разбор кода это хорошая практика, когда в команде разработчиков, разработчики проверяют код друг друга.</p>
<h2>Как начать рефакторинг?</h2>
<p>Убедитесь, что вы понимаете над какой частью кода вы будете производить рефакторинг. Вы должны четко знать какую часть кода могут затронуть ваши изменения.</p>
<p>Определите методы с помощью которых 	вы будете производить рефакторинг. 	Выпишите эти методы и для каждого 	составьте последовательность шагов, 	которые будет необходимо выполнить. 	Проделайте эту работу один раз для 	каждого метода, чтоб быть уверенным, 	что вы ничего не пропустили. Большинство 	методов рефакторинга уже имеют порядок 	действий и описание применения, 	ознакомьтесь с этими методами и 	применяйте их.</p>
<h2>Как не поломать рабочий код?</h2>
<p>Постройте набор тестов для перерабатываемой части кода. Тесты важны, так как даже при последовательном проведении рефакторинга можно допустить ошибки, тесты помогут вам исключить возможные ошибки.</p>
<p>Проводя рефакторинг можно полагаться на тесты. Если вы допустите ошибку, то тесты сразу же вам об этом сообщат. Старайтесь покрыть тестами достаточную часть кода для работы функции, тесты должны быть как чистые проверяющие вычисления правильных данных, так и грязные, посылающие в тест недопустимые, не ожидаемые данные.</p>
<h2>Когда рефакторинг не нужен?</h2>
<p>Иногда рефакторинг не нужен. Например, когда надо переписать программу с нуля. Иногда имеющийся код настолько запутан, что подвергнуть его рефакторингу, конечно, можно, но проще начат все с самого начала.</p>
<p>Явный признак необходимости переписать код — это его неработоспособность. Это обнаруживается при его тестировании, когда ошибок так много, что сделать код устойчивым не удается.</p>
<p>Другой случай, когда следует воздержаться от рефакторинга, это близость даты завершения. Однако приближение срока окончания работ — единственный случай, когда можно отложить рефакторинг, ссылаясь на недостаток времени.</p>
<h2>Каталог методов рефакторинга и примеры рефакторинга</h2>
<p>Большой каталог методов рефакторинга можно найти на <a href="http://www.refactoring.com/catalog/index.html">refactoring.com</a> вместо примеров кода, тут применяются примеры на языке UML.</p>
<p>Также, хороший <a href="http://en.wikipedia.org/wiki/Refactoring#List_of_refactoring_techniques">каталог методов рефакторинга</a> можно найти на wikipeadia, каждый метод снабжен примером на C#.</p>
<h2>В заключении</h2>
<p>Применение методов рефакторинга требует от вас: хорошего знания ООП, умение писать тесты, быть терпеливым делая рефакторинг небольшими шагами, проверять каждый шаг и постоянно учиться.</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/refactoring-dlya-nachinaushih-dopolnenie">Permalink</a> |
	  <a href="http://pro100pro.com/refactoring-dlya-nachinaushih-dopolnenie#comments">One comment</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/refactoring-dlya-nachinaushih-dopolnenie&amp;title=Рефакторинг для начинающих. Дополнение.">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/refactoring-dlya-nachinaushih-dopolnenie" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/development" title="View all posts in Development" rel="category tag">Development</a>,  <a href="http://pro100pro.com/category/complete_code" title="View all posts in Высококачественный код" rel="category tag">Высококачественный код</a>,  <a href="http://pro100pro.com/category/design" title="View all posts in Дизайн" rel="category tag">Дизайн</a>,  <a href="http://pro100pro.com/category/masterstvo" title="View all posts in Мастерство Программирования" rel="category tag">Мастерство Программирования</a>,  <a href="http://pro100pro.com/category/refactoring" title="View all posts in Усовершенствование Кода" rel="category tag">Усовершенствование Кода</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/390741807" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/refactoring-dlya-nachinaushih-dopolnenie/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/refactoring-dlya-nachinaushih-dopolnenie</feedburner:origLink></item>
		<item>
		<title>Рефакторинг для начинающих</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/386933655/refactoring-dlya-nachinaushih</link>
		<comments>http://pro100pro.com/refactoring-dlya-nachinaushih#comments</comments>
		<pubDate>Mon, 08 Sep 2008 19:12:42 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Tips And Tricks]]></category>

		<category><![CDATA[Высококачественный код]]></category>

		<category><![CDATA[Мастерство Программирования]]></category>

		<category><![CDATA[Усовершенствование Кода]]></category>

		<category><![CDATA[код для людей]]></category>

		<category><![CDATA[мартин фаулер]]></category>

		<category><![CDATA[реорганизация]]></category>

		<category><![CDATA[рефактор]]></category>

		<category><![CDATA[рефакторинг]]></category>

		<category><![CDATA[уроки кодирования]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=125</guid>
		<description><![CDATA[Рефакторинг - это реорганизация существующего кода без изменения функциональности.

Я считаю, что каждый программист должен хорошо владеть таким инструментом как рефакторинг. Хорошее знание рефакторинга поможет вам писать код не только для машин, но и для людей. Такой код легкий в понимании и сопровождении, такой код написан для людей а не для машин, рефакторинг - это одна из ключевых ежедневных обязанностей программиста.]]></description>
			<content:encoded><![CDATA[<p>Рефакторинг - это реорганизация существующего кода без изменения функциональности.</p>
<p>Я считаю, что каждый программист должен хорошо владеть таким инструментом как рефакторинг. Хорошее знание рефакторинга поможет вам писать код не только для машин, но и для людей. Такой код легкий в понимании и сопровождении, такой код написан для людей а не для машин, рефакторинг - это одна из ключевых ежедневных обязанностей программиста.</p>
<p>Вот 7 хороших советов для проведения рефакторинга:</p>
<ol>
<li>Всегда выполняйте рефакторинг короткими шагами с перерывом на перекомпиляцию и запуском тестов. Чем меньше ваши шаги, тем лучше вы локализуете потенциальные ошибки и тем быстрее вы их устраните. То, что ошибки будут можно не сомневаться. ;-)</li>
<li>Проводите рефакторинг снизу вверх, особенно, если у вас длинная и запутанная цепочка наследования классов. Старайтесь всегда сначала производить изменения в потомственных классах, прежде чем приступать к базовым классам.</li>
<li>Вы должны знать основные методы рефакторинга, для этого советую вам купить книгу Мартина Фаулера - &#8220;Рефакторинг&#8221;.</li>
<li>У вас всегда должна быть цель с которой вы производите рефакторинг, не делайте его там где он не нужен или только, если это не первоочередная задача. Чем лучше вы понимаете зачем вы это делаете, тем качественнее будет результат.</li>
<li>Не увлекайтесь рефакторингом, рефакторинг не добавляет функционала в программу, поэтому и каких либо видимых результатов вы также не получите. Делайте перерывы для того, чтоб сделать, что то, что можно увидеть и оценить. Тогда ваш начальник будет вами доволен. :)</li>
<li>Любой вид рефакторинга можно сделать за 5, 20 минут, максимум за один час. Но в основном рефакторинг является комплексной задачей, которая может выполняться в течении недель или месяцев над действующим проектом. Идея в том, что двигаться нужно постепенно и небольшими шагами, и возможно уделяя этому не больше одного часа в день. Это хороший метод рефакторинга, потому как не занимает много времени и убедить начальство в необходимости будет намного проще, ведь 1 час это так мало, не так ли?</li>
<li>В долгосрочной перспективе у вас будет красивый и легко сопровождаемый код, код который написан для людей, а не для машин, код которым вы можете гордиться и показывать в пример, код который работает так как вы этого хотите, и все это за невысокую цену рефакторинга!</li>
</ol>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/refactoring-dlya-nachinaushih">Permalink</a> |
	  <a href="http://pro100pro.com/refactoring-dlya-nachinaushih#comments">7 comments</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/refactoring-dlya-nachinaushih&amp;title=Рефакторинг для начинающих">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/refactoring-dlya-nachinaushih" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/development" title="View all posts in Development" rel="category tag">Development</a>,  <a href="http://pro100pro.com/category/tips-and-tricks" title="View all posts in Tips And Tricks" rel="category tag">Tips And Tricks</a>,  <a href="http://pro100pro.com/category/complete_code" title="View all posts in Высококачественный код" rel="category tag">Высококачественный код</a>,  <a href="http://pro100pro.com/category/masterstvo" title="View all posts in Мастерство Программирования" rel="category tag">Мастерство Программирования</a>,  <a href="http://pro100pro.com/category/refactoring" title="View all posts in Усовершенствование Кода" rel="category tag">Усовершенствование Кода</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/386933655" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/refactoring-dlya-nachinaushih/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/refactoring-dlya-nachinaushih</feedburner:origLink></item>
		<item>
		<title>Профессиональный рост</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/373234862/professional-grow</link>
		<comments>http://pro100pro.com/professional-grow#comments</comments>
		<pubDate>Sun, 24 Aug 2008 06:04:45 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[Профессиональный росто]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=124</guid>
		<description><![CDATA[Я задался следующим вопросом, что изучать и что читать веб-разработчику с 3-4 летним стажем программирования (PHP)?

Хочу спросить Гуру, что думаете об этом списке. Правильно ли продолжать изучать скритовые языки или возможно лучше выучить Java, с C/C++ знаком хорошо.]]></description>
			<content:encoded><![CDATA[<p>Привет!</p>
<p>Я задался следующим вопросом, что изучать и что читать веб-разработчику с 3-4 летним стажем программирования (PHP)?</p>
<p>Хочу спросить Гуру, что думаете об этом списке. Правильно ли продолжать изучать скритовые языки или возможно лучше выучить Java, с C/C++ знаком хорошо.</p>
<p>Более конкретно.</p>
<p><strong>Новый язык:</strong></p>
<ul>
<li>Python</li>
<li>ROR</li>
</ul>
<p>Дальше, вот что я нашел в Google по книгам:)</p>
<p><strong>Книги по архитектуре и проектированию:</strong></p>
<ul>
<li>Архитектура программного обеспечения на практике - Л. Басс, П. Клементс, Р. Кацман</li>
<li>Объектно-ориентированные методы. Принципы и практика, 3-е издание Иан Грэхем</li>
<li>Возможно - Объектно-ориентированный анализ и проектирование с примерами приложений, 3-е издание Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон</li>
<li>Применение UML 2.0 и шаблонов проектирования, 3-е издание Крэг Ларман</li>
<li>UML. Основы Кендалл Скотт, Мартин Фаулер</li>
<li></li>
<li>Джон Влиссидес: Применение шаблонов проектирования.Дополнительные штрихи</li>
<li>Еще есть хороший список книг от Стива Макконнелла в Code Complete (которую я уже изучил), но он очень большой и с чего начать это еще вопрос</li>
</ul>
<p><strong>Книги по методикам проектирования:</strong></p>
<ul>
<li>Введение в Rational Unified Process. 2-е издание Филипп Крачтен</li>
<li>Фредерик Брукс: Мифический человеко-месяц</li>
<li>Кент Бек: Экстремальное программирование: разработка через тестирование</li>
</ul>
<p><strong>Взаимодействие внутри команд разработчиков:</strong></p>
<ul>
<li>Время-деньги. Создание команды разработчиков программного обеспечения Салливан</li>
<li>Панкаж Джалота - Управление программным проектом на практике</li>
<li>David Allen: Getting Things Done</li>
</ul>
<p>Кроме developers.org.ua, phpclub.ru, php.com.ua и rsdn.ru может есть еще хорошие ресурсы, которые вы просматриваете регулярно для повышения квалификации, ну и для общения ;-) ?</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/professional-grow">Permalink</a> |
	  <a href="http://pro100pro.com/professional-grow#comments">4 comments</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/professional-grow&amp;title=Профессиональный рост">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/professional-grow" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/%d0%bf%d1%80%d0%be%d1%84%d0%b5%d1%81%d1%81%d0%b8%d0%be%d0%bd%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d1%80%d0%be%d1%81%d1%82%d0%be" title="View all posts in Профессиональный росто" rel="category tag">Профессиональный росто</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/373234862" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/professional-grow/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/professional-grow</feedburner:origLink></item>
		<item>
		<title>Как выработать хорошую практику кодирования?</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/357539208/coding-good-practice</link>
		<comments>http://pro100pro.com/coding-good-practice#comments</comments>
		<pubDate>Wed, 06 Aug 2008 16:13:48 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[Высококачественный код]]></category>

		<category><![CDATA[Мастерство Программирования]]></category>

		<category><![CDATA[кодирование]]></category>

		<category><![CDATA[хорошая практика]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=123</guid>
		<description><![CDATA[Для улучшения практики кодирования можно внедрить в проект технический стандарт. Внедрение такого стандарта со стороны менеджера можеть быть не лучшей идеей. Лучше, если этим человеком будет архитектор, пользующейся уважением. Если этот архитектор считается идейным лидером проекта, то скорее всего команда будет придерживаться стандартов, установленных им. Но, если архитектор - это человек, который уже давно не принимает участие в кодировании, то он не может быть хорошей кандидатурой для внедрения стандарта.]]></description>
			<content:encoded><![CDATA[<h2><strong>Как содействовать выработке хорошей практики кодирования?</strong></h2>
<p>Для улучшения практики кодирования можно внедрить в проект технический стандарт. Внедрение такого стандарта со стороны менеджера можеть быть не лучшей идеей. Лучше, если этим человеком будет архитектор, пользующейся уважением. Если этот архитектор считается идейным лидером проекта, то скорее всего команда будет придерживаться стандартов, установленных им. Но, если архитектор - это человек, который уже давно не принимает участие в кодировании, то он не может быть хорошей кандидатурой для внедрения стандарта.</p>
<h2>Способы достижения хорошего кодирования</h2>
<ul>
<li><em><strong>Назначить двух человек на каждую часть проекта. </strong>У вас как минимум будет гарантия, что хотя бы два человека думают, что код работает.</em></li>
<li><em><strong>Рецензируйте каждую строку кода. </strong>В рецензировании кода участвует программист и как минимум еще два человека. Рецензирование кода улучшает его качество, так как программист знает, что как минимум 2 человека будут читать его код, а также это является страховкой на тот случай если человек покинет проект.</em></li>
<li><em><strong>Введите процедуру подписания кода. </strong>Подписанный код показывает, что программист соотвествует уровню квалификации и только подписанный код считается завершенным.</em></li>
<li><em><strong>Распространяйте для ознакомления хорошие примеры кода. </strong>Это предоставит ясный пример, того качества, которого вы хотите добиться. Никакое описание не передаст более точно, то что можно показать в примере кода.</em></li>
<li><em><strong>Подчеркивайте, что код - это общее имущество. </strong>Иногда программисты считают, что код который они написали - &#8220;их&#8221; личная собственность. Хотя это результат их работы, но он является частью свего проекта и должен быть доступен любому участнику проекта.</em></li>
<li><em><strong>Награждайте за хороший код. </strong>1. Награда должна представлять интерес для программиста. 2. Код поощряемый таким образом должен быть исключительно хорошим.</em></li>
<li><em><strong>Один простой стандарт. </strong>Если вы управляете программным проектом и в прошлом были программистом, то простым и эффективным способом добиться хорошего результат будет фраза: &#8220;Я должен быть в состоянии прочесть и понять любой код написанный в проекте&#8221;.</em></li>
</ul>
<p style="text-align: right;"><em>Стив Макконнелл. Совершенный код.</em></p>
<p><strong><br />
</strong></p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/coding-good-practice">Permalink</a> |
	  <a href="http://pro100pro.com/coding-good-practice#comments">One comment</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/coding-good-practice&amp;title=Как выработать хорошую практику кодирования?">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/coding-good-practice" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/complete_code" title="View all posts in Высококачественный код" rel="category tag">Высококачественный код</a>,  <a href="http://pro100pro.com/category/masterstvo" title="View all posts in Мастерство Программирования" rel="category tag">Мастерство Программирования</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/357539208" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/coding-good-practice/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/coding-good-practice</feedburner:origLink></item>
		<item>
		<title>_gat is not defined</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/355349060/_gat-is-not-defined</link>
		<comments>http://pro100pro.com/_gat-is-not-defined#comments</comments>
		<pubDate>Mon, 04 Aug 2008 14:00:35 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[Tips And Tricks]]></category>

		<category><![CDATA[analytics]]></category>

		<category><![CDATA[bug]]></category>

		<category><![CDATA[error]]></category>

		<category><![CDATA[FireBug]]></category>

		<category><![CDATA[FireFox]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[IE6]]></category>

		<category><![CDATA[IE7]]></category>

		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=122</guid>
		<description><![CDATA[Новая версия кода google analytics иногда вызывает такую ошибку JavaScript "_gat is not defined", подобная ошибка была и в старой версии google analytics.]]></description>
			<content:encoded><![CDATA[<p>Новая версия кода google analytics иногда вызывает такую ошибку JavaScript &#8220;<strong>_gat is not defined</strong>&#8220;, подобная ошибка была и в <a href="http://pro100pro.com/urchintracker-is-not-defined">старой версии google analytics</a>.</p>
<p>Исправить данну ошибку можно следующим кодом, но прежде чем исправлять, надо убедиться в слеующем:</p>
<ul>
<li>у вас не установлен старый <a href="http://pro100pro.com/urchintracker-is-not-defined">urchin tracker</a> код</li>
<li>у вас не включен Ad Block или похожая программа блокировки нежелательного содержания</li>
<li>у вас не установлены adware, spyware программы, которые фильтруют траффик и могут вырезать нежелательное содержимое</li>
</ul>
<p>Если одно из выше перечисленных утверждений неверно, то вы можете не меняя код просто отключить программу фильтрации и посмотреть, повлияло ли это на ошибку.</p>
<pre>&lt;script type="text/javascript"&gt;
if (typeof(_gat) == 'object')
{
var pageTracker (YOUR TRACKING CODE)
...
}
&lt;/script&gt;</pre>
<p>Я буду признателен если вы напишите в комментариях какая у вас была проблема и помогло ли мое решение, решить ее?</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/_gat-is-not-defined">Permalink</a> |
	  <a href="http://pro100pro.com/_gat-is-not-defined#comments">3 comments</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/_gat-is-not-defined&amp;title=_gat is not defined">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/_gat-is-not-defined" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/tips-and-tricks" title="View all posts in Tips And Tricks" rel="category tag">Tips And Tricks</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/355349060" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/_gat-is-not-defined/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/_gat-is-not-defined</feedburner:origLink></item>
		<item>
		<title>14 приемов как стать креативным разработчиком</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/352366115/14-putey-kreativnogo-razrabotchika</link>
		<comments>http://pro100pro.com/14-putey-kreativnogo-razrabotchika#comments</comments>
		<pubDate>Fri, 01 Aug 2008 07:05:59 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Tips And Tricks]]></category>

		<category><![CDATA[Мастерство Программирования]]></category>

		<category><![CDATA[креатив]]></category>

		<category><![CDATA[программирование]]></category>

		<category><![CDATA[программист]]></category>

		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=121</guid>
		<description><![CDATA[Общее сложившееся представление о программистах это - необщиетльный, непривликательный и очень, очень скучный человек. Никто, не связывает профессию программиста с креативной личностью. Но, это далеко не так. Работа с кодом это одна из наиболее креативных профессий. Программистам приходится балансировать между двумя разными мирами: структурным миром и миром воображения.]]></description>
			<content:encoded><![CDATA[<p>Перевод статьи: &#8220;<a href="http://lifedev.net/2008/07/programmer-creativity-boost/">14 Ways to Learn From Creative Programmers</a>&#8221;<br />
- LifeDev.net</p>
<p><img style="border: 0pt none ; vertical-align: top;" src="http://lifedev.net/wp-content/uploads/2008/07/creativity-programmer.jpg" alt="Креативный рабочий стол" width="500" height="333" /><br />
Фото от <a href="http://www.flickr.com/photos/89016311@N00/2289635119"></a><a href="http://www.flickr.com/photos/89016311@N00/2289635119">morganglines</a></p>
<p>Общее сложившееся представление о программистах это - необщиетльный, непривликательный и очень, очень скучный человек. Никто, не связывает профессию программиста с креативной личностью. Но, это далеко не так. <strong>Работа с кодом это одна из наиболее креативных профессий.</strong> Программистам приходится балансировать между двумя разными мирами: структурным миром и миром воображения.</p>
<p>Я знаю это, так как сейчас, я работаю над крупными и интересными веб-сайтами и хорошо поднял свои знания в PHP и в программировании. Я понял, что программирование это отличное упражнение повысить свою креативность.</p>
<p>И вот почему:</p>
<ul>
<li><em>Программирование дает полный контроль. </em>Создавая что то из ничего, это возможно самый лучший пример криативности. Полный контроль над программой или веб сайтом, дает программисту превосходную возможность направить развитие проекта в ту сторону в которую он пожелает.</li>
<li><em>Много разных путей решить одну задачу. </em>Программисты используют большой набор инструментов и методов для поиска наилучшего решения задачи среди множества вариантов решений.</li>
</ul>
<p><strong>Программисты должны найти креативное решение задачи, иначе они ее не решат.</strong></p>
<p>Программисты это пример людей, которые могут размышлять вне рамках границ, потому что&#8230;. программисты сами создают эти границы.  Вот несколько путей, как научиться думать креативно - позаимствованных у программистов.</p>
<h2>1. Выучите новый язык</h2>
<p>Программисты постоянно учат новые языки, иногда просто ради развлечения, а иногда по надобности. Не ограничивайте себя только тем, что вы сейчас знаете. Развивайте себя и повышайте свои знания.</p>
<h2>2. Начните с самого начала</h2>
<p>Если вы собираетесь начать писать программное обеспечение, то вы не можете начать с половины проекта.  Вы должны начать с самого начала. Иногда начать сначала это лучший путь найти креативное решение проблемы.</p>
<h2>3. Спрашивайте про все</h2>
<p>Спрашивайте про все, означает, делайте предположение и проверяйте верно ли оно. Само программирование начиналось с самых простых предположений, и дальше строилось на их усложнении. Если, что то не так в коде, то и приложение не будет работать правильно.</p>
<p>Иногда креативность ограничена установленными предположениями, и новое решение может придти только если вы начнете с чистого листа и посмотрите на проблему с другой стороны.</p>
<h2>4. Делайте это ради развлечения</h2>
<p>Если ты знаешь нескольких программистов, то ты наверняка знаешь, что они постоянно, что то создают. Даже если у них нет сегодня проектов по работе, то они все равно тратят время на создание собственных проектов. Их работа это также их хобби.</p>
<p>Постоянное сочетание новых идей и решений, никак не может быть нудной работой.</p>
<h2>5. Постоянно проверяйте новые идеи</h2>
<p>Программисты постоянно проверяют свой код, чтоб убедится, что он работает настолько эффективно насколько это возможно. Так как даже самые незначительные изменения могут поломать всю программу или веб сайт, поэтому тестирование и проверки очень важная часть разработки ПО.</p>
<p>Идеи должны быть хорошо протестированы и проверены, только последовательные проверки и тесты сделают идею по настоящему ценной. Постоянное оценивание и тестирование - это наилучший способ &#8220;проверить&#8221; свою идею.</p>
<h2>6. Найдите страсть</h2>
<p>Если вы когда-либо разговаривали в течении нескольких минут с программистом о его работе, то вы наверное очень скоро заметили, что программисты имеют страсть к тому, что они делают.</p>
<p>А у вас есть страсть к вашим идеям и проектам?</p>
<h2>7. Мастер своего дела</h2>
<p>Программисты постоянно улучшают свои знания. Хороший кодер постоянно следит за программным обеспечением и постоянно улучшает свои знания в использовании подручных инструментов. Вы редко встретите программиста, который не улучшает свой набор инструментов.</p>
<p>Не важно какие у вас сейчас знания, вы все равно ограничены тем набором инструментов, который используете в работе. Чем больше вы знаете свои инструменты, тем больше вы можете сделать.</p>
<h2>8. Начните думать абстрактными ассоциациями</h2>
<ol>
<li>Что если использовать <a href="http://www.skype.com">компьютер как телефон</a>?</li>
<li>Что будет, если использовать <a href="http://www.google.com/docs">веб-сайт как Word процессор</a>?</li>
<li>Что если люди будут озабочены тем, <a href="http://www.twitter.com/">что делают сейчас другие люди</a>?</li>
</ol>
<p>Люди стоящие за Skype, Google и Twitter схожи в одном: Они все использовали абстрактные ассоциации. <strong>Предполагая, &#8220;что-если&#8221;, и тестируя это - лучший способ начать думать по-другому, в более креативном свете.</strong></p>
<h2>9. Думайте о границах как о помошнике, а не как о ограничениях</h2>
<p>Люди ассоциируют креативную деятельность как запись идей на чистом листе бумаги, без обдумывания вообще каких либо ограничений. Но как бы то нибыло, такой вид мышления является ошибочным.</p>
<p>Подумайте только, ведь ограничения они повсюду. Мы не можем игнорировать их, мы можем только надеятся, что сможем работать вместе с ними.  Программист понимая ограничения языка программирования или инструмента с которыми он работает, использует ограничения в своих нуждах. Эти ограничения помогают ему, так как они являются основой его работы. <strong>Иногда поиски обходных решений приводят к более красивым идеям.</strong></p>
<h2>10. Не начинайте руководить чем либо, пока сами это не попробуете</h2>
<p>Ваш учитель был прав: Нет ничего хуже чем глупый вопрос. Если вы будете придерживаться #3 и даже проверите все предположения, то вы все равно не сможете быть уверенными будет это работать или нет, пока сами не попробуете. Как вы узнаете, что это не работает, пока не попробуете? Вы удивитесь! Но, даже если предложенное решение не работает, то это все равно может помочь вам найти правильное решение.</p>
<p>Иногда лучше начать с прототипа и испытать его. Если прототип не заработает, то просто удалите его. А если заработает, то вы все равно в процессе будете натыкаться на какие то проблемы, пока решение наконецто не заработает, и это поможет лучше узнать проблему и найти более подходящие решения или идеи.</p>
<h2>11. Всегда, всегда ищите более простое и более элегантное решение</h2>
<p>Хороший программист понимает, что поиски простого решения всегда ведут к хорошим результатам. Сложные решения ведут&#8230; к сложностям. Применяя это к программированию всегда дает хороший результат в перспективе.</p>
<p>Наши идеи иногда становятся очень сложными. Мы пытаемся схватится за новую идею игнорируя, что она из себя на самом деле представляет. <strong>Самое простое решение проблемы, обычно всегда самое лучшее</strong>.</p>
<h2>12. Не бойтесь использовать чужой код</h2>
<p>Красота интернета в том, что решение которое вы ищете, скорее всего уже кем то другим сделано. Когда я создаю новый сайт, я почти всегда использую существующий open-source код. Зачем изобретать колесо?</p>
<p>Воплощая новую идею в жизнь, не означает, что вы должны начинать с чистого листа. Используйте существующие идеи и создавайте на их основе что то лучшее. Иногда хорошая идея, это изменение существующей, которая уже была сделана. <a href="http://gmail.com">Gmail</a> хороший тому пример. Они &#8220;переизобрели&#8221; email добавив удобные возможности к традиционному email.</p>
<h2>13. Не бойтесь сотрудничать</h2>
<p>Одни из наилучших программ - или просто креативных проектов - не осуществлялись одним программистом, наоборот они объединяли много замечательных людей и вдохновляли на работу к единой цели. Соберите замечательную команду, используйте самые лучшие идеи, и дозвольте всем сотрудничать.</p>
<h2>14. Двигайтесь малыми шагами к большой цели</h2>
<p>Программисты снова и снова используют простые конструкции кода, которые из себя ничего особого не представляют, но вместе, все эти конструкции создают великолепный продукт. Не важно над каким проектом ты сейчас работаешь - уделяй внимание деталям, особенно тому как эти детали влияют на весь проект в целом.</p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/14-putey-kreativnogo-razrabotchika">Permalink</a> |
	  <a href="http://pro100pro.com/14-putey-kreativnogo-razrabotchika#comments">3 comments</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/14-putey-kreativnogo-razrabotchika&amp;title=14 приемов как стать креативным разработчиком">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/14-putey-kreativnogo-razrabotchika" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/development" title="View all posts in Development" rel="category tag">Development</a>,  <a href="http://pro100pro.com/category/tips-and-tricks" title="View all posts in Tips And Tricks" rel="category tag">Tips And Tricks</a>,  <a href="http://pro100pro.com/category/masterstvo" title="View all posts in Мастерство Программирования" rel="category tag">Мастерство Программирования</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/352366115" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/14-putey-kreativnogo-razrabotchika/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/14-putey-kreativnogo-razrabotchika</feedburner:origLink></item>
		<item>
		<title>ProductSearch #4 Разработка требований. Масштабы и ограничения проекта</title>
		<link>http://feeds.feedburner.com/~r/pro100pro/~3/335311559/product-search-mashtab-ogranicheniya</link>
		<comments>http://pro100pro.com/product-search-mashtab-ogranicheniya#comments</comments>
		<pubDate>Mon, 14 Jul 2008 18:21:29 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
		
		<category><![CDATA[Product Search]]></category>

		<category><![CDATA[productsearch]]></category>

		<category><![CDATA[версии]]></category>

		<category><![CDATA[версия 1.0]]></category>

		<category><![CDATA[границы]]></category>

		<category><![CDATA[исключения]]></category>

		<category><![CDATA[масшатабы]]></category>

		<category><![CDATA[объем]]></category>

		<category><![CDATA[ограничения]]></category>

		<category><![CDATA[проект]]></category>

		<guid isPermaLink="false">http://pro100pro.com/product-search-mashtab-ogranicheniya</guid>
		<description><![CDATA[Границы проекта определяют концепцию и круг действия предложенного решения. В ограничениях указываются определенные возможности, которые не будут включены в продукт. Рамки и ограничения помогают установить реалистичные ожидания заинтересованных лиц]]></description>
			<content:encoded><![CDATA[<blockquote><p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="granizi_proekta" src="http://pro100pro.com/wp-content/uploads/2008/07/granizi-proekta.jpg" width="179" align="right" border="0" /> Когда химик изобретает новую химическую реакцию, которая преобразует один тип химиката в другой, он пишет документ, в который входит раздел &quot;Рамки и ограничения&quot;, где описывает, что получиться и не получиться в результате этой реакции.</p>
<p>Карл Вигерс. Разработка требований к программному обеспечению</p>
</blockquote>
<p>Точно также для проекта по рарзаботке ПО следует определить его рамки и ограничения. Вам необходимо указать, что может делать система, а что не может.</p>
<p>Границы проекта определяют концепцию и круг действия предложенного решения. В ограничениях указываются определенные возможности, которые не будут включены в продукт. Рамки и ограничения помогают установить реалистичные ожидания заинтересованных лиц.</p>
<h3>Объем первоночальной версии ProductSearch</h3>
<p>Чтоб определить объем первоначальной версии, надо постараться обобщить основные запланированные функции и включить только самое необходимое в первую версию продукта.</p>
<p>Опишите характеристики качества, которые позволяют продукту предоставлять предполагаемые выгоды различным классам пользователей. </p>
<p>Сосредоточтесь на наиболее ценных функциях, имеющих максимально приемлемую стоимость, годных для самой широкой целевой аудитории, которые удастся создать как можно раньше.</p>
<p><span id="more-120"></span></p>
<p>Вот как я определил первоначальный объем версии 1.0 для ProductSearch.</p>
<p>Первия версия продукта ProductSearch будет содержать самые базовые и основные функции. В нее <strong>не будут</strong> включены специфичные функции для отдельной взятой области или функции, которые являються расширением базовых функций. Основной упор будет делаться на надежность и простоту системы до версии 1.0.</p>
<p>Для покупателей будет реализованы следующие функции:</p>
<ul>
<li>Поиск продуктов - результатом поиска является список категорий наиболее вероятно содержащих искомый продукт </li>
<li>Вывод списка предложений от поставщиков и информацию о цену на конкретный продукт </li>
</ul>
<p>Для поставщиков будут реализованы следующие функции:</p>
<ul>
<li>Регистрация поставщиков </li>
<li>Возможность добавлять или удалять собственные продукты из системы </li>
<li>Статистика переходов покупателей на сайт поставщиков </li>
<li>Статистика просмотра товаров покупателями принадлежащих поставщику </li>
</ul>
<h3>Объем последующих версий</h3>
<p>Также стоит описать объем последующих версий, если вы предсталяете свой проект так, как он будет выглядеть после версии 1.0. Чем на большее количество версий вы представляете свой проект, тем более размытыми будут границы проекта в более поздних версиях, и тем легче переносить или добавлять новые функции в следующие версии проекта.</p>
<h3>Ограничения и исключения</h3>
<p><em>Определить границы между тем, что входит и выходит за границы проекта, - отличный способ управления расползанием объема и ожиданиями клиентов.</em> Перечислите все возможности или характеристики, которых могут ожидать заинтересованные в проекте лица, но включение которых в продукт или в определенную версию не запланировано.</p>
<p>В версию 1.0 ProductSearch скорее всего не попадет сортировка продуктов по цене внутри категории, а также не будет фильтров по цене, по названию, и по прочим характеристикам продуктов внутри категорий. </p>
	<p></p>
	<hr noshade style="margin:0;height:1px" />
	<p>&copy; Yaroslav Vorozhko for <a href="http://pro100pro.com">Мастерство программирования</a>, 2008. |
	  <a href="http://pro100pro.com/product-search-mashtab-ogranicheniya">Permalink</a> |
	  <a href="http://pro100pro.com/product-search-mashtab-ogranicheniya#comments">No comment</a></p>
	<p>Add to <a href="http://del.icio.us/post?url=http://pro100pro.com/product-search-mashtab-ogranicheniya&amp;title=ProductSearch #4 Разработка требований. Масштабы и ограничения проекта">del.icio.us</a></p>
	<p>Search blogs linking this post with <a href="http://www.technorati.com/search/http://pro100pro.com/product-search-mashtab-ogranicheniya" title="Search on Technorati">Technorati</a></p>
	<p>Want more on these topics ? Browse the archive of posts filed under <a href="http://pro100pro.com/category/product-search" title="View all posts in Product Search" rel="category tag">Product Search</a>.</p><img src="http://feeds.feedburner.com/~r/pro100pro/~4/335311559" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/product-search-mashtab-ogranicheniya/feed</wfw:commentRss>
		<feedburner:origLink>http://pro100pro.com/product-search-mashtab-ogranicheniya</feedburner:origLink></item>
	</channel>
</rss>
