Недавно у меня было собеседование, на котором мне дали час, чтобы написать настоящий код. Это не было огромное количество, вероятно, менее 100 строк. Примерно через 45 минут я скомпилировал, запустил его и заставил работать. Возможно, я потратил 5-10 минут на разработку ошибок компиляции и пару незначительных ошибок, но в целом все было очень гладко. (Кстати, я получил предложение от них.)
Однако, то, что озадачило меня, было то, что после того, как я передал законченный код, интервьюер сказал мне, что единственное, что я сделал неправильно, это «не компилирую, как я иду». Я спросил его, в чем разница, и он сказал: «Что бы вы сделали, если бы вы закончили код, а он не скомпилировался вовремя».
В моем понимании это неверный аргумент, потому что «получение кода для компиляции» для заданной длины кода обычно включает в себя исправление постоянного числа ошибок компиляции и занимает довольно постоянное количество времени, которое должно быть одинаковым, если вы делаете это после того, как закончите писать код, или если вы чередуете его со временем кодирования. Во всяком случае, прерывание вашего кодирования для поиска пропущенных точек с запятой, вероятно, нанесет ущерб вашей эффективности. За исключением экстремальных обстоятельств, когда я экспериментирую с неясностями вокруг граничных случаев с такими вещами, как виртуальные функции в производных классах и т. Д., Кажется разумным ожидать, что код, написанный опытным разработчиком, будет компилироваться, за исключением случайной ошибки ввода и даже если это не так
В другом подобном инциденте мне дали неполное кодовое основание в интервью, и попросили закончить это и внести необходимые изменения, чтобы заставить это работать. Я начал с чтения существующего кода, а затем, через несколько минут (даже до того, как я закончил просматривать код), интервьюер сказал мне, что этого достаточно. Когда я спросил его, что бы он сделал (то есть «что я сделал не так»), он сказал мне, что начал бы с немедленного получения кода для компиляции.
Почему это вообще актуально? По моему мнению и по моему опыту, является ли часть кода компиляцией по существу случайной, включая такие вещи, как отсутствие или отсутствие точек с запятой, и имеет мало общего с правильностью базовой программы. (Для меня сосредоточение на компиляции похоже на проверку статьи без проверки правописания для проверки грамматики.)
Если вы дадите мне часть неполного кода, я в первую очередь буду его читать. Я даже не буду пытаться скомпилировать его, пока не узнаю, что делает код, и я знаю, что алгоритм верен.
В любом случае, это были всего лишь пара недавних инцидентов, но в целом я слышал, как многие разработчики говорили о компиляции своего кода по мере их продвижения, и все же никто так и не смог мне рассказать о преимуществах этого. Я понимаю преимущества тестирования вашего кода по мере продвижения, но зачем компилировать?
Итак, мой вопрос заключается в следующем: я что-то пропустил? Есть ли польза от компиляции по ходу дела? Или это какой-то миф, распространяемый сообществом разработчиков программного обеспечения, о том, что вы должны часто компилировать свой код?