Вопрос геймерам. Подбираете ли вы IRL монетки, валяющиеся под ногами?

Вопрос геймерам. Подбираете ли вы IRL монетки, валяющиеся под ногами?

среда, 9 марта 2011 г.

Как писать неподдерживаемый код

In the interests of creating employment opportunities in the Java programming field, I am passing on these tips from the masters on how to write code that is so difficult to maintain, that the people who come after you will take years to make even the simplest changes.

...

Here's a real life example written by a master. Let's look at all the different techniques he packed into this single C function.

void* Realocate(void*buf, int os, int ns)
{
void*temp;
temp = malloc(os);
memcpy((void*)temp, (void*)buf, os);
free(buf);
buf = malloc(ns);
memset(buf, 0, ns);
memcpy((void*)buf, (void*)temp, ns);
return buf;
}

How To Write Unmaintainable Code

Статья о том, как писать сложный для понимания код. Далее перевод некоторых фрагментов.


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

Будьте абстрактны

В названиях функций и переменных как можно чаще используйте абстрактные слова, вроде it, everything, data, handle, stuff, do, routine, perform and the digits e.g. routineX48, PerformDataFunction, DoIt, HandleStuff and do_args_method.

Используйте восьмеричную систему счисления

Прячьте восьмеричные цифры среди десятичных:

array = new int []
{
111,
120,
013,
121,
};

Необычное представление массивов в C

Компиляторы C превращают myArray[i] в *(myArray + i), что равносильно *(i + myArray), что равносильно i[myArray]. Эксперт найдёт этому хорошее применение. Для большего запутывания можно получать индекс через функцию.

int myfunc(int q, int p) { return p%q; }
...
myfunc(6291, 8)[Array];

Комментируйте очевидное

Приправьте код комментариями типа /* добавить 1 к i */, но никогда не комментируйте такие вещи, как общее назначение поля или метода.

Непрерывное совершенствование

Делайте "усовершенствования" как можно чаще и убеждайте пользователей чаще обновляться, ведь никто не хочет работать с устаревшей версией. Если пользователи довольны программой, то они будут ещё довльнее, если вы её "исправите"! Никому не сообщайте о характере сделанных изменений, а если заставят - почему бы не сказать о нескольких ошибках в старой версии, пусть и незаметных?


Ну и напоследок. Лично я не люблю специально запутывать код. Во-первых, лень, а во-вторых - я с радостью спихну на кого-то надоевшую старую программу и займусь чем-то новым. Но мне по душе оставлять в скучном коде разные ребусы, использовать название Maid.Onegai(Method) для выполнения метода в отдельном потоке и определять цветовую константу Suiseiseki.

22 комментария:

  1. Руки бы им поотрывать за такое.

    ОтветитьУдалить
  2. ... и вас прибьют свои же, еще на этапе code review

    ОтветитьУдалить
  3. От сволочи. Какая симуляция мозговой деятельности!(сам я во всём этом не очень, но подозревал подобные подвохи)

    ОтветитьУдалить
  4. ну вроде как в сириус проектах, всё это строго нормировано, так что такая фича не прокатит.

    ОтветитьУдалить
  5. Как сказал один начинающий программист, "Иногда мне кажется, что компьютер просто игнорирует все мои комментарии."

    ОтветитьУдалить
  6. UtroClickClick, Lis-san - из всего написанного в статье много такого, за что действительно прибьют. Теперь по поводу перечисленного в посте. Первый пример - мне так удобнее и всё тут. Второй - ой, не заметил, ну надо же! Постоянно так делать не надо, да. Третий пример - просто весёлый ребус, помешает только полному дураку. Хуже, когда пишут if(true == b) вместо if(b), дико бесит.

    ОтветитьУдалить
  7. похвальная статья, почитал...

    ОтветитьУдалить
  8. Теперь буду знать, как это делается. Спасибо!

    ОтветитьУдалить
  9. Интересно.. Я подписался на твой блог, жду дальшнейших статей!

    ОтветитьУдалить
  10. Спасибо за подробную статью!

    ОтветитьУдалить
  11. Надо будет попробовать написать что-то. Спасибо.

    ОтветитьУдалить
  12. это просто шикарно, особенно для ведущих программистов проекта. можно шантажировать начальство, чтобы зарплату раз в полгода повышало, иначе уволишься, а потом хуй кто разберет твои манускрипты.

    ОтветитьУдалить