Умных людей на этом свете всегда было, и, к сожалению, всегда будет, гораздо меньше, чем представителей серой массы. Множество людей просто не способно на стремление к постоянному самосовершенствованию и познанию нового. И в этих условиях, среди всего изобилия программистов, найти хорошего профессионала - трудная задача. Дабы попытаться помочь людям, решившим заняться этой нелегкой профессией, я в своем блоге постараюсь поделиться своими мыслями о том, каким должен быть хороший программист.

Я буду возвращаться к этой теме время от времени. Так что читайте мой блог и подписывайтесь на RSS-ленту. Советуйте его своим друзьям и знакомым. Я буду рад читателям.

Начну, пожалуй, с наболевшего ;-)

Не будьте эгоистами

Пишите код аккуратно. Наверняка кроме вас над этим же кодом будут работать другие люди. В некоторых проектах число людей, пишущих общий код, может достигать нескольких десятков. Представьте, что было бы, если в таких проектах каждый писал код так, как угодно ему. Это был бы полнейший хаос. Общайтесь с коллегами по работе, читайте их код. Если видите в нем что-либо трудное для понимания, обсудите это.

Есть множество общепринятых вещей, относительно программирования в каждой отдельной среде комьюнити программистов. Но каждый решает сам для себя – принимать эти принципы или нет. Для нахождения этих “правил” далеко ходить не нужно, достаточно лишь зайти на один из форумов по нужной технологии, и посмотреть несколько примеров решений, которые предлагают участники. Как правило, в таких местах все пишут код так, чтобы любой, кто займется его чтением, мог интуитивно понять смысл и последовательность операций.

Обязательно ставьте отступы. Это вообще бич многих программистов. Код без отступов превращает процесс его чтения в очень трудоемкое занятие, а иногда даже хочется все бросить и переписать заново самому.

Вот пара примеров. Посмотрите на этот код:


...
...
<?php foreach($pages as $k => $page) {
if ($page->getTree()->getType_Id() != intval($tpHomepage)) {
	$lev_2 = $page->getChildren();
?>

	<?php foreach($lev_2 as $k => $page2) { ?>
    

<?php echo $page2->getName()?>

<?php if ($page2->getTree()->getType_Id() == intval($tpClosed)) $lev_3 = Doctrine::getTable('Page')->getPageByType($tpClosedShop,$lang->getId()); else if ($page_node2->getTree()->getType_Id() == intval($tpOpened)) $lev_3 = Doctrine::getTable('Page')->getPageByType($tpOpenedShop,$lang->getId()); else $lev_3 = $page2->getChildren(); ?>
<?php if (sizeof($lev_3)>0) { ?> <?php foreach($lev_3 as $k => $page3) { ?> <?php echo $page3->getName()?> <?php $lev_4 = $page3->getChildren(); if (sizeof($lev_4)>0 && $page3->getTree()->getType_Id() != intval($tpShop) && $page3->getTree()->getType_Id() != intval($tpClosedShop) && $page3->getTree()->getType_Id() != intval($tpOpenedShop) ) { ?>
<?php foreach($lev_4 as $k => $page4) { ?> <?php echo $page4->getName()?> <?php } ?>
<?php } ?> <?php } ?> <?php } ?>
<?php } ?> <?php } } ?> ... ...

(если вдруг автор данного кода читает эту статью, надеюсь, он возьмет на заметку свои ошибки ;-))

И на этот:


...
...
<?php foreach($pages as $k => $page): ?>
	<?php if ($page->getTree()->getTypeId() != intval($tpHomepage)): ?>
		<?php $pagesLevel2 = $page->getChildren(); ?>
		
			<?php foreach($pagesLevel2 as $k => $pageLevel2): ?>
				

<?php echo $pageLevel2->getName()?>

<?php if ($pageLevel2->getTree()->getTypeId() == intval($tpClosed)) { $pagesLevel3 = Doctrine::getTable('Page')->getPageByType($tpClosedShop,$lang->getId()); } elseif ($pageLevel2->getTree()->getTypeId() == intval($tpOpened)) { $pagesLevel3 = Doctrine::getTable('Page')->getPageByType($tpOpenedShop,$lang->getId()); } else { $pagesLevel3 = $pageLevel2->getChildren(); } ?>
<?php if (sizeof($pagesLevel3)>0): ?> <?php foreach($pagesLevel3 as $k => $pageLevel3): ?> <?php echo $pageLevel3->getName()?> <?php $pagesLevel4 = $page3->getChildren(); ?> <?php if (sizeof($lev_4)>0 && !in_array($pageLevel3->getTree()->getTypeId(), array($tpShop, $tpClosedShop, $tpOpenedShop))): ?>
<?php foreach($pagesLevel4 as $k => $pageLevel4): ?> <?php echo $pageLevel4->getName()?> <?php endforeach; ?>
<?php endif; ?> <?php endforeach; ?> <?php endif; ?>
<?php endforeach; ?> <?php endif; ?> <?php endforeach; ?> ... ...

По-моему разница ощутима.

Подумайте сами, программист пишущий код аккуратно, как правило, имеет авторитет в команде, к нему прислушиваются и понимают. В общем, аккуратность – роскошь, которую не каждый может себе позволить.

Ищите информацию, общайтесь с комьюнити

Это один из наиболее действенных способов находить актуальную информацию об интересующих вас технологиях. Читайте блоги, форумы, подписывайтесь на RSS.

Безусловно, общение полезно, но, с моей точки зрения, только тогда, когда оно продуктивно. Не вступайте в глупый флуд, не засоряйте сеть. Поверьте, людей делающих это и так достаточно. Ваши актуальные и серьезные суждения, куда важнее пустых необоснованных высказываний. Лично я оставляю свой редкий комментарий или пост на форуме лишь тогда, когда вижу, что это действие принесет пользу окружающим. В противном случае, я предпочту потратить свое время более продуктивно.

Купите себе хороший компьютер

Это не шутка. Многие могут думать, что для программирования сильная машина не нужна. Это глубочайшее заблуждение. Для кроссбраузерного программирования вам понадобится много ресурсов для всех открытых окон браузеров и окна среды разработки. Один только firefox ест от 150 МБ до 1 ГБ памяти (я привел данные своих личных наблюдений). Представьте, что иногда происходит с системой, когда в параллели с фаерфоксом, ни капли не стесняясь, ресурсы начинает поглощать java-машина, ведь среда разработки с пятью открытыми проектами пытается пропарсить файл в 30к строк.

Так что, я советую вам с полной серьезностью подойти к вопросу покупки ПК, или, еще лучше, ноутбука с высокими показателями производительности и хорошим теплоотводом – сэкономите кучу нервов.

Практикуйтесь

Это не значит, что вы должны уйти в монастырь, очистить свой разум, и думать только о практике. Но существенное время уделять этому занятию придется. Это нужно не только новичкам, но и гуру, для того чтобы поддерживать свои навыки в актуальном состоянии. Если речь идет о symfony – создайте проект для экспериментов, подключите туда все javascript фреймворки, с которыми вы работаете, и, по возможности, решайте интересные задачи еще не имеющие решения, которые встречаете в сети, и не забывайте делиться своими результатами.

Заключение

На эту тему можно говорить еще много, в рамках одной статьи сказать все не удастся. Но если вы дочитали эту статью до конца, и она показалась вам полезной, значит, вы хотите развиваться – а это самое главное, что бы начать двигаться по верному пути.