От математики к обобщенному программированию
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, с

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Друзья сайта  

 От математики к обобщенному программированию

Статьи / От математики к обобщенному программированию

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

Если ваш опыт программирования от года и больше, если вам доводилось писать программы больше, скажем, 3000 строк исходного кода, то вы, безусловно, найдете в книге много полезного и занимательного (поверьте, математика не обязана быть скучной!).

От математики к обобщенному программированиюЕсли ваш опыт программирования от года и больше, если вам доводилось писать программы больше, скажем, 3000 строк исходного кода, то вы, безусловно, найдете в книге много полезного и занимательного (поверьте, математика не обязана быть скучной!).

Честное слово, я и не подозревал, что вот уже более сорока лет говорю прозой. Большое вам спасибо, что сказали.

Жан-Батист Мольер «Мещанин во дворянстве»

Для большинства программистов, знакомых с такими языками как C++ или Java, понятие обобщенного программирования (англ. generic programming), вынесенное в оригинальное название книги, означает, прежде всего, языковые конструкции, позволяющие специфицировать типы данных, хранимые в коллекциях. Типичными примерами (на Java) являются, например, следующие:

// Список строк

ArrayList <String> = new ArrayList <> ();

// Карта (соответствие «ключ:значение»)

Map <String, MyType> table = new TreeMap <> ();

Опытные программисты, безусловно, хорошо знакомы с подобным синтаксисом и знают, что таким образом можно создавать весьма сложные типы данных, «упакованных» в компактные и обозримые структуры. Одним словом, generic-ки это удобный, продуктивный и надежный способ создания новых типов данных.

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

Согласитесь, что такое определение в силу его общности не слишком информативно. Но давайте не будем спешить, а обратимся к книге и, прежде всего, к ее оглавлению.

Первое, что обращает на себя внимание – то, что авторы избрали способ изложения, который принято называть «генетическим»: проблемы ставятся и рассматриваются в историческом контексте. Такой способ изложения весьма распространен в книгах по математике (см. например, «Последняя теорема Ферма. Генетическое введение в алгебраическую теорию чисел» Г.Эдвардс, М.: Мир, 1980) и позволяет аккуратно ввести читателя в круг рассматриваемых проблем. Генетический способ изложения концентрируется не только на математической составляющей той или иной проблемы, но и на истории появления самой проблемы и предпринятых способов ее решения. Читатель не столько читает, сколько погружается в ту или иную область; он ощущает себя не пассивным субъектом, а активным участником интеллектуального действа.

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

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

Думаю, что я не ошибусь, если скажу, что со многим из этого – и группами, и кольцами, и полями – вы, скорее всего, неоднократно сталкивались, но только, возможно, не знали, что они так называются.

Эти три главы (с 6-й по 8-ю), посвященные абстрактной алгебре и алгебраическим структурам, могут показаться достаточно сложными, но я спешу успокоить тех, кто сомневается в своих математических способностях – не так страшен черт, как его малюют. Конечно, сам материал этих глав достаточно непривычен, но он отнюдь не так сложен, как может показаться. Вспомните, как вы осваивали велосипед или учились кататься на коньках – были и падения, и ушибы, но, в конце концов, вы научились. Так же и в математике – первые шаги в новой области будут непростыми. Но преодолимыми, поскольку нет людей, не способных к математике; есть только лень и необоснованные сомнения.

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

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

Оставшиеся главы книги посвящены заметкам о математике как об области знаний (гл.9), фундаментальным концепциям программирования в контексте ранее изложенных математических понятий (гл.10), а также рассмотрению ряда алгоритмов (гл. 11 ... 13). Разумеется, изложение ведется с точки зрения обобщенного программирования с опорой на концепции, введенные в предыдущих главах.

Кроме того, в книгу включены три небольших приложения, последнее из которых описывает некоторые особенности C++ для тех, кто не знаком с этим языком программирования.

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

Книга, безусловно, будет интересна и математикам, которым представится возможность увидеть воплощение понятий абстрактной алгебры в практических алгоритмах и программах.

И, напоследок, следует напомнить, что один из авторов книги – Александр Степанов – заслуженно относится к числу самых выдающихся программистов современности. Он стоял у истоков generic programming и, безусловно, является первоисточником и авторитетом в понимании смысла и содержания этого понятия. Для программистов С++ позволю себе еще напомнить, что библиотека STL (обобщенные алгоритмы, контейнеры и средства доступа к ним) – творение А.Степанова

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

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

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