МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОСССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМ. Н.И. ЛОБАЧЕВСКОГО»
Институт информационных технологий, математики и механики
Методические указания по самостоятельному изучению литературы по информационным технологиям
Учебно-методическое пособие
Рекомендовано методической комиссией ИИТММ для студентов ННГУ, обучающихся по направлениям подготовки
01.03.02 Прикладная математика и информатика,
02.03.02 Фундаментальная информатика и информационные технологии
Нижний Новгород
2018
УДК 004.4
Методические указания по самостоятельному изучению литературы по информационным технологиям.
Составители: Гергель В.П., Карпенко С.Н., Кузенкова Г.В., Кустикова В.Д., Лебедев С.А., Линёв А.В., Мееров И.Б., Пирова А.Ю., Свистунов А.Н., Сысоев А.В., Турлапов В.Е., Шапошников Д.Е., Шестакова Н.В., Штанюк А.А. Учебно-методическое пособие. – Нижний Новгород: Нижегородский госуниверситет, 2018. – 21 с.
Рецензент: д.т.н., доцент каф. ИАНИ, Старостин Н.В.
В учебном пособии приведены списки рекомендованной литературы по следующим разделам компьютерных наук: основы алгоритмизации, языки и технологии программирования, системное программирование, компьютерная графика, базы данных, алгоритмы и структуры данных, параллельное, распределенное и индустриальное программирование.
Основная цель пособия состоит в том, чтобы сформировать и предоставить перечень рекомендуемых источников для их самостоятельного изучения студентами, планирующими дальнейшее трудоустройство в индустрии разработки программного обеспечения. Учитывая большое количество хороших книг по методам и технологиям программирования, авторы пособия не претендуют на полноту приведенных списков, которые могут быть дополнены в будущих изданиях.
УДК 004.4
Содержание
1. Основы алгоритмизации 4
2. Языки и технологии программирования 5
3. Системное программирование 7
4. Компьютерная графика 9
5. Технологии баз данных 11
6. Алгоритмы и структуры данных 12
7. Параллельное программирование 14
8. Распределенное программирование 16
9. Промышленное программирование 17
10. Компьютерное зрение 19
1. Основы алгоритмизации
В данном разделе представлена рекомендуемая к изучению литература по основам алгоритмизации. Данная литература акцентирует внимание читателя не столько на конкретных языках программирования, сколько на вопросах разработки базовых алгоритмов. Приведенные в перечне книги могут быть рекомендованы для изучения в старших классах общеобразовательных школ и на первых курсах профильных вузов. В частности, делающим первые шаги в направлении освоения будущей профессии, можно порекомендовать разноплановые книги [2] и [5]. Изучение книги [5] способствует формированию первых навыков разработки программ. Книга [2] содержит массу примеров и может оказаться весьма полезной для тех, кто хочет преодолеть барьер на пути самостоятельного решения задач. Книги [1, 3, 4, 6] направлены на изучение более сложных алгоритмов, востребованных при решении олимпиадных задач по программированию. Книги по алгоритмической тематике, ориентированные в большей степени на студентов, перечислены в разделе «Алгоритмы и структуры данных».
1.1. Книги
1. Долинский М.С. Решение сложных и олимпиадных задач по программированию. – СПб.: Питер, 2006.
2. Кетков Ю.Л., Кетков А.Ю. Практика программирования: Бейсик, Си, Паскаль. – СПб.: БХВ-Петербург, 2001.
3. Окулов С. М. Программирование в алгоритмах. – 5-е изд. (эл.). – М.: БИНОМ. Лаборатория знаний, 2014.
4. Скиена С.С., Ревилла М.А. Олимпиадные задачи по программированию. Руководство по подготовке к соревнованиям – М.: КУДИЦ-ОБРАЗ, 2005.
5. Столяров А.В. Программирование: введение в профессию. Том 1: Азы программирования. – М.: МАКС Пресс, 2016.
6. Шень А. Программирование. Теоремы и задачи. – М.: МЦНМО, 2004.
2. Языки и технологии программирования
Литературу по разделу «Языки и технологии программирования» описывать необычайно сложно – количество книг от «отличных» до «шедевров» в своей области таково, что сколько-нибудь полный список займет многие десятки страниц, даже если рассматривать только самые популярные и широко используемые языки и только устоявшиеся общепринятые технологии разработки. Поэтому в данном разделе представлены книги только по языкам C и C++, на которых ведется обучение программированию на первом и втором курсе института ИТММ ННГУ и только книги по технологии ООП. И даже при таком жестком ограничении каждый преподаватель с большим стажем и каждый специалист-практик со значительным опытом работы на этих языках найдет, чем представленный ниже список дополнить.
С другой стороны, присутствие некоторых книг в представленном далее списке, на взгляд авторов, оспорить не сможет никто. К таковым, безусловно, относится книга [1], не только потому, что написана она создателями языка C, но и потому, что в относительно небольшом объеме авторы книги и изложили сам язык, и представили большое количество содержательных примеров, и выстроили материал так, что книгу вполне можно использовать в качестве самоучителя.
Книги [2] и [3] также относятся к числу обязательных на книжной полке современного программиста. Книга [2] уже давно считается классической по технологии объектно-ориентированного программирования, а книга [3] принадлежит перу создателя языка C++ и рассматривает, в числе прочего, реализацию этой технологии в С++. Сложность и наполнение языка C++ таковы, что объем базовой книги по C++ в несколько раз превышает объем базовой книги по C. Кроме того, и сам материал и сложность его изложения также значительно выше, поэтому для старта изучения языка C++ мы рекомендуем такие книги, как [4–7].
Разработка качественных программ на языке C++ с использованием технологии ООП требует значительного объема знаний и большого практического опыта, в том числе по вопросам эффективного использования возможностей языка, а также корректной и эффективной реализации на нем концепций ООП. Этим вопросам посвящено большое число отличных книг, к числу которых относятся, например, книги [8-10]. К сожалению, устоявшейся русской транскрипции фамилии автора этих книг (Scott Meyers) все еще не сложилось. Дополнительно отметим, что в книге [10] изложение ведется на основе последних стандартов по языку C++ (2011 и 2014 годов). Кроме того, крайне полезным источником информации по этой же теме является раздел «C++ Super-FAQ» сайта [11] (на английском языке).
Интернет-источников с полезной информацией по различным аспектам практического использования языков C и C++, наверное, не меньше, чем книг по этим языкам. Кроме уже упомянутого сайта [11] отметим один из лучших справочных сайтов по C++ [12], раздел C++ сайта [13], а также публикации с тэгом C++ сайта [14], среди которых можно найти много полезных.
2.1. Книги
1. Керниган Б., Ритчи Д. Язык программирования Си. – СПб.: Невский диалект, 2000.
2. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений. – М.: Вильямс, 2010.
3. Страуструп Б. Язык программирования С++. – М.: Бином-Пресс, 2008.
4. Подбельский В.В. Язык С++. М.: Финансы и статистика. 2003.
5. Шилдт Г. Самоучитель С++. – СПб.: БХВ-Петербург, 2006.
6. Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер. 2009.
7. Кетков Ю.Л. Введение в языки программирования C и C++. – М.: Интернет-университет информационных технологий. 2006.
8. Мэйерс С. Эффективное использование C++. 55 верных советов улучшить структуру и код ваших программ. – М.: ДМК-Пресс. 2006.
9. Майерс С. Эффективное использование С++. 35 новых способов улучшить стиль программирования. – СПб.: Питер. 2006.
10. Мейерс С. Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14. – М.: Вильямс, 2016.
2.2. Интернет-источники
11. The C++ Programming Language. – https://isocpp.org.
12. Справочный сайт по C++. – http://www.cppreference.com
13. RSDN. – https://rsdn.org.
14. Хаб C++ на сайте «Хабрахабр». – https://habrahabr.ru/hub/cpp/.
3. Системное программирование
Вопросы системного программирования рассматриваются в рамках нескольких курсов и позволяют понять, в каких условиях выполняются разрабатываемые программы. Литература по архитектуре ЭВМ [1-4] позволяет разобраться в структурной и функциональной организации современных вычислительных систем и сформировать представление о ходе выполнения программ на аппаратном уровне. Книги по операционным системам описывают принципы построения и функционирования современных операционных систем и позволяют разобраться, каким образом и в каких условиях происходит выполнение прикладных программ. Базовые учебники [5-7] содержат информацию о типовых подходах и алгоритмах, реализуемых в операционных системах, в то время как дополнительная литература содержит технические подробности о внутренней реализации распространенных ОС [8-10] и моделях и механизмах, предоставляемых ими прикладным программистам [11-12]. Литература по сетевым технологиям дает начальное представление о функционировании компьютерных сетей, позволяет изучить программно-аппаратную архитектуру сетевых систем, а также базовые методы и алгоритмы, используемые различными компонентами сетевых систем [13-14].
Для ознакомления с материалами [3,6,12,17] требуется знание английского языка.
3.1. Книги
1. Хэррис Д.М., Хэррис С.Л. Цифровая схемотехника и архитектура компьютера. 2-е издание. – Morgan Kaufman, 2013.
2. Хеннеси Д.Л., Паттерсон Д.А. Компьютерная архитектура. Количественный подход. Издание 5-е. – М: Техносфера, 2016.
3. Patterson D.A., Hennessy J.L. Computer Organization and Design: The Hardware / Software Interface. – Morgan Kaufmann, 2011.
4. Таненбаум Э. Остин Т. Архитектура компьютера. – СПб: Питер, 2016.
5. Таненбаум Э., Бос Х. Современные операционные системы. 4-е изд. – СПб.: Питер, 2017.
6. Silberschatz A., Gagne G., Galvin P.B. Operating System Concepts. 9th Edition. – Wiley, 2013.
7. Карпов В.Е., Коньков К.А. Введение в операционные системы. Курс лекций. 2-е изд. – М.: ИНТУИТ.РУ, 2005.
8. Лав Р. Linux. Системное программирование. 2-е изд. – СПб.: Питер, 2014.
9. Руссинович М., Соломон Д., Ионеску А. Внутреннее устройство Microsoft Windows. 6-е изд. – СПб.: Питер, 2013.
10. Руссинович М., Соломон Д., Ионеску А. Внутреннее устройство Microsoft Windows. 6-е изд. Основные подсистемы ОС. – СПб.: Питер, 2014.
11. Рэймонд Э. Искусство программирования для Unix. – М: Вильямс, 2016.
12. Stevens W.R., Rago S.A., Advanced Programming in the UNIX Environment, 3rd Edition. – Addison-Wesley Professional, 2013.
13. Рихтер Дж., Назар К. Windows via C/C++. Программирование на языке Visual C++. – СПб: Русская Редакция, Питер, 2009.
14. Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы: Учебник для вузов. 5-е изд. — СПб.: Питер, 2016.
15. Таненбаум Э., Уэзеролл Д. Компьютерные сети. 5-е издание. – СПб: Питер, 2016.
16. Сети TCP/IP. Ресурсы Microsoft Windows 2000 Server. – М: Русская редакция, 2001.
Стивенс У.Р. Протоколы TCP/IP. Практическое руководство. – СПб.: "Невский диалект" -"БХВ-Петербург", 2003.
17. StevensW.R., Wright G.R., TCP/IP Illustrated (3 Volume Set) 1st Edition. – Addison-Wesley Professional, 2001.
4. Компьютерная графика
В разделе представлена рекомендуемая к изучению литература по предмету «Компьютерная графика». По данной тематике в России и, особенно, в мире выпускается большое количество учебников, пособий и открытых библиотек для программирования.
Для знакомства с основами компьютерной графики и расширения кругозора в данной области дополнительно к Интернет-материалам курса [1], читаемого в ИИТММ ННГУ им. Н.И. Лобачевского рекомендуется прочитать учебники и учебные пособия
[1-3], в которых изложены базовые понятия, основные проблемы и алгоритмы.
Наиболее широкой в применении областью компьютерной графики является обработка изображений (как двумерных, так и трехмерных), в которой на данный момент накоплено большое количество алгоритмов, многие из которых описаны в учебниках и пособиях [3-6, 9].
Важной частью курса компьютерной графики в Университете Лобачевского является программирование алгоритмов компьютерной графики для графических процессоров. Стандартом для Open Source программирования является библиотека OpenGL. Стандарт активно развивается и включает сегодня прямое программирование графических процессоров на шейдерном языке высокого уровня GLSL. Выпущено значительное количество книг и учебников, посвященных OpenGL, которые помогают освоить этот стандарт (сегодня OpenGL 4.х), например, [7, 8]. Глобальное освещение (виртуальная реальность) и научная визуализация являются интенсивно развивающимися в настоящее время областями. Наиболее интересные дополнительные материалы по ним можно найти на постоянно обновляемых Интернет-ресурсах.
В перечне Интернет-источников указаны открытые онлайн-курсы и видеокурсы
[11–15] по компьютерной графике и обработке изображений. Перечисленные курсы содержат дополнительные материалы, вопросы и тесты для самопроверки. Для ознакомления с материалами [14, 15] требуется знание английского языка. Особое место занимают образовательные ресурсы профессионального сообщества SIGGRAPH (USA) и одноименной ежегодной и крупнейшей в мире конференции [16]. Это лекции, прочитанные в ходе этой конференции лучшими специалистами мира, признанными лидерами в своей области, по самым актуальным направлениям.
4.1. Книги
1. Петров М.Н. Компьютерная графика: Учебник для вузов. 3-е изд. – СПб.: Питер, 2011. – 544 с.
2. Васильев В.Е., Морозов А.В. Компьютерная графика: Учеб. пособие – СПб.: СЗТУ, 2005. – 101 с.
3. Миронов Д.В. Компьютерная графика в дизайне: учебник. – СПб.: БХВ-Петербург, 2008. – 560 с.
4. Ежова К.В. Моделирование и обработка изображений. Учебное пособие. – СПб: НИУ ИТМО, 2011. – 93 с.
5. Гонсалес Р., Вудс Р. Цифровая обработка изображений. Изд. 3-е, испр. и доп. –
М.: Техносфера, 2012. – 1104 с.
6. Яне Б. Цифровая обработка изображений. М.: Техносфера, 2007. – 584 с.
7. Вольф Д. OpenGL 4. Язык шейдеров. Книга рецептов. – М.: ДМК Пресс, 2015. – 368 с.
8. Richard S. Wright. OpenGL superbible: comprehensive tutorial and reference. Michigan. 2010. – 1002 p.
9. Буэно, Суарес, Эспиноса. Обработка изображений с помощью OpenCV. М.: ДМК-Пресс, 2016. – 210 с.
10. Никулин Е.А. Компьютерная геометрия и алгоритмы машинной графики. – СПб.: БХВ-Петербург, 2003. – 560 с.
4.2. Интернет-источники
11. Интернет ресурс курса лекций «Компьютерная графика» для бакалавриата ИИТММ ННГУ: https://sites.google.com/site/turlapovveunn/compgraphics_fiit_pmi и на сайте лаборатории компьютерной графики: http://www.graph.unn.ru/.
12. Курс «Алгоритмические основы современной компьютерной графики» на портале Интуит: http://www.intuit.ru/studies/courses/70/70/info.
13. Курс «Программирование графических процессоров с использованием Direct3D и HLSL» на портале Интуит: http://www.intuit.ru/studies/courses/1120/175/info.
14. Курс «Interactive computer graphics» на портале Coursera: https://ru.coursera.org/learn/interactive-computer-graphics.
15. Курс «Computer Graphics» на сайте Университета MIT (USA): https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-837-computer-graphics-fall-2012/.
16. SIGGRAPH, Open Access Education Courses (http://education.siggraph.org/).
5. Технологии баз данных
В данном разделе представлена рекомендуемая к изучению литература по технологиям баз данных. Данные источники охватывают как теорию и применение реляционных баз данных, языка SQL и его программного расширения, так и анализа и моделирование предметной области при проектировании баз данных. Приведенные в перечне книги могут быть рекомендованы для изучения как в вузах при получении профессионального образования, так и для первоначального изучения в школьном образовании, а также повышения квалификации опытных специалистов.
5.1. Книги
1. Дейт, К. Дж. Введение в системы баз данных. 8-е изд.: Пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 1328 с.
2. Швецов В.И., Визгунов А.Н., Мееров И.Б. Базы данных. Н. Новгород: Изд-во ННГУ, 2004. – 289 c.
3. Silberschatz A., Korth H.F., Sudarshan S. Database System Concepts. Sixth Edition. – McGraw-Hill, 2011. – 1349 p.
4. Elmasri R., Navathe Sh. Fundamentals of Database Systems. Sixth Edition. – Addison-Wesley, 2011. – 1172 p.
5. Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. Базы данных: Учебник для высших учебных заведений / Под ред. проф. А.Д. Хомоненко. – СПб.: КОРОНА принт, 2002. – 672 с.
6. Саймон А. Стратегические технологии БД. – М.: Финансы и статистика, 1999. – 484 с.
7. Хансен Г., Хансен Д. Базы данных. Разработка и управление. – М.: Бином, 2000. – 704 с.
8. Дж. Ульман, Дж. Видом. Введение в системы баз данных. – М.: Лори. – 2000. – 374 с.
9. Мещеряков Е.В., Хомоненко А.Д. Публикация баз данных в Интернете. – СПб.: БХВ-Петербург, 2001. – 572 с.
10. Бекаревич Ю.Б., Пушкина Н.В. СУБД Access для Windows 95 в примерах. – СПб.: BHV, 1997. – 400 с.
6. Алгоритмы и структуры данных
В данном разделе представлена рекомендуемая к изучению литература по тематике «Алгоритмы и структуры данных». Отметим, что по данной тематике написано большое количество поистине бесценной литературы. Фундаментальные книги [2, 4, 5] выдержали многие переиздания и по сей день стоят на полке у многих специалистов в области компьютерных наук. Обращают на себя внимание ставшие классическими при жизни авторов учебники [3, 6, 7], по которым читают курсы по алгоритмам и структурам данных в ведущих университетах мира. Книга [8] в доступной форме демонстрирует подходы к реализации структур данных на языке C++. Книга [9], электронный вариант которой доступен для скачивания с сайта издательства МЦНМО, содержит большое количество задач и изначально написана для преподавателей, занимающихся информатикой с одаренными школьниками в старших классах. Между тем, данную книгу можно рекомендовать и студентам младших курсов для самостоятельного изучения. Отметим также известную работу [1] нижегородских математиков, на протяжении многих лет ведущих занятия в ННГУ.
В перечне интернет-источников указаны онлайн-курсы [10–18] по алгоритмам и структурам данных. По всем перечисленным курсам доступно множество материалов, включая видео-лекции, которые можно прослушать самостоятельно. Для ознакомления с материалами [10–16] требуется знание английского языка.
6.1. Книги
1. Алексеев В. Е., Таланов В. А. Графы и алгоритмы. Структуры данных. Модели вычислений. – М.: Интернет-университет информационных технологий, 2006.
2. Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и алгоритмы. – М.: Вильямс, 2016.
3. Дасгупта С., Пападимитриу Х., Вазирани У. Алгоритмы. – М.: МНЦМО. – 2014.
4. Кнут Д. Искусство программирования. Том 3. Сортировка и поиск. – М.: Вильямс, 2007.
5. Кнут Д., Грэхем Р., Паташник О. Конкретная математика. Математические основы информатики. – М.: Вильямс. – 2009.
6. Кормен Т., Лейзерсон Ч., Ривест Р, Штайн К. Алгоритмы: построение и анализ, 3-е изд. – М.: Вильямс, 2013.
7. Седжвик Р. Алгоритмы на C++. Фундаментальные алгоритмы и структуры данных. – М.: Вильямс, 2016.
8. Топп У., Форд У. Структуры данных в C++. – М.: Бином, 1999.
9. Шень А. Программирование. Теоремы и задачи. – М.: МЦНМО, 2004.
6.2. Интернет-источники
10. Demaine E. 6.851 Advanced data structures. – Massachusetts Institute of Technology: MIT OpenCourseWare, 2012. – https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-851-advanced-data-structures-spring-2012.
11. Demaine E., Devadas S. 6.006 Introduction to Algorithms. – Massachusetts Institute of Technology: MIT OpenCourseWare, 2011. – https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011.
12. Demaine E., Devadas S., Lynch N. 6.046J Design and Analysis of Algorithms. –Massachusetts Institute of Technology: MIT OpenCourseWare, 2015. –https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015
13. Leiserson Ch., Demaine E. 6.046J Introduction to Algorithms. – Massachusetts Institute of Technology: MIT OpenCourseWare, 2005. – https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005.
14. Sedgewick R. Analysis of Algorithms. – Coursera. – https://ru.coursera.org/learn/analysis-of-algorithms.
15. Sedgewick R., Wayne K. Algorithms, Part II. – Coursera. – https://ru.coursera.org/learn/algorithms-part2.
16. Wayne K., Sedgewick R. Algorithms, Part I. – Coursera. – https://ru.coursera.org/learn/algorithms-part1.
17. Бабенко М.А. Алгоритма и структуры данных поиска, часть 1. Видео-курс в рамках школы анализа данных (Яндекс). – https://yandexdataschool.ru/edu-process/courses/algorithms.
18. Бабенко М.А. Алгоритма и структуры данных поиска, часть 2. Видео-курс в рамках школы анализа данных (Яндекс). – https://yandexdataschool.ru/edu-process/program/computer-science/algorithms2.
7. Параллельное программирование
В данном разделе представлена рекомендуемая литература по общим и специальным дисциплинам, читаемым в институте ИТММ ННГУ, начиная с 3-го курса бакалавриата и до 2-го курса магистратуры, по темам, связанным с параллельным программированием. Изучение этих дисциплин невозможно без освоения, как минимум, общих курсов по основам программирования, алгоритмам и структурам данных и языку C (в некоторых случаях – C++). Предполагается, что изучающие параллельное программирование имеют указанный базис и знакомы с соответствующей литературой.
Общетеоретическая информация по параллельным вычислениям и подходам к разработке параллельных алгоритмов представлена в книгах [1, 2].
Разработка параллельных программ для систем с распределенной памятью с использованием библиотеки MPI (включая не только описание наполнения и возможностей библиотеки MPI, но и примеры программ) подробно рассмотрена в книге [3] и первом томе источника [4].
Параллельное программирование для систем с общей памятью на основе технологии OpenMP может быть изучено по книге [5] и второму тому источника [4].
Библиотека TBB, позволяющая разрабатывать параллельные программы для систем с общей памятью на основе объектного подхода на языке C++, подробно описана во втором томе книги [4]. Там же даны описания и примеры программ для библиотеки ArBB, технологии Intel Cilk Plus, технологии OpenCL.
Разработка параллельных программ для графических процессоров с использованием технологии CUDA описана в книгах [6, 7].
Особенности разработки параллельных программ для сопроцессоров Intel Xeon Phi подробно изложены в учебных курсах [8, 9].
Некоторые инструменты, поддерживающие процесс разработки параллельных программ для систем с общей памятью, описаны в книге [10].
В сети Интернет по каждой из упомянутых технологий может быть найдено значительное количество источников информации. Отметим лишь основные из них: официальный сайт MPI [11], официальный сайт OpenMP [12], разделы сайта компании Intel с документацией по библиотеке TBB [13], библиотеке ArBB [14], технологии Intel Cilk Plus [15, 16], официальный сайт технологии OpenCL [17].
7.1. Книги
1. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб.: БХВ-Петербург. 2002.
2. Гергель В.П. Теория и практика параллельных вычислений. – М.: Интернет-университет информационных технологий. 2007.
3. Немнюгин С., Стесик О. Параллельное программирование для многопроцессорных вычислительных систем. СПб.: БХВ-Петербург. 2002.
4. Гергель В.П., Баркалов К.А., Мееров И.Б., Сысоев А.В. и др. Параллельные вычисления. Технологии и численные методы. Учебное пособие в 4 томах. – Нижний Новгород: Изд-во Нижегородского госуниверситета. 2013.
5. Гергель В.П. Высокопроизводительные вычисления для многопроцессорных многоядерных систем. – М.: Изд-во Московского университета. 2010.
6. Линев А.В., Боголепов Д.К., Бастраков С.И. Технологии параллельного программирования для процессоров новых архитектур. – М.: Изд-во Московского университета, 2010.
7. Боресков А.В. и др. Параллельные вычисления на GPU. Архитектура и программная модель CUDA. – M.: Изд-во Московского университета, 2012.
8. Учебный курс «Введение в принципы функционирования и применения современных мультиядерных архитектур (на примере Intel Xeon Phi)» – http://www.intuit.ru/studies/courses/10611/1095/info.
9. Учебный курс «Программирование на современных мультиядерных архитектурах (на примере Intel Xeon Phi)» – http://www.intuit.ru/studies/courses/10612/1096/info.
10. Корняков К.В., Кустикова В.Д., Мееров И.Б., Сиднев А.А., Сысоев А.В., Шишков А.В. Инструменты параллельного программирования в системах с общей памятью. – M.: Изд-во Московского университета, 2010.
7.2. Интернет-источники
1. MPI Forum. – http://mpi-forum.org.
2. The OpenMP API specification for parallel programming. – http://www.openmp.org.
3. Intel® Threading Building Blocks Documentation. – https://software.intel.com/en-us/tbb-documentation.
4. Страница библиотеки ArBB. – http://software.intel.com/en-us/articles/intel-array-building-blocks.
5. Руководство по использованию Intel® Cilk Plus. – http://software.intel.com/sites/products/evaluation-guides/docs/cilk-plus-evaluation-guide.pdf.
6. Спецификация синтаксических конструкций Intel® Cilk Plus. – http://software.intel.com/sites/products/cilk-plus/cilk_plus_language_specification.pdf.
7. OpenCL – официальный сайт. – http://www.khronos.org/opencl.
8. Распределенное программирование
Приведенный ниже список содержит литературу, рекомендованную к изучению по разделу «Распределенное программирование». Всю литературу по этой тематике условно можно разбить на две большие группы. В первую входят работы, посвященные общим проблемам, возникающим при проектировании и реализации распределенных приложений. К таким работам относятся признанные классическими и выдержавшие несколько изданий книги [1] и [2]. Также к этой группе можно отнести получившую широкую известность книгу [3], которая содержит большое количество полезных решений и шаблонов, используемых при проектировании распределенных приложений.
Вторая группа представлена книгами, описывающими особенности использования той или иной технологии программирования применительно к рассматриваемой задаче. Эта группа чрезвычайно многочисленна, поэтому ниже представлены наиболее яркие на наш взгляд ее представители для некоторых часто используемых технологий: [4] – для Java, [5] для C++ (с той оговоркой, что значительная часть книги посвящена вопросам использования технологий MPI и PVM), [6] для С#.
Интернет источники представлены онлайн-курсами.
8.1. Книги
1. Таненбаум Э., Ван Стеен М. Распределенные системы. Принципы и парадигмы – СПб.: Питер, 2003.
2. Coulouris G., Dollimore J., Kindberg T., Blair G. DISTRIBUTED SYSTEMS Concepts and Design (Fifth Edition). – Addyson-Wesley 2012.
3. М., Райс Д., Фоммел М., Хайет Э., Ми Р., Стаффорд Р. Шаблоны корпоративных приложений. – Вильямс, 2016
4. Дейтел Х.М., Дейтел П.Дж., Сантри С.И. Технологии программирования на Java 2. Распределенные приложения. – М.: ООО «Бином-Пресс», 2011
5. Хьюз К., Трейси Хьюз Т. Параллельное и распределенное программирование с использованием C++. – Вильямс, 2004
6. Фленов М.Е. Библия С#. – СПб: БХВ-Петербург, 2011.
8.2. Интернет-источники
7. 6.824: Distributed Systems. – MIT Computer Science and Artificial Intelligence Laboratory. http://css.csail.mit.edu/6.824/2014/index.html.
8. Clouds, Distributed Systems, Networking. – Coursera. https://www.coursera.org/specializations/cloud-computing.
9. Using Python to Access Web Data. – Coursera. https://ru.coursera.org/learn/python-network-data.
10. Параллельные и распределенные вычисления. – Яндекс. https://yadi.sk/d/mxzmc_aTFn2up.
11. Горин С., Крищенко В. Поддержка разработки распределенных приложений в Microsoft .NET Framework. – ИНТУИТ. http://www.intuit.ru/studies/courses/1115/177/info.
12. Свистунов А.Н. Построение распределенных систем на Java. – ИНТУИТ. http://www.intuit.ru/studies/courses/633/489/info.
9. Промышленное программирование
В данном разделе представлены издания, имеющие непосредственное отношение к промышленной (корпоративной) разработке ПО. Этот подход включает широкое использование паттернов проектирования, использование готовых фреймворков и пакетов, упрощающих решение объемных и сложных задач. Для удобства список поделен на несколько подразделов.
К языкам промышленного программирования можно отнести Java, С# и C++, а также набирающие популярность языки функциональной парадигмы (например, F#).
9.1. Паттерны и разработка
1. Гонсалес Е. Изучаем Java EE 7. – Питер, 2014.
2. Гупта А. Основы java EE 7. – O'Reilly, 2014.
3. Йенер М., Фидом А. Java EE: паттерны проектирования для профессионалов. – Питер, 2016.
4. Хеффельфингер Д. Разработка приложений Java EE 7 в NetBens 8. – ДМК Пресс, 2016.
5. Гамма Э., Хелм Р. Приемы объектно-ориентированного проектирования. Паттерны проектирования. – Питер, 2016.
6. Фримен Э., Фримен Э. Паттерны проектирования, – Питер, 2016.
7. Тепляков С. Паттерны проектирования на платформе .NET, – Питер, 2016.
8. Фаулер М., Райс Д. Шаблоны корпоративных приложений, – Вильямс, 2016.
9. Александреску А. Современное проектирование на С++, – Вильямс, 2002.
10. Metsker S. Design Patterns Java Workbook, – Addison-Wesley Professional, 2002.
11. Sarcar V. Java Design Patterns, – Apress, 2015.
12. Metsker S., William C. Wake Design Patterns in Java, – Addison-Wesley Professional, 2006.
13. Мартин Р., Мартин Р. Принципы, паттерны и методики гибкой разработки на языке C#. – Символ, 2011.
9.2. Функциональное программирование
1. Уорбэртон Ричард Лямбда-выражения в Java 8, – ДМК Пресс, 2015.
2. Смит К. Программирование на F#, – Символ-Плюс,2011.
3. Naftalin M, Wadler P. Java Generics and Collections, – O'Reilly Media, 2006.
4. Masood A. Learning F# Functional Data Structures and Algorithms, – Packt, 2015.
5. Petricek T., Trelford P. F# Deep Dives, – Manning Publications, 2014.
9.3. Веб-разработка
1. Williams N. Professional Java for Web Applications, – Wrox, 2014.
2. Prasad M. Java Server Side Programming: The Conceptual Foundation, – CreateSpace Independent Publishing Platform, 2013.
9.4. Мобильные системы
1. Брайан Х., Филлипс Б., Android. Программирование для профессионалов. – Питер, 2016.
2. Дейтел П., Дейтел Х. Android для разработчиков. – Питер, 2016.
3. Jackson W. Android Apps for Absolute Beginners, – Apress, 2012.
9.5. Тестирование
1. Майерс Г., Баджет Т., Сандлер К. Искусство тестирования программ. – Вильямс, 2016.
2. Плаксим М. Тестирование и отладка программ – для профессионалов будущих и настоящих. – Бином, 2013.
3. Криспин Л., Грегори Д. Гибкое тестирование. Практическое руководство для тестировщиков ПО и гибких команд. – Вильямс, 2016.
4. Рассел Д., Кон Р. Тестирование программного обеспечения.
5. Котляров В.П. Коликова Т.В. Основы тестирования программного обеспечения. – М.: Интернет-университет информационных технологий, Бином. Лаборатория знаний, 2009. – 288 c.
6. Котляров, В.П. Основы тестирования программного обеспечения: монография – М.: Интернет-Университет Информационных Технологий (ИНТУИТ), 2015.
7. Anil Hemrajani. Agile Java Development with Spring, Hibernate and Eclipse (Developer's Library), – Sams Publishing, 2006.
8. Jeff Langr. Agile Java: Crafting Code With Test-Driven Development, – Prentice Hall, 2005.
9.6. Системы контроля версий
1. Чакон С., Штрауб Б. Git для профессионального программиста, – Питер, 2016.
10. Компьютерное зрение
В данном разделе представлена рекомендуемая к изучению литература по компьютерному зрению. Книги [1, 2] являются классическими, они содержат основные постановки задач компьютерного зрения и базовые математические алгоритмы их решения. Указанные источники позволяют сформировать общее представление об области и вопросах, которые в ней рассматриваются. С развитием методологии решения задач компьютерного зрения машинное обучение становится неотъемлемой частью большого количества алгоритмов компьютерного зрения, поэтому появляется литература, в которой представлены различные подходы к решению задач компьютерного зрения с использованием методов машинного обучения [3–6]. Книга [7] содержит наиболее полный обзор методов решения классических задач компьютерного зрения и представляет интерес для исследователя, перед которым поставлена определенная задача обработки визуальных данных. Для более детального изучения методов машинного обучения рекомендуются источники [8, 9].
Наиболее известной открытой библиотекой компьютерного зрения, содержащей реализацию большого числа алгоритмов, является библиотека OpenCV. Изучение возможностей данной библиотеки [10, 11] позволяет быстро собрать базовое решение какой-либо задачи компьютерного зрения с использованием существующих примитивов работы с визуальными данными и простейших методов их обработки.
10.1. Книги
1. Форсайт Д., Понс Ж. Компьютерное зрение. Современный подход. –
М.: Издательский дом «Вильямс», 2004.
2. Шапиро Л., Стокман Дж. Компьютерное зрение. – М.: БИНОМ. Лаборатория знаний, 2006.
3. Рассел С., Норвиг П. «Искусственный интеллект: современный подход (AIMA)», 2-е издание: Пер. с англ. – М.: Издательский дом «Вильямс», 2005.
4. Bishop C.M. Pattern Recognition and Machine Learning. – Singapore: Springler Science+Business Media, 2006.
5. Sonka M., Hlavac V., Boyle R. Image Processing, Analysis and Machine Vision. – Thomson, 2008.
6. Amit Y. 2D Object Detection and Recognition: models, algorithms and networks. – MIT Press, 2002.
7. Szeliski R. Computer Vision: Algorithms and Applications. – Springler, 2011.
8. Hastie T., Tibshirani R., Freidman J. The elements of statistical learning. Data mining, inference and prediction. – Springer, 2001.
9. Goodfellow I., Bengio Y., Courville A. Deep Learning. – MIT Press, 2016.
10. Bradski G. Learning OpenCV Computer Vision with OpenCV Library. – O' Reilly Media Publishers, 2008.
11. Bradski G., Kaehler A. Learning OpenCV 3. Computer Vision in C++ with the OpenCV Library. – O' Reilly Media Publishers, 2016.
|