<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Персональный блог Валерия Леонтьева &#187; языки программирования</title>
	<atom:link href="http://valera.ws/tag/yazyki-programmirovaniya/feed/" rel="self" type="application/rss+xml" />
	<link>http://valera.ws</link>
	<description>Блог для публикации интересных личных заметок о работе, жизни, событиях... Digital lifestyle, веб-программирование, администрирование серверов и другое</description>
	<lastBuildDate>Sat, 31 Dec 2011 11:52:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Рейтинг языков программирования: поиски в Яндексе и вакансии в Беларуси</title>
		<link>http://valera.ws/2008.03.28~programming-languages-ratings/</link>
		<comments>http://valera.ws/2008.03.28~programming-languages-ratings/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 09:42:18 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[PC]]></category>
		<category><![CDATA[Все рубрики]]></category>
		<category><![CDATA[Жизнь]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[рейтинг]]></category>
		<category><![CDATA[языки программирования]]></category>

		<guid isPermaLink="false">http://valera.ws/2008.03.28~programming-languages-ratings/</guid>
		<description><![CDATA[Решил подойти к вопросу рейтинга языков еще с одной стороны. Собрал небольшую статистику по размещенным вакансиям/резюме на белорусском сайте работы, и статистику количества запросов по данным языкам в Яндексе. На сайте Praca.by провел поиск вакансий и резюме по ключевым словам. Поиск на jobs.tut.by выдавал какие-то нереально малые цифры, потому пишлось &#8230; <a href="http://valera.ws/2008.03.28~programming-languages-ratings/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Решил подойти к вопросу рейтинга языков еще с одной стороны. Собрал небольшую статистику по размещенным вакансиям/резюме на белорусском сайте работы, и статистику количества запросов по данным языкам в Яндексе.<br />
<span id="more-34"></span><br />
На сайте <a href="http://praca.by/" target="_blank">Praca.by</a> провел поиск вакансий и резюме по ключевым словам. Поиск на <a href="http://jobs.tut.by" target="_blank">jobs.tut.by</a> выдавал какие-то нереально малые цифры, потому пишлось ограничится статистикой с працы. Результаты представлены в таблице.</p>
<table border="1" cellpadding="3" cellspacing="0">
<tr>
<th bgcolor="#f1f4f8"></th>
<th bgcolor="#f1f4f8">Вакансии</th>
<th bgcolor="#f1f4f8"></th>
<th bgcolor="#f1f4f8"></th>
<th bgcolor="#f1f4f8">Резюме</th>
<th bgcolor="#f1f4f8"></th>
</tr>
<tr>
<th bgcolor="#f1f4f8">№</th>
<th bgcolor="#f1f4f8">Ключевое слово</th>
<th bgcolor="#f1f4f8">Количетсво</th>
<th bgcolor="#f1f4f8">№</th>
<th bgcolor="#f1f4f8">Ключевое слово</th>
<th bgcolor="#f1f4f8">Количество</th>
</tr>
<tr>
<td align="right">1</td>
<td>программист</td>
<td align="center">166</td>
<td align="right">1</td>
<td>программист</td>
<td align="center">53</td>
</tr>
<tr>
<td align="right">2</td>
<td><a href="http://valera.ws/tag/java/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Java">Java</a></td>
<td align="center">95</td>
<td align="right">2</td>
<td><a href="http://valera.ws/tag/sql/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  SQL">SQL</a></td>
<td align="center">37</td>
</tr>
<tr>
<td align="right">3</td>
<td>SQL</td>
<td align="center">94</td>
<td align="right">3</td>
<td>C++</td>
<td align="center">36</td>
</tr>
<tr>
<td align="right">4</td>
<td><a href="http://valera.ws/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">HTML</a></td>
<td align="center">85</td>
<td align="right">4</td>
<td><a href="http://valera.ws/tag/delphi/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Delphi">Delphi</a></td>
<td align="center">34</td>
</tr>
<tr>
<td align="right">5</td>
<td>JavaScript и JS</td>
<td align="center">68</td>
<td align="right">5</td>
<td>Java</td>
<td align="center">29</td>
</tr>
<tr>
<td align="right">6</td>
<td><a href="http://valera.ws/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a></td>
<td align="center">48</td>
<td align="right">6</td>
<td>PHP</td>
<td align="center">22</td>
</tr>
<tr>
<td align="right">7</td>
<td><a href="http://valera.ws/tag/c/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  C#">C#</a></td>
<td align="center">37</td>
<td align="right">7</td>
<td>C#</td>
<td align="center">12</td>
</tr>
<tr>
<td align="right">8</td>
<td>C++</td>
<td align="center">33</td>
<td align="right">8</td>
<td>JavaScript и JS</td>
<td align="center">12</td>
</tr>
<tr>
<td align="right">9</td>
<td>Delphi</td>
<td align="center">13</td>
<td align="right">9</td>
<td>HTML</td>
<td align="center">9</td>
</tr>
<tr>
<td align="right">10</td>
<td>Python</td>
<td align="center">5</td>
<td align="right">10</td>
<td><a href="http://valera.ws/tag/ruby/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Ruby">Ruby</a></td>
<td align="center">0</td>
</tr>
<tr>
<td align="right">11</td>
<td>Ruby</td>
<td align="center">4</td>
<td align="right">11</td>
<td>Python</td>
<td align="center">0</td>
</tr>
</table>
<table border="1" cellpadding="3" cellspacing="0">
<tr>
<th colspan="3" bgcolor="#f1f4f8" colspan="3">Сравнительная таблица</th>
<th bgcolor="#f1f4f8"></th>
</tr>
<tr>
<th bgcolor="#f1f4f8">№</th>
<th bgcolor="#f1f4f8">Ключевое слово</th>
<th bgcolor="#f1f4f8">Количество вакансий</th>
<th bgcolor="#f1f4f8">Количество резюме</th>
</tr>
<tr>
<td align="right">1</td>
<td>C#</td>
<td align="center">37</td>
<td align="center">12</td>
</tr>
<tr>
<td align="right">2</td>
<td>C++</td>
<td align="center">33</td>
<td align="center">36</td>
</tr>
<tr>
<td align="right">3</td>
<td>Delphi</td>
<td align="center">13</td>
<td align="center">34</td>
</tr>
<tr>
<td align="right">4</td>
<td>HTML</td>
<td align="center">85</td>
<td align="center">9</td>
</tr>
<tr>
<td align="right">5</td>
<td>Java</td>
<td align="center">95</td>
<td align="center">29</td>
</tr>
<tr>
<td align="right">6</td>
<td>JavaScript и JS</td>
<td align="center">68</td>
<td align="center">12</td>
</tr>
<tr>
<td align="right">7</td>
<td>PHP</td>
<td align="center">48</td>
<td align="center">22</td>
</tr>
<tr>
<td align="right">8</td>
<td>Python</td>
<td align="center">5</td>
<td align="center">0</td>
</tr>
<tr>
<td align="right">9</td>
<td>Ruby</td>
<td align="center">4</td>
<td align="center">0</td>
</tr>
<tr>
<td align="right">10</td>
<td>SQL</td>
<td align="center">94</td>
<td align="center">37</td>
</tr>
<tr>
<td align="right">11</td>
<td>программист</td>
<td align="center">166</td>
<td align="center">53</td>
</tr>
</table>
<p><strong>А вот таблица по количеству поисковых запросан на <a href="http://ya.ru/" target="_blank">Яндексе</a> за месяц:</strong></p>
<table border="1" cellpadding="3" cellspacing="0">
<tr>
<th bgcolor="#f1f4f8">Ключевое слово</th>
<th bgcolor="#f1f4f8">Количество<br />
запросов</th>
</tr>
<tr>
<td>php</td>
<td align="center">5 758 454</td>
</tr>
<tr>
<td>html</td>
<td align="center">1 892 564</td>
</tr>
<tr>
<td>C++</td>
<td align="center">427 059</td>
</tr>
<tr>
<td>C#</td>
<td align="center">427 059</td>
</tr>
<tr>
<td>Java</td>
<td align="center">376 318</td>
</tr>
<tr>
<td>Delphi</td>
<td align="center">190 121</td>
</tr>
<tr>
<td>sql</td>
<td align="center">101 706</td>
</tr>
<tr>
<td>javascript</td>
<td align="center">71 217</td>
</tr>
<tr>
<td>программист</td>
<td align="center">43 701</td>
</tr>
<tr>
<td>js</td>
<td align="center">11 826</td>
</tr>
<tr>
<td>Python</td>
<td align="center">7 758</td>
</tr>
<tr>
<td>Ruby</td>
<td align="center">5 570</td>
</tr>
</table>
<p><strong>Выводы (кратко). </strong>Не забывайте, что статистика рабочих мест касается только Беларуси, а поиска — только рунета.</p>
<ol>
<li>PHP все еще актуален и в лидерах. В то же врмемя, раз много ищут в яндексе, значит много новичков и чайников им интерисуются.</li>
<li>C# жжот.</li>
<li>HTML ищут много. Профессионалам по HTML искать <em>почти</em> нечего, вывод — студенты, новички все еще атакуют :)</li>
<li>Java-программеры давно поняли, что помощь надо просить у гугла. Тех, кто еще не понял, осталось мало :)</li>
<li>JavaScript солидно отстает по популярности от того же PHP.</li>
</ol>
<p>Теперь выводы из поиска вакансий/резюме.</p>
<ol>
<li>Ищут в основном Java-девелоперов. Причем, как спрос, так и предложение (относительно других языков) велики. Специалисты могут выбирать, имеют возможность менять работу в поиске лучших условий и з/п.</li>
<li>С#: спрос в 3 раза превышает предложение. Ищут много, большенство уже нашли себе теплые места и сидят там :) <font size="1"><strike>Ждем лета-осени, когда работу начнут искать выпущенные студенты&#8230;</strike> (тут сказали, что нихера не ждем, потому что распределение и все дела. Ну и ладно, значит не ждем :)</font></li>
<li>Delphi: мест мало, резюме много. Дельфи знают многие, это популярный язык у чайников. Но серьезные конторы не работают с этой средой.</li>
<li>C++: все хорошо, все на своих местах&#8230;</li>
<li>PHP-программистов не хватает. Всех хороших разобрали, плохие никому не нужны. Однако, и спрос, и предложение, меньше традиционных системных языков. Сайт-бум прошел.</li>
<li>Python и Ruby: есть мизерный спрос, предложение нулевое. Эти языки у нас не популярны. Больше как хобби расматриваются.</li>
<li>SQL жив. Правда программировать на нем довольно грустно и сложно (имеется в виду программирование бизнес-логики в хранимых процедурах), потому предложение в 3 раза меньше спроса. Но при этом, в большенстве вакансий ищут не SQL-разработчика, а c++, php, c#, а SQL только прилагается. Это объясняет второе место после Java. А вообще, банки атакуют :)</li>
<li>JavaScript и HTML получили 3-е и 4-е места только потому, что они вечно к чему то прилагаются. В основном к PHP и C#.</li>
</ol>
<p>Короче говоря, лучше всех живется джаверам: огромный спрос, относительно спроса малое предложение :)</p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2008.03.28~programming-languages-ratings/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Мартовский рейтинг языков программирования от TIOBE</title>
		<link>http://valera.ws/2008.03.27~tiobe-march08/</link>
		<comments>http://valera.ws/2008.03.27~tiobe-march08/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 21:02:58 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Все рубрики]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[рейтинг]]></category>
		<category><![CDATA[С++]]></category>
		<category><![CDATA[языки программирования]]></category>

		<guid isPermaLink="false">http://valera.ws/2008.03.27~tiobe-march08/</guid>
		<description><![CDATA[Оказывается, есть такая компания TIOBE Software, которая ежемесячно рассчитывает глобальный рейтинг языков программирования. Называется этот рейтинг &#171;TIOBE Programming Community Index&#187;. А вот версия этой штуки за март 2008 года. Рейтинг основан на количестве разработчиков на данных языках по всему миру, количеству различных курсов и производителей, использующих те или иные &#8230; <a href="http://valera.ws/2008.03.27~tiobe-march08/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img align="left" height="82" width="215" vspace="4" hspace="4" border="0" src="http://www.tiobe.com/content/general/images/tiobe_software.gif" />Оказывается, есть такая компания <a target="_blank" href="http://www.tiobe.com/index.php">TIOBE Software</a>, которая ежемесячно рассчитывает глобальный <a href="http://valera.ws/tag/rejting/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  рейтинг">рейтинг</a> языков программирования. Называется этот <a href="http://valera.ws/tag/rejting/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  рейтинг">рейтинг</a> &laquo;TIOBE Programming Community Index&raquo;. А <a target="_blank" href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">вот версия</a> этой штуки за март 2008 года.</p>
<p><span id="more-33"></span></p>
<p>Рейтинг основан на количестве разработчиков на данных языках по всему миру, количеству различных курсов и производителей, использующих те или иные языки. Для рассчета рейтинга используются популярные западные поисковики Google, MSN, Yahoo!, и YouTube. По-этому, не стоит понимать данный рейтинг, как выбор лучшего языка программирования, или показателя количетсва написанных строк кода на предствеленных языках.</p>
<p><strong>Итак, предствим 20-ку лучших. Позиции с 21 по 50  представлены на <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" target="_blank">сайте-источнике</a>.</strong></p>
<table id="Table2" class="TpciTable" bordercolordark="#003366" bordercolorlight="#c0c0c0" cellpadding="3" align="center" border="1">
<tr>
<th align="center" nowrap="nowrap"><strong>Position<br />
Mar 2008</strong></th>
<th align="center" nowrap="nowrap">Position<br />
Mar 2007</th>
<th align="center" nowrap="nowrap">Delta in Position</th>
<th align="center" nowrap="nowrap">Programming Language</th>
<th align="center" nowrap="nowrap">Ratings Mar 2008</th>
<th align="center" nowrap="nowrap">Delta Mar 2007</th>
<th align="center" nowrap="nowrap">Status</th>
</tr>
</table>
<p>Status обозначает принадлежность языка программирования к группе основных используемых (A) или второстевенных (B). A- означает сдвиг в сторону второстепенных.</p>
<p>Как видно, <a href="http://valera.ws/tag/java/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Java">Java</a> лидирует и за год набрал 2,6% пользователей. За ним идет Си, который не поменял позиции. А вдвоем они держат 35% рынка (если так можно выразиться).</p>
<p>Не совсем понятно поднятие на 2 позиции Visual Basic. Он обогнал PHP, который сумел удержаться. Зато 2 позиции сдал  	C++. Это падение как раз объеснимо: +1 позиция <a href="http://valera.ws/tag/c/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  C#">C#</a> и +3 позиции <a href="http://valera.ws/tag/delphi/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Delphi">Delphi</a> немного потеснили C++. Эти 3 языка можно включить в одну группу взаимозаменяемости.</p>
<p>JavaScript, который сейчас, казалось бы, на пике популярности, сдал 3 позиции. Почему? Рискну предположить, что пользователи стали меньше искать по JS в поисковиках за счет появления фрейморков. Программировать на нем стало проще, он стал меньше обсуждаться.</p>
<p>6-ю и 7-ю позиции Perl&#8217;а и <a href="http://valera.ws/tag/python/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Python">Python</a>&#8217;а мне честно говоря вообще сложно объяснить. Казалось, что первый давно забыт, а второй используется довольно редко. Возможно <a href="http://valera.ws/tag/python/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  Python">Python</a> удерживается и за счет того, что до сих под активно используется в Google.</p>
<p>Интересно так же то, что в 20-ку нагло ворвались Pascal и  Lua (+5 позиций). Неужели на Pascal еще пишут софт?</p>
<p>Вообще, рейтинг довольно спорный, но интересный :)</p>
<p>Источник: <a target="_blank" href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2008.03.27~tiobe-march08/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ООП в PHP: история развития и проблемы</title>
		<link>http://valera.ws/2007.11.11~oop_in_php/</link>
		<comments>http://valera.ws/2007.11.11~oop_in_php/#comments</comments>
		<pubDate>Sun, 11 Nov 2007 12:40:16 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[языки программирования]]></category>

		<guid isPermaLink="false">http://valera.ws/2007.11.11~oop_in_php/</guid>
		<description><![CDATA[Краткое повествование о том, как формировался PHP, как в нем появилось ООП и о том, какие проблемы в ООП PHP есть в настоящее время (PHP 5.2). Если история развития ОПП в PHP вам неинтересна, можно сразу перейти к части «Проблемы в ООП PHP». Эту статью удобнее читать в формате PDF (493 Кб).  История развития PHP &#8230; <a href="http://valera.ws/2007.11.11~oop_in_php/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://valera.ws/images/php.png" alt="PHP-скрипт" title="PHP-скрипт" align="left" border="0" hspace="3" vspace="3" width="107" height="65" style="width: 107px; height: 65px" /> Краткое повествование о том, как формировался <a href="http://valera.ws/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a>, как в нем появилось ООП и о том, какие проблемы в ООП <a href="http://valera.ws/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a> есть в настоящее время (<a href="http://valera.ws/tag/php/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  PHP">PHP</a> 5.2).<span id="more-20"></span></p>
<p>Если история развития ОПП в PHP вам неинтересна, можно сразу перейти к части «<a href="#p">Проблемы в ООП PHP</a>».</p>
<p><strong>Эту статью удобнее читать <a href="http://valera.ws/files/oop_in_php5.pdf" title="Скачать PDF-версию">в формате PDF</a> (493 Кб). </strong></p>
<h2>История развития PHP и ООП в PHP.</h2>
<p>Когда-то давно, на заре развития Интернета вовсе не было ни PHP, ни «динамичных» веб-страниц. Сайты были похожи на простые книги, их суть заключалась в банальной передаче информации пользователю. Главным отличием сайтов той эпохи от книг был <a href="http://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%BF%D0%B5%D1%80%D1%82%D0%B5%D0%BA%D1%81%D1%82">гипертекст</a>. Возможность делать ссылки с одного документа на другой оказалась невероятно удобной и в то время потрясла мир.</p>
<p style="font-size: 10px"><em>Кстати. </em><span>Для общего развития автор рекомендует прочитать статьи «<a href="http://www.artlebedev.ru/kovodstvo/54/">Краткий экскурс в историю гипертекста</a>» и «<a href="http://www.artlebedev.ru/kovodstvo/83/">Секреты хорошего гипертекста</a>».</span></p>
<p>Гипертекст определил сильный толчок в развитии Интернета, и буквально за несколько лет появилась необходимость в динамичных веб-страниц. Сайты начали развиваться в динамичном и интерактивном направлениях: появились поиски по каталогам, формы обратной связи, гостевые книги и т.д. Вместе с этим появилась необходимость в написании программ для сайтов.</p>
<p>Сервера в Интернете в то время повально работали на ОС Unix. Писать <a href="http://ru.wikipedia.org/wiki/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D0%BC%D1%8B%D0%B9_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C">исполнимые бинарные файлы</a> под эти операционные системы было сложно. На сайтах требовались абсолютно простые приложения, иногда в несколько строк. Выход нашелся быстро: решили использовать <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82">скриптовые языки программирования</a>. Писать их было не сложно, а компилировать вовсе не нужно. Следовательно, использовать такие языки было на много проще.</p>
<p>Наиболее продвинутым и любимым языком среди системных администраторов Unix в то время был <a href="http://ru.wikipedia.org/wiki/Perl">Perl</a>. А так как подавляющее большинство серверов работало на Unix, его и стали широко использовать при программировании сайтов.</p>
<p>Многие программисты помнят нашумевший в свое время каталог <em>cgi-</em><em>bin</em> на сайте. В него складывали все скрипты, и только на нем было разрешение на запуск (выполнение) программного кода (как скриптов, так и бинарников) в целях безопасности.</p>
<p>Проблема Perl заключалась в том, что изначально он разрабатывался как вспомогательное средство для системного администрирования. Во всяком случае – это была основная область его применения. Для программирования сайтов он был особенно удобен. Он ограничивал возможности программиста. Это привело к тому, что сообщество веб-программистов начало искать новый язык, более удобный для веб.</p>
<p>Таким образом, в 1994 году появился новый скриптовый язык программирования, созданный специально для генерации <a href="http://valera.ws/tag/html/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  HTML">HTML</a>-страниц на веб-сервере и работы с базами данных. Это был <a href="http://ru.wikipedia.org/wiki/PHP">PHP</a>. Во многом он был схож с Perl, синтаксис заимствовался из <a href="http://ru.wikipedia.org/wiki/C++">языка C++</a>. Так как язык разрабатывался специально для веб и невероятно прост, он оказался очень удобным при программировании сайтов, и стал невероятно популярным. В конце 90-х – начале 00-х годов был бум развития PHP.</p>
<p>По сей день PHP – один из популярнейших скриптовых языков (наряду с JSP, Ruby и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности и распространению исходных кодов на основе лицензии PHP. Сейчас для него разработано огромное количество расширений, библиотек, написано большое количество книг и статей.</p>
<p style="font-size: 10px"><em>Кстати</em><span>, PHP 3.0 был официально выпущен в июне 1998 года после 9 месяцев публичного тестирования. Это была первая открытая официальная версия </span>PHP. Многие задаются вопросом, куда делись PHP 1 и PHP<span> 2? А никуда. Их просто не было. Были версии PHP/FI и PHP/FI 2.0. </span>PHP <span>3 был переписан с нуля, поэтому прямой связи с PHP/FI не имел. Однако нумерацию версий решили продолжить с 3-й.</span></p>
<h2><a name="p" title="p"></a>Проблемы в ООП PHP.</h2>
<p>Проблемы <a href="http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">ООП</a> в PHP следуют из самых его корней. Так как в то время на сайтах использовались простые скрипты, состоящие из относительно небольшого числа строк кода, необходимости в мощном и полнофункциональном ООП для PHP не было. Разработчики написали довольно простой объектный движок, который поддерживал только основы ООП, и то с некоторыми искажениями, которые показались <a href="http://ru.wikipedia.org/wiki/PHP#PHP.2FFI">авторам</a> PHP уместными.</p>
<p>Одним из самых очевидных промахов была передача объектов не по ссылке, а копированием. Запись <em>$</em><em>a = $</em><em>b</em> вела к созданию новой копии объекта, на который указывала <em>$</em><em>a</em>. Эту ошибку исправили в PHP 5, но огромное количестве скриптов, написанных на PHP 4, содержат «костыли» для решения этой проблемы (повальное использование <em>&amp;</em>).</p>
<p>В PHP 3 и PHP 4 не было возможности объявлять <a href="http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29">тип доступа</a> к объектам класса. Это важный недостаток при разработке больших классов и больших систем. Это так же было исправлено в PHP 5, но не достаточно полно. Так как не был введен модификатор доступа при наследовании, остались большие проблемы с доступом к свойствам и методам класса.</p>
<p>Появившийся в PHP 5 деструктор, конечно, был полезен, однако большой погоды не сделал из-за отсутствия необходимости очистки мусора в PHP.</p>
<p>Введение в PHP 5 <a href="http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%28%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29">интерфейсов</a> так же не сыграло большой роли из-за отсутствия жесткой типизации в PHP.</p>
<p>ООП в PHP постоянно дорабатывается и улучшается. В PHP 6 будут решены несколько проблем ООП, но он по-прежнему останется далек от совершенства. Вообще, основная задача PHP 6 – окончательно <a href="http://cvs.php.net/viewvc.cgi/php-src/README.UPDATING_TO_PHP6?view=markup">отказаться от поддержки устаревших стандартов</a>. Это важный ход в истории PHP, но, на взгляд автора, работы в этом направлении ведутся не достаточно активно.</p>
<p>Perl давно перестал конкурировать и значительно отстал от PHP. Писать сайты на Perl в наше время могут только фанаты, энтузиасты и студенты в вузах. Объективных поводов программировать сайты на Perl нет. Однако с начала 00-х годов появилась и активно развивается другая конкурирующая с PHP технология – <a href="http://ru.wikipedia.org/wiki/Microsoft_.NET">Microsoft<span> .NET</span></a>. В настоящее время она составляет очень серьезную конкуренцию PHP и большое число компаний (в т.ч. и многие гиганты) отказались от PHP и перешли на <a href="http://ru.wikipedia.org/wiki/ASP.NET">ASP<span>.NET</span></a>.</p>
<p>Основным языком в ASP.NET стал <a href="http://ru.wikipedia.org/wiki/C_Sharp">C<span>#</span></a>. Этот язык, по мнению автора, – одна из лучших разработок Microsoft. C-подобный синтаксис по-прежнему является одним из самых гибких и удобных. Важным преимуществом перед C++ является организация автоматической сборки мусора и простота написания кода.</p>
<p>Одно из главных преимуществ PHP – отсутствие жесткой типизации – стало одним из главных его недостатков в борьбе с <a href="http://valera.ws/tag/c/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  C#">C#</a>. Вторым серьезным недостатком стало ООП. В <a href="http://valera.ws/tag/c/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  C#">C#</a> ООП развито на уровне C++. Для крупных проектов этот недостаток PHP крайне серьезен.</p>
<p>Частью технологии .NET является мощный и удобный <a href="http://ru.wikipedia.org/wiki/Framework">фреймворк</a> – .<a href="http://ru.wikipedia.org/wiki/.NET_Framework">NET<span> Framework</span></a>. В споре с ныне существующими фрэймворками PHP (<a href="http://www.cakephp.org/">CakePHP</a>, <a href="http://www.symfony-project.com/">Symfony</a>, <a href="http://framework.zend.com/">Zend Framework</a>) .NET Framework однозначно выигрывает.</p>
<p style="font-size: 10px"><em>Кстати</em>. Одно из главных достоинств ASP.NET <span>тоже сыграло против него самого. <a href="http://valera.ws/tag/programmirovanie/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  программирование">Программирование</a> сайтов на </span>ASP.NET <span>сделано похожим на программирование программ для </span>Windows<span>. В случае простых сайтов это действительно очень удобно. Разработка страниц ведется значительно быстрее, чем на </span>PHP<span>. Но для крупных сайтов такой подход, напротив, создает ряд неудобств. Поэтому, </span>PHP <span>пока держит серьезные позиции и сдавать их не собирается.</span></p>
<p>Теперь вернемся к ООП в PHP. Так как текущая версия PHP 5, о ней и будем говорить.</p>
<p><strong>Проблема 1.</strong> Одна из серьезных проблем ООП в PHP 5 уже была озвучена. Это отсутствие модификатора наследования. Об этом подробнее.</p>
<p>Допустим, создан класс, в котором часть методов объявлена как <em>public</em>. При создании нового класса, базовым для которого служит первый созданный класс, эти методы нужно скрыть. Это нужно, когда интерфейс класса-наследника «перекрывает» функционал открытых методов базового класса. Естественно, что при использовании базового класса отдельно возникает необходимость оставить эти методы открытыми, а при использовании его в качестве базового для нового класса, методы должны быть закрыты. В PHP этого механизма нет.</p>
<p><strong>Проблема 2.</strong> Отсутствие возможности множественного наследования. Это свойственна не только PHP, но и C# (и некоторым другим языкам). Присутствует оно в C++. От множественного наследования отказались потому, что оно сложно и якобы «непонятно» для программиста. По мнению автора это глупо. Это все равно, что отказаться от полетов в космос, потому что это сложно.</p>
<p>В некоторых ситуациях возникает острая необходимость множественного наследования. Например, когда есть некий условный класс получения (getter) некого X и класс установки (setter) этого же самого X. На более высоком уровне может иметь смысл объединить их в один класс работы с X. Для этого надо написать класс, базовыми для которого будут сразу два класса – getter и setter. Но сделать этого технически мы не можем.</p>
<p><strong>Проблема 3.</strong> Конструктор базового класса не вызывается по умолчанию из конструктора наследника. Но если конструктор наследника вовсе не определен, конструктор базового класса все же будет вызван. Это вносит некоторую путаницу и чревато ошибками.</p>
<p><strong>Проблема 4.</strong> Следствием отсутствия строгой типизации является отсутствие возможности перегрузки функций. Да, в случае с обычными функциями или методами класса это легко обойти и серьезных затруднений не вызывает. Проблема возникает при необходимости перегрузки конструктора. Тогда приходится выкручиваться и делать «костыли». Это неприятно.</p>
<p><strong>Проблема 5.</strong> В PHP 5 есть возможность указать тип аргумента функции (только для классов и массивов). Если переданный аргумент не будет соответствовать требуемому типу, возникнет ошибка и функция вызвана не будет. Это удобно: избавляет от необходимости повально писать лишние проверки.</p>
<p>Но разработчики забыли один важный нюанс, который проявляется серьезными неудобствами в некоторых случаях. Если указан тип объекта, нельзя передать в качестве объекта <em>NULL</em>. <em>NULL</em> – это по сути обозначение отсутствия объекта. В C++ <em>NULL</em> повально используется в местах передачи объекта в функции. В PHP программисты лишены такой возможности. В результате возник казус. Если написать <em>function </em><em>f(</em><em>MyClass $</em><em>class = </em><em>null)</em>, то такая конструкция будет замечательно работать. Но вызов <em>f(</em><em>null)</em> выдаст ошибку. В результате, при наследовании, когда из метода, где есть параметры-объекты со значением по умолчанию <em>NULL</em>, вызывается метод класса-родителя с теми же параметрами-объектами со значением по умолчанию <em>NULL</em>, программист вынужден писать костыли в виде блоков<em>IF</em>.По мнению автора, такая недоработка лишает метод указания типа параметра половины преимуществ.</p>
<p style="font-size: 10px"><em>Кстати</em><span>, эта проблема возникла из-за отсутствия строгой типизации в </span>PHP. Из плюса в начале развития PHP сейчас этот вопрос перерос в минус.</p>
<p><strong>Проблема 6.</strong> Отсутствие нормального определения виртуальных свойств и методов класса (свойств, которые имеют геттеры и сеттеры).</p>
<p style="font-size: 10px"><em>Кстати</em><span>. По сути, невиртуальные свойства – это вовсе не «свойства» класса, а «поля». Свойством же, как раз, называется поле, определенное не в виде переменной, но в виде геттера и/или сеттера. Это в языках с нормальной реализацией ООП. В </span>PHP <span>любое поле класса называется свойством. А виртуальные свойства входят в понятие <a href="http://www.php.net/manual/ru/language.oop5.overloading.php">перегрузки</a> свойств.</span></p>
<p>Из-за неудобного способа перегрузки свойств и методов класса, интерпретатор не может точно определить, существует ли свойство или метод в классе, пока непосредственно его не вызовет. Как следствие – отсутствие виртуальных (перегруженных) свойств и методов в выпадающем списке членов класса в PHP-редакторах и IDE. Именно по это причине автор избегает перегрузки во всех случаях, когда это возможно. Использование методов перегрузки (__get, __set, __call) – отличный способ запутать программиста, использующего ваш класс.</p>
<p style="font-size: 10px"><span>Создание перегрузки свойств и методов в таком виде – это ужасный поступок со стороны разработчиков </span>PHP<span>. Ведь нельзя заставлять программиста помнить все методы и свойства класса наизусть. Это просто невозможно. Именно для этого во всех современных средах программирования (</span>IDE<span>) используются выпадающие списки членов класса. Использование методов перегрузки ломает механизм выпадающих списков.</span></p>
<p><strong>Проблема 7.</strong> Открытость классов. Даже защищенные и приватные свойства класса в runtime легко просмотреть и подменить, используя <a href="http://www.php.net/manual/ru/language.oop.serialization.php">сериализацию</a>. Это открытый путь ко взлому скриптов.</p>
<p><strong>Проблема 8.</strong> Смешение статических и нестатических методов и свойств. Уже сейчас статические методы и свойства можно вызвать точно так же, как нестатические. Это может внести путаницу и привести к ошибкам, так как программист не сможет отличить статическое свойство от нестатического, не подсматривая в класс.</p>
<p>В PHP 5.3 собираются расширить возможности запутывания статических и нестатических свойств и методов. Это просто глупо.</p>
<h2>Заключение.</h2>
<p>ООП в PHP по-прежнему нуждается в серьезной переработке. И <a href="http://www.slaed.net/News-view-46.html">коррективы</a>, которые будут внесены в PHP 6, не спасут ситуацию.</p>
<p>PHP можно считать удачным экспериментом по созданию языка с нежесткой типизацией переменных. И на его примере видно, что это плохой путь. При создании простых скриптов такой подход удобен, но чреват ошибками. При создании крупных систем такой подход оказывается и неудобным, и влекущим множество мелких ошибок. Кроме этого, нестрогая типизация вносит проблемы и в развитие ООП языка.</p>
<p>Автор уверен, что наследником PHP в недалеком будущем (2012-2015 года) станет язык со строгой типизацией. Возможно, это будет даже C#.</p>
<p><strong>P.</strong><strong>S.</strong> При перепечатке статьи обязательно указание этого абзаца в полном объеме и со ссылками. Автор статьи – Валерий Леонтьев aka <strong>feedbee</strong>. Источник – <a href="http://valera.ws/2007.11.11~oop_in_php/">Персональный блог автора</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2007.11.11~oop_in_php/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

