Изучайте другие языки программирования
(В оригинале - Know Well More than Two Programming Languages)
Уже достаточно долго известен тот факт, что уровень мастерства программиста прямо пропорционален количеству различных парадигм программирования, которыми он владеет. Причем не просто знает о их существовании, а может их использовать в работе.
Любой программист начинает с изучения одного языка программирования. И этот язык оказывает преобладающее воздействие на то, как этот программист видит разработку ПО. Неважно, сколько лет он будет использовать этот язык, он все равно будет знать только этот язык и будет, так сказать, думать на этом языке.
Программист, изучающий другой язык, столкнется с проблемами, особенно если новый язык обладает другой моделью вычислений. C, Pascal, Fortran – все они используют одну и ту же модель. Перейти с Fortran на С проблем практически не составит. Переход от С к С++ потребует гораздо больше усилий, поскольку С++ уже имеет фундаментальные отличия. Переход от С++ к Haskell потребует еще большего изменения взглядов и как следствие, будет еще более сложен. А переход от С к Prolog будет представлять сложности почти наверняка.
Мы легко можем перечислить известные парадигмы вычислений – процедурная, объектно-ориентированная, функциональная, логическая и т.п. И переход между ними – наиболее сложная задача для программиста.
Что же эти сложности приносят положительного? Они заставляют нас думать о реализации алгоритмов, идиомах и паттернах в зависимости от используемой реализации. Основа экспертности – «перекрестное опыление». Идиомы одного языка могут отсутствовать в другом. И пытаясь перенести идиомы из одного языка в другой, мы обучаемся обоим языкам, а также способам решения проблем.
«Перекрестное опыление» в программировании производит огромный эффект. Один из самых характерных примеров – все возрастающее использование декларативных моделей в системах, реализованных на императивных языках. Каждый, кто погружался в функциональное программирование, легко применит декларативный подход даже при использовании языка вроде С. Применение декларативных принципов приводит к более коротким и ясным программам. С++, например, использует это в своей ключевой технологии обобщенного программирования, не могущей обойтись без декларативной модели выражений.
Вывод из всего этого такой, что каждому программисту следует овладеть минимум двумя парадигмами, а еще лучше – всеми вышеперечисленными. Программисты должны быть заинтересованы в изучении новых языков, особенно из еще неизученных парадигм. Даже если повседневная работа требует применения только одного языка, не стоит недооценивать положительный эффект «переопыления» программиста идеями из другой парадигмы. Работодателям стоит иметь это в виду, закладывая в бюджет тренинги по языкам, не использующимся в настоящий момент, с целью повысить эффективность используемых.
Конечно же, недельного курса будет недостаточно, чтобы полностью выучить новый язык. По-хорошему, потребуется несколько месяцев использования, чтобы получить ощутимый опыт его использования. При этом важно понять использование идиом языка, а не только изучить его синтаксис и модель вычислений.
Автор оригинала - Russel Winder