Подолання повільного вирішення проблеми через збільшення знань про те, що може піти не так [закрито]


450

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

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

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

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

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

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

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

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

Як ти з цим справляється?


126
Ключовий урок: дотримуйтесь вимог, не більше . Таким чином, ви не будете намагатися реалізувати непотрібні функції.
mouviciel

19
Ви розглядаєте Agile Методику розробки замість моделі водоспаду. Спочатку поставте великі речі, а решта доставляйте ітеративно. Це нова концепція, але допомагає зменшити ризик та витрати.
Satish

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

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

6
"Зробіть найпростішу річ, яка могла б спрацювати." Після того, як ви це зробите, тоді ви вирішите, чи потрібно турбуватися про щось інше.
Уейн Вернер

Відповіді:


268

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

"Ця компанія може зробити це швидше і дешевше, але це справді зроблено? Або ви будете полювати на клопів роками?"

Крім того, потрібно знати і приймати стару ідіому: «Досконалий - ворог добра».


112
нагадує мені "хороший, швидкий, дешевий, виберіть два" - коли ви знали менше, що жертвуєте "добрим", а тепер, коли знаєте більше, ви жертвуєте на "швидку".
sevenseacat

10
@Neil нічого не може бути помилкою. Завжди буде проблема, вони просто стають меншими або складнішими. В ідеалі ОП повинен знайти слід , де він завершив швидко досить , і залишивши кілька досить помилок , щоб бути щасливим з його якістю, і тримати клієнта щасливим з вартістю і часом
RhysW

10
@Neil "Вчасно. Про бюджет. На Марсі. Виберіть два".
Dan Neely

5
@ Леонардо: ні, форма Теластина правильна (і це досить стара приказка . Дивіться також YAGNI і "якщо це працює, не виправляйте".
mikołak

3
Ця відповідь - фігня. Далі, спробуйте і скажіть потенційному клієнту, що ви зробите це за 40 К замість 20 К, але на 10 разів більше якості та надійності. Вони скажуть вам це: "Мій бюджет - 20 тис., І мені ця якість не потрібна". У якийсь момент ви повинні визнати, що 99% клієнтів не дуже піклуються про якість, і будь-яка якість там буде вашою особистою інвестицією.
Морг.

179

Здається, вам настав час приєднатися до темної сторони: управління.

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

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

Це працює так само добре, коли ви розробник: створюйте тимчасовий файл, ігноруючи дозволи та зіткнення імен - 5 хв. Чистий приріст, решта команди може почати працювати над тим, який код залежить від наявності цього файлу. Це ідеальне рішення? Абсолютно ні. Це отримає у вас 99%, 95%, може, 90%? Так, це, мабуть, буде.

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

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

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

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


9
Тож, на вашу думку, навмисне створення помилок є прийнятним, якщо вони трапляються досить рідко?
scai

87
@scai - ви вибираєте свої битви. Я працюю в цій галузі вже 15 років, і я не бачив жодного випуску в 3 компаніях, над якими працював на сьогоднішній день, у яких постачається 0 помилок. У реальному світі це просто не відбувається. Я не кажу, що ви навмисно вводите зламаний код, але є рівень досконалості та куленепробивання, який просто не окупиться
DXM

25
Створення помилки "навмисно" означало б, що сама помилка була навмисною, - це не те саме, що усвідомлювати можливість або навіть конкретне існування помилки чи несумісності. У мене є додаток HTML5, який не працює належним чином в IE6, я знаю про це, навіть підозрював, що це буде саме тоді, коли я це зробив - це просто "ті, хто не має значення, і ті, хто проти не має значення ". Ви можете свідомо побудувати міст, який не витримає ядерної атаки, і це нормально.
BrianH

27
+100 за те, що ви взяли на себе технічну заборгованість. Як і ОП, я намагався ліквідувати всю технічну заборгованість. Я ніколи не розглядав ідею, що технічна заборгованість нормальна, поки інтерес не почне вбивати вас. Тепер я бачу, що управління боргом набагато важливіше, ніж його усунення. Я ніколи раніше про це не думав. (btw Я також використовую техніку pomodoro.)
adj7388

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

94

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

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

Зараз я починаю з біографічних свідчень.

Трохи контексту. Мені 47. Я почав програмувати в 12 в 80-х. Ще в середній школі я працював за сумісництвом професійним ігровим програмістом. В основному це не отримало у мене стільки грошей, достатньо лише придбати обладнання, але я насолоджувався цим і багато чому навчився. У 18 років я розпочав офіційне вивчення інформатики.

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

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

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

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

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

Дійсно, дуже ймовірно, що код, на який ви вважаєте, що добре спочатку писати, потребує вдосконалення, як і справді поганий.

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

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

Я також відвідував XP Dojo, який практикував коди з іншими програмістами, щоб інтерналізувати практики XP. Це допомогло. Це зробило вищезазначені формальні методи інстинктивними. Також допомогло програмування пар. Робота з молодими програмістами дає певний імпульс, але з досвіду ви також бачите, чого вони не роблять. Наприклад, у моєму випадку я часто бачу, як вони беруть участь у надмірно складних проектах, і я знаю, що може призвести до кошмару дизайну. Пішов таким чином. Зробив це. Були проблеми.

Першочерговим моментом для мене є утримання потоку. Бути швидким - це справді успішно утримувати потік.

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

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

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


22
+1 за "швидше писати речі, які два рази пишуть щось ідеальне"
Брендан Лонг

2
+1 для обміну особистою історією, яка, як я очікую, буде впізнаваною та корисною для запитувача.
Р. Шреурс

Я погоджуюся, у вас може виникнути блок кодерів (наприклад, блок запису). Ви не можете керувати складністю, тож подумки. Лікування те саме, що і для блоку письменника; написати щось . Незабаром у вас з’явиться щось на екрані, воно дасть вам ідеї, як діяти далі. Вам, напевно, були надані такі поради в менш виразній формі, як: "Не хвилюйтеся про ефективність / помилки / що завгодно, просто швидко зробіть щось". Ну, це половина відповіді. Друга половина полягає в тому, що, як тільки ви проходите повз порожній екран, робите фактичну обробку помилок, ефективний альго або все інше.
SeattleCplusplus

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

41

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

Або збільшення дефіциту, або зниження ЕТА

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

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

Коли хто приймає цю точку зору, тоді два важливі моменти стають очевидними:

  1. очікування клієнтів повинні бути чіткими (у будь-якій формі);
  2. очікування клієнтів завжди можна змінити, і це робиться завдяки мистецтву переговорів.

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

Створення F16 відрізняється від побудови Cessna, хоча вони обидва можуть літати.


24

Проста відповідь: прийміть це.

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

Є деякі клієнти, які із задоволенням приймуть код рівня "Доказ концепції" та запускають його у своїх живих системах, і часто вони мають системних адміністраторів, які добре звикли до цього. Системи IME, як правило, недоступні протягом години або близько цього посеред ночі, тоді як трапляється купа запланованих перезавантажень. Але вони прийняли ділове рішення, що саме так вони хочуть котитися. В ідеалі, оскільки їх поле настільки швидкоплинне, що якісний код ніколи не буде готовий, але часто тому, що вони не бачать значення (якщо система "просто працює", вони ніколи цього не помічають, тому ця система не представляє значення для гроші). Якщо це вас занадто турбує, намагайтеся уникати цих клієнтів.

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


4
Той твій "трохи випадковий для мого вподобання" твій чорнобильський порівняння зробив мій день. Я насправді голосно сміявся :)
Zilk

16

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

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


15

Правда полягає в тому, що сучасні системи стають все складнішими. Комп'ютер зараз схожий на ту гру "Jenga", де ви всі ці п'єси покладаєтесь на багато інших. Витягніть неправильний шматок, і у вас виникла помилка, витягніть правильний / потрібний шматок, і ви все одно можете створити помилку. Чим складніша система, тим більше часу ви, ймовірно, будете витрачати на роздуми про способи зробити свій код більш надійним і, сподіваємось, більш безпечним. Швидкість була б непоганою, але я думаю, що в наші дні швидкість займає заднє місце, коли ви чуєте в новинах про те, що компанія "XYZ" була взломана і було вкрадено 6 мільйонів номерів кредитних карток клієнта.

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

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


9

Здається, ви знаєте свою схильність думати про все, що може піти не так.

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

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

Пам'ятайте:

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

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


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

7

Я бачу лише те, що «ти стаєш все більш цінним».

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

Одне б ви зауважили, що ваш код буде тепер безпечнішим та рентабельнішим.

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

Моя пропозиція буде зосередитись на цій частині.


7

коли сумніваєтеся за замовчуванням погано цитуючи Knuth ...

"Передчасна оптимізація - корінь усього зла".

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

Що насправді працює для мене ...

  1. Пишіть одиничні тести так, ніби весь код зроблений.
  2. документуйте інтерфейс.
  3. реалізувати інтерфейс.

що ви насправді зробили:

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

також розраховуйте на твердження в ранньому розвитку ... тоді з’ясуйте, які засоби потрібно застосувати, і ви не зможете написати код, який недоступний або важко перевірити.


Звучить, як дядько Боб, твердий хлопець.
Warren P

6

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

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

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


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

6

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

Розглянемо наступні наслідки створення слабко написаного фрагмента коду:

  1. Цілу базу даних скидають через день. 48 годин простою під час відновлення резервних копій.
  2. Записи клієнтів перехресно пов'язані. Замовлення на суму 200 доларів відправляються невірним клієнтам на місяць.
  3. Замовлення застрягає в неправильному статусі раз на тиждень. Замовте кораблі, але на склад, потрібно викликати службу підтримки кожного разу, коли це станеться.
  4. Один раз на два тижні або близько того, програма виходить з ладу, і користувач повинен повторно ввести дані варті 2 хвилини.
  5. Раз на місяць додаток зависає при запуску. Користувачеві потрібно вбити процес і почати заново.

Перший очевидно неприйнятний. №2 - №5 може бути, а може і не бути, залежно від характеру бізнесу. №2 - №5 потрібно оцінювати в контексті інших проблем, з якими стикається бізнес.

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


5

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

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


4

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

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

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

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


3

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

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

Спочатку як технічний архітектор -> архітектор рішення -> архітектор підприємства -> головний архітектор тощо.

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

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

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


3

Ще один варіант: припиніть писати код, а замість цього заздалегідь продайте свій досвід у вирішенні проблем.

Іншими словами, станьте консультантом .

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

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

Зосередьтеся на своїх сильних сторонах.
(ну, якщо це вам подобається ...)


2

Моя найкраща рекомендація для вас: будівельні блоки.

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

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

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

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

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

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


1

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

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

Тому великі досягнення в даний час і в майбутньому будуть надходити від програмістів - просунуті алгоритми та більш ефективний код.

Якщо ви подивитеся на GTA 4 та GTA 5, то відмінності вражають. Але вони обидва працюють на одному і тому ж обладнання. Це результат деякої дуже розумної та передової практики програмування, яка просто не була потрібною або доступною 10 років тому.

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


1

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

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

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

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

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


1
Реакція ОП полягає в тому, що всі спостережувані потенційні проблеми потребують попередження. Це могло бути правдою, коли він починав як молодший програміст (оскільки потенційні проблеми, які він виявив тоді, зазвичай означали величезне поліпшення якості), швидше за все, це вже не так: Як пояснює @igorrs: не робіть автоматично висновок, що кожен Потенційну проблему, яку ви бачите, необхідно запобігти - свідомо вирішіть, чи потрібно. Це перевага у вас є більш молодших програмістів: вони можуть тільки запобігти тому , що вони можуть бачити, в той час як ви можете запобігти тому , що на самому справі потребує в запобіганні.
Астропоїзд

0

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


0

Словами Edsger Dijsktra: "Якщо налагодження - це процес видалення програмних помилок, програмування повинно бути процесом їх введення." Ви просто робите менше останніх, тому вам доведеться менше робити перших. Це лише питання навчитися витрачати час, кодуючи це правильно. Я все ще відносно молодий програміст (читайте 20 років) і прагну мати можливість кодувати щось абсолютно правильно. Година планування та 10 хвилин кодування набагато краще, ніж 10 хвилин планування, година кодування та три налагодження.

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