Я расскажу историю о случае, когда это случилось со мной.
Я хотел реализовать новый алгоритм решения типа кадра для x264, который использовал прямое динамическое программирование (алгоритм Витерби). Но это будет сложно, грязно, безобразно и так далее. И я действительно не хотел этого делать. Я пытался перебросить проект на Google Summer of Code, но из-за какого-то ужасного невезения один ученик, которого мы просто взяли на поруки над его проектом ... был студент, который выбрал этот проект.
Так что после двух месяцев жаловаться на это и уклоняться, я наконец-то приступил к работе над алгоритмом. И вот как я это сделал.
Сначала я поговорил с другим разработчиком, который, очевидно, уже имел некоторые идеи о том, как это сделать. Мы обсудили это, и он объяснил мне, пока я полностью не понял процесс с алгоритмической точки зрения. Это первый шаг любого такого проекта: настолько хорошо разберитесь в алгоритме, который стоит за ним, чтобы вы могли псевдокодировать всю эту вещь.
Затем я поговорил с другим моим коллегой. Мы подошли к доске, и я набросал ее, пока он тоже не понял. Объяснив это кому-то еще, я обрел понимание. Это второй шаг: объясните алгоритм кому-то еще так хорошо, что они могут псевдокодировать его. Это эмуляция процесса программирования, поскольку программирование - это форма «объяснения» алгоритма компьютеру.
Затем я написал простой прототип Java, который использовал произвольные ложные значения для функции стоимости и использовался исключительно для проверки поиска Витерби. Я закончил и проверил на предмет исчерпывающего поиска - он идеально подошел. Мое динамическое программирование было правильным. Это третий шаг: напишите наиболее простую форму алгоритма в максимально простой среде.
Затем я перенес его на C, родной язык x264. Это снова сработало. Это четвертый шаг: перенести эту простую форму алгоритма в полную среду.
Затем, наконец, я заменил функцию фиктивной стоимости на реальную. После некоторого bughunting и исправления, это работало. Это последний шаг: полностью интегрировать алгоритм с окружением.
Этот процесс занял всего неделю, но с точки зрения меня в начале проекта, он был совершенно пугающим, и я не мог заставить себя даже начать - все же, разбив его на такой шаг, пошаговый процесс, я смог не только сделать это , но и сделать это намного быстрее, чем я ожидал.
И преимущества вышли далеко за пределы x264; Теперь я так хорошо понимаю Витерби, что теперь могу объяснить это другим ... и эти другие могут извлечь из этого большую пользу. Например, один из разработчиков ffmpeg использует адаптацию моего алгоритма и кода для оптимального решения несколько иной проблемы: оптимальное размещение заголовка в аудиофайлах.