Собственно иногда хочется поговорить о том, что крутится в голове. Когда там возникают противоречия между двумя ре�?ениями, и незнае�?ь чему отдать предпочтение (хотя вернее было бы, выделить из каждого ре�?ения верную мысль). Вот вам примерчик. Начну конечно с лирического отступления.

Шлемиль устроился на работу маляром, и должен был наносить разметку посредине дорог. В первый день он взял бочку краски и разметил 300 метров дороги. «Неплохо! – сказал босс. Ты быстро работае�?ь!» и заплатил ему за день. На следующий день Шлемиль осилил только 150 метров. » Ну что ж, не так здорово, как вчера, но ты все равно быстро работае�?ь. 150 метров – это не мало», – сказал босс и заплатил ему денежку. Еще через день Шлемиль расчертил 30 метров дороги. «Всего 30 метров!» – рассвирепел босс. – Это никуда не годится. В первый день ты сделал в десять раз боль�?е. Что случилось?»

«Ничего не могу поделать, – говорит Шлемиль. – С каждым днем приходится все даль�?е и даль�?е уходить от бочки с краской».

Красочный анекдот. Но вы даже не подозреваете, что ежедневно сталкиваетесь с таким кодом, и мало того такой код пи�?ете! Не верите? А я докажу :-)

void strcat(char* dest, char* src)
{
     while(*dest) dest++;
     while(*dest++ = *src++);
}

Собственно этот код, код strcat, который можно легко найти в книге Кернигана и Ритчи «Язык программирования С», одобренный отцами С, имеет крайне досадную о�?ибку. При конкатенации двух строк эта функция проходится полностью по исходной строке в поисках ее окончания, а после уже копирует в свой конец вторую строку. Понимаете к чему клоню? Если мы будем соединять 10 строк по десять символов, то каждый раз функции придется пробегать на 10 символов боль�?е. А если таких строк миллион? Невооруженным взглядом видно, что время выполнения функции возрастает. Умные и хитрые программисты сделали так:

char* mystrcat(char* dest, char* src)
{
      while(*dest) dest++;
      while(*dest++ = *src++);
      return --dest;
}

Таким образом функция возвращает обратно позицию последнего символа (не нуля) и с этого места будет продолжать соединение строк. Ура у нас получилось. Ре�?ение найдено и количество строк нас боль�?е пугать не будет. Ну кто-то может возразить: «Погнал тут тему! Да С настолько низкоуровнев, что его часто с асмом сравнивают, да и в скомпилированном виде он будет работать в сотни раз быстрее чем любой из интерпретируемых скриптовых языков.» Это правда, но подобный код встречается на каждом �?агу. Пусть имеется таблица данных в XML формате:

<?xml tic-tac>
<mylib>
     <book>
          <title>Язык программирования С.</title>
          <author>Керниган & Ритчи</author>
     </book>
     <book>
          <title>�?скусство программирования для UNIX</title>
          <author>Рэймонд</author>
     </book>
</mylib>

Вопрос следующий: Как перемещаться от одной записи к другой? Собственно нужно быстренько воспользоваться функциями, которые предоставляет DOM, проанализировать xml файл, ссоздать дерево в памяти, с которым можно будет легко и быстро работать. С парой оговорок: во-первых, боль�?ие базы в xml держать не стане�?ь, потому что предполагается. что памяти хватит на всю структуру; во-вторых, именно синтаксический и лексический анализ самого xml-файла будут составлять крайне медленную, если не самую медленную, часть при генерации страницы. Вообщем не задумываясь над «мелочами» мы ваяем свой код, который не есть оптимизированный.

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

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

8 Комментари(я/ев) to “Шлемиль, нелинейный код и тенденции.”

  1. ваня Says:

    любознательность выделяет, в первую очередь,любознательных-)
    а уж-то что %-компьютеризации сильно увеличился, то и то, что ты сказал-))

  2. Mr-MIT Says:

    Ои 0о
    Это что Си�?ник?!
    круто =)

  3. wi11son Says:

    почему си�?ник? моя точка зрения такова, что нужно знать не язык, чтобы писать приложение, а под приложение выбирается язык, поэтому хоро�?о знать многое :)

  4. Lego Says:

    напи�?и хоть, что по мотивам этой статьи писал
    http://local.joelonsoftware.com/mediawiki/index.php/Назад%2C_к_основам

  5. willson Says:

    странно, я вроде указывал… видно в другой статье… товарищи см коммент вы�?е.=)

  6. Thisisnot Says:

    Как говориться плавают разными стилями а тонут – одним.

  7. ClearSky Says:

    Прикольно. В закладках. Как раз думал с этим попробовать что-то!

  8. Олеся Says:

    Советую подписку на ленту новостей разместить на видном месте! Людей будет боль�?е! Особенно на таком ресурсе, как у вас! Проверяла!

Leave a Reply

Нам помогают
Дружественные сайты: