Теория вычислений для программистов
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6222
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6928
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4211
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3003
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3804
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3817
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6313
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3163
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3458
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7274
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10641
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12362
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13996
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9121
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7077
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5386
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4613
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3426
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3153
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3399
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3024
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Теория вычислений для программистов

Статьи / Теория вычислений для программистов

Автор: Алексей Вторников

Знаете ли вы, что такое язык программирования (ЯП)? Не торопитесь с ответом – может статься, что вы заблуждаетесь! Русскоязычная Wikipedia дает следующее определение этому понятию: «ЯП – формальная знаковая система, предназначенная для записи программ. ЯП определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно – ЭВМ) под ее управлением». В общем, это вполне приемлемое определение: краткое, емкое, но, увы, не понятное. Не верите? В таком случае давайте перечитаем это определение еще раз, но помедленнее.

Что такое «формальная», что такое «знаковая» и что такое, наконец, «система»? Кто такой «исполнитель» и что именно он «выполняет»? Любой из этих терминов, в свою очередь, с неизбежностью вынуждает нас все глубже и глубже погружаться в новые и новые определения. Эти новые определения наслаиваются друг на друга подобно коржам в торте «Наполеон» или, скорее, перепутываются как спагетти. В конце концов, до нас доходит, что все это, так или иначе, связано с математикой. Более того, это все – и знак, и система, и формализм, и выполнение, и исполнитель – и есть математика. Правда, не школьная математика, которая наводила скуку на большинство школьников. Это – область математики, которая называется теорией вычислимости.

Теория вычислимости – это сравнительно молодая дисциплина, ей нет еще 100 лет, что для математики – младенческий возраст. Первые значимые результаты были получены норвежцем Торальфом Скулемом (1887-1693) в 1923 году, который показал, как, имея в своем распоряжении несколько самых что ни на есть элементарных арифметических операций, можно построить очень широкий набор функций (арифметических, алгебраических и проч.). Это было интересно, местами даже забавно, но не рассматривалось математиками тех лет, как нечто совершенно новое.

Однако, менее чем 10 лет, в 1931 году австриец Курт Гедель (1906-1978) подхватил идеи Скулема и с их помощью доказал две поразительные и неожиданные теоремы о неполноте арифметики: в арифметике существуют истинные, но не доказуемые средствами самой арифметики утверждения. А вот это уже была настоящая революция, после которой математика ужи никогда не была прежней. До Геделя математики верили, что рано или поздно, но для любой математической задачи будет найдено доказательство; после Геделя они стали куда менее категоричными. Конечно, с появлением результатов Геделя, математика не закончилась и не остановилась в своем развитии, но Геделю удалось показать, что математика сложнее (а в чем даже коварнее), чем это казалось. Эта сложность носит не столько технический, сколько фундаментальный характер, касающийся самих основ мышления и рассуждений в математике. И вот тут началось…

Работы Геделя стимулировали математиков заново исследовать самые привычные и знакомые едва ли не с пеленок понятия. Если уж «исхоженная» вдоль и поперек арифметика оказалась такой коварной, то что говорить о более сложных разделах? Так родилась теория вычислимости. Ее рождение было ярким и красивым. Один только список имен тех, кто работал в этой области, внушает почтение – Алонзо Черч, Стивен Клини, Алан Тьюринг, Эмиль Пост, Андрей Марков (мл.), Петр Новиков, Анатолий Мальцев. Они и их коллеги в течение двадцати лет после публикации результатов Геделя создали то, что мы называем сегодня теорией вычислимости. И, кстати, очень «удачно» этот период теоретических исследований совпал с появлением первых настоящих компьютеров. Оказалось, что теория вычислимости – это теоретическая основа программирования. Такое случается не часто – когда теория и практика развиваются практически одновременно и когда они взаимно обогащают друг-друга идеями, проблемами и их решениями.

Сегодня теория вычислимости (другое распространенное название – теория рекурсивных функций) – это большая и сложная дисциплина, опирающаяся на теорию множеств, теорию функций, математическую логику и теорию алгоритмов (иногда в теоретических исследованиях используется написание «алгорифм»). Казалось бы, бессмысленно просто даже пытаться изучить ее, не прибегая к солидным академическим учебникам. По счастью, это не совсем так. Конечно, учебники будут необходимы если вы захотите не просто понимать сущность теории вычислимости, но и активно в ней работать. Но программисты-практики могут ознакомиться с теорией вычислимости более «гуманным» способом, без головокружительных математических подробностей. А уже потом, если вы почувствуете вкус, можно обратиться и к серьезным текстам.

К сожалению, книг, посвященных введению в теорию вычислимости без утомительных для начинающего математических подробностей, совсем не много. Тем приятнее то, что издательство «ДМК-Пресс» перевело и выпустило книгу английского специалиста Тома Стюарта «Теория вычислений для программистов». Эта относительно небольшая книга на ряде сквозных примеров достаточно полно демонстрирует сущность теории.

Автор начинает свое изложение с провокационного вопроса – «В чем смысл слова «смысл»?». В первой части книги перед читателем постепенно, очень аккуратно, но совсем не скучно разворачивается интригующая последовательность понятий, которые детально иллюстрируются примерами листингов на языке программирования Ruby. Автор касается достаточно сложных тем, таких, как денотационная семантика, формальная семантика, конечные автоматы (при этом особое внимание уделяется недетеминированным конечным автоматам), регулярные выражения (regexp-ы) и их реализации. После того, как читатель, под руководством автора, убеждается в том, что конечные автоматы имеют фундаментальные ограничения, вводятся автоматы с магазинной памятью (проще говоря – автоматы со стековой памятью) и демонстрируются лексический и синтаксический анализ конструкций языков программирования. Завершается первая часть книги вполне традиционно – обсуждением и программированием машин Тьюринга.

Вторая часть книги начинается с введения в лямбда-исчисление Алонзо Черча. Здесь автор аккуратно и постепенно демонстрирует построение языка программирования из которого убраны практически все привычные нам конструкции. На первый взгляд может показаться, что на таком языке программирования вообще нельзя написать никакой хоть чуточку полезной программы, но вскоре читатель с удивлением обнаруживает, что даже такой язык способен на все, что позволяют самые что ни на есть развитые языки программирования. Соответствующая глава так и называется «Программирование на пустом месте». Цель этой главы – научиться ценить то малое, что есть и уметь обходиться этим малым.

Следующая глава посвящена ряду интересных примеров. Здесь читатель продолжит знакомство с лямбда-исчислением, комбинаторами, частично-рекурсивными функциями, таг-системами. Заканчивается глава рядом примеров клеточных автоматов – игра «Жизнь» Джона Конвея и несколько вариантов т.н. «машин Вольфрама».

После этого фейерверка идей, понятий и примеров наступает черед последних двух глав в которых обсуждаются программы, которые не могут быть написаны. Не смотря на то, что в этих главах заметно меньше кода, они предполагают, что читатель готов (с помощью автора, разумеется) поразмыслить над достаточно сложными концепциями.

Очевидно, что книга не служит и не может служить учебником. Такой цели автор перед собой и не ставил. Это, прежде всего, аккуратное, можно сказать – доброжелательное введение в основные понятия теории вычислимости. Но читатель, добросовестно поработавший с книгой и примерами в ней содержащимися, будет вполне готов к тому, чтобы обратиться к более серьезным текстам, как академического, так и прикладного характера.

Не смотря на то, что книга написана просто, ярко, образно и с большим юмором, она не предназначена для чтения «на ходу», а предполагает от читателя готовность потрудиться. Но затраченные усилия будут, несомненно, вознаграждены. Читатель приобретет весьма ценные знания и навыки, которые затруднительно было бы приобрести при самостоятельных попытках разобраться в такой сложной области математики и программирования. Требования к математической подготовке читателя самые скромные и книга доступна даже старшекласснику, хорошо успевающему в точных науках. Очень желателен некоторый опыт (впрочем, весьма скромный) в программировании – без него книга может показаться неподъемной.

В качестве языка программирования примеров автор выбрал Ruby. Вводная глава посвящена описанию подмножества Ruby, которое было использовано при написании программ. Автор сознательно не использовал никаких «продвинутых» возможностей языка, которые могли бы затруднить понимание кода теми программистами, кто с Ruby не знаком. Упражнений в общепринятом смысле в книге нет; автор рекомендует проверить решения на других языках программирования.

Книга прекрасно переведена. Единственное на что можно было бы посетовать, так это то, что в названии книги использовано слово «вычисление» вместо слова «вычислимость»; последний термин несколько точнее выражает смысл и определенно более распространен. Но в остальном нельзя не отметить прекрасной работы переводчика А.Слинкина, который не только прекрасно справился с переводом, но и способствовал более ясному изложению весьма сложной темы своими немногочисленными, но уместными и ценными примечаниями.

Книга рекомендуется для всех, кто рассматривает программирование не просто как средство заработка, но кто считает, что в программировании есть своя эстетика, своя философия. Они, безусловно, правы и книга Т.Стюарта в полной мере отвечает такому утонченному вкусу.

Наконец, отдельная благодарность издательству «ДМК-Пресс», которое продолжает «баловать» программистов столь изысканной интеллектуальной кухней.

Комментарии отсутствуют

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru