Чому одні помилки настільки поширені, і що ми можемо зробити, щоб їх запобігти?


20

Схоже, що помилки окремо є однією з найпоширеніших (якщо не самих) найпоширеніших помилок програмування (див. Https://softwareengineering.stackexchange.com/questions/109/what-are-common-mistakes-in-coding) та звичайна мудрість).

З якої причини вони настільки поширені, чи це щось пов’язане з тим, як працює людський мозок?
Що ми можемо зробити, щоб однією помилкою не потрапити в здобич?


8
Вони поширені? Я виробляю свою справедливу частку помилок, але помилки поодинокі серед них дуже рідко. Можливо тому, що я здебільшого використовую Python, тобто використовую ітератори, а не жонглювати індексами? (І: що нам це говорить

Чим менше ви повинні думати, тим продуктивніше ви?
Мальфіст

@delnan: Я згоден. Помилки один за одним, як правило, першими виявляються, коли я кодую (перш ніж я навіть перейду до офіційної "фази тестування").
FrustratedWithFormsDesigner

7
Я майже помилково відповів на попереднє питання ...
DevSolo

> Що ми можемо зробити, щоб однією помилкою не потрапити на здобич? Використовуйте ітератор .
Джим Г.

Відповіді:


18

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

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


6
+1 для інкапсуляції. Найгірші помилки, що я коли-небудь бачив, - це те, що частина програми базується на 1, а частина - на основі 0, і кожна функція, яку вона використовує, ви повинні пам'ятати, яка вона була, і чи потрібно вам робити перетворення чи ні, і в якому напрямку рухатися. Пару місяців тому мені довелося відшукати важку помилку « 2 за нею», оскільки погана інкапсуляція означала, що хтось робив помилки «за 1» у двох окремих місцях складання. Повсюдно відбувалися конверсії, за якими неможливо було прослідкувати, і я зміг звести її до однієї конверсії одним методом.
Карл Білефельдт

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

7

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

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

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


4

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


2
І тоді є задоволення від перемикання між мовами програмування, які DO-індекс починаються з 1 (наприклад, PL / SQL).
FrustratedWithFormsDesigner

3
+1 для цього. 1-індексована нумерація відповідає на питання "скільки їх є?", Яке чітко відображає більшість завдань реального світу. 0-індексований - це про те, "в якій позиції є кожен предмет?", Який менше використовується в м'ясному просторі.
Dan Ray
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.