Программисты придумали и реализовали множество
языков программирования
для решения различных задач. Языки программирования общего назначения могут быть использованы для решения любой задачи,
но совсем не обязательно являются наиболее удобными для решения конкретной задачи. Например, обработать текстовый файл с данными на каждой строке намного
удобней на
AWK чем на
Java,
C++
и, тем более, удобней чем на
C.
Но именно языки общего назначения занимают первые строчки в
рейтингах популярности TIOBE
в силу своей универсальности.
Работа инженера-программиста,
как я уже писал, как и работа любого инженера,
заключается в умении правильно использовать накопленный опыт и знания для решения поставленной задачи.
Язык программирования это главный и основной инструмент программиста, с помощью которого он решает поставленные перед ним задачи.
Программист должен профессионально владеть как минимум одним языком программирования и досконально знать его.
А доскональное знание чего-либо подразумевает не только знание о том, как его использовать, но и знание
о том, как оно устроено. Поэтому принципы построения компиляторов и языков программирования являются обязательной дисциплиной
в профессиональном образовании программиста. В отличие от другой обязательной дисциплины,
дизайна и анализа алгоритмов, я не могу здесь порекомендовать какой-то
одной всеобъемлющей книги, однако нельзя не упомянуть классическую книгу
"
Компиляторы: принципы, технологии и инструменты"
под авторством
Альфреда Ахо (буквы A в языке AWK) и других.
В принципе, там содержится более чем достаточный объем материала для любого программиста, профессией которого не является создание языков программирования
и компиляторов к ним. Вот такой вот, на первый взгляд, парадокс: книга о создании компиляторов дает достаточно знаний всем программистам, кроме тех,
которым нужно создавать компиляторы. Все-таки для профессионального создания компиляторов и языков программирования нужно знать намного больше,
в том числе нужно знать намного больше различных языков программирования, а книга Ахо не дает не только полноценного обзора языков, но даже
не знакомит с различными
парадигмами программирования.
Однако, в современном мире получается так, что каждый программист должен знать несколько языков программирования. Даже если
основным инструментом программиста является язык общего назначения, в работе неизбежно возникают ситуации, где
использование какого-либо специализированного или предметно-ориентированного языка более оправдано. Если основная работа
происходит на языке высокого уровня абстракции, то порой бывает необходимость воспользоваться более низкоуровневым языком ради производительности.
Например, большое число расширений к статистическую языку
R пишутся на C/C++.
А если основная работа программиста происходит на более низком уровне, то для экономии времени при решении специфических задач приходится
использовать специализированные языки более высокого уровня абстракции. Например, для работы с базами данных обычно используется
язык
SQL,
независимо от того, на чем пишется остальная логика приложения.
Порой
"
лучше день потерять, потом за пять минут долететь",
ведь изучение нового языка программирования не только может упростить решения стоящей перед программистом в данный момент задачи,
но и расширит кругозор на будущее.
Чем больше языков программирования знает и умеет применять программист, тем лучше он может выбрать наиболее подходящий язык для
решения той или иной задачи с учетом всех стоящих перед ним требований и ограничений. Но создание больших программных продуктов
требует от программиста умения работать в команде, что накладывает дополнительные ограничения, которые необходимо учитывать
при принятии решения. Надо учитывать необходимость обучения новому языку всей команды, а это существенно меняет ситуацию,
при которой использование экзотического языка программирования будет оправдано. Более подробно я раскрою эту тему в отдельной заметке,
так как это замечание верно не только для языков программирования, но и для библиотек, каркасов и технологий вообще.
UPDATE: Для развития мысли
заметка про язык Си здесь в продолжение.