Запахи кода, которые считаются фатальными во время собеседований по программированию
У каждого языка программирования есть одно или несколько руководств по стилю кодирования. Все разработчики это знают, но некоторым все равно. Они практикуют вредные привычки программирования в течение многих лет, не осознавая важности проблем, которые они вызывают.
Как один из менеджеров по найму в Zuhlke Hong Kong, я видел много запахов кода во время собеседований по программированию. Вот 16 основных неправильных методов кодирования, разделенных на 6 категорий: стиль кодирования, грязный код, тестирование, обработка ошибок, сложность кода и оптимизация.
Первые 8 кодовых запахов рассматриваются в Части 1, остальные — во Части 2.
Обработка ошибок
Закон Мерфи гласит, что
Все, что может пойти не так, пойдет не так
Обработка ошибок — это просто часть всего программного обеспечения. Каждое созданное программное обеспечение должно иметь некоторую форму обработки ошибок. Некоторые информируют пользователей о возникших ошибках, отображая сообщения об ошибках. Некоторые скрывают ошибки от пользователей, но все равно регистрируют инцидент где-то для устранения неполадок. Но есть некоторые разработчики, которые убеждают себя в том, что ошибки мнимые и их не нужно обрабатывать.
9. Обработчики ошибок без операций
В некоторых языках программирования есть понятие проверяемые исключения. Необходимо обрабатывать эти потенциальные ошибки во время компиляции. Я видел много разработчиков, которые обрабатывают такие случаи ради удовлетворения компилятора. Они ловят исключение, но решают ничего с этим не делать.
10. Разработка, основанная на ошибках
Подобно разработке через тестирование, подход, основанный на ошибках, относится к процессу обдумывания обработки ошибок и пограничных случаев, их реализации в первую очередь и разработки остальных вокруг них.
Перво-наперво. Если вы не можете найти правильный путь, бесполезно обрабатывать любые ошибки.
Когда вам поручают решить проблему в течение ограниченного времени, всегда стремитесь максимизировать ценность результата. Сначала получите частичное решение, а затем улучшите его.
11. Игнорируйте сообщения об ошибках
Не все сообщения об ошибках полезны, но некоторые действительно полезны. Они сообщают вам, из какой строки кода произошла ошибка, с подробной причиной. К сожалению, некоторые разработчики предпочитают их игнорировать.
Всякий раз, когда в консоли появляется ошибка, они немедленно переключаются обратно в свою IDE и пытаются найти, откуда она взялась. Разве сообщение об ошибке не сообщило им именно об этом?
Сложность кода
Одним из способов измерения сложности дизайна программного обеспечения является цикломатическая сложность. Высокая сложность означает, что человеку трудно понять. Другими словами, чтение кода займет больше времени.
Хорошие проекты программного обеспечения имеют низкую цикломатическую сложность. Одним из основных различий между младшими и старшими разработчиками является сложность их кода, который решает одну и ту же задачу. Младшие разработчики, как правило, решают простые проблемы, используя сложные подходы, в то время как их старшие коллеги, как правило, решают ту же проблему, используя более простые решения.
12. Высокая условная сложность
Чем больше кандидатов я встречал на собеседованиях по программированию, тем очевиднее становились способы решения проблем младшими разработчиками. Наиболее распространенный подход — добавить условную проверку для каждого варианта использования, который они не могут обобщить. Этот подход работает, он обычно решает проблему, но плохо и безобразно.
Кандидаты, прошедшие кодовый тест Zuhlke, использовали минимальное количество условных проверок.
13. Особые случаи и магические значения
Менее опытные разработчики склонны рассматривать все как частные случаи. В процессе реализации частного случая часто создаются магические значения. Например, разработчик может вернуть отрицательное число, такое как -1 или -99, чтобы показать, что с функцией что-то не так. Теперь -1 больше не означает -1, а что-то другое. Это действительно плохо.
Чем больше магических значений создано, тем меньше шансов, что кандидат пройдет интервью по программированию.
Оптимизация
Программное обеспечение следует разрабатывать в следующем порядке: заставить его работать, затем улучшить и сделать его быстрым. Большинство кандидатов на собеседовании по программированию согласятся, что решение данной проблемы имеет высший приоритет. Но это не значит, что оптимизации не важны, особенно самые очевидные.
14. Неоптимизированный код
Существует неограниченное количество способов создания неоптимизированного кода, если мы об этом не знаем. Это может быть что-то, что выполняется медленно, или что-то, что тратит впустую вычислительную мощность и память.
В Java у нас есть объектный эквивалент примитивных типов. Время от времени я видел кого-то, кто использует Integer
вместо int
без всякой причины.
Для циклов рассмотрите возможность извлечения вызовов функций внутри циклов за пределы цикла. Это легко и очевидно сделать, так что давайте не будем убеждать себя, что мы можем написать глупый код и оптимизировать его позже. Такая простая оптимизация должна быть сделана в первую очередь.
15. Отсутствие значимой оптимизации
Многие разработчики перестают решать проблему, когда их код работает впервые. Они довольны созданной ими магией. Ну давай же! Это просто неправда почти во всех случаях.
Мы еще многое можем сделать после того, как наш код заработает. Как это будет использоваться? На каких машинах? Что такое пользователи? Можно ли его использовать в многопоточной среде?
Ваш код становится неоптимизированным после того, как вы узнаете больше о его среде.
16. Использование неправильных инструментов
Важно использовать правильные инструменты для правильной проблемы. Я бы провалил кандидата, если бы он предложил использовать платформу Express только потому, что ему нужно использовать JavaScript для создания простого алгоритма подсчета, который запускается в консоли. Те, кто никогда не понимает, что такое JavaScript, откажутся от использования Vanilla JS. Для них JavaScript — это Express.
Не дай мне лес, если я попрошу только дерево.
Рассмотрите кодовые запахи с 1 по 8 в части 1.
Важно уметь распознавать запахи кода, особенно в собственном коде. Вот одни из самых лучших книг о том, как писать код, который качается:
- Чистый код: руководство по гибкому программному мастерству от дядюшки Боба
- Code Complete: Практическое руководство по созданию программного обеспечения Стива МакКоннелла.
- Искусство написания читаемого кода: простые и практичные методы написания лучшего кода Дастина Босуэлла.
- Прагматичный программист: от подмастерья до мастера Эндрю Ханта и Дэвида Томаса.