Найбільш жалюгідне рішення щодо дизайну чи програмування, яке ви прийняли? [зачинено]


57

Мені хотілося б почути, які дизайнерські рішення ви прийняли і як вони давали відсіч. Через неправильне дизайнерське рішення я в кінцевому підсумку мав підтримати це погане рішення назавжди (я також брав у ньому участь). Це дало мені зрозуміти, що одна єдина помилка дизайну може переслідувати вас назавжди. Я хочу дізнатися від більш досвідчених людей, які промахи вони зазнали і що вони навчилися у них.

Я впевнений, що це буде дуже корисно для інших програмістів, допомагаючи їм не повторювати ці рішення.

Дякуємо, що поділилися своїм досвідом.


19
витрачаючи занадто багато часу на ТАК !! ;)
Мітч Пшеничний

6
@George: схоже, що ваше перше посилання стосується надмірної інженерії, яка може бути дотично пов'язана з цією темою, але вона не є дублікатом. Друга та остання посилання стосуються помилок кодування та помилок управління, жодна з яких не є дублікатами цього потоку.
Джульєтта

1
Це, мабуть, має бути зроблено у вікі спільноти (є поле, коли ви редагуєте публікацію).

3
Мені б хотілося, щоб був спосіб голосувати проти протистояння. Відхилити закриття?
Kieveli

5
Що не так з усіма закритими виборцями? Тож що, якщо це не CW, нехай запитуючий отримає кілька голосів за те, щоб поставити питання. Мене щиро цікавить ця тема. Не дозволяйте CW заважати хорошому суб'єктивному питанню. Sheesh, SO повна криків "CW THIS".
syaz

Відповіді:



56

"Я зроблю це пізніше"
"Пізніше" ніколи не приходить.


8
Пізніше ніколи не приходить.

Це ніколи не відбувається.

Було сказано: "Якщо у вас немає часу зробити це зараз, що змушує вас думати, що ви встигнете виправити це пізніше?"

4
Ми називаємо це "ітерацією ніколи"
NotMe

10
Немає нічого такого постійного, як тимчасове рішення.
дієтабудда

52

19
Мені потрібно створити новий обліковий запис, щоб підтвердити це знову ...
Kieveli

Так ... хворобливі переживання ...
Ред С.

Щойно у мене був некрасивий спалах
Neil N

1
@Jay це насправді здавалося гарною ідеєю в той час.

6
Я не знаю, що це навіть означає, але звучить болісно +1
The Disintegrator

44

Налаштування в додатку приємно. Занадто велика налаштованість - це кошмар, який потрібно використовувати та підтримувати.


2
Так. Правда. Ідеалізм - зробити все налаштованим і сказати босу, ​​що нам ніколи більше не потрібно буде змінювати один рядок коду.

1
Будучи нещасним користувачем, який застряг у одній із цих нескінченно налаштованих систем для управління нашими проектами, я можу лише сказати: я міг би звернути вас до мільйона разів, якби міг.
HLGEM

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

Це називається «spoftcoding» на відміну від «hardcoding»
deadalnix

42

З однієї з моїх помилок я дізнався, що нормалізацію БД не слід сліпо слідувати. Ви можете, а в деяких ситуаціях ОБОВ'ЯЗКОВО вирівняти столи.

Я врешті-решт керував навантаженнями таблиць (за допомогою моделей), а продуктивність не була такою хорошою, як це могло бути з невеликим сплющенням для таблиць.


5
Я не міг погодитися більше ... Я - інженер програмного забезпечення, і нам кажуть, щоб завжди нормалізувався. Який череп лайна. Це було лише тому, що викладачі не намагалися працювати з дійсно складними та залежними від роботи БД.

8
Можу додати, що нормалізація також може бути дуже позитивною.

12
Я думаю, що програмісти занадто швидко денормалізуються з неадекватних причин, але так, рабське дотримання правил нормалізації - велика помилка. Взагалі, одна з моїх великих розладів у розробці програмного забезпечення - це коли хтось каже "Треба робити X", і коли я вказую на всі проблеми, які це спричинить, вони відповідають: "Це не має значення. Усі експерти погоджуються, що X хороший, тому ми повинні робити X, завжди, без винятків ".

4
Мій підхід до нормалізації завжди прямолінійний. Я завжди нормалізуюсь, АЛЕ, якщо бачу потенційне підвищення продуктивності на невеликому вирівнюванні - я завжди тестую і орієнтир, і в більшості випадків він платить за вирівнювання.
Еймантас

7
Але нормалізація - ЗАБУДОВА! :) Я серйозно, мені подобається розробляти структури даних. Я б сказав, що хоча денормалізувати нормалізовану схему легко, зворотне НЕ відповідає дійсності. Вам потрібно ЗНАТИ правила, перш ніж їх порушувати.

36

Використання єдиного знака в базах даних для статусів і т. Д. Нічого в цьому немає, витрата на використання більш тривалого char () або nvarchar2 () є незначним порівняно з мережею та синтаксичним розбором, здійсненим будь-яким викликом SQL, але символи завжди закінчуються вкрай затуманений або вичерпаний (не для статусів, а інших речей). Набагато краще просто помістити в читану людиною версію і також мати у вашій моделі Java (в моєму випадку) перерахунок з відповідними значеннями.

Я думаю, це форма передчасної непотрібної та сліпої оптимізації. Як ніби використання одного чару врятує світ у ці дні. Крім букерів Y / N в базах даних, які не підтримують булеві / бітові.


+1 Ми щойно провели зустріч з цього питання. Ми дійшли такого ж висновку.
APC,

Що робити, якщо ваш клієнт працює з такими абревіатурами і не хоче від них відмовлятися?

Для існуючих систем вам потрібно бути сумісним (я б все-таки створив перелік Java належних значень, звичайно, методом <code> MyEnum fromChar (char c) </code>). Для нових дизайнів просто не ходіть туди!

Деякі бази даних підтримують переліки, які є компактними і читабельними, а також добре забороняють несподівані значення. Якщо можете, використовуйте ці.
Карл Бартель

2
Майже так само погано: Використання типу BIT в MS SQL Server, перш ніж виявити, що він не може бути частиною індексу.
finnw

32

Не розробляючи належного шару доступу до даних і не маючи sql скрізь у своєму коді, просто щоб отримати щось "швидке" та працює. Згодом, коли проект почав розширюватися, а вимоги змінилися, він став кошмаром. Я тоді не знав, що таке DAL.

... радий, що я минув це, хоча я все ще бачу програмістів із 20-річним "досвідом", що роблять це.


16
Не можу пригадати, де я це прочитав, але є різниця між 20-річним досвідом та роком досвіду, повтореним 19 разів.
CaffGeek

@Chad: Це було десь у працях Джоела Спольського.

+1: Так. І спробуйте перефактурувати всю цю логіку, пов'язану в цьому SQL ... Будь то вбудований, вільний формат SQL або збережені програми. [Так - я не боюся тієї святої війни.]
Джим Г.

26

Думаючи, що я міг би бути архітектором, розробником та прем'єр-міністром все в одному проекті.

2 місяці сну 3 години на ніч навчили мене просто не вміти.


15
Тож перестань так спати! О, зачекайте ... ви маєте на увазі це НЕ нормально ... ?? Хм, я повинен знайти мене ще людей у ​​цьому проекті ...
AviD,


21

Вибір класів Microsoft Foundation (MFC) для написання Java IDE.


3
Owwww. Це зробило б мій мозок боляче.
Грег Д

2
Це було не поганим рішенням у 1999 році. AWT тоді був некрасивим і повільним.
finnw

finnw - ну, принаймні, це все ще потворно!
Niklas H

20

Це було не моє рішення (я приєднався до компанії дещо пізніше), але десь, де я працював, i18n трохи надто далеко, включаючи переклад усіх їхніх журнальних повідомлень.

Результати:

  • Більш болісно додати нові журнали
  • Більше витрат на переклад
  • Після цього журнали важче читати

На жаль


Я роблю тут i18n і намагаюся розібратися, що йде користувачеві і що йде в журнали. Я хочу, щоб усі вихідні дані були локалізованими, але я хочу, щоб журнали залишалися однаковими. У процесі роботи мені потрібно більше розібратися, куди йде виняток, ніж мені подобається.
Девід Торнлі

1
Дозвольте здогадатися, ваш американець? А якщо ні, то ви розмовляєте лише англійською? Використовуйте інтернаціоналізацію, коли нові записи журналу англійською мовою, якщо доступна інша мова, ви відображаєте мову користувачів. Підказка: Використання кодів помилок тут допомагає, оскільки це означає, що ви завжди можете створювати / сканувати журнали, незалежно від мови.

2
@Jacob: Я англійська, але розмовляю лише англійською. Але це було для компанії, де вся інженерна база була в Англії, тому наявність файлів журналів (які призначені для діагностичних цілей, а не видимої для користувача інформації) іншими мовами було б просто марною витратою ресурсів. Я погоджуюсь, що використання кодів помилок замість тексту дозволяє перекладати під час руху, але це все-таки більше роботи, ніж просто використання однієї мови для початку. Справа в тому, щоб зменшити роботу, визначивши, де щось, що здається корисним, насправді не надасть суттєвої цінності.
Джон Скіт

10
Я швед. Мені довелося б зайняти середньовічну силу для будь-кого, хто навіть пропонує, що код / ​​коментарі / журнали повинні бути не що інше, як англійською. Англійська мова - це ТЕМИ, яка використовується для всіх, крім інтерфейсів користувача. Все інше просто робить код важким для читання та обговорення. Використання рідної мови є смішним, оскільки будь-який інший фреймворк / бібліотеку, яку ви використовуєте, є англійською мовою.
jgauffin

1
+1 Англійська мова є мовою програмування. Перекласти це - просто помістити додатковий шар, де вам потрібно якомога менше шарів і якомога більше чіткості.


19

Занадто багато дизайну . Створення безлічі діаграм UML, зокрема діаграм послідовності для кожної операції, значна частина яких зрештою виявилася марною. Зрештою виявилося, що значну кількість часу можна було заощадити, пропустивши зайво деталізовані конструкції / схеми та почавши кодування безпосередньо.


Якщо питання було: "Яке найбільш жалюгідне рішення щодо дизайну чи програмування ви коли-небудь бачили?" на відміну від помилок, які ми зробили самі, я поставив би "UML" біля верхнього списку. Прямо під "реєстром Windows".

2
UML добре обговорювати між членами команди, але коли справа стосується дизайну, то реалізовуйте згідно з дизайном, він завжди закінчується погано. Це якась мрія деяких компаній, але справді, написання програмного забезпечення остаточно не працює. +1!
deadalnix

17

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


15

Моє найгірше дизайнерське рішення? Ще в 1980-х роках я працював над проектом, де нам з’явилася яскрава ідея створити своєрідний шаблон для наших екранів введення даних, який би інтерпретувався під час виконання. Непогане рішення: це зробило вхідні екрани легкими для проектування. В основному просто створіть файл, що нагадує екран введення даних, з деякими спеціальними кодами, щоб визначити, що було міткою, а що полем для введення, та визначити, чи поля введення були альфа- чи чисельними. Тоді я вирішив додати до цих файлів ще кілька спеціальних кодів, щоб визначити, які перевірки слід виконати. Потім я додав більше кодів, щоб дозволити умовну побудову екрана, поле X включалося лише тоді, коли якась умова була істинною і т. Д. Потім я додав більше кодів, щоб зробити просту обробку входів. І т.д. Врешті-решт ми перетворили наш шаблон екрана на нову мову програмування, доповнену виразами, структурами управління та бібліотекою вводу-виводу. А для чого? Ми зробили багато робіт, щоб переосмислити FORTRAN. У нас була полиця з повною кількістю компіляторів для мов, які були краще розроблені та краще перевірені. Якби ми присвятили стільки зусиль, щоб створити продукцію там, де ми насправді мали певний досвід, ця компанія могла б працювати сьогодні.


Це і смішно, і трагічно :)

Сумно в тому, що такий підхід іноді найкращий шлях. Клієнт може вибрати "екран може бути змінено за мить" або "екран робить все, включаючи приготування чаю", але не те й інше!

3
Я не маю нічого проти використання шаблонів чи іншого загального коду. Помилка полягала в перетворенні фрагмента загального коду на мову всередині мови.

Я бачив, як це було зроблено точно ... в 2004 році! Вся бізнес-логіка поширюється на п’ятнадцять таблиць конфігурації з декількома напівзапеченими спробами динамічних «мов», закинутих на добру міру (див. Десяте правило Грінспуна)!

1
Ви не маєте на увазі COBOL, а не FORTRAN?
finnw

15

Занадто ревне застосування YAGNI (яке називається Design by Enumeration в Підводні камені об'єктно-орієнтованого розвитку ) в середовищі, коли будь-яка розсудлива людина може сказати, що вимоги, безумовно, мають змінитися. І міняти повторно.

Якщо ви (важко) зашифрували все точно відповідно до сучасних вимог - при цьому побиваючи тих, хто каже, "чи не могло це бути більш загальним?" з вашим молотком YAGNI - і тоді вимоги різко змінюються (але таким чином, що можна було б обґрунтовано передбачити), то це може бути різницею між тим, що потрібно адаптуватися 2 тижні проти 20 хвилин.

ОНОВЛЕННЯ: Для уточнення, ось надуманий приклад, який не надто далеко від того, що сталося. Переповнення стека було розроблено для підтримки значків, але припустимо, що спочатку вони могли думати лише про чотири значки. Лише чотири, така невелика кількість, тому вони твердо кодували підтримку рівно чотирьох значків за всією логікою на сайті. У базі даних, в інформації про користувача, у всіх відображуваних кодах. Тому що "вам не знадобляться" будь-які значки, про які ви не можете придумати, правда? Припустимо, тоді сайт починає працювати, і люди починають пропонувати нові значки. Кожен знакпотрібно до двох тижнів, тому що існує стільки жорсткого кодування, щоб налаштувати всюди. Але все-таки "Я вам не знадобиться" більше значків, ніж сьогоднішній список, тому ніколи не існує рефакторингу для підтримки загальної колекції значків. Чи зайняла б така родова колекція більше часу? Не багато, якщо вони є.

YAGNI є цінним принципом, але його не слід (ab) використовувати для виправдання поганого дизайну та неналежного жорсткого кодування. Є рівновага, і, маючи досвід, я вважаю, що я наближаюся до цього.


1
Так і ні, чи можна передбачити, в якому напрямку це зміниться? У мене є досвід болісно складних систем, які виявилися абсолютно неадекватними для першого використання, які не вписувались у передбачувану загальність ...
Benjol

^ так, я б швидше мав справу з YAGNI, ніж з цим лаєм.

Отже, ти думаєш, що ти повинен був провести два тижні вперед?
finnw

4
Цей приклад зовсім не YAGNI. DRY є частиною YAGNI, і без цього ви не можете бути чуйними до змін.

3
Стефане, приклад показує гліб та неналежне зловживання фразою, що було моїм бажанням. DRY (з його варіантом OAOO) - також хороший принцип, але зовсім окремий: c2.com/cgi/wiki?OaooBalancesYagni . Однак я ніде не можу знайти нічого, щоб підтвердити ваше твердження про те, що "DRY - це частина YAGNI". Гірчиця добре поєднується з хот-догами, але це не означає, що гірчиця є частиною хот-догів. Якщо ви могли б уточнити, можливо, з посиланнями, можливо, я зрозумію.
консоль 80x24

15

Некомпетентні кадрові ресурси

Намагаюся зробити щось правильне і чудове з неправильними людьми!
Навіть якщо вони перебувають у ролі зайвого ЕМ-прем'єра (що досить занадто часто, особливо у великих фірмах, де їх некомпетентність може тривати довше).


1
Я розумію ваш біль :(

13

Кожен раз, коли я створюю технічну заборгованість, пишу процедурний код, пропускаю тести з письма тощо, тому що я спішу. Майже неминуче я вважаю, що це створює біль для мене в дорозі.


13

Використання послуг інтеграції SQL Server (SSIS).

Я не бажаю цього на мого найгіршого ворога.

Після створення декількох пакетів SSIS за останні два місяці, я лише дізнався, що розроблені нами пакети не підлягають розповсюдженню та неможливості використання. Зокрема, у несетевому середовищі, що не має ліцензії на SQL Server.

Це дуже погана ситуація, коли у вас менше 48 годин, щоб переписати ваші SSIS пакети в чистому коді .NET POCO або пропустити встановлений термін.

Мене дивує те, що мені вдалося переписати три пакети SSIS (на тестування та розробку мені знадобилося два місяці) протягом 12 годин за чистим кодом .NET, за допомогою адаптерів OLEDB та адаптерів SQL.

SSIS не розповсюджується і не виконуватиме пакунки з клієнтської машини, якщо на ньому не встановлена ​​ліцензія SQL Server (зокрема, DTSPipeline.dll). Це було б чудово знати на передовій. Я зараз бачу відмову від відповідальності зараз (з дрібним шрифтом) на MSDN. Це не приносить користі, коли у вас є приклад коду по всьому Інтернету, використовуючи лише машинний код SQL-LICENSED В основному вам потрібно створити веб-службу, яка буде спілкуватися з вашим SQL-сервером, щоб запускати ваші SSIS-пакети програмно. Ви не можете виконати їх з чистого коду .NET, якщо у вас не буде встановлена ​​ліцензія SQL на виконавчій машині. Наскільки це нереально? Чи дійсно Microsoft очікує, що SSIS буде використовуватися на машинах, для яких потрібна установка SQL-сервера? Яка повна трата за два місяці.

Моя компанія ніколи більше не використовуватиме SSIS через цю маленьку друковану «готчу».


Можливо, вам варто взагалі уникати використання програмного забезпечення "тонкого друку"! Наприклад, Talend - це ETL IDE з відкритим кодом.

+1: Так. Досвід розвитку SSIS теж кошмар. Напевно, існує як мінімум півдесятка кращих способів виконання ETL.
Джим Г.


10

Закидання якихось "смішних" писанок у якийсь код, який я написав перед відпусткою на 2 тижні. Я думав, що я буду єдиною людиною, яка прочитала це, коли повернусь, він змусив насміхатися і готовий перекодувати його.

Потрібно сказати, що мій начальник не був вражений, коли він переглядав це, коли я був у відсутності, і він був ще менше вражений, коли одне з «великодніх яєць» приваблювало його обличчя, яке смішно закарбувало в ASCII.

Мммммм ...


1
ІМО, це "Гарна робота, сер!"

18
Зовсім недавно мене команда знущалася над повідомленнями про сліди, як-от "таблиця додаткового значення (p) t'yer!" Я сказав, подивіться, вони змусили мене працювати над Talk Like A Pirate Day, вони заслуговують на те, що отримують.

3
Арр, ваші колоди шукають кіль-хаулін!

10

Використання ASP.Net Themes, коли просто звичайна папка CS «CSS» була б чудово.


Lol у цьому, так!

1
Цю відповідь можна було б скоротити до "Використання ASP.NET"
finnw

Скіни корисні для налаштування CssClass за замовчуванням.
хв.

8

Швидкий шлях до того, щоб якийсь код працював, а не правильний шлях (трохи загальне, але ми називаємо це абстракцією і, отже, «правильною» відповіддю).


7

У моїй компанії є модель розвитку водоспаду, де наші ділові користувачі та бізнес-аналітики визначатимуть вимоги до проектів. На одному з наших «великих» проектів ми отримали ряд вимог, і я помітив ряд вимог, які містили деталі щодо впровадження , зокрема інформацію, що стосується нашої схеми баз даних, що використовується нашою обліковою системою.

Я прокоментував ділових користувачів, що впровадження - це мій домен, він не повинен міститись у вимогах. Вони не бажали змінювати свої вимоги, оскільки, зрештою, це БІЗНЕС, і бухгалтерам має сенс розробити бухгалтерське програмне забезпечення. Як низько розробник, який знаходиться занадто далеко в тотемному опитуванні, мені платять робити, а не думати . Наскільки я боровся з цим, я не міг переконати їх переписати вимоги - надто багато документів і бюрократів навколо змін, що це просто занадто багато клопоту.

Отже, я дав їм те, що вони попросили. Принаймні, це сорта працює , але база даних дивно розроблена:

  • Багато зайвої нормалізації. Один запис, що містить 5 або 10 полів, розділений на 3 або 4 таблиці. Я можу з цим впоратися, але особисто мені хотілося б, щоб усі поля 1: 1 були виведені в одну таблицю.

  • Багато недоречної денормалізації. У нас є таблиця, в якій зберігаються дані рахунків-фактур, які зберігають більше, ніж дані рахунків-фактур. Ми зберігаємо ряд різних прапорів у таблиці InvoiceData, навіть якщо прапор логічно не пов’язаний із таблицею InvoiceData, таким чином, що кожен прапор має магічне, твердо кодоване значення первинного ключа та всі інші поля, зведені в таблиці InvoiceData. Оскільки прапор представлений як запис у таблиці, я запропонував перетягнути прапор у свою власну таблицю.

  • Багато більше невідповідної денормалізації. Деякі прапори, що стосуються додатків, зберігаються у вигляді стовпців у невідповідних таблицях, таким чином, щоб змінити прапор програми, потрібно оновити кожен запис у таблиці.

  • Первинні ключі містять метадані, так що якщо первинний ключ varchar закінчується на "D", ми обчислюємо рахунки-фактури, використовуючи один набір значень, інакше ми обчислюємо їх з іншим набором. Було б більше сенсу вивести ці метадані в окремий стовпчик або перетягнути набір значень для обчислення в іншу таблицю.

  • Іноземні ключі часто переходять до декількох таблиць, так що зовнішній ключ, який закінчується на "M", може посилатися на нашу таблицю облікових записів, тоді як зовнішній ключ, що закінчується на "A", може посилатися на нашу таблицю автоматичних рахунків. Простіше було б розділити дані на дві таблиці, MortageData та AutoInsuranceData.

Усі мої пропозиції були збиті з великим плачем і скреготом зубів. Додаток працює як задуманий, і хоча його велика куля з гряззю, усі неприємні хаки, особливі випадки та дивні правила ведення бізнесу саркастично та жартівливо задокументовані у вихідному коді.


3
Добре, сподіваємось, ваше резюме приємне та актуальне для швидкого втечі, перш ніж велика куля грязі піддасться самопливу!
Benjol

7

Дотримуючись старішої технології, тому що, здається, занадто багато клопоту, щоб ваші клієнти могли оновити до нової версії .NET Framework, але для створення програмного забезпечення фактично знадобиться більше часу на розробку, оскільки ви не можете використовувати деякі (економію часу) компоненти новіша версія рамки.


+1: Так - я там був ... І як тільки я зрозумів, що n00bs не оновиться, я почав планувати свій втечу на більш зелені пасовища.
Джим Г.

І так я і зробив, щойно вийшов на пенсію наступного місяця!
лози

6

Ще в університеті я працював над своїм старшим дизайнерським проектом. Ми з іншим хлопцем писали веб-систему відстеження помилок. (Нічого новаційного, але ми обидва хотіли отримати досвід роботи в Інтернеті.) Ми зробили цю справу з сервлетами Java, і це спрацювало досить добре, але чомусь нерозумно, замість того, щоб вибрати винятки як наш механізм обробки помилок, ми вибрали використовувати коди помилок.

Коли ми презентували наш проект для оцінки, і один із викладачів запитав неминуче: "Якби ти мав це зробити ще раз, що б ти робив інакше?" Я негайно знав відповідь: "Я б використав винятки, саме для цього вони є".


А-а-а радощі віднайти колесо! :-) Забавно.

Я називаю це навмисними вадами, просто для того, щоб ви могли покращити його в наступній ітерації.
whatnick

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

@jacob - Я погоджуюся з вашими думками, що винятки слід використовувати для речей, які ви можете передбачити (тобто виняткові умови), але з того, що я бачив (і не будучи програмістом на Java), Java, здається, використовує винятки для всього, що знаходиться під сонцем. Тому використання винятків у Java-коді може вважатися суперечливим потоком мови.

6

Я не мій вибір методу, але створив XSLT для перетворення файлу XML на основі рядків у HTML-звіт на основі стовпця.

Це працювало лише в IE, було повністю неможливо розшифрувати, як це працює. Кожен раз, коли нам потрібно було її розширювати, це було неможливо важким і займало віки.

Зрештою, я замінив крихітний сценарій C #, який зробив те саме.


Я теж це зробив. Я реалізував двигун шаблонів електронної пошти за допомогою XSL і мені було важко читати та підтримувати.
TrueWill

Так. Замінив чиєсь величезне дерево файлів XSLT кількома простими функціями VB.NET. Дуже задовольняє, особливо коли наступний запит на зміну клієнта, який виник, було б неможливо зробити в XSLT.

Я виявив, що більшість програмістів вважають XSLT поганим вибором, просто тому, що вони цього не отримують . Це надзвичайно корисно для невеликого набору проблем, набагато ефективніше, ніж багато інших рішень. З іншого боку, він використовується ВЕЧЕ надто часто, і здебільшого НЕ в тому невеликому наборі проблем ...
AviD,

6

намагаються використовувати всі нові технології (вивчати нові технології), хоча це навіть потрібно.


5

Я не взяв достатньо часу для оцінки бізнес-моделі. Я зробив те, що просив клієнт, але через 6-12 місяців ми обидва дійшли висновку, що це мало зробити інакше.


4

Проектування без специфікації.


3
Характеристики завжди можливі

Повинно бути "Реалізація рішення, не запитуючи клієнта, чи це те, чого вони хотіли"; що зазвичай означає, що ви дотримувались специфікацій.
дієтабудда

3

Я реалізував підрозділ програми відповідно до вимог.

Виявляється, вимоги були роздуті та позолочені, а мій код був надто розроблений. Я мав би розробити свій підрозділ так, щоб він працював лише з тим, що я додавав у той час, але плануйте додавати всі інші речі, не включаючи загальної підтримки для нього з самого початку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.