Несколько лет назад я опубликовал небольшую заметку под названием
"
Список книг которые должен прочитать каждый Java программист",
в которой поделился книги, которые должен прочитать каждый профессиональный Java программист не зависимо от
конкретной прикладной области, в которой он работает. Но технологий и языков программирования много.
А есть ли какие-нибудь базовые навыки, которыми должен владеть каждый
программист?
Безусловно есть. Одним из таких навыков является построение и анализ алгоритмов.
Про алгоритмы написано множество книг и учебников. Конечно, нельзя не упомянуть фундаментальный труд
Дональда Кнута
"
Искусство программирования",
классическую книгу
Никлауса Вирта
"
Алгоритмы + структуры данных = программы".
Всех не перечесть.
Однако, из всех книг про алгоритмы есть одна, которая безусловно выделяется своей глубиной, полнотой и актуальностью,
оставаясь одновременно доступной для понимания и интересной. Это замечательная книга
Томаса Кормена,
Чарльза Лейзерсона,
Рональда Ривеста, и
Штейна Клиффорда
"
Алгоритмы: построение и анализ".
В ней собраны основные алгоритмы и структуры данных широчайшего спектра применения:
от сортировок и бинарных деревьев, до линейного программирования, вычислительной геометрии и криптографии.
Книга очень удобно организована по разделам и главам, что позволяет использовать её как справочник или как учебник,
изучая её в том порядке, который интересен именно вам. Она не с проста называется "Алгоритмы: построение и анализ".
Помимо алгоритмов, она содержит подборку различных методов построения алгоритмов от метода разделяй и властвуй,
до динамического программирования и жадных алгоритмов, а также содержит введение в математический аппарат, который
необходим для их анализа и справочный материал по нему.
Эта книга представляет собой уникальный труд. Она сочетает широту и глубину изложения материала с абсолютной математической
точностью. При этом она доступа и полезна для программиста-профессионала как справочное руководство по алгоритмам.
В 2009 году было выпущено её третье издание и в 2012 году планируется выпуск его перевода на Русский язык.
В современном мире создаются программные комплексы всё большего размера и сложности.
Количество модулей, слоев архитектуры, и уровней абстракций постоянно растет. Программисты могут решать сложнейшие задачи
написав всего несколько строчек кода. Однако, каждая программа это в первую очередь алгоритмы и структуры данных. Может вам
не приходилось самим писать реализацию алгоритма сортировки, но если вы программист,
то вам наверняка приходилось использовать её библиотечную реализацию.
Может вам не приходилось сталкиваться с графами, но если вы программист, то вы наверняка сталкивались с массивами и списками.
Может вам не приходилось разрабатывать алгоритм поиска текста в строке, но если вы программист, то вы разрабатывали алгоритмы для
решения тех задач, которые перед вами стояли.
Построение и анализ алгоритмов это основа профессиональной деятельности любого программиста и основа профессионального
образования программиста. Книга "Алгоритмы: построение и анализ" содержит материал, который должен знать каждый программист.
UPDATE: А еще
программист должен знать языки программирования.