Ответ 1
Очень хорошие объяснения парадигм программирования и концепций программирования, из которых построены эти парадигмы, найдены в работах Питера ван Роя. Особенно в книге Концепции, методы и модели компьютерного программирования Питера Ван Роя и Сеифа Хариди. (Здесь сопутствующая вики.) CTM (как это общеизвестно в отрасли) использует multi-paradigm Язык распределенного языка Oz, чтобы представить все основные парадигмы программирования.
Питер ван Рой также сделал этот удивительный плакат, который показывает 34 основные парадигмы, их отношения и позиции на разных осях. Плакат в основном представляет собой невероятно сжатую версию CTM. Более подробное объяснение этого плаката содержится в статье Программирование парадигм для чайников: что должен знать каждый программист, которая появилась в качестве главы в книге New Вычислительные парадигмы для компьютерной музыки, под редакцией Г. Ассаяга и А. Герцо. Это объясняет, например, очень кратко и легко понять, что такое парадигма программирования, какова концепция программирования и как эти два связаны.
Еще одна замечательная книга, демонстрирующая несколько основных парадигм программирования, - это Структура и интерпретация компьютерных программ Гарольда Абельсона и Джеральда Джей Суссмана. Эта книга была основой MIT Introduction to Programming (6.001) для студентов в течение нескольких десятилетий. Курс, преподаваемый самими Абельсоном и Суссманом, был записан на корпоративном обучении Hewlett-Packard в 1986 году.
Вы можете найти видеозаписи и учебные материалы из курса Spring 2005 на веб-сайте MIT OpenCourseWare. Еще одна запись курса из маломасштабного проекта Университета АрсДигита MIT. SICP также преподавался в других университетах, фактически курс 2010 года в Беркли только что закончился.
SICP, поскольку он общеизвестно, вероятно, является одной из лучших книг по программированию, когда-либо написанных.
Основное различие между SICP и CTM - это дидактический подход: CTM демонстрирует большинство основных парадигм, используя чрезвычайно мощный язык с несколькими парадигмами, который уже поддерживает их (в основном распределенные Oz, но также и некоторые другие). SICP OTOH демонстрирует их, реализуя их на языке, который не поддерживает их изначально (подмножество Схемы). IOW: CTM научит OO показывать программы, написанные на языке OO, SICP, внедряя систему OO на Схеме. Увидев Object-Orientation, реализованную в дюжине строк кода, это потрясающе.
Концепции дизайна на языках программирования (Франклин А. Турбак и Дэвид К. Гиффорд с Марком А. Шелдоном) - еще одна замечательная книга.
Концепции языков программирования (Роберт В. Себесто) объясняет, ну, концепции языков программирования, начиная с Konrad Zuse Plankalkül, продолжая первые реальные языки программирования, такие как Fortran, Lisp, Cobol, Algol, BASIC и на C, С++, Java и Ada.
Понятия на языках программирования (Джон К. Митчелл) - это еще одна книга, которая часто цитируется, но я еще не читал себя, к сожалению.
То же самое для Основы языков программирования (Daniel P. Friedman и Mitchell Wand) aka EoPL.
Язык программирования Pragmatics (Майкл Л. Скотт) больше посвящен внедрению концепций языка программирования, однако он также говорит о них таким образом, что как сообщается, очень доступно. (Опять же, я не читал этого.)
Поскольку вы много спрашивали о типизации, я бы отказался не упоминать Типы и языки программирования (Бенджамин К. Пирс), или TaPL, как его обычно называют. Это в основном книга о Теории Типа, относящаяся к Языки программирования. Обратите внимание, однако, что его представление о типах не является бесспорным: например, он довольно плоский, отрицает существование динамического набора текста.
Чтобы сбалансировать это очень строгое определение Пирса, вы обязательно должны прочитать блестящее Типовое программирование от Luca Cardelli. В статье он утверждает, что программирование, использующее типы как конструкцию моделирования и структурирования вместо простой системы безопасности, является самостоятельной программной парадигмой. (Это, например, резко контрастирует с плакатом и книгой Питера ван Роя, которые сознательно игнорируют типизацию.)
Отличным ресурсом является Lambda the Ultimate (на самом деле я познакомился со всеми вышеперечисленными материалами для чтения. )