Основные субоптимальные решения в истории программного обеспечения

Asked
Viewd1426

17

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

Иллюстрация (самая масштабная, которую я могу придумать): когда IBM разработала оригинальный ПК и решила сэкономить пару долларов на производственных затратах, выбрав полуммертвый 8088 с 8-битной адресуемой памятью вместо один из 16-битных вариантов (8086, 680n и т. д.), обрекающий нас на 20 лет вычислений смещения адреса.

(В ответ было начато много карьеры в разработке платформы unix.)

Где-то на другом конце шкалы лежит решение, которое кто-то принял, разместить на левом конце клавиатуры чудовищную клавишу Shift Lock вместо клавиши Ctrl.

34 ответов

1

Решение Netscape поддерживать Java в своем браузере.

  • Я сам сказал бы: «Решение Netscape ПЛОХО поддерживать Java в своем браузере».

    Paul Tomblin18 декабря 2008, 21:16
3

Думаю, что пароль - это изящный способ контроля доступа.

  • Зависит от того, что вы подразумеваете под словом "в то время". Это неоптимальное решение, которое принималось неоднократно. Кроме того, использование двух цифр для года, вероятно, в то время имело смысл (вместо удвоения требований к памяти).

    frankodwyer18 декабря 2008, 20:24
  • По сравнению с чем в то время? Перфокарты?

    Kev18 декабря 2008, 20:12
17

Microsoft решила использовать обратную косую черту вместо прямой в качестве разделителя пути. И не удалось виртуализировать букву диска.

  • Технически выбор обратной косой черты был ограничен их предыдущей ошибкой использования косой черты для указания параметров командной строки. Которые они скопировали как из операционных систем DEC, так и из CP / M.

    Darron18 декабря 2008, 19:34
30

Пол Аллен решает использовать символ / для параметров командной строки в MS DOS.

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

    Kev18 декабря 2008, 20:08
  • Не говоря уже обо всех dofusses (dofii?), которые задаются вопросом, почему ‘char * str = C: \ foo \ bar ”;’ не выполняет то, что они ожидают.

    Paul Tomblin18 декабря 2008, 21:43
  • Как насчет того, чтобы Пол Алан выбрал «» в качестве разделителя файлов. Помимо проблем с совместимостью, «» является символом alt-gr на большинстве европейских клавиатур.

    James Anderson08 января 2009, 10:06
  • Прошу прощения за мое незнание, но каковы негативные последствия этого решения?

    recursive18 декабря 2008, 19:48
  • Это привело к двусмысленности в командной строке, особенно после того, как программисты MS DOS начали разрешать «-» в качестве параметров командной строки. Это вынудило Microsoft использовать \ для разделителей путей, что конфликтует с Unix, URI, регулярными выражениями и XPath, что приводит к таким взломам, как @ ”C: ...” и Regex.Escape.

    Dour High Arch18 декабря 2008, 21:32
  • Однажды я оказывал техническую поддержку, и пользователи не могут отличить косую черту от обратной косой черты. Поскольку они имеют разное значение в разных ОС и командах, ввод команд - минное поле. Стало так плохо. Браузеры должны позволять и то, и другое; попробуйте http: \ stackoverflow.com.

    Dour High Arch18 декабря 2008, 21:33
4

Имена файлов DOS 8Dot3 и принятие Windows использования расширения файла для определения того, какое приложение запускать.

  • Имена файлов формата 8.3 были разумным инженерным решением во времена флоппи-дисководов (более универсальные имена значительно замедлили бы многие операции), а в системе с фиксированным форматом файлов 8.3 использование расширений для выбора приложений было разумным (хотявыбор .DOC для файлов Microsoft Word был глупым).Однако мне бы хотелось, чтобы пробел и подчеркивание считались синонимами при доступе с использованием подпрограмм с «длинными именами», а также средств прикрепления атрибутов к приложениям, документам и каталогам.

    supercat29 июня 2012, 15:40
2

7 бит для текста. А затем «исправляем» это с помощью кодовых страниц. Когда-нибудь проблемы с кодировкой меня убьют.

1

Решение Microsoft основать Window NT на DEC VMS вместо Unix.

  • I mean, how could they consciously decide to base Windows NT on VMS if they didn’t even decide to build Windows NT? After all, what Dave Cutler was hired to do, was to build a next-generation OS/2 for the N10 processor.

    Jörg W Mittag08 марта 2009, 01:00
  • Как в VMS, так и в NT есть много приятных вещей, которых не хватает в Unix. Конечно, верно и обратное. Кроме того, я не думаю, что они сознательно решили клонировать VMS. DEC уволила одного из самых блестящих разработчиков операционных систем, MS уволила его, так что, естественно, его решения повлияли на NT.

    Jörg W Mittag08 марта 2009, 00:56
4

Нулевые ссылки - ошибка на миллиард долларов .

0

Когда Atari создала и выпустила видеоигру E.T. Extra-Terrestrial в 1982 году и в итоге просто заполнили свалки игрой ...

 alt text
(источник: wikimedia.org )

  • Мне кажется, я помню, что в какой-то момент IBM сделала то же самое с PC Juniors.

    dkretz08 января 2009, 01:16
23

Конец карьеры Алана Тьюринга, когда ему было всего 42 года.

  • Давайте поблагодарим всех гомофобов за то, что они десятилетиями сдерживали информатику.

    Peter Recore14 июля 2010, 21:49
  • Ух ты, это была моя первая мысль, когда я тоже увидел вопрос.

    Crashworks13 февраля 2009, 10:34
6

Гэри Килдалл не заключает договор с IBM о лицензировании им CP / M 86, поэтому они не будут использовать MS-DOS.

6

Apple вытесняет Стива Джобса (впервые) во главе с чередой продавцов сладкой воды и скучных и скучных торговцев фасолью.

5

Использование 4 байта для time_t и временных меток интернет-протоколов.

Это нас еще не укусило - подождите еще немного.

  • Не волнуйтесь, до этого мы будем использовать 64-битные компьютеры. 64-битное значение time_t не переполнится, пока не погаснет солнце.

    Paul Tomblin18 декабря 2008, 21:25
  • Когда это будет, 2038 год или вроде того? Еще один подарок нашим внукам.

    Mike Dunlavey18 декабря 2008, 19:50
  • И летающие машины!

    О, вы закрыли тег. Мое плохо.

    Kendall Helmstetter Gelner08 января 2009, 00:54
  • 30-летняя ипотека достигла этого предела в этом году (2008).

    Darron18 декабря 2008, 19:32
5

EBCDIC, стандартный набор символов IBM для мэйнфреймов. Последовательность сопоставления была "безумной" (буквы алфавита не являются смежными).

  • Это действительно имеет смысл, если вы знакомы с тем, как вводились символы на перфокартах. Была своего рода логическая последовательность, которая просто не очевидна, если посмотреть на это с точки зрения плоских целых чисел.

    wrosecrans20 июля 2010, 07:39
0

Имея клавишу для Caps Lock вместо Shift Lock, по сути, это клавиша Caps Reverse, но с Shift Lock можно было бы контролировать.

-3

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

История Qwerty

4

Использование Lisp имен "CAR" и "CDR" вместо чего-то разумного для этих основных функций.

  • Я думаю, что Lisp мог бы быть более популярным и иметь большее влияние на другие языки программирования, если бы он не был таким «странным»

    Kristopher Johnson18 декабря 2008, 22:58
  • Содержимое регистра адреса и содержимое регистра декремента - две половины 36-битного слова на чем? PDP-6? CADDAR никогда меня не беспокоил. А новые языки постоянно «открывают» то, что было в Лиспе 40 лет назад. Но я понимаю вашу точку зрения…

    Mike Dunlavey19 декабря 2008, 03:09
  • Это имело серьезные последствия?

    David Thornley18 декабря 2008, 21:46
3

Использование qwerty-клавиатуры на компьютерах вместо dvorak.

  • Вся раскладка клавиатуры изначально была сделана так, чтобы все равно снизить продуктивность набора текста. Я думаю, что это большая ошибка, из-за которой был испорчен макет…

    CodingWithSpike19 декабря 2008, 02:57
  • Тогда возникает вопрос, почему бы не настроить раскладку клавиатуры для обеспечения максимальной производительности на компьютере. Не только клавиши символов, но и все клавиши!

    Stephane Grenier19 декабря 2008, 16:11
  • Не полнейшая чушь. Несколько процентных пунктов - это все еще несколько процентных пунктов, даже если они приложат все усилия, чтобы их исправить; и поскольку они не являются источником этого утверждения, я не уверен.

    Kev18 декабря 2008, 20:11
  • В этой статье также говорится только о скорости набора текста и даже не упоминаются расстройства, связанные с повторяющимися движениями. Каким образом наличие статистически наиболее часто используемых ключей в исходном ряду не может снизить вероятность образования запястного канала?

    Joel Mueller18 декабря 2008, 23:10
  • Абсолютная чушь: Прочтите это: http://www.reason.com/news/show/29944.html; Вы были обманутым другом.

    jcollum18 декабря 2008, 19:19
  • @ rally25rs: Искажение. Идея QWERTY заключается не в том, что она снижает производительность, а в том, что она сводит к минимуму вероятность того, что молоточки печатной машинки будут нажиматься в тесной последовательности. В результате руки и пальцы остаются в постоянном движении. Хорошо это или плохо…

    J.T. Hurley19 декабря 2008, 05:26
0

Термин "буфер трансляции в сторону" (который следует называть чем-то вроде кэша страниц или кэша адресов).

8

Решение о том, что HTML следует использовать для чего угодно, кроме разметки гипертекстовых документов.

2

Все разработчики языков, которые изменили свой синтаксис, когда единственной причиной было «просто отличаться». Я думаю о S и R, где комментарии начинаются с #, а _ - оператор присваивания.

  • Языки с комментариями, начинающимися с #, довольно распространены в мире Unix.

    Kristopher Johnson18 декабря 2008, 21:07
  • Я бы сказал, что настоящая проблема - это языки, которые выводят свой (ужасный) синтаксис из C, просто чтобы не отличаться.

    BlueRaja - Danny Pflughoeft16 июня 2010, 16:21
  • Что ж, остальной синтаксис S / R больше похож на C, поэтому я бы хотел, чтобы они придерживались этого. Я много работаю с межъязыковыми переводчиками, и это лишняя головная боль, особенно подчеркивание. Они также сделали "." Буквенным знаком. Грр…

    Mike Dunlavey18 декабря 2008, 21:17
28

Выделение только двух цифр для поля года.

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

  • В середине 80-х меня проголосовали за решение использовать 4 цифры для года, потому что они хотели уместить больше данных на одной перфокарте с 80 столбцами. Да, тогда они еще использовали перфокарты.

    Paul Tomblin18 декабря 2008, 21:21
  • Я бы проголосовал за эту 1 000 000, если бы мог, после того, как мне пришлось провести новогоднюю ночь на работе, чтобы присматривать за всеми системами, которые могут выйти из строя ровно в полночь.

    Patrick Cuff18 декабря 2008, 18:12
  • Ты не скажешь, что в 2038 году…

    07 апреля 2009, 18:51
4

решение Netscape переписать свой браузер с нуля . Возможно, это один из факторов, которые способствовали тому, что Internet Explorer ушел с рынка браузеров между Netscape 4.0 и Netscape 6.0.

-1

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

2

Microsoft копирует сочетания клавиш с исходного Mac, но использует Ctrl вместо клавиши Command для отмены, вырезания, копирования, вставки и т. д. (Z, X, C, V и т. д.) и добавляет почти бесполезную Windows клавиша в положении большого пальца, которая почти ничего не делает по сравнению с многочисленными функциями клавиши Ctrl мизинца. (Современные Mac имеют полезную клавишу Ctrl (для команд терминала), и клавишу Command в положении большого пальца (для программных или системных ярлыков) и клавишу Alt (Option) для ввода странных символов.) (См. эта статья .)

5

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

  • Мне просто нравится, когда они чувствительны к регистру. Я использовал этот ответ с заглавной буквы, когда набирал его 4 года назад? хммм…

    CodingWithSpike19 декабря 2008, 03:02
9

В дизайне C было много неоптимальных решений (приоритет операторов, оператор глупого регистра и т. д.), которые встроены во множество программ на многих языках (C, C ++, Java, Objective-C , возможно C # - не знаком с этим).

Думаю, Деннис Ричи заметил, что довольно скоро переосмыслил приоритеты, но не собирался их менять. Только не с тремя установками и сотнями тысяч строк исходного кода в мире.

  • Спасибо вам двоим за то, что я не вспомнил, когда писал свой комментарий.

    David Thornley18 декабря 2008, 21:41
  • Вы забыли = для присвоения и == для равенства. Да, и в C # они все тоже есть.

    Dour High Arch18 декабря 2008, 18:50
  • Ведущие нули для восьмеричного числа было ошеломляюще плохим решением. Я хотел бы знать, в чем причина этого.

    j_random_hacker26 апреля 2010, 12:22
  • +1000 за бедствие земли

    BlueRaja - Danny Pflughoeft16 июня 2010, 16:18
7

Решение Microsoft использовать "C: \ Program Files" в качестве стандартного имени папки, в которую должны быть установлены программы в Windows. Внезапно работа из командной строки стала намного сложнее из-за этого многословного места со встроенным пространством. Вы не могли просто набрать:

 cd \program files\MyCompany\MyProgram
 

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

 cd "\program files\MyCompany\MyProgram"
 

Почему они не могли просто назвать это c: \ programs или что-то в этом роде?

  • cd \progra~1\my-company\my-prog

    Tobias Wärre13 февраля 2009, 09:30
  • You live in the wrong country, my friend. Come to Germany and you get C:\Programme. No spaces.

    Jörg W Mittag08 марта 2009, 00:53
  • @Tobias You’re missing the point. A tilde-numeric after a shortened-string is even further from an elegant solution.

    crftr26 февраля 2009, 00:39
6

Решение Microsoft не добавлять * NIX-подобные разрешения на выполнение / noexecute файлов и безопасность в MS-DOS. Я бы сказал, что девяносто процентов Windows-вирусов (и шпионского ПО), которые у нас есть сегодня, были бы устранены, если бы каждый исполняемый файл нужно было пометить как исполняемый, прежде чем он сможет даже запуститься (и тем более нанести ущерб) в системе.

Одно это решение привело к рождению антивирусной индустрии.

  • Почему люди считают необходимым использовать «* nix» или что-то подобное вместо того, чтобы просто набирать слово «unix»?

    Graeme Perrow19 декабря 2008, 22:26
  • -1 от меня. Единственный случай, когда я вижу эту помощь, - это файлы, тайно «размещенные» (например, использование макросистемы приложения для «Сохранить как» в EXPLORER.EXE где-то раньше в PATH). Но в любом случае в этих местах должны быть разрешены только для чтения. И если вредоносная программа может изменить PATH, она может установить бит выполнения для файла.

    j_random_hacker26 апреля 2010, 12:31
  • Первоначально люди использовали * nix, потому что имя «Unix» было жадно охраняемым товарным знаком.

    Greg Hewgill09 января 2009, 04:02
  • * nix означает unix-подобный, поэтому это более широкий термин.

    dotjoe08 января 2009, 00:39
1

Решение о том, что " сетевой порядок " для многобайтовых номеров в Интернет-протоколе будет первым байтом старшего разряда.

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

  • «сетевой порядок» де-факто был решен компанией Sun, которая в то время использовала процессоры M680x0 и SPARC, оба из которых сначала использовали старший байт.

    Paul Tomblin18 декабря 2008, 21:17
2

Строки с завершающим нулем

6

HTML как язык отображения браузера.

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

Итак, с тех пор мы исправляем HTML с помощью CSS, XHTML, Javascript, Flash, Silverlight и Ajax, чтобы обеспечить согласованный кроссбраузерный рендеринг, динамический контент и клиентский интеллект, который требуется веб-приложениям.

Сколько раз вы хотели, чтобы языки управления браузером были сделаны правильно?

13

На самом деле 8088 и 8086 имеют одинаковую модель памяти и одинаковое количество адресных бит (20). Единственное отличие - ширина внешней шины данных, которая составляет 8 бит для 8088 и 16 бит для 8086.

Я бы сказал, что использование несовместимых окончаний строк в разных операционных системах (\ n - UNIX, \ r \ n - DOS, \ r - Mac) было плохим решением. В конце концов, Apple, смягчился, сделав \ п по умолчанию для OS-X, но Microsoft упорно придерживаться \ г \ п. Даже в Vista Блокнот не может правильно отображать текстовый файл, используя \ n в конце строки.

Лучшим примером этой проблемы является режим ASCII FTP, который просто добавляет / r к каждому / n в файле, передаваемом с сервера UNIX клиенту Windows, даже если файл изначально содержал / r / п.

  • Не говоря уже о том, что режим ASCII FTP делает с двоичным файлом!

    Paul Tomblin18 декабря 2008, 21:44