Де ви проводите лінію свого перфекціонізму? [зачинено]


37

Перфекціонізм може бути хорошим і поганим при програмуванні.

  • Коли і де ви проводите лінію, коли вирішуєте проблеми?
  • Коли ви вирішуєте, коли рішення є надмірним, занадто загальним чи просто занадто футуристичним?

Будь ласка, прокоментуйте, якщо питання неясне.


7
Хороше запитання - я завжди з цим борюся.
Ніхто

Відповіді:


40

KISS та YAGNI , особливо YAGNI.

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

У той момент, коли ви починаєте говорити про "з цим дизайном в якийсь момент у майбутньому, ми могли б зробити X, а то й Y", а не "цей дизайн дозволяє нам робити вимогу клієнта Z в наступному випуску", саме тоді ви отримуєте в астрономію архітектури.

У відповідь на коментарі:

  • KISS = Тримай просто, дурний = роби вигляд, що ти дебіл і мусиш розуміти дизайн
  • YAGNI = Вам це не потрібно = перестаньте робити вигляд, що можете передбачити майбутнє у вашому дизайні

5
+1 - Досить важко вирішити проблеми, які ми знаємо, але не намагаючись вирішити проблеми, які, на нашу думку, можуть бути.
Джон Хопкінс

6
Мені це подобається, але чітке визначення абревіатур було б корисним. Я ніколи не чув YAGNIдо сьогодні.
Філіп Реган

+1 для Філіпа, який сьогодні дізнається щось! +1 також для KISS.

Ну, відповідь хороша. Хоча очевидно, що будь-який інтерфейс (будь то постійне сховище (файли), мережа чи IPC) повинен бути принаймні правдоподібним, або ви знаєте, що ваше перепроектування зробить неможливим зворотне співвідношення.
Дедуплікатор

7

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


6

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

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

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


6

Раніше я був дуже перфекціоністським (витрачав час на створення рамок, а не на рішення).

Але річ, яка мені справді допомогла прискорити виробництво, - це навчання та дотримання принципів BDD / TDD, включаючи принципи зовнішньої (що мені особливо важко навчитися сприймати).

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

Отже, всі рядки коду походять від реальної потреби користувача.

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


5

Я помічаю, що я в цьому краще переживаю досвід.

Коли я був (дуже) молодий, я завжди прагнув до найдосконалішого рішення, без компромісів. Тепер я краще зберігати на увазі такі речі, як бюджет та час.


1
+1 Для досвіду змушуйте більше йти на компроміс.
Амір Резай

4

Час обмежує цю лінію досить чітко.


1
Хороший момент, але для поганого рішення може знадобитися більше часу для виправлення в майбутньому.
Амір Резай

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

3

Мій начальник насправді :)

Я мушу визнати, що мені стає краще, але я все ще не дуже підходить до компромісів. На щастя, я змусив свого начальника мене впорати;)

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

Моя основна проблема - рефакторинг. Проблема полягає в тому, що більшість випадків, хоча я намагався написати код якомога краще, я не знав тоді, що я зараз знаю (побачив більше кодів, більше шаблонів, нові ідіоми, нові випуски, нові рішення). І тому, хоча це працює, я тепер знаю кращі способи це зробити:

  • Шляхи, які б покращили корисність і зменшили шанси отримати помилку
  • Шляхи, які зменшили б залежність, покращуючи час збирання

Однак він працює як є, і тому рефакторинг це не є пріоритетним завданням, і правда полягає в тому, що це мене нудить; Я розумію економічні причини та розумію очікування клієнтів (вони не бачать код і віддають перевагу новим функціям та виправленням помилок), але я хочу, щоб я встиг над цим ще попрацювати.

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


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

2

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

Будь задоволений перемогою.

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

Досконалість - це як швидкість світла: ти ніколи не потрапиш туди, але немає обмежень у енергії, яку ти можеш витратити, намагаючись.

(* - Зауважте, що "Баггі" та "Складно підтримувати" обидва міцно підпадають під заголовок "Нові проблеми". Тому я не називаю це завершеним, поки код не був перевірений, чи були зайві біти оброблені та були оновлені коментарі / документація API.)


0

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


Перфекціонізм неможливий навіть через багато років досвіду; тобто, якщо ви хочете взагалі що-небудь доставити. Найцінніше, чого вчить досвід, - це коли визнати "достатньо хорошим".
Джефф Кнехт

0

Я, як і багато інших програмістів, маю багато застарілого коду для підтримки. Спокуса переробити все це завжди буде, але я по суті зводив це до одного принципу:

Мені (чи комусь іншому) доведеться це знову зрозуміти ?

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

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