Предлагаю читателям «Хабрахабра» перевод небольшой заметки «Organizational Skills Beat Algorithmic Wizardry» за авторством James Hague. Заметка показалась интересной и мне захотелось поделиться с аудиторией.

Много раз я читал о технических собеседованиях в крупнейшие компании и был очень рад, что не ищу работу программиста. Способность написать оригинальные реализации кучи или дерева. Головоломки с различными ограничениями. Задачи, на обсчёт которых потребуется десять миллиардов лет если вы не сможете правильно проанализировать и перефразировать требования. Моя первая реакция – как вообще им удаётся хоть кого-нибудь нанять?

На самом деле большая часть работы программиста не требует такого алгоритмического мастерства.

Когда вы пишете код самый важный навык для вас – как удержать всё это нагромождение функций от разрушения под тяжестью собственной сложности. Я работал над крупными телекоммуникационными системами, консольными играми, блогами, несколькими персональными утилитами. Очень-очень редко мне приходилось работать с хитрыми структурами данных или алгоритмами. Чаще требуется отслеживать состояния, сортировать структуры, внимательно разбираться как разные части системы взаимодействуют друг с другом. Написание кода является лишь частью задачи. После него идут рефакторинг, упрощение, исключение избыточных манипуляций.

Именно по этой причине многие становят��я программистами «случайно». Вряд ли вы часто встречаете людей, которые стали нейрохирургами между делом, просто занимаясь этим в своё свободное время. Это требует очень интенсивного и специфического обучения. Но научиться писать код легко и многие это делают. Когда я начинал программировать на 8-битном домашнем компьютере я даже не знал что такое алгоритм. Я не представлял как сортировать данные и мне это не требовалось для тех простеньких игрушек, которые я тогда писал. Мне достаточно было знать про счётчики, таймеры и управление состоянием. Для этого не нужна «гениальность», достаточно здравого смысла.

Несколько лет назад я написал утилиту, которая преобразует изображения в прямоугольные текстуры. Программа небольшая – около 1500 строк кода на Erlang и C. Упаковкой изображений в прямоугольник занимается совсем маленький фрагмент кода длиной около 20 строк. Написать его было не сложно, но вряд ли бы я справился с этим на собеседовании. Остальная часть кода занимается чтением файлов, выводом результатов, обработкой параметров изображений и передачей данных между разными частями приложения. Именно этот код я чаще всего модифицирую когда нужно добавить что-то новое, улучшить обработку ошибок или улучшить удобство использования.

И именно так выглядит большая часть разработки программного обеспечения.