Як ви врівноважуєте «що роби правильно» та «роби це якнайшвидше» у своїй щоденній роботі? [зачинено]


180

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

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

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

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


12
Просто: зробити це правильно і зробити це швидко
жень

158
@ren: Ну, мабуть, ти не програміст, ти менеджер :-)
Flot2011

44
Обов’язкові. xkcd.com/844
MikeTheLiar

5
Зробіть це якомога швидше. Тоді якщо у вас ще є час, зробіть це правильно.
Лоран Кувіду

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

Відповіді:


106

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

Наприкінці дня ми доставляємо товар платіжному покупцеві. Цей клієнт має потреби та очікування, реалістичні чи ні. Часто торгова команда заважає нам просто отримати комісію. Іноді у замовника є очікування на реалізацію, які нереалістичні або вимагають зміни, навіть якщо у нас є контракт. Терміни трапляються. PTO та втрачені дні під час спринту можуть трапитися. Всілякі дрібниці можуть завершитися ситуацією, коли нас змушують потрапити в загадку "зроби це правильно" або "зроби це якнайшвидше". Майже завжди ми змушені "робити це якомога швидше".

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

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

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

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

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

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


14
"Часто команда з продажу заводить нас у проблеми тільки для того, щоб отримати комісію". - В який момент ви вважаєте, що продажі повинні відповідати за продаж того, що бізнес не може доставити - якщо припустити, що таке є? Чи є у вас приклади, коли вони перейшли межу між агресивним маркетингом та перепродажем?
Том Ш

8
@TomW У мене є кілька прикладів, які я не можу розмістити тут, але коли це трапляється, це майже завжди трапляється, коли нам потрібен довідковий рахунок або в кінці кварталу. У нас є дуже хороші продавці і деякі не дуже хороші. Нещодавно відбулася велика зміна у прибиранні будинку, як тільки було визначено, що розвиток не є проблемою, і вся структура продажів змінилася на краще. З тих пір справи йдуть чудово. Я хотів би бути більш конкретним, але не можу.
Akira71

9
+1 - "Я не буду жертвувати якістю в функції, яка спонукає клієнтів до того, щоб отримати її якнайшвидше, але щось піде" ... це було фантастично.
Джоель Б

59
@TomW - Я завжди хотів би зазначити, що головний військово-морський архітектор "Титанік", який застеріг від скорочення витрат (Томас Ендрюс), пішов з корабля, тоді як топ-маркетинг з продажу / маркетингу, який закликав скоротити витрати і зробити справи якнайшвидше (Брюс Ісмай), врятувався в рятувальній шлюпці.
jfrankcarr

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

62

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

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


43
Хоча зазвичай є час зробити гарну роботу, зазвичай немає часу, щоб зробити це ідеально. Між ними є світ різниці.
стипендіати доналу

2
@DonalFellows звичайно. "Правильно" - це завжди "слідування найкращим практикам, використовуючи наше найкраще розуміння проблеми в даний момент, наскільки це можливо". Люди роблять помилки. Вимоги змінюються. Передовий досвід змінюється. Не обрізайте кути та рефактори, коли трапляються речі .
Теластин

3
@DonalFellows - "Ворог досконалості - досконалість". Програма, написана безцільним способом, яка відповідає вимогам клієнтів і робить це з прийнятною ефективністю, - це програма, яка "робиться". Нічого башта з слонової кістки з цього приводу.
KeithS

1
@DonalFellows Ніхто не вживав слова досконалий, ідеальне рішення - неправильне рішення, Теластин говорить про правильне рішення. Правильне рішення - це рішення, яке відповідає вимогам і навряд чи викличе проблеми в майбутньому, при цьому воно буде легко впоратися в тому випадку, якщо це трапиться. Абсолюти завжди помиляються.
Джиммі Хоффа

7
+1 - Для Telastyn, хоча всі клієнти хочуть, щоб їхні речі були зроблені зараз. ДАЛЬНЕ БОЛЬШІ клієнти хочуть, щоб їхні речі працювали більше, ніж зараз. Здається, всі, хто не погоджується з "Теластином", стверджують, що вони втратять клієнта, якщо цього не зробити швидко. Це далеко не виняток, а не правило. Правило, що більшість людей, які не погоджуються, - це те, що вони ігнорують, що втратять набагато більше клієнтів, доставляючи продукти. Твердження, що клієнт хоче цього зараз, є звичайним виправданням людей, які не дбають про якість. Тому я скептично ставляться до заявленого ризику.
Данк

21

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

  • Комунікаційне значення

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

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

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

  • Поставте команду на ту ж прокляту сторінку

Его часто є проблемою. Одне, що інженерним командам дуже потрібно, - це встановити цінність узгодження послідовного підходу до вирішення певних типів проблем над усіма, хто робить свій власний кубок Kool Aid d'jour, оскільки вони знають краще. Добре вважати, що перевага іншого хлопця є гіршою за твою, але цінність послідовності над правильністю, якщо його підхід є працездатним, і це аргумент, який ти не можеш перемогти. Компроміс заради послідовності є ключовим. Коли речі узгоджуються, важче зробити їх неправильно, оскільки послідовно встановлений спосіб зазвичай також буде найшвидшим.

  • Виберіть потрібні інструменти

Є дві школи фреймворків / набори інструментів / бібліотеки / що завгодно. "Встановіть 99% для мене, так що я повинен знати / робити дуже мало" проти ", не тримайтеся з мого шляху, коли я не хочу вас там, але допоможіть мені зробити дуже швидко і послідовно з речами, які я насправді хочу" використовувати на моркві, а не на принципі палички ". Віддайте перевагу другому. Гнучкість і детальний контроль ніколи не повинні приносити жертви у вівтарі швидкого повороту, тому що для бізнесу "ми не можемо цього зробити, тому що наші власні інструменти не дозволять нам" - це ніколи не прийнятна відповідь, і питання завжди виникатиме для не- тривіальна / одноразова інженерія виробів. На моєму досвіді, негнучкі інструменти майже завжди розбиваються на ширину або обробляються неелегантно і створюють великий гігантський незбагненний безлад. Майже завжди, гнучкі / простіші для модифікації рішення такі ж або дуже близькі за короткий термін, незалежно. Швидка, гнучка та рентабельна можливість можлива за допомогою правильних інструментів.

  • FFS, якщо інженери не приймають рішення, як мінімум, отримайте інженерний внесок для вибору інструментів

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

  • Зосередьтеся на дизайні над впровадженням

Інструменти призначені для впровадження, і вони можуть допомогти вам, але першочерговим завданням має бути архітектура незалежно від того, який набір іграшок у вас є для створення цієї архітектури. Зрештою, KISS і DRY та всі відмінні філософії, які випливають із цього питання більше, ніж це в .NET чи Java чи, можливо, щось, що є вільним І не смокче.

  • Запишіть свої турботи

Коли бізнес-сторона наполягає, що ви робите це погано, збережіть цю електронну пошту, особливо ту частину, де ви сказали, чому це коштуватиме вам. Коли всі ваші прогнози справдяться і виникають серйозні проблеми, що завдають шкоди бізнесу, саме тоді у вас є велика купа аргументів для того, щоб серйозно поставитися до проблем інженерів. Але час ретельно ретельно. В середині палаючого інферно - це поганий час для "я-казав-ти-так" після наступного коду пожежі. Погасити пожежу та внести свій список попередньо ігнорованих проблем на ретроспективну зустріч / розмову, і намагайся тримати увагу на інженерних проблемах, висловлених та ігнорованих, та міркування, які ти зрозумів, чому їх ігнорували, а не імена реальних людей прийняття рішення ігнорувати. Ти інженер. Тримайтеся проблем, а не людей. " Ми висловили занепокоєння з приводу Х, бо боялися, що це призведе до проблем Y. Нам сказали Z і відкладати справу ".


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

1
Я добре почуваюсь у цій відповіді, але також я просто знайшов свою першу роботу, де бізнес і дев не постійно стоять на горлі один одному, а вплив чудовий. Ми просто робимо справи. Не завжди, як тільки ми хотіли б, але ми насправді беремо до уваги майбутнє, і це показує як у продукті, так і нашу здатність змінювати його у міру зміни потреб. Неминуча велика куля грязі - брехня, ІМО.
Ерік Реппен

19

Є лише одне рішення. Забронюйте близько 10-20% проекту / робочого часу для рефакторингу. Якщо складно переконати керівництво, що це виправдане завдання, дайте їм єдиний реальний аргумент: без рефакторингу вартість технічного обслуговування коду з часом зросте експоненціально. Добре мати кілька показників / статей / результатів досліджень, щоб підкріпити цю тезу під час зустрічі з менеджером :)

Редагувати: у цьому документі є кілька хороших ресурсів щодо "рефакторингу та зростання витрат на обслуговування": http://www.omnext.net/downloads/Whitepaper_Omnext.pdf


12
Є кращий варіант: зробіть рефакторинг частиною звичайної звички кодування. Щоденно. Щогодини. Щоразу, коли ви додаєте або змінюєте функцію. Тож вам не доведеться залишати на це додатковий час або "переконувати менеджмент".
Док Браун

Це дійсно лише тоді, коли вам не доведеться мати справу з уже написаним кодом. Загальне завдання - додати нове значення до старого / спадщини / успадкованого вихідного коду. Але коли ви дивитесь на цей код, ви не знаєте, з чого почати, і вам здається, що простіше написати цей код заново, ніж дізнатися, як він працює. Спробуйте виправдати ці оцінки: два дні, щоб додати нове значення, шість днів переробити старий код, щоб зробити його доступним. Часто чути "не рефактор, просто додай нове значення, ми пізніше розберемося, що робити зі старим кодом".
Анджей Бобак

1
@ Flot2011 Тоді у вас є лише одне рішення. Нехай "щоденний" рефакторинг стане вашим звичайним завданням. Наприклад, кожен вівторок зосереджуйтесь лише на покращенні якості коду. Переконайтесь, що керівництво його дотримується, і переконайтесь, що вони знають, що рефакторинг не марнує час. Без виконання цих двох умов рано чи пізно вони відмовляться від ідеї покращити "те, що вже є, і воно працює".
Анджей Бобак

1
@DocBrown Це працює, коли ви спілкуєтесь з керівництвом. Якщо ви поговорите зі старшим розробником і скажете йому, що ви додасте до поля два поля, і це займе у вас 3 дні ... Ну удачі :).
Анджей Бобак

2
Потрібно завищити ваші кошториси, щоб отримати час обслуговування, є проблематичним з кількох причин. Іноді технічну заборгованість насправді варто взяти на себе. Що трапляється, коли бізнес раптом помічає, що в надзвичайній ситуації знадобилося 15 хвилин, щоб перебити два нові поля, коли останній раз пройшло 8 днів ІМО, бізнес повинен усвідомлювати борги за техніку та довгостроковий вплив, який він має. Проблему потрібно розуміти як ви платите зараз, або ви платите в 5 разів більше пізніше, коли все буде сказано про зроблене.
Ерік Відкрити

14

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

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

Якщо це не допомагає, все ще існує "стратегія Скотті", щоб отримати достатньо часу для того, щоб зробити все правильно: помножте всі ваші оцінки на коефіцієнт 4:

http://blogs.popart.com/2007/07/what-scotty-from-star-trek-can-teach-us-about-managing-expeasures/


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

11

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

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

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

  3. Власник проекту прийме ризики, і програмне забезпечення низької якості вийде за графіком. Іноді бізнес-ризик нічого не розгортати (або пізно розгортати) значно більший, ніж бізнес-ризик розгортання програмного забезпечення низької якості, і тільки власник проекту може прийняти таке рішення.

Написання програмного забезпечення дуже схоже на малювання портрета. Неможливо сказати, що портрет зроблений «правильно» чи «ідеально». Ідеальний - ворог зробленого. Ви могли буквально провести 1 місяць, працюючи над одним методом, і його все ще деякі не вважають "ідеальним". Моя робота - намалювати портрет, яким задоволений клієнт.


7

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


7

Оптимальним балансом може бути витратити стільки зайвого часу, роблячи це правильно, як і ви витрачаєте на виправлення помилок, які ви усунете, роблячи це правильно. Уникайте позолочення розчину. У більшості випадків рішення Volkswagen, зроблене правильно, так само добре, як і рішення Cadillac. Зазвичай ви можете оновити пізніше, коли буде доведено, що вам потрібен Cadillac.

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

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

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

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

Я провів деякий час, працюючи над проектом, який повинен був зайняти півроку. Коли я приєднався до нього, він тривав півтора року. Ведучий проекту поставив керівнику проекту одне запитання на початку: "Ви хочете, щоб я зробив це правильно чи був чуйним?" За один тиждень функція була реалізована у понеділок, середу та п’ятницю; У вівторок та четвер функцію видалено.

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

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


Якщо тільки DRY не означає заплутану, нерозбірливу реалізацію масових каскадних схем успадкування. Не робіть цього. Вибачте, я це багато кажу, але це дуже ненавиджу. Також +1 для мінімального робочого рішення в більшості випадків. Іноді деякі перспективні архітектурні особливості можуть бути корисними, доки ви не перестараєтесь.
Ерік Відкрити

1
@ErikReppen Кодекс, який заплутаний, нерозбірливий та реалізація масивних каскадних схем успадкування, не зміг би мого визначення DRY. Якщо вам потрібно розбирати код щоразу, коли ви його використовуєте, дизайн явно не відповідає DRY, навіть якщо реалізація проходить.
BillThor

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

6

Зробіть його таким чином, щоб зробити його ідеальним

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

Сподіваємось, це дасть вам більше часу, щоб повернутися до цих питань та зробити їх ідеальними.

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

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


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

5

"Зробити це правильно" означає прийняття правильних компромісів для певної ситуації. Деякі з них:

  1. Час та вартість розробки
  2. Простота читання, налагодження та оновлення коду пізніше (все від імен змінних до архітектури)
  3. Ретельність розчину (крайові корпуси)
  4. Швидкість виконання

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

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

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


1
Я б запропонував: "Якщо НІКОЛИ не збирається підтримувати шматок коду ...": Написання сміття, викидання та біг не повинні бути варіантом (для тих, хто має совість), але це трапляється занадто часто; підрядники / консультанти / менеджери, переконуючись, що вони безпечно виходять за двері, перш ніж "це" вдарить за вентилятор.
Phill W.

@PhillW. - абсолютно згоден. Відредаговано відповідно.
Натан Лонг

4

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

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

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

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


3

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


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

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

3

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


3

Ось хороший план:

  1. Зробіть так, щоб ваш план «зроби правильно» зайняв стільки ж часу, ніж «зроби це» якнайшвидше.
  2. Оптимізуйте свій час для цього, поки ваше оточення не буде щасливим; зберігати якість
  3. ???
  4. Успіх

1

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

Раз у раз (я б хотів сказати, що двічі на день, але два рази на тиждень реалістичніше), особливо коли мені здається щось надзвичайно нудне робити в рутинному порядку, я думаю, "що було б ДУЖЕВИМ способом зробити це ? " і я витрачаю додатковий час, щоб знайти чи винайти кращий спосіб зробити це.

Якщо я продовжую робити це досить часто, моє рутинне кодування продовжуватиме вдосконалюватися, я думаю.


1

Програмне забезпечення - це дивні речі, а процес розробки програмного забезпечення - більш дивний.

На відміну від більшості речей у реальному житті, але як і більшість речей, що стосуються комп’ютерів

Швидше надійніше

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

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


Я не впевнений, що згоден з вами, але це цікава, неортодоксальна точка зору. +1 для роздуму над полем.
Flot2011

-1

Робота вам не підходить.

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

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

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