Каков худший язык программирования, с которым Вы когда-нибудь работали? [закрытый]

Может ли быть так, что в MS SQL неявные транзакции запускаются при выполнении операторов DDL и DML. Если вы отключите эту опцию, это поможет, используйте SET IMPLICIT_TRANSACTIONS

РЕДАКТИРОВАТЬ: другая возможность - вы не можете комбинировать CREATE VIEW с другими операторами в том же пакете. CREATE TABLE в порядке. Вы разделяете партии с помощью GO.

EDIT2: вы МОЖЕТЕ использовать несколько DDL в транзакции, если они разделены GO для создания разных пакетов.

44
задан 59 revs, 13 users 69% 23 May 2017 в 12:10
поделиться

100 ответов

PHP (в произвольном порядке)

  • Несогласованные имена функций и порядок аргументов
    • Поскольку существует множество функций, каждая из которых, кажется, использует различное соглашение об именах и порядок аргументов . «Давайте посмотрим ... это foo_bar, foobar или fooBar ... и это иголка, стог сена или стог сена, иголка ?» Строковые функции PHP являются прекрасным примером этого. Половина из них использует str_foo , а другая половина - strfoo .
  • Символы нестандартного формата даты
    • Возьмем, например, j
      • В UNIX (что, кстати, является тем, что все остальные используют как руководство для форматов строк даты) % j возвращает день года с ведущими нулями.
      • В PHP date функция j возвращает день месяца без начальных нулей.
  • По-прежнему не поддерживается Apache 2.0 MPM
    • Не рекомендуется.
    • Почему это не поддерживается? «Когда вы усложняете базовый фреймворк, не имея полностью отдельных потоков выполнения, полностью отдельных сегментов памяти и надежной песочницы для каждого запроса, в систему PHP вводятся ноги глины». Ссылка Итак ... он не поддерживается, потому что это усложняет задачу? Потому что делать стоит только то, что легко? (По честному, как указал Эмиль Х , это обычно связано с тем, что плохие сторонние библиотеки не являются потокобезопасными, тогда как ядро ​​PHP является.)
  • Нет встроенной поддержки Unicode
    • Встроенная поддержка Unicode не поддерживается. запланировано на PHP6
    • Я уверен, что мы не жили в глобальной среде, где нам, возможно, приходилось разговаривать с людьми на других языках в прошлом, ох 18 лет . Подождите. (Честно говоря, тот факт, что все не использует Unicode в наши дни, меня действительно раздражает. Я хочу сказать, что мне не нужно делать дополнительную работу, чтобы сделать Unicode. Это не ' t только проблема PHP.)

У меня есть другие проблемы с языком. Это только некоторые. )

  • Нет встроенной поддержки Unicode
    • Встроенная поддержка Unicode намечена для PHP6
    • Я уверен, что мы не жили в глобальной среде, где нам, возможно, пришлось бы говорить с людьми на других языках для Прошло, ох 18 лет . Подождите. (Честно говоря, тот факт, что все не использует Unicode в наши дни, меня действительно раздражает. Я хочу сказать, что мне не нужно делать дополнительную работу, чтобы сделать Unicode. Это не ' t только проблема PHP.)
  • У меня есть другие проблемы с языком. Это только некоторые. )

  • Нет встроенной поддержки Unicode
    • Встроенная поддержка Unicode намечена для PHP6
    • Я уверен, что мы не жили в глобальной среде, где нам, возможно, пришлось бы говорить с людьми на других языках для Прошло, ох 18 лет . Подождите. (Честно говоря, тот факт, что все не использует Unicode в наши дни, меня действительно раздражает. Я хочу сказать, что мне не нужно делать дополнительную работу, чтобы сделать Unicode. Это не ' t только проблема PHP.)
  • У меня есть другие проблемы с языком. Это только некоторые. Подождите. (Честно говоря, тот факт, что все не использует Unicode в наши дни, меня действительно раздражает. Я хочу сказать, что мне не нужно делать дополнительную работу, чтобы сделать Unicode. Это не ' t только проблема PHP.)

    У меня есть другие проблемы с языком. Это только некоторые. Подождите. (Честно говоря, тот факт, что все не использует Unicode в наши дни, меня действительно раздражает. Я хочу сказать, что мне не нужно делать дополнительную работу, чтобы сделать Unicode. Это не ' t только проблема PHP.)

    У меня есть другие проблемы с языком. Это только некоторые. У Джеффа Этвуда есть старый пост о том, почему PHP - отстой. Он также говорит, что это не имеет значения. Я не согласен, но это так.

    212
    ответ дан 26 November 2019 в 21:32
    поделиться
    HAI
    CAN HAS STDIO?
    VISIBLE "HAI WORLD!"
    KTHXBYE
    

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

    19
    ответ дан 26 November 2019 в 21:32
    поделиться

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

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

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

    20
    ответ дан 26 November 2019 в 21:32
    поделиться

    Вот ответ на мой собственный вопрос:

    Origin LabTalk

    Мой самый любимый в этом отношении - Origin LabTalk . В LabTalk максимальная длина идентификатора строковой переменной составляет один символ. То есть всего 26 строковых переменных. Хуже того, некоторые из них использует сама Origin, и неясно, какие именно.

    Из руководства:

    LabTalk использует нотацию% для определения строковая переменная. Правовая строка имя переменной должно быть символом% за которым следует один буквенный символ (буква от А до Я). Имена строковых переменных: без учета регистра. Из всех 26 струн существующие переменные, сам Origin использует 14.

    Двери DXL

    Для меня вторым худшим, на мой взгляд, является Двери DXL . Языки программирования можно разделить на две группы: Те, с ручным управлением памятью (например, удаление, освобождение) и те, у которых есть сборщик мусора. Некоторые языки предлагают и то, и другое, но DXL, вероятно, единственный язык в мире, который не поддерживает ни того, ни другого. Хорошо, если честно, это верно только для строк, но эй, струны не совсем наиболее редко используемый тип данных в программном обеспечении для разработки требований.

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

    В DXL есть множество других причуд, и это лишь некоторые из них:

    22
    ответ дан 26 November 2019 в 21:32
    поделиться

    Язык сценариев .bat файлов для DOS / Windows. Одному Богу известно, насколько он маломощен, особенно если сравнивать его с языками оболочки Unix (которые тоже не так мощны, но тем не менее намного лучше).

    Просто попробуйте объединить две строки или создать цикл for . Нет.

    23
    ответ дан 26 November 2019 в 21:32
    поделиться

    Худший язык? BancStar, руки вниз.

    3000 предопределенных переменных, все пронумерованы, все глобальные. Без объявления переменных, без инициализации. Половина из них, разбросанная по дальности, зарезервирована для системного использования, но вы можете использовать их на свой страх и риск. Сотня или около того автоматически заполняются в результате различных операций, и нет списка, какие именно. Все они умещаются в 38 Кбайт, и никакой защиты от переполнения буфера нет. Система с радостью позволит пользователям помещать 20 байтов в десятибайтовое поле, если вы неправильно указали длину поля ввода. Эффекты, мягко говоря, непредсказуемы.

    Это язык, который позволит вам объявлять вычисляемый gosub или goto; из-за его ограничений это часто необходимо. Условные выражения можно объявлять вперед или назад. Представьте себе «Если» оператор, который завершает 20 строк перед началом.

    Стек возврата очень мелкий (20 Gosub или около того), и поскольку нажатие пользователем любой функциональной клавиши запускает другую подпрограмму, вы можете легко переполнить стек. Разработчики вдумчиво включили команду «Очистить Gosubs», чтобы полностью уничтожить стек, чтобы решить эту проблему и убедиться, что вы никогда не узнаете точно, что программа будет делать дальше.

    Есть гораздо больше. Десятки тысяч строк этого лавкрафтовского ужаса.

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

    Есть гораздо больше. Десятки тысяч строк этого лавкрафтовского ужаса.

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

    Есть гораздо больше. Десятки тысяч строк этого лавкрафтовского ужаса.

    28
    ответ дан 26 November 2019 в 21:32
    поделиться

    Objective-C.

    Аннотации сбивают с толку, использование скобок для вызова методов по-прежнему не вычисляет в моем мозгу, и что еще хуже, все библиотечные функции из C вызываются с использованием стандартных операторов в C, -> и., и похоже, что единственной компанией, которая продвигает этот язык, является Apple.

    I признаться, я использовал этот язык только при программировании для iPhone (и изучал программирование для OS X), но мне кажется, что C ++ просто разветвлен,добавление аннотаций и принудительное разделение файлов реализации и заголовочных файлов имело бы гораздо больший смысл.

    29
    ответ дан 26 November 2019 в 21:32
    поделиться

    VSE, Visual Software Environment.

    Это язык, который мой профессор ( доктор Генри Ледгард ) пытался продать мы вернулись в бакалавриат / аспирантуру. (Я не чувствую себя плохо, называя его имя, потому что, насколько я могу судить, он по-прежнему является большим сторонником и был бы рад возможности убедить некоторых людей, что это лучшее, что было после нарезанного хлеба). Когда я описываю его людям, моя лучшая аналогия состоит в том, что это своего рода незаконнорожденный ребенок FORTRAN и COBOL, с добавлением некоторых дополнительных недостатков. Из единственной действительно доступной папки , которую я нашел с этим материалом (там там много всего, на что я не буду ссылаться конкретно):

    ВСЕ построено на том, что они называют «Принципом разделения». Идея состоит в том, что данные и поведение должны быть полностью разделены. Представьте себе требование C о том, что все переменные / данные должны быть объявлены в начале функции, за исключением того, что теперь переместите это объявление в отдельный файл, который могут использовать и другие функции. Когда его используют другие функции, они используют те же данные, а не локальную копию данных с тем же макетом.

    Почему все происходит именно так? Мы узнаем из The Software Survivors , что правила области действия переменных жесткие. Я бы добавил цитату, но, как и большинство дураков, этим парням требуется вечность, чтобы что-то сказать. Поищите в этом PDF-файле «Quagmire Of Scope», и вы откроете для себя настоящее просветление.

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

    Еще одна часто встречающаяся тема:

     ПРИЛОЖЕНИЕ ДНЕЙ НА 7 (или ДНЕЙ СЧЕТЧИКА = ДНЕЙ + 7)
    ОБЩАЯ УБЫТКА ПО УБЫТКЕ ПО GROUND_LOSS
    ДОБАВИТЬ 100,3 К ОБЩЕМУ УБЫТКУ (LINK_POINTER)
    УСТАНОВИТЬ СОСТОЯНИЕ САМОЛЕТА ON_THE_GROUND
    ПРОЦЕНТ ЗАНЯТО = (ВСЕГО ЗАНЯТЫХ ЗВОНКОВ * 100) / ВСЕГО ЗВОНКОВ
    

    Хотя и не потрясающий, стиль арифметики отражает обычное использование, т.е. любой может прочитать и понять это - не зная программирования язык. Фактически, арифметика VisiSoft практически идентичен ФОРТРАНУ, включая встроенную сложную арифметику. Это заставляет программистов их профессиональный статус и соответствующая гарантия занятости легкость.

    Мммм, на самом деле это совсем не беспокоит. Один из ключевых аргументов, который Билл Кейв использует, пытаясь продать VSE, - это демократизация программирования, так что деловым людям не нужно поручать себя программистам, которые используют сумасшедшие, загадочные инструменты с единственной целью - обеспечить безопасность работы. Он использует этот иррациональный страх, чтобы продать свой инструмент. (И это работает - федеральное правительство - его крупнейший клиент). Я насчитал в документе 17 случаев употребления слова «гарантия занятости». Примеры:

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

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


    Несколько дополнительных цитат из обзорной документации:

    Еще одно следствие этот подход

    Он использует эту паранойю, чтобы вбить клин между менеджерами, владеющими кошельками, и техническими специалистами, которые обладают знаниями, чтобы распознать VSE на самом деле. Вот как он втискивает это в компании: «Ваши технические специалисты говорят, что это отстой, потому что боятся, что это сделает их устаревшими!»


    Несколько дополнительных цитат из обзорной документации:

    Еще одно следствие этот подход

    Он использует эту паранойю, чтобы вбить клин между менеджерами, владеющими кошельками, и техническими специалистами, которые обладают знаниями, чтобы распознать VSE на самом деле. Вот как он втискивает это в компании: «Ваши технические специалисты говорят, что это отстой, потому что боятся, что это сделает их устаревшими!»


    Несколько дополнительных цитат из обзорной документации:

    Еще одно следствие этот подход в том, что данные отображаются в памяти на тему «Что видишь, то и получаешь» base , и поддерживается повсюду. Это позволяет пользователям перемещать полный структура как строка символов в шаблон, описывающий каждый индивидуальное поле. Несколько шаблонов можно переопределить для данного хранилища площадь. В отличие от C и других языков, каркасы можно перемещать без проблем смещения из-за стандарты выравнивания границ слов.

    Я не знаю, как вы, но я знаю, что подход WYSIWYG к разметке памяти является верхним моим приоритетным списком, когда дело доходит до выбора языка! По сути, они игнорируют вопросы выравнивания, потому что только старые языки, которые были разработаны в 60-х и 70-х годах, заботятся о выравнивании слов. Или что-то вроде того. Аргументация ложная. Для меня это было так мало смысла, что я почти сразу забыл об этом.

    В VSE нет пользовательских типов. Это далеко идущий решение, которое значительно упрощает язык. Выгода от практического точка зрения тоже отличная. ВСЕ позволяет дизайнеру и программисту организовать программу по тому же линии как физическая система смоделирован. VSE позволяет структурам быть построен в удобном для чтения, логическом иерархия атрибутов.

    Замечательно! Типы, определяемые пользователем, хромают. Зачем мне что-то вроде объекта InputMessage , когда у меня может быть:

    LINKS_IN_USE INTEGER
    INPUT_MESSAGE
       1 ORIGIN             INTEGER
       1 DESTINATION        INTEGER
       1 MESSAGE
          2 MESSAGE_HEADER  CHAR 10
          2 MESSAGE_BODY    CHAR 24
          2 MESSAGE_TRAILER CHAR 10
       1 ARRIVAL_TIME       INTEGER
       1 DURATION           INTEGER
       1 TYPE               CHAR 5
    
    OUTPUT_MESSAGE CHARACTER 50
    

    Вы можете посмотреть на это и подумать: «О, это довольно хорошо отформатировано, если немного по-старому». Старая школа права. Пробелы значительны - очень значительны. И лишний! 1 должны быть в столбце 3. 1 указывает, что он находится на первом уровне иерархии. Имя символа должно быть в столбце 5. Глубина вашей иерархии ограничена 9.

    Хорошо, хорошо, но разве это так ужасно? Подождите:

    Хорошо известно, что для чтения текст, использование обычного верхнего / нижнего случай более читабельный. VSE использует все верхний регистр (кроме комментариев). Зачем? Литература по психологии основана на по прозе. Программы просто не являются проза. Программы больше похожи на математику, бухгалтерия, таблицы. Программные шрифты (обычно Курьер) почти универсальный фиксированный шаг, и навсегда причина - вертикальное выравнивание среди связанные строки кода. Программы в верхний регистр хорошо читается, и, через время намного лучше в нашем мнение

    Нет ничего лучше, чем навязывать свое мнение на языковом уровне! Правильно, вы не можете использовать строчные буквы в VSE, если это не указано в комментариях. Просто держите CAPSLOCK включенным, он застрянет там на некоторое время.

    Подпроцедуры VSE называются процессами. Этот пример кода содержит три процесса:

    PROCESS_MUSIC
        EXECUTE INITIALIZE_THE_SCENE
        EXECUTE PROCESS_PANEL_WIDGET
    
    INITIALIZE_THE_SCENE
        SET TEST_BUTTON PANEL_BUTTON_STATUS TO ON
        MOVE ' ' TO TEST_INPUT PANEL_INPUT_TEXT
        DISPLAY PANEL PANEL_MUSIC
    
    PROCESS_PANEL_WIDGET
        ACCEPT PANEL PANEL_MUSIC
    
    *** CHECK FOR BUTTON CLICK
        IF RTG_PANEL_WIDGET_NAME IS EQUAL TO 'TEST_BUTTON'
           MOVE 'I LIKE THE BEATLES!' TO TEST_INPUT PANEL_INPUT_TEXT.
        DISPLAY PANEL PANEL_MUSIC
    

    Все заглавные буквы, как ожидалось. В конце концов, это легче читать. Обратите внимание на пробелы. Это снова важно. Все имена процессов должны начинаться в столбце 0. Начальный уровень инструкций должен начинаться в столбце 4. Более глубокие уровни должны иметь отступ ровно 3 пробела. Однако это не имеет большого значения, потому что вам не разрешено делать такие вещи, как условные выражения вложенности. Вы хотите вложенное условие? Ну просто сделай еще один процесс и назови его. И обратите внимание на восхитительный синтаксис в стиле COBOL!

    Хотите петли? Легко:

    23
    ответ дан 26 November 2019 в 21:32
    поделиться

    PROGRESS 4GL (очевидно, теперь известный как « OpenEdge Advanced Business Language »).

    PROGRESS - это и язык, и система баз данных. Весь язык разработан, чтобы упростить создание дрянных экранов ввода данных с зеленым экраном. (Итак, начните с представления, насколько хорошо это переводится в Windows.) Что-нибудь более интересное, будь то красивые экраны, логика программы или пакетная обработка ... не так много.

    В последний раз я использовал версию 7, еще в конце 90-х. , поэтому весьма вероятно, что некоторые из них устарели, но я бы не стал на это ставить.

    • Изначально он был разработан для экранов ввода данных в текстовом режиме, поэтому в Windows все координаты экрана находятся в «символьные» единицы, которые представляют собой какое-то странное количество пикселей в ширину и разное количество пикселей в высоту. Но, конечно, по умолчанию используется пропорциональный шрифт , поэтому количество «символьных единиц» не соответствует фактическому количеству символов , которые умещаются в данном пространстве.
    • ] Нет классов или объектов.
    • Нет языковой поддержки для массивов или динамического распределения памяти. Если вам нужно что-то похожее на массив, вы создаете временную таблицу базы данных в памяти, определяете ее схему, а затем устанавливаете на нее курсор. (Я видел небольшой код из более поздней версии, где они фактически построили и поставили примитивную объектно-ориентированную систему поверх этих таблиц в памяти. Страшно.)
    • Доступ к базе данных ISAM встроен. (Но не SQL .Кому это нужно?) Если вы хотите увеличить поле Counter в текущей записи в таблице State , вы просто скажете State.Counter = State. Счетчик + 1 . Что не так уж и плохо, кроме ...
    • Когда вы используете таблицу непосредственно в коде, а затем за кулисами, они создают нечто похожее на невидимую магическую локальную переменную, чтобы удерживать текущую позицию курсора в этой таблице. Они предполагают , в каком содержащем блоке будет находиться этот курсор. Если вы не будете осторожны, ваш курсор исчезнет, ​​когда вы выйдете из блока, и сбросит себя позже, без предупреждения. Или вы начнете работать с таблицей и обнаружите, что не начинаете с первой записи, потому что вы повторно используете курсор из какого-то другого блока (или даже своего собственного, потому что ваша область действия была расширена, когда вы не ожидали it).
    • Транзакции работают с этими предположениями. Мы уже развлекаемся?
    • Все можно сократить. Для некоторых оскорбительно длинных ключевых слов Сначала это может показаться не так уж и плохо. Но если у вас есть переменная с именем Index , вы можете ссылаться на нее как на Index или как Ind или даже как на I . (Опечатки могут дать очень интересные результаты.) И если вы хотите получить доступ к полю базы данных, вы можете не только сократить имя поля, но вам даже не нужно уточнять его именем таблицы; они тоже угадывают стол. Для действительно пугающих результатов объедините это с:
    • Если не указано иное, они предполагают, что все является доступом к базе данных. Если вы обращаетесь к переменной, которую еще не объявили (или, что более вероятно, если вы ошиблись при вводе имени переменной), ошибки компилятора нет: вместо этого он ищет поле базы данных с этим именем ... или поле, которое сокращает к этому имени.

    Угадай хуже. Между сокращениями и полем по умолчанию вы можете получить неприятные вещи, если не будете осторожны. (Забыли объявить I как локальную переменную, прежде чем использовать ее в качестве переменной цикла? Нет проблем, мы просто случайным образом выберем таблицу, возьмем ее текущую запись и полностью удалим произвольно выбранное поле с именем начинается с I !)

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

    У них также есть система отчетов, встроенная в язык, но я, очевидно, подавил все воспоминания о ней.

    Когда я получил другую работу, работая с Netscape LiveWire (злополучная попытка на стороне сервера JavaScript) и классический ASP (VBScript),

    28
    ответ дан 26 November 2019 в 21:32
    поделиться

    Я еще не работал со многими языками и имею дело в основном с языками сценариев; из этих VBScript мне нравится меньше всего. Хотя в нем есть несколько удобных функций, некоторые вещи меня действительно бесят:

    • Назначение объектов выполняется с помощью ключевого слова Set :

       Set foo = Nothing
      

      Отсутствие Set - одна из наиболее частых причин ошибок времени выполнения.

    • Нет такой вещи, как структурированная обработка исключений. Проверка ошибок выглядит так:

       При ошибке Продолжить Далее
      
      ' Сделай что-нибудь
      
      Если Err.Number <> 0
       'Ошибка обработки
       Err.Clear
      Конец, если
      
      ' И так далее
      
    • Заключение параметров вызова процедуры в круглые скобки требует использования ключевого слова Call :

       Call Foo (a, b)
      
    • Его английский синтаксис слишком многословен. (Я поклонник фигурных скобок.)

    • Логические операторы являются длинноцепными. Если вам нужно протестировать составное условие, в котором последующее условие зависит от успеха предыдущего, вам нужно поместить условия в отдельные операторы If .

    • Отсутствие параметризованных конструкторов классов.

    • Чтобы заключить оператор в несколько строк, вы должны использовать знак подчеркивания:

       str = "Hello," & _
       "Мир!"
      
    • Отсутствие многострочных комментариев.


    Правка: нашел эту статью: Flangy Guide to Hating VBScript . Автор резюмирует свои жалобы так: «VBS - это не Python» :)

    34
    ответ дан 26 November 2019 в 21:32
    поделиться

    MUMPS

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

    Это было ужасно. Ужасный! УЖАСНО !!!

    38
    ответ дан 26 November 2019 в 21:32
    поделиться

    Я бы выбрал БЕЙСИК старой школы с номерами строк. Когда у вас не было пробелов между номерами строк для добавления новых строк, вам приходилось запускать утилиту перенумерации, из-за которой вы теряли все ментальные привязки, которые у вас были к тому, что было где.

    В результате вы втиснули слишком много в одной строке (разделенных двоеточиями), или вы выполнили команду goto или gosub где-то еще, чтобы выполнить работу, которую вы не могли втиснуть.

    40
    ответ дан 26 November 2019 в 21:32
    поделиться

    Нет ответа по поводу Кобола? : O

    40
    ответ дан 26 November 2019 в 21:32
    поделиться

    MS Access Visual Basic для приложений (VBA) также был довольно плохим. Доступ в целом был плохим в том смысле, что он вынудил вас отказаться от слабой парадигмы и был обманчиво простым для начала, но кошмаром до конца.

    43
    ответ дан 26 November 2019 в 21:32
    поделиться

    Серьезно: Perl. Это просто заноза в заднице - писать код для новичков и даже для полупрофессионалов, которые ежедневно работают с Perl. Я постоянно вижу, как мои коллеги борются с языком, создавая худшие сценарии, например, 2000 строк, без учета каких-либо общепринятых стандартов кодирования. Это худший беспорядок, который я когда-либо видел в программировании. Вы всегда можете сказать, что эти люди плохо умеют кодировать (несмотря на то, что некоторые из них уже много лет используют Perl), но язык просто поощряет все это дерьмо, которое заставляет меня кричать, когда я прочитать сценарий другого парня.

    68
    ответ дан 26 November 2019 в 21:32
    поделиться

    Что ж, раз этот вопрос отказывается умирать и поскольку ОП подтолкнул меня к ответу ...

    Я смиренно предлагаю на ваше рассмотрение Authorware (AW) в качестве худший язык, который только можно создать. (nb, я собираюсь вспомнить здесь, прошло ~ 6 лет с тех пор, как я использовал AW, что, конечно, означает, что есть ряд ужасных вещей, которые я даже не могу вспомнить)

    ужас, ужас http: //img.brothersoft.com/screenshots/softimage/a/adobe_authorware-67096-1.jpeg

    Начнем с того факта, что это продукт Macromedia (-10 баллов), проприетарный язык (-50 больше), в первую очередь предназначенный для создания программного обеспечения для электронного обучения и, более того, программного обеспечения, которое может быть создано непрограммистами, так и программистами реализовано как язык икон И текст language (-100).

    Теперь, если это последнее утверждение вас не испугало, значит, вам не приходилось раньше исправлять код, сгенерированный WYSIWYG (привет, разработчики Dreamweaver и Frontpage!), но главное здесь то, что у AW была библиотека около 12 элементов, которые можно перетащить в поток. Как элементы «Страница», Анимация, IFELSE и GOTO (-100). Конечно, удаление объектов из потока создало любое количество разорванных соединений и артефактов, с которыми IDE могла справляться с переменным уровнем успеха. Естественно, основным источником их были встроенные мастера (-10).

    К счастью, вы всегда могли войти в представление кода, и в конечном итоге вам пришлось бы это сделать, потому что с ограниченным набором иконических элементов иначе некоторые вещи были бы невозможны. Сам язык был основан на TUTOR (-50) - кандидате на худший язык, если бы только у него были амбиции и возможности для достижения тех глубин, к которым стремился AW, - о чем в Википедии говорится:

    . .. язык НАУЧНИКА было непросто учиться. На самом деле даже предлагалось что несколько лет опыта работы с язык потребуется перед программисты могут создавать стоящие программы

    Отличный фундамент, который был построен за годы до появления Интернета. Абсолютно без формы структуры данных за пределами массива (-100), конечно без сахара (настоящие мужчины не используют операторы переключения?) (-10), и большой всплеск синтаксический уксус ("-" был индикатором комментария, поэтому вам не нужен оператор декремента!) (-10). Справочная документация по языку была предоставлена ​​в бумажном формате или в формате zip-файла (-100), но, по крайней мере, у вас была поддержка группы разработчиков и вы могли быстро найти решение вашей проблемы, заключающееся в использовании DLL или SWF. импорт функций AW, чтобы вы могли выполнять кодирование на реальном языке.

    AW управляется потоком (с необходимыми командами PAUSE) и, следовательно, имеет все сопутствующие проблемы линейной, а не основанной на событиях системы (-50), и, несмотря на откровенную маркетинговую ложь документации он был и не объектно-ориентированным (-50). Все повторное использование кода было выполнено с помощью GOTO. Нет области видимости, много глобальных объектов (-50).

    Это не ошибка языка напрямую, но очевидно невозможна интеграция системы управления версиями , и уж тем более TDD, генерация документации или любые другие дополнения инструмента вы могли бы.

    конечно Macromedia встретил вызов интернет головы на с упорным нежеланием заниматься в течение многих лет, в конце концов его получением глючит, трудно использовать, кошмар безопасности, который представляет собой Shockwave (-100) для сериализации настольных версий программного обеспечения посредством необходимого плагина (-10). По мере роста HTML и AW стагнировал, по-прежнему сохраняя свою ударно-волновую доставку даже вопреки стандартам IEEE SCORM javascript .

    В конце концов, после многих лет просьб и обещаний Macromedia анонсировала радикально новую версию AW в разработке для решения этих проблем, а через несколько лет прекратил разработку, а затем закрыл проект. Хотя, конечно, Macromedia все еще продает его (ЗЛОЙ БОНУС -500).

    Если еще нужно сказать, это язык, который позволяет использовать пробелы в именах переменных (- 10000).

    Если вы когда-нибудь захотите испытать настоящую боль, попробуйте почитать кого-нибудь другого » С поправкой на личный опыт: OutOfRangeException

    (извиняюсь за объем, но это было слабительное)

    74
    ответ дан 26 November 2019 в 21:32
    поделиться

    Не уверен, что это настоящий язык, но я ненавижу Make-файлы.

    Make-файлы имеют значимые различия между пробелом и TAB, поэтому даже если две строки кажутся идентичными, они не работают одинаково.

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

    Система Makefile обычно распространяется на множество файлов, на множество файлов. каталоги. Практически без определения области видимости или абстракции изменение файла make, расположенного в нескольких каталогах, может помешать сборке моего исходного кода. Тем не менее, сообщение об ошибке неизменно является ошибкой комплимента, а не значимой ошибкой в ​​make или make-файлах.

    В любой среде, в которой я работал, которая успешно использует make-файлы, есть постоянный эксперт по Make. И все это для того, чтобы сократить время компиляции на несколько минут ??

    92
    ответ дан 26 November 2019 в 21:32
    поделиться

    Пакетные файлы DOS. Не уверен, что это вообще можно считать языком программирования. Дело не в том, что вы не можете решить свои проблемы, но если вы привыкли bash ...

    Только мои два цента.

    96
    ответ дан 26 November 2019 в 21:32
    поделиться

    Худший язык, который я когда-либо видел, исходит от инструмента praat, который является хорошим инструментом анализа звука. Пока вы не используете язык сценариев, он работает неплохо. вздох плохие воспоминания.

    Небольшой учебник по скрипту praat для начинающих

  • Вызов функции

    Мы перечислили как минимум 3 разных синтаксиса вызова функций:
    • Обычный

      string = selected ("Strings")

      Здесь ничего особенного, вы присваиваете переменной string результат выбранной функции. Не совсем страшно ... пока.

    • «Я вызываю какую-то команду графического интерфейса с параметрами»

      Создать строки как список файлов ... liste 'path $' / 'type $'

      Как вы можете видите, имя функции начинается с «Create» и заканчивается «...». Команда «Создать строки как список файлов» - это текст, отображаемый на кнопке или в меню (боюсь проверить) на praat. Эта команда принимает список двух параметров и выражение. Я собираюсь изучить выражение 'path $' / 'type $'

      Hmm. Ага. Без пробелов. Если бы были введены пробелы, это были бы отдельные аргументы. Как вы понимаете, скобки не работают. В этом месте описания я хотел бы указать на суффикс имен переменных. Я не буду развивать его в этом абзаце, я просто дразню.

    • «О, но я хочу получить результат команды GUI в моей переменной»

      noliftt = Получить количество строк
      Да, мы можем увидеть здесь шаблон, длинное и странное имя функции, это должен быть вызов графического интерфейса. Но нет "...", значит, нет параметров. Я не хочу видеть, как выглядит парсер. Но нет "...", значит, нет параметров. Я не хочу видеть, как выглядит парсер. Но нет "...", значит, нет параметров. Я не хочу видеть, как выглядит парсер.
  • Невероятная система типов

    (AKA Haskell и OCaml, praat идет к вам)
    • Простые типы аборигенов

      windowname $ = left $ (line $, length (line $) - 4)

      Итак, что там происходит? Пришло время взглянуть на соглашения и типы выражений, поэтому мы получили:

      • left $ :: (String, Int) -> String
      • lenght :: (String) -> Int
      • windowname $ :: String
      • line $ :: String
      Как вы можете видеть , имена переменных и функций имеют суффикс с указанием их типа или возвращаемого типа. Если их суффикс - «$», то он возвращает строку или является строкой. Если ничего нет, это число. Я вижу смысл в добавлении префикса типа к переменной, чтобы упростить реализацию, но суффикс, извините, я не могу
  • Тип массива

    Чтобы показать тип массива, позвольте мне ввести «крошечный» цикл:
    
      для i от 1 до 4
     Выберите ... время время
     bandwidth'i '$ = Получить пропускную способность ... i
     forhertz'i '$ = Получить formant ... i
     конец
    

    У нас есть i - число и ... (нет, это не функция)
    bandwidth'i '$
    Он создает строковые переменные: bandwidth1 $ , bandwidth2 $ , bandwidth3 $ , bandwidth4 $ и присвойте им значения. Как и следовало ожидать, вы не можете создать двумерный массив таким образом, вы должны сделать что-то вроде этого: band2D __ 'i' __ 'j' $

    http://img214.imageshack.us/img214/3008/scaredkittylolqa2.jpg
  • Вызов специальной строки

    outline $ = "'time' @ F'i ':' forhertznum'Hz, 'bandnum'Hz,' spec''newline $ '" контур $ >> 'Outfile $'

    Строки (по крайней мере) странным образом обрабатываются в языке. "" используется для вызова значения переменной внутри глобальной строки "". Это странно . Это противоречит всем соглашениям, встроенным во многие языки, от bash до PHP, передаваемых через powershell. И посмотрите, у него даже есть перенаправление. Не дайте себя обмануть, это не работает как в вашей любимой оболочке. Нет, вам нужно получить значение переменной с помощью ''

  • Da Wonderderfulful Execution Model

    Я собираюсь добавить последний штрих к этой замечательной презентации, поговорив с вами о модели исполнения. Как и во всех процедурных языках, инструкции выполняются сверху вниз, здесь есть переменные и графический интерфейс пользователя praat. То есть вы кодируете все в praat gui, вы вызываете команды, написанные в меню / кнопках.

    Главное окно praat содержит список элементов, которые могут быть:

    • files
    • список файлов (созданный функцией с чудесным длинным именем)
    • Spectrogramm
    • Строки (не спрашивайте)
    Итак, если вы хотите выполнить операцию с данным файлом , вы должны программно выбрать файл в списке, а затем нажимать разные кнопки, чтобы выполнить некоторые действия. Если вы хотите передать параметры в действие с графическим интерфейсом пользователя, вы должны следовать макету графического интерфейса формы для ваших аргументов, например « To Spectrogram ... 0,005 5000 0,002 20 Gaussian "подобен этому, потому что он следует этой схеме:

    http://img7.imageshack.us/img7/5534/tospectrogramm.png

  • Излишне говорить, что мои кошмары наполнены сценариями праат, танцующими вокруг меня и кричащими «DEBUG MEEEE !!».

    Подробнее информация на сайте praat , в хорошо названном разделе "простой программируемый язык сценариев"

    79
    ответ дан 26 November 2019 в 21:32
    поделиться

    Я не уверен, что вы хотели включить языки сценариев, но я видел TCL (что тоже раздражает), но ... язык сценариев mIRC меня бесконечно раздражает.

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

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

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

    19
    ответ дан 26 November 2019 в 21:32
    поделиться

    Регулярные выражения

    Это язык только для записи, и трудно проверить, правильно ли он работает для правильных входных данных.

    18
    ответ дан 26 November 2019 в 21:32
    поделиться

    Visual Foxpro

    17
    ответ дан 26 November 2019 в 21:32
    поделиться

    Я не могу поверить, что никто не сказал этого:

    LotusScript

    Я думаю, что это намного хуже, чем php по крайней мере.

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

    I не помню ни одного конкретного примера, но они были примерно такими:

    «Хорошо, у меня есть событие, чтобы проверить, находится ли указатель мыши в верхнем углу формы, и у меня нет события двойного щелчка для формы! ! ?? WTF ?? "

    17
    ответ дан 26 November 2019 в 21:32
    поделиться

    TCL. Он компилирует код только непосредственно перед выполнением, поэтому возможно, что если ваш код никогда не спускался вниз по ветке A во время тестирования, и однажды в поле он переходит вниз по ветке A, он может иметь СИНТАКСИСНУЮ ОШИБКУ!

    16
    ответ дан 26 November 2019 в 21:32
    поделиться

    За более чем 25 лет компьютерного программирования, безусловно, худшее, что я когда-либо испытывал, - это производная от MUMPS под названием Meditech Magic. Это гораздо большее зло, чем может когда-либо быть PHP.

    Он даже не использует знак "=" для присваивания! 100 ^ b присваивает b значение 100 и читается как «100 переходит к b». По сути, этот язык придумал собственный синтаксис сверху вниз. Так что не важно, сколько языков программирования вы знаете, Magic будет для вас полной загадкой.

    Вот 100 бутылок пива на стене, написанные этой мерзостью языка:

    BEERv1.1,
    100^b,T("")^#,DO{b'<1 NN(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall")^#,
                              N(b,"bottle"_IF{b=1 " ";"s "}_"of beer!")^#,
                              N("You take one down, pass it around,")^#,b-1^b,
                              N(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall!")^#},
    END;
    
    16
    ответ дан 26 November 2019 в 21:32
    поделиться

    "Visual C ++" .... Так много устаревшего кода переплетено .... повсюду.

    Заставило меня полюбить Obj-C.

    Отсутствие простых в использовании собственных структур данных (таких как ассоциативные контейнеры / карты) и других причуд (таких как набор для назначения объектам) является ненужным и неприятным раздражением, особенно для языка сценариев. Сравните его с Javascript (который я сейчас использую для программирования окон wscript / cscript и выполнения сценариев автоматизации activex), который гораздо более выразителен. Хотя есть определенные вещи, которые лучше работают с vbscript (например, передача массивов туда и обратно из COM-объектов немного проще, хотя легче передавать обработчики событий в COM-компоненты с помощью jscript), я все же удивлен количеством кодеров, которые по-прежнему используют vbscript для скриптов в окнах - держу пари, если бы они написали одну и ту же программу на обоих языках, они бы обнаружили, что jscript работает с вами гораздо больше, чем vbscript, из-за собственных типов хеш-данных jscript и закрытий.
    17
    ответ дан 26 November 2019 в 21:32
    поделиться

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

    Одна только мысль об этом заставляет меня задушить кого-то. Или блевать. Или оба.

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

    17
    ответ дан 26 November 2019 в 21:32
    поделиться

    Холодный синтез

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

    21
    ответ дан 26 November 2019 в 21:32
    поделиться

    XSLT.

    • XSLT для начала сбивает с толку. Эта метафора полностью отличается от всего, что я знаю.
    • Эта вещь была разработана комитетом настолько глубоко в угловых скобках, что выглядит странным франкенштейном.
    • Странные заклинания, необходимые для определения выходного формата.
    • Встроенные невидимые правила.
    • Странные вещи, вроде скриптов.
    • Зависимость от XPath.
    • До недавнего времени поддержка инструментов была довольно ограниченной. Вначале отладка XSLT была упражнением в навигации в полной темноте. Инструменты меняют это, но XSLT по-прежнему возглавляет мой список.

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

    101
    ответ дан 26 November 2019 в 21:32
    поделиться

    There are just two kinds of languages: the ones everybody complains about and the ones nobody uses.

    Bjarne Stroustrup

    37
    ответ дан 26 November 2019 в 21:32
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: