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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

61 Comments

  1. Ibrogim

    И что, вас примут на работу обратно устав копаться в говнокоде? И ЗП поднимут, да и рекомендации раздадут )

    Или я юмора не понял? а ведь может ещё кто нибудь не понять…

    Reply
  2. boln

    Если ты единственный прогер на фирме, то можно рискнуть так шифрануться 🙂

    Если нет, то выкинут за порог и размер ботинок не спросят. И ведь не поспоришь.

    Конечно же, юмор, из серии «вредные советы».

    Reply
  3. Swetlana

    Всё зависит от начальства 🙂

    Reply
  4. dgolovanov

    О да, знакомо. Уволили «коллегу», остался код. Он очень любит переменные с циферками. Отбор1, Реализация1, ажтрисёт меня от этого.

    Reply
  5. velll111

    Чел, просто молодец!!!!!!! Классная статья. Иногда есть клиенты, которым так и хочется сделать все правильно (деньги никто не отменял), но с одним противным НО!))))

    Обязательно пиши продолжение!!

    Reply
  6. Yury1001

    Да, да, был такой опыт, много лет назад: длинные строки (больше 500 знаков) не открываются в конфигураторе 7.7; переменные из русских и латинских букв ОООО в разных последовательностях и тому подобное, но особо этим никому ничего не докажешь – можно применять в исключительных случаях.

    +1

    Reply
  7. METAL

    Шикарно! Спасибо 🙂

    Reply
  8. newtype

    Прекрасная статья и язык,с удовольствием прочитал, долго смеялся.Спасибо. Интересно прочитать продолжение.

    Reply
  9. boln

    1С-обфускация, чей-то опыт:

    http://nashe1c.ru/materials-view.jsp?id=121

    Reply
  10. boln

    Как-то давно, лет 10 назад, видел серьезный код на 7.7 — а имена переменных и процедур сплошь матерные 🙂

    Reply
  11. wunderland

    Даже не знаю чего от этой статьи больше — вреда или пользы…

    Reply
  12. baton_pk
    10. Повторное использование переменных

    Ага, заходишь в модуль и пишешь в первых строчках:

    Перем Запрос, Результат, Выборка;
    

    прямо #define true false по-одинэсовски

    Reply
  13. antz

    Спасибо, отлично!)

    Reply
  14. ya.Avoronov

    Беглое чтение таких статей может доставлять: сперва начал читать с пункта 1. С некоторыми пунктами даже согласился)). Дошел до комментариев, осознал, что это юмор и упрек мне по тем самым пунктам. Буду читать сначала… ЭХХ

    Reply
  15. vandalsvq

    (1) Ibrogim, в детстве «Вредные советы» Остера читал? Если нет почитай ))))

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

    Reply
  16. qwinter

    (1) Ibrogim, зря иронизируете. С несколькими такими «специалистами» я реально сталкивался. Они просили повышение зп, их увольняли, принимали других которые не могли разобраться в их «гениальном» творении, и начальство всерьез считало новых тупыми (программист на предприятиях был в единственном числе), и через какое то время просили вернутся этих «гениев».

    Reply
  17. oleg212

    Замечательно и с юмором. В каждой шутке есть доля шутки… )))

    Reply
  18. CheBurator

    Детский лепет

    Подавляющая часть таких творений при необходимости выкидывается нафиг и пишется заново в том числе благодаря тому что по сути реализованного функционала находятся на уровне сложности средней школы

    Reply
  19. speshuric
    Reply
  20. vandalsvq

    (19) speshuric, спасибо за дополнение. У вас конечно более прикладной к 1С вариант, хотя кое-что из описанного есть в следующих главах («камуфляж» например).

    Если вы не против, следующую статью могу начать с дополнения вашими советами. И они у вас реально «вредные». Как правильно отмечено, замечаются они после «погружения» и всех согласований. Но почему то не оставляет мысль что собраны они с реальных примеров. А если такая конфа действительно существует, то страна должна знать своих героев.

    Reply
  21. RealEscander

    >Если вы называете свои переменные «и», «а», «к», их будет невозможно искать в редакторе

    Да, конечно…

    «Х = «

    Reply
  22. speshuric

    (20) Я не жадный (и вообще как бы не одинэсник считаюсь). Так что мои советы можете использовать как хотите.

    2 примера «своих героев» я привел. Как минимум это БСП и служебные сообщения в ней (отладка — ад, по крайней мере 2 года назад была адом). УПП с замечательными именами типов (чем отличается тип от вида от группы и от категории — я внятно пользователю если что не объясню). Примеры кода с копипастой тоже там же в типовых найти можно. Запросы в модулях документов (в модуле менеджера, если память моя не врёт) тоже собираются (оно отчасти хорошо и не совсем про мой пример, они над форматированием стараются не колдовать).

    А 1С еще честно пытается сделать поддерживаемый продукт. Любое «отраслевое» Г берём и там перечисленные проблемы во весь рост.

    Reply
  23. vandalsvq

    (21) RealEscander, не забудь что пробел там может быть не один и не два, а целый таб или вообще нет, в общем голь на выдумку хитра.

    (22) видать мне «везет» с отраслевыми не работать, и видимо мое мнение о большинстве из них не так далеко от правды. ОК. Принято, дополню когда буду писать далее.

    Reply
  24. speshuric

    (23) отраслевые обычно тоже противные, но их авторы себе не враги, они тоже хотят сделать поддерживаемый продукт (при смене разработчиков внутри себя). Это общая беда. Часто кривые решения рождаются из самых лучших побуждений. И не всегда плохие технические решения — плохо. Иногда они зато реализуются настолько быстро что дают критичное рыночное преимущество.

    Хотя, конечно, бывает и (полу)сознательное приведение проекта в непередаваемый вид.

    Reply
  25. vandalsvq

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

    Reply
  26. vandalsvq

    (24) и в продолжение…

    Относительно «отраслевых»… Нормальные отраслевые решения будут только тогда, когда компании занимающиеся их разработкой кроме трат на агрессивный маркетинг и «втюхивание» начнут тратить средства на постановку методологии разработки. Я уже не говорю о том, чтобы менять не только себя, но и мир вокруг себя.

    Вообще давно хотел бы исследовать вопрос, что крупные игроки мира 1С предложили в плане методологии разработки (ну окромя самой 1С). Есть хорошие примеры из мира web: Bootstrap by Twitter; AngularJS by Google. А что у нас есть от наших «крупных игроков»? Возможно я просто плохо исследовал этот вопрос?

    Reply
  27. qwinter

    (26) все отраслевые пишутся на коленке, под клиента. Какие стандарты, вы вообще о чем?

    Reply
  28. Makushimo

    Автора видать сильно достало текущее положение дел с говнокодом.-)))

    Посреди ночи я тоже ловлю себя на мысли о написании подобной статьи.

    Reply
  29. berezdetsky

    Гораздо интереснее, когда, относительно красивый код сочетается с совершенно невменяемой структурой данных. Например, когда то, что должно решаться добавлением строки в справочнике, требует в итоге создания новой подсистемы. Вот где простор для того, «Чтобы Вас носили на руках». 🙂

    Reply
  30. heavymetal

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

    Reply
  31. heavymetal

    (19) speshuric, Ваши советы не просто вредны для других программистов, но и для самой программы тоже. Для тормозной без этого 1С это может быть трудно для переваривания

    Reply
  32. testik_vzv

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

    Ровно так реализован доступ к объектам в 1С: Документообороте с его адским регистром «ДескрипторыДоступаКОбъектам»

    Это гарантирует бесконечный процесс отладки и жалкие попытки разработчика воспроизвести ситуации с ошибкой доступа к объектам, возникающие в процессе настройки прав пользователей и доработке конфигурации.

    Reply
  33. speshuric

    (31) heavymetal, Неа. Там лишь пара вредных для производительности советов (и я их специально отметил). А некоторые так даже еще и ускорить помогут: «Однонаправленные» блоки могут быть важным костылём в оптимизации, «библиотеки/компоненты которых нет в конфигурации и обычно нет на ПК» — тоже (например банальный вызов bulk copy), неидемпотентные велосипеды — тоже могут оптимизировать производительность (жертвуем затратами на поддержание логической целостности). Эх! И как я мог забыть! Есть же еще один способ: навкрячивать в конфу прямых запросов к SQL!!!! Следующий сопровождатель может себе глаза на этом вырвать! И типа же оправдание есть «штобы быстро»

    А вот «Null, неопределено и пустая ссылка в одном условии (да еще и в запросе)» — верный способ попасть в мою любимую мышеловку, тут, да, не пометил.

    Reply
  34. vandalsvq

    (33) speshuric,

    навкрячивать в конфу прямых запросов к SQL

    а в 7.7 я это ой как любил, даже целый класс накатал чтобы было проще 🙂

    Reply
  35. speshuric

    (34) там это было вполне оправдано. В 8.0 уже спорно. В 8.3 уже только очень специфические сценарии.

    Reply
  36. Pirat-37

    МоЛоДеЦ ХоРоШо НаПиСаЛ!!!

    Reply
  37. ya.Avoronov

    Коллега сегодня целый день потратил на поиск аномалий в документе:

    Один и тот же документ проводится то в один регистр, то сразу в два.

    Оказалась типовой отчет при формировании делает вторую проводку в регистр!

    Зло-советы работают и они среди нас!

    Reply
  38. Alex

    Как то попахивает плохо… Если ты не сработался с конторой, то зачем приемнику жизнь портить? Может лучше понять почему ты ушел?

    Reply
  39. vandalsvq

    Интересно, а минусят те кто не понял юмора? Ну что ж, бывает ))))

    Reply
  40. dyuha

    (18) CheBurator, На прошлой работе ковырял самописку на 77 аля ЕРП+БИТ;Финанс+ЦРМ+… ее с нуля четыре года писал «Спец каких больше не родит земля русская» (с) ФинДир. Потом два прогера два года (спасибо им, очень помогли с разбором кода) лепили заплатки, потому что срочно, лишь бы работало, без разрешения ничего не менять — это наша интеллектуальная собственность.

    Коротко по памяти:

    — Если переменная две буквы — она 34-ая.

    — Если комментарий — Код из типовой, лишний кусок.

    — Если Иванов или глМонопольно тогда ф=»admin@nashamail.ru

    — В 80% документов обработка проведения начинается с очистки табличной части, которая потом заполняется по правильному и документ проводится.

    — Дт ПланСчетов.Бюджетирование ………….. Кт.ПланСчетов.Бухгалтерский.

    — Если ВШтуках(ТЧ.Товар)=0 тогда ТЧ.Работа = 1;

    — Если о=1 Тогда Сообщить(«Позвоните Алексею, он проведет»);

    … Аж поплохело опять.

    Reply
  41. qwinter

    (40) dyuha,

    Если о=1 Тогда Сообщить(«Позвоните Алексею, он проведет»);

    это пять!!!!!!!!!!!!!!!!!

    Reply
  42. qwinter

    Да что там нетленки. Вот результат буквально сегодняшнего моего разбирательства с УТ11. Надо переносить из доработанной семерки проценты минимальных остатков. Знаю что в УТ это в «Параметрах обеспечения потребностей». Думаю ну это наверняка регистр сведений. Ищу… Нахожу только с пометкой не используется. Думаю хрен с вами, иду в форму смотрю в командный интерфейс. Вижу там обработку Параметры обеспечения потребностей. Лезу в нее, ищу куда она там записывает. Пишет она в три регистра: «ВариантыОбеспеченияТоварами», «ВариантыОбеспеченияРаботами», «ТоварныеОграничения». Думаю нужен мне первый. Посмотрел его в конфигураторе, ищу в пользовательском. Не нахожу… Смотрю синоним в конфигураторе. Оп ля: «Порядок применения способов обеспечения товарами». Уже влегкую ругаясь ищу его в пользовательском режиме… Он пустой… Уже внимательно изучаю код обработки, и узнаю, что параметры обеспечения записываются в регистр «Товарные ограничения»!!!

    Reply
  43. bulpi

    Все типовые конфигурации так написаны. Но самое большое впечатление в жизни произвела на меня конфигурация комплексная для 7.7 (Украина) , доработанная фирмой Фаворит, с идентификатором Dynamics by idea Favorit 7.7.

    Это просто какие-то агенты сатаны на Земле. Любимая функция — шаблон с недокументированными свойствами. Любимое хранение данных — глобальный кеш с использованием внешних dbf файлов! Как же хочется кого-то из разработчиков поймать и сжечь! А руководство очень удивляется, что любые изменения стоят им так дорого.

    Люди, кто знает, кто ее делал, откликнитесь!

    Reply
  44. Yashazz

    Моё любимое развлечение — имена переменных, состоящие из русских и латинских букв вперемешку. Имена достаточно короткие, чтобы не тянуло их постоянно копипастить, и расположенные так, чтобы Ctrl+Пробел обломался.

    Остальное уж всё рассказали.

    Есть, правда, ещё один вариант: написать сверхгибкий гиперуниверсал, где вся механика, логика и структура вынесены на уровень абстракций, реализованных в режиме «Предприятие». Тогда вы единственный держатель ноу-хау, и только зубр методист-внедренец вам конкурент. И главное, никаких подлянок, сплошь позитив, но какие где надо сделать перенастройки, уже не знание 1С решает, или там типовых нетленок, а исключительно знание вашей логики «шаблонов-для-образцов-типовых-логических-этапов».

    Reply
  45. Krasnyj

    Это еще что… а вот, например, табличное поле на форме документа (8.2), информация в которое каждый раз собирается из пяти справочников, и при изменениях — сохраняется в них же — вместо табличной части — это да.

    Reply
  46. TreeDogNight

    (45) Krasnyj, Между прочем классный способ, если нужно сделать нестандартный интерфейс для редактирования данных.

    Reply
  47. qwinter

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

    Reply
  48. palsergeich

    (46) TreeDogNight, Приходится постоянно так делать, потому что на моем текущем месте работы хотят интерфейс как у Iphone(с), простой и понятный, а так как в 1с нет вложенных форм, то часто а формах по 2 объекта и 3 записи с хитрож… ми связями. Конкретно — многоступенчатый ввод разнородной информации, который должен быть на уровень абстракции выше, чем существующие сейчас механизмы в самописке.

    Я честно пытался сделать на стандартных вводах все, но реально удобства 0 (за один проход бизнес процесса нужно открыть около 10 форм и думать что и в каких случаях туда вводить, сейчас это реализовано на 1 форме, со свистелками и перделками).

    Но заказчик доволен интерфейсом, тем что сотрудникам рядового звена вообще сейчас не надо думать, ввел 2-3 поля и нажал кнопку.

    То что раньше на низших уровнях вводилось по 5-10 минут + параллельно частично велось в Excel сейчас занимает 2 минуты + отпала необходимость в Excel.

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

    По сути дела получилась целая подсистема на одной форме, и именно этого и хотел заказчик. А то что для реализации этого пришлось крайне попотеть это нормально.

    Reply
  49. Yashazz

    (46) TreeDogNight, да, табличный документ вообще отличная штука, если нестандартно заюзать.

    Reply
  50. capone

    Бред… Залезешь потом в свой код через пару месяцев и сам же замучаешься в этом говне ковыряться.

    Reply
  51. vicmos

    не заменимых людей НЕТ, любого можно заменить, просто цена вопроса у всех разная

    Reply
  52. Если вспомнить, что при написание «типового» кода, возможны скрытые баги. То, что можно говорить об такой писанине? Как не как, все форумы завалены, сообщениями, об той или иной ошибке в программе.

    Сам недавно ковырял такой код в 7.7, модули дописанные, такое ощущение что кто-то пишет как курица лапой, я даже когда начинал так не писал) Еще умудрился, засечь пару ошибок в итого. Но исправлять не стал, меня не это просили делать)) К тому-же все эти шалости проходят только с новичками. В конце концов, есть специалисты которые ломают защищенные программы на самом высоком уровне, для них такая умышленная путаница, что семечки погрызть)) Думаю и в 1С таких спецов немало.

    А по теме, можно заявить об таком специалисте, и в полне авторитетно, что он некомпетентный в данной профессии и все признаки будут на лицо, все то что вы перечислили, в не правильном виде изложенный код, могут стать вашим приговором в этой профессии и поди потом докажи обратное другим работодателям)) Так что палка как всегда это бывает о 2 концах;-)

    В конце, концов…вы не увидели в своих высказываниях такой конец, значит мыслите вы крайне субъективно, а для программиста это роскошь) Ибо все должно быть логично от начала и конца. И не наступать на собственные-же услужливо разложенные самим-же грабли;-)

    Reply
  53. ZOMI

    До рассказов о чужих косяках неплохо было бы представляться —

    «-Я, Стив Программулькин, всегда пишу идеальный код, разработал десять тиражных решений… Пишу быстро и качественно одновременно для 3-5 проектов, попутно разруливая техподдержку ранее наваяных идеальных решений.»

    Все косячат, но не все рефакторят.

    Разговоры о качестве кодинга мне понятны среди разработчиков тиражных решений… Лично у меня есть опыт участия в разработке нескольких тиражных решений. Так вот, ребята, когда все сроки прошли, а проект должен быть сдан — костыли и просто невероятно замысловатые велосипеды рождены часто недосыпом и передозировкой кофе… А нубы потом хватают такой кусочек и бегут на мистапомойки.

    Если брать конкретно разработчиков типовых — я вижу, что много и очень много рефакторится. И это хорошо.

    Reply
  54. (53) ZOMI, извени дружище…я обычно балду пинаю хотя до сроков выполнения 2-3дня…а занимаюсь чем нибудь другим. Потому что я знаю, что я сделаю, все решения есть, нет только реализации. И вот приходит срок, сегодня. Я его и делаю, сегодня. Баги есть, но некогда нет громоздкого кода. Нас в свое время не так учили кодить. Можно написать гору кода, а можно обойтись и парой строк. И дело не в идеальности. А вот нубы которые нынче переквалифицировались! откуда-то в ЭТО этим и страдают. И поверь я много видел чужого кода, кроме иронии и смеха он нечего вызвать не может. Хотя очень редко, вызывает уважение у некоторых индивидов и даже некоторую зависть. Но оно и понятно почему редко.

    Замечу по теме…в свое время когда появились Спектрумы с ограниченной памятью, многие наоборот применяли трюки в рамках жесточайшей экономии памяти. Например сканировали ПЗУ на предмет нужного машиного кода для своего кода и делали переходы на эти участки, так как его писать не надо он уже есть в памяти. А языки высокого уровня — это для лентяев и прикладников, которым все эти тонкости и нюансы не к чему, они просто не знают данного предмета. Так что и понятно почему появляются такие статьи, если учесть что в машинном коде нет, не Идентификаторов не переменных и постоянные ГОУ-ТУ) А от себя добавлю, разбираться в таком коде, о котором говорит автор согласен возникает чувство брезгливости и неинтересности, как заметили некоторые от такого гавнокода. Чем вероятно и пользуется автор, чисто из психологических настроений новичков.

    И это давно не секрет такие примочки — возьмите софт небезызвестной фирмы Рарус, там этого дерьма предостаточно и в более коварном виде)

    PS: не проект «красит» человека, а код) Обезьяны то-же палку в руках держат, о двух концах;-)

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

    Reply
  55. qwinter

    (53) ZOMI, ну расскажите какое тиражное решение Вы разрабатывали изначально как тиражное?))

    Reply
  56. vandalsvq

    (53), в самом начале я говорил — это перевод. Ну, а если есть претензии лично ко мне, то кто я — это в профиле. Мои разработки — там же. Их качество — пусть судит общественность.

    Пы.сы. собственно сам автор исходной статьи — Роуди Гринн, чем он может быть известен? Да боюсь ничем, ибо даже в цитатах на данную статью редко вспоминают кто ее написал и где ее исходники. Да и что-то мне подсказывает что не важно это, ибо она для всего мира программирования пригодна. ))))))))

    Reply
  57. (56) не го-же новичков учить плохому))

    Да то-же думаю неважно кто написал — если она имеет такой отклик, значит кем-то востребована и имеет общую тенденцию мышления многих в этом вопросе. Хотя сам наверное знаешь насколько нынче ценят нашего брата;-) От туда и ноги растут у этой статьи.

    Хотя я думаю иначе, прогер если сам ценит себя и так найдет работу где угодно.

    Reply
  58. adapter

    нам нужно больше говнокода!

    А то какой ты нафиг, танкист, программист, если в модуле документа на 50 страниц разобраться не можешь пока клиент ждет 🙂

    Reply
  59. (58) adapter, не знаю…до сих-пор не осилил «Унесенные ветром», как только начинаю так сразу засыпаю, такое чтиво нужно только на ночь, для хорошего сна)) Ибо только такая смертная скука способствует хорошему сну))

    Меня удивляет другое, как писатели такого не заснут вечным сном сами блин)

    Reply
  60. mxs89

    Глупость

    Reply
  61. vap_pig

    Это удобно только если у человека явно проблемы с трудоустройством из-за квалификации, что заставляет держаться за одну должность, а также если его начальство безобразно тупое. В противном случае сработает против программиста по следующим причинам:

    1) самому сложно работать с таким кодом — будут ошибки, потеря времени и сил;

    2) если вдруг сам надумает уволиться на повышение — будут постоянно доставать с прошлой работы;

    3) если начальство возьмется за ум, либо придется работать с другими программистами в команде — рискует быть уволенным с треском.

    PS: Сам в свое время работал над «творениями» подобного товарища. Его боялись уволить, но сильно хотели, т.к. он сильно всех достал. Не только качеством кода, но и поведением. Меня пригласили проанализировать его код и оценить, смогу ли я с ним работать. После недельного анализа сказал, что смогу. После этого товарищ был выгнан с треском и занесен в черные списки всех знакомых. Код после него, конечно, переписывался долго, но ничего фатального не случилось.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *