10 типових помилок Java-програмістів


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

Яких помилок найчастіше припускаються новачки в програмуванні? Можливо, вони завжди плутають рівність (==) з привласненням (=), або & з &&? Або ж, можливо, вони використовують неправильні роздільники в циклі for (for (int i = 0, i < 5, i++))?

Щоб відповісти на ці запитання, дослідники розглянули помилки понад 250 000 Java-новачків зі всього світу. Використовуючи велику кількість даних (вихідний код більше як 37 млн компіляцій, якщо бути точними), вони виявили найбільш поширені помилки студентів, які вивчали Java. Також вони з’ясували, як багато часу займало навчання на власних помилках. Результати виявилися вражаючими.


The Blackbox data collection project

Вивчення нової мови програмування – це завжди виклик, оскільки Ви повинні навчитися виражати свої складні думки, використовуючи обмежену, формальну граматику. Природно, багато новачків припускаються помилок у програмуванні. Дослідники з Університету Кента (Велика Британія) розглянули код, який був зібраний майже у 265 000 студентів по всьому світу.

Проект під назвою Blackbox data collection побудований на основі BlueJ, безкоштовною Java IDE, спроектованою спеціально для новачків. BlueJ намагається усунути бар’єри на шляху до успіху для новачків, наприклад, виділяючи початок і кінець блоку коду. Це полегшує студентам процес візуального сканування коду на наявність зайвих фігурних дужок. Ще одна особливість цієї IDE – це можливість перевірки об’єктів прямо під час роботи програми. Таким чином, це допомагає розумінню принципів роботи програми, а також відладці.

Blackbox також працює як розширення для BlueJ, яке збирає різну анонімну інформацію про те, як використовується програмне забезпечення. Наприклад, воно збирає інформацію про те, які функції виконуються і коли, а також з якими помилками і як часто. Кількість даних величезна. Тільки за один навчальний рік (2013-2014) було оброблено 37 158 094 компіляцій, 19 476 087 з яких були успішними, інші ж 17 682 007 – невдалими.

Тоді як більшість людей і думати не можуть про обробку такої великої кількості даних, Амджад АльТадмрі (Amjad Altadmri) й Нейл Браун (Neil Brown) розглянули кожен із 46 448 212 файлів, що брали участь у 37 млн компіляцій, про які йшлося вище. Вони також відстежували зміни у файлах протягом тривалого періоду часу. За кожною компіляцією вчені перевіряли вихідний код для того, щоб присвоїти йому одну з 18 можливих категорій помилок (які вони позначили буквами від А до R). Вони також підрахували кількість часу, який знадобився студентові для того, щоб виправити свою помилку (шляхом перевірки файлу, в якому помилка вже була відсутня).


10 типових помилок програмістів-початківців у Java 

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

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

Проте якщо звернутися до зібраних даних, складається чіткий рейтинг із 10 помилок (буквами від А до R позначені 18 категорій помилок, що брали участь у дослідженні), що найчастіше зустрічаються:

С. Незбалансовані дужки, фігурні дужки або лапки, а також використання цих символів поперемінно, наприклад: while (a == 0].

I. Виклик методів з неправильними аргументами або типами аргументів, наприклад: list.get (" abc").

O. Контрольний потік може досягти кінця non-void методу без повернення, наприклад:

public int foo (int x) { if (x < 0) return 0; x += 1;}

А. Плутанина з операторами привласнення (=) і порівняння (==), наприклад: if (a = b).

N. Ігнорування або відкидання поверненого значення методу з non-void типом повернення, наприклад: myObject.toString ();.

B. Використання == замість .equals для порівняння рядків.

M. Спроба викликати non-static метод так, ніби це був static метод, наприклад: MyClass.toString ();.

R. Спроба класу реалізувати інтерфейс, але відсутність реалізації всіх необхідних методів, наприклад: class Y implements ActionListener { }.

P. Виклик типів параметрів за виклику методу, наприклад: myObject.foo (int x, String s);.

E. Неправильне розставляння ком в умовах if, а також циклах for і while, наприклад: if (a == b); return 6;.

Найбільш частою є помилка – це C (забуті дужки, помилки в їх розставлянні) – якраз те, чому намагається протистояти BlueJ, використовуючи підсвічування. Це виведення може бути ознакою того, що помилки типу С ще частіше зустрічатимуться в IDE, які не надають жодних засобів для відладки.

Дивно, але наступні помилки не потрапили в ТОП-10:

D. Плутанина з використанням операторів “короткого замикання” (&& і ||) і звичайних операторів логіки (& і |).

J. Відсутність дужок після виклику методу, наприклад: myObject.toString;.

Q. Привласнення змінної значення з типом, несумісним із типом змінної, наприклад: int x = myObject.toString ();.

F. Неправильні роздільники циклу for (використання коми замість крапки з комою) наприклад: for (int i=0, i < 6, i++).

H. Використання ключових слів як імен змінних або методів, наприклад: int new;.


Скільки часу займає навчання на своїх помилках

Крім того, коли Браун і АльТадмри вивчили, скільки часу потрібно, щоб студенти виправили помилку, стало ясно, що найбільш поширену помилку (помилка С) швидко можна було знайти. Інші помилки знайти було важче. Серед таких помилок виявилась плутанина між операторами & і | чи && і || (помилка D) використання == замість .equals для порівняння рядків (помилка B) та ігнорування або відкидання поверненого значення методу з non-void типом повернення (помилка N). Вони залишалися непоміченими понад 1 000 сек. (після чого відстежування не тривало) або не були знайдені взагалі ніколи.

Медіана, що показує співвідношення час-виправлення (time-to fix), показана на рисунку нижче.

P.S. Від редактора: потішно, але в статті про типові помилки програмістів автор припустилася найпоширенішої помилки програмістів – виявилась не закритою дужка тега . Будьте уважні до свого коду!

Переклад статті “Beginners 10 most common Java programming mistakes revealed by Big Data”

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *