Игорь Борисов

Специалист: консультации, аудит, курсы, семинары, тренинги

Posts Tagged ‘кодинг

Как перестать быть говнокодером

23 комментария

Мальчишки и девчонки, а также их родители, кодеры, программисты, разработчики и (да-да!) преподаватели (ака ИТ тренеры).

Когда вы пишите код, (а тем более, учите этому), то его надо писать не так, «чтобы щас работало и ладно», а так, чтобы он работал быстро, эффективно, был легко читаемым, понятным, легко изменяемым и дополняемым. Для этого надо, как минимум, понимать, как работает тот кусок кода, который вы пишите.

Иначе получится как у одного «опытного» программиста, который много лет писал for ( $i=0; $i < strlen ( $string ); $i++ ), а потом вдруг(!) узнал, что так писать не надо. То есть, человек однажды скопировал у кого-то этот кусок кода и бездумно везде использовал.

Если вы 10 лет пишите echo ’Hello world’ и ничего более, то это не значит, что вы супер-пупер-мега программист. Вы просто Вася Пупкин с 10-летним стажем написания этого самого хело ворлд.

И не надо думать, что это относится только к тем, кто пишет на «каких-нибудь скриптах». Вот пост ЖЖ-юзера cd-riper по этому поводу, который я почти целиком процитирую:

Классический пример, когда человек наивно полагает, что пишет на C++, а сам лишь на полшага ушел от старого доброго C


class cStateManager
{
  public:
    cStateManager();
    ~cStateManager();
    bool Push( void (*Function)(void* CallerPtr, Purpose Purp), void* CallerPtr = NULL);
    bool Pop( void* CallerPtr = NULL);
    bool PopAll( void* CallerPtr = NULL);
    bool Process( void* CallerPtr = NULL);
  private:
    sState* m_CurrentState;
};

Обратите внимание на то, что передается в метод Push. Почему регистрируется не метод класса? Почему тип передаваемого параметра void*? Как будет выглядеть код реализации такого колбэка?

Когда в C++ человек ломает типизацию, и решает все проблемы через void*, ему надо вырывать руки. И яйца, чтобы не плодил таких же гениев.
Уверен, в коде этого "гуру", который пытается чему-то учить других, вы найдете вызовы любимой функции сишников printf. И горы ручного вызова delete.

По-моему, для gamedev это просто классика — сишник, думающий, что пишет на плюсах.

зы. Про использование NULL я вообще молчу…
Обычно рядом легко находятся перлы типа
T *p = new T();
if (!p) …;
или
if (p) delete p;

Вывод из вышенаписанного: обязательно посещайте замечательный сайт govnokod.ru и смотрите, нет ли в их коллекции кода, который напоминает ваш.

И напоследок, ещё один шедевр от гуру с хрен-знает-сколько-летним опытом. Это типа тело функции на PHP:


$res =  my_query("SELECT * FROM catalog");
echo "<h1>Каталог товаров</h1>";
echo "<table border='1'><tr>";
$row = mysql_fetch_assoc($res);
foreach ($row as $key => $val) echo "<th>$key</th>";	
echo "</tr>";
		
mysql_data_seek($res, 0);
while ($row = mysql_fetch_assoc($res)) {
	echo "<tr>";
	foreach ($row as $key => $val) echo "<td>$val</td>";	
	echo "</tr>";
};
echo "</table>n";
Реклама

Written by Игорь Борисов

31.08.2010 at 12:02