МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОСССИЙСКОЙ ФЕДЕРАЦИИ 
           
          ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ 
           
          «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМ. Н.И. ЛОБАЧЕВСКОГО» 
           
          Институт информационных технологий, математики и механики 
           
          Методические указания по самостоятельному изучению литературы по информационным технологиям 
           
          Учебно-методическое пособие 
           
          Рекомендовано методической комиссией ИИТММ для студентов ННГУ, обучающихся по направлениям подготовки 
           
          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.
         |