Які найгірші речі, про які забули забувати недосвідчені розробники? [зачинено]


15

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

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


1
Я б точно не називав безпеку чимось, щоб перейти до "контрольного списку" - безпека повинна розглядатися на всіх рівнях дизайну, а не додаватися як думка. Особливості безпеки! = Захищені функції!
Біллі ONeal

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

@awmckinley: Тоді ваше запитання - "як я розробити заявку" - але це питання занадто широке, щоб відповідати на нього.
Біллі ONeal

@Billy ONeal: Щойно відредагував моє запитання. Це має більше сенсу?
awmckinley

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

Відповіді:


12

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

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

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


+1: принципово, це проблеми, з якими ви стикаєтесь. Молодший кодер може бути поганим у кодуванні, але тоді деякі досвідчені кодери також погані. Основна відмінність - такі предмети.
gbjbaanb

8
  1. Тести.
  2. Тести.
  3. Більше тестів.
  4. Контроль джерела
  5. Податки, відповідні будь-якій програмі, на яку ви орієнтовані.

У Windows ці податки :

  • Справа із середовищами із високим рівнем DPI
  • Профілі користувачів роумінгу
  • Швидке перемикання користувачів
  • Віддалений робочий стіл (наприклад, ви не хочете використовувати подвійну буферизацію, коли діє RDP
  • Чудово граючи з ієрархічним управлінням зберіганням даних
  • Кілька моніторів
  • 64-бітна Windows

На майже кожній платформі вам доведеться мати справу з:

  • Unicode
  • Локалізація
  • Управління живленням

Пробач, Біллі. Можливо, мені не було зрозуміло в тому, як я запитав запитання: я не так багато шукаю на практиці розробки (як контроль над джерелами). Я думаю, це було досить добре висвітлено у розділі Що ви додали до цього контрольного списку проектів розробки програмного забезпечення? . Розділ "податки", безумовно, корисний.
awmckinley

3
@awmckinley: Причина, за якою я виховую джерело управління, полягає в тому, що ви не зможете ефективно керувати випусками, не маючи змоги мати кілька керівників розробок, навіть якщо ви лише розробник соло. Вам потрібно думати про випуск n + 1, навіть коли ви працюєте над випуском n.
Біллі ONeal

5

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

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

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


3

Дійсно широке запитання; детально відповісти - це кілька книг.

Ось загальний контрольний список визначення систем, щоб розпочати роботу -

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

1

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

І як швидко ви можете реконструювати свою розроблювальну машину?

  • Чи знаєте ви, які пакунки вам потрібні?
  • Чи є у вас рішення кнопки для відновлення бази даних?
  • Чи є у вас рішення кнопки для перевірки цілісності вихідного коду?

1

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

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

Наступна річ - організація, часто вони занадто зосереджені на написаному кодом, щоб пам'ятати, як вони це зробили, і що потрібно. Тож вони забувають зв’язувати або документувати необхідну залежність. Вони також схильні ставити речі там, де вони потрапляють, мені довелося критикувати молодшого минулого тижня, який перевірив його код у кореневому каталозі, включаючи 3 wsdls, 2 з яких - той самий файл, і набір сторонніх dll, які він вчинив у підкаталог та кореневий каталог. Код не був відформатований до будь-якого стандарту, який ви могли придумати, і було кілька функцій, які були присутні, але ніколи не викликалися.

Очевидно, він працював, але це не було впорядковано, а це означало б встановлення та обслуговування, було б клопітно.


1

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

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

0

Оскільки ви запитували найгірші речі, то моя відповідь така:

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

0

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

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

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