Бакалавриат

Базовые профильные дисциплины направлений подготовки 02.03.03 и 09.03.04

Программирование и основы теории алгоритмов

У студентов направлений 02.03.03 и 09.03.04 курс "Программирование и основы ТА" является первым в ряду профильных дисциплин, нацеленных на изучение языков программирования, структур и алгоритмов обработки данных. Слушатели познакомятся с типовыми базовыми конструкциями программирования, получат навыки составления алгоритмов, их программной реализации и отладки. В общем, все то, что позволит студенту, не умевшему программировать, написать свои первые программы.Хотя курс ориентирован на начинающих программистов, его отличительной особенностью является то, что в нем затрагиваются вопросы, до которых программист обычно "дорастает" на этапе своей профессиональной деятельности: построение многомодульных программ, основы компиляции и оптимизации программного кода, стиль кодирования.В качестве первого для изучения языка программирования выбран язык C. Во-первых, C прост и лаконичен, его вполне можно освоить за один семестр. Во-вторых, язык С позволяет решать задачи с полным пониманием того, как они выполняются процессором, поэтому на C разрабатывается практически все системное программное обеспечение (а впереди вас ждут курсы по операционным системам, встраиваемым системам, системам реального времени). Наконец, овладение языком C существенно упростит изучение на старших курсах дисциплин по C++, C# и Java, поскольку их синтаксис очень похож на язык C.Лабораторные занятия проводятся с использованием автоматизированной системы проверки программ-решений на портале Codeforces.com. Практические занятия проходят в виде мастер-классов по решению учебных заданий с помощью преподавателя и проверки знаний слушателей путем тестирования. Экзамен по курсу также проводится в практико-ориентированном формате и нацелен в первую очередь на проверку практических навыков чтения, написания и отладки программ.Модуль «Теория алгоритмов» позволит студентом отвлечься от сложностей языка программирования и по-новому взглянуть на проектирование алгоритмов. Как определить, имеет ли задача алгоритмическое решение? Какая алгоритмическая модель подойдет для ее решения? Как сравнить абсолютно разные алгоритмические решения, написанные для разных исполнителей или на разных языках? Ответы на эти вопросы, а также обзор наиболее востребованных алгоритмических моделей ждет студентов в рамках этого модуля во второй части курса. Этот фундамент «алгоритмической культуры» просто необходим для самого важного в подготовке настоящего программиста курса «Структуры и алгоритмы обработки данных»…По итогам обучения наиболее продвинутые слушатели будут готовы к сдаче профессионального сертификационного экзамена по языку С: CLA – C Programming Language Certified Associate Certification. Преподаватели:Хусаинов Наиль Шавкятович – лекторБалабаева Ирина Юрьевна – лектор
Ковалева Карина Сергеевна – ассистент

Структуры и алгоритмы обработки данных

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

Объектно-ориентированное программирование

Дисциплина изучается студентами направлений 02.03.03 и 09.03.04 в первом семестре второго курса и предполагает благополучную сдачу Программирования, а также Структур и алгоритмов обработки данных. Овладев в достаточной мере навыками процедурного программирования, студентам предстоит познакомиться с совершенной другим — объектно-ориентированным — подходом к проектированию и написанию программ.Попробуем разобраться, что же такое объектно-ориентированное программирование (ООП). В основе ООП лежит понятие типа и экземпляров этого типа. Для создания типа (обычно его называют классом, а экземпляры – объектами), необходимо придумать ему имя, определить переменные и функции, которые могут работать с этими переменными. Вот, например, создадим класс по имени Абитуриент. Сразу представляешь парня или девушку, которые подают в приемной комиссии документы на направления 09.03.04 или 02.03.03. Каждый абитуриент имеет имя, фамилию, адрес, баллы ЕГЭ, поэтому переменные для этих сведений должны быть представлены в классе. Что делают абитуриенты? Сдают документы, звонят по телефону, разговаривают между собой. Для отображения этих действий в классе надо определить соответствующие функции. Но класс в работе программы не участвует. Работают объекты этого класса, которые, в нашем случае, играют роли живых людей и в каждом из которых заданы конкретные имя, адрес, оценки ЕГЭ. Если мы, например, создаем программную модель приемной комиссии, то объектов в программе надо создать столько, сколько пришло абитуриентов. Что делают объекты в программе? Изображают сдачу документов, разговоры между собой и по телефону. Кроме классов фундаментальной чертой ООП является наследование (почти то же явление, что и в реальном мире). Вообще ООП отражает понятия человеческого языка и, тем самым, делает проектирование программы, а затем и понимание ее работы другими участниками проекта существенно более простым. Сегодня ООП — ведущий стиль программирования, используемый везде: от мобильных приложений до промышленных информационных систем. В нашем курсе мы постараемся научить вас создавать законченные объектно-ориентированные приложения. Инструментами для работы будут служить широко известные языки программирования С++ и С#.Преподаватель: Лутай Владимир Николаевич-лектор

Машинно-ориентированное программирование

Курс предназначен для изучения основ программирования на языке ассемблера для процессоров Intel. Вы узнаете много интересного: какова программная модель процессора; какие регистры содержит процессор и для чего они предназначены; в каких режимах может работать процессор и в чем их отличие; какие виды данных обрабатываются процессором; какие команды используются для выполнения арифметических илогических вычислений; как процессор взаимодействует с другими устройствамивычислительной системы; как заглянуть в недра процессора при отладке программы.Полученные навыки вы сможете использовать при разработке элементов операционных систем, для создания драйверов устройств, компиляторов языков программирования высокого уровня, анализа вредоносных программ, программирования микроконтроллеров и встроенных систем, предназначенных для управления самыми различными устройствами от фотокамеры до беспилотного летательного аппарата. Поступайте на наши направления! Научитесь общаться с процессором на его собственном языке!Преподаватель:Скороход СергейВасильевич-лектор

Базы данных и СУБД

Мы каждый день пользуемся информацией, которая где-то хранится и доставляется нам по запросу. Сейчас невозможно представить любую информационную систему без надежного хранилища данных. В современном мире важна не только хорошая структура данных для их хранения, но и высокая производительность, и безопасность системы. Поэтому глубокие знания в области баз данных (БД) необходимы хорошему разработчику программного обеспечения. Курс «Базы данных и СУБД» является общеинститутским и преподается на всехнаправлениях института Компьютерные технологии и информационная безопасность, однако на кафедре МОП ЭВМ по направлениям 02.03.03 «Разработка и администрирование информационных систем» и 09.03.04 «Программная инженерия» уделяется больше внимания практической самостоятельной разработке собственной базы данных от ее проектирования до сопровождения. Курс ведет преподаватель, который уже 13 лет работает с высоконагруженными серверами баз данных (БД), имеет большой опыт их проектирования, оптимизации и сопровождения, и любит свою работу. В этом курсе мы предлагаем тебе изучить современную промышленную систему управления базами данных (СУБД) – MS SQL Server, и если ты освоишь работу в ней, то ты сможешь работать в любой подобной СУБД. Кроме того, на следующем курсе ты сможешь познакомиться с другой не менее распространенной СУБД - MongoDB и на собственном опыте сравнить эти две такие разные СУБД.Если ты хочешь научиться создавать надежные системы хранения, обеспечивать их высокую производительность и безопасность, то приходи к нам на кафедру МОП ЭВМ и ты построишь свою первую надежную базу данных и научишься ее сопровождать. Тывыберешь ту область для разработки своей БД, которая нравится тебе, затем ты можешь спроектировать интерфейс пользователя, добавить к нему свою базу данных и получить готовое программное приложение. Если представить, что программное приложение – это машина, то база данных – это ее мотор, и от того, какой мотор стоит на твоей машине, зависит ее скорость и приёмистость. Приходи на кафедру МОП ЭВМ, и мы научим тебя правильно проектировать БД, чтобы твое приложение имело надежный и мощный мотор под своим капотом.Преподаватель:Пилипушко Елена Михайловна-лектор

Программирование на Python

Python — это простой, гибкий, популярный и очень востребованный язык программирования, на котором можно написать очень многое —создавать проекты разной сложности, игры, веб-приложения, писать нейронные сети или заниматься анализом данных. Курс нацелен на практическое освоение языка с первого занятия, начиная с установки среды программирования, изучения основных конструкций и типов языка и, затем, переходу к структурам данных и с функциям, а так же с основам различных парадигм программирования: процедурному, функциональному и объектно-ориентированному программированию. В курсе предусмотрено решение большого количества задач, что позволит развить навык программирования на языке Python. Даже, если Вы не имели прежде опыта разработки на этом языке, Вы легко сможете создать собственную игру или простое приложение уже в середине освоения курса. Основные темы, которые мы пройдем: — Введение в Python. Основные конструкции и базовые типы. — Структуры данных и функции. Коллекции. Модули. Функциональноепрограммирование в Python.— Объектно-ориентированное программирование на языке Python— Классы в Python. Отладка и тестирование.— Работа с математической библиотекой numpyЗнания, приобретенные слушателями курса, пригодятся им при решении самых различных задач – от применения в сфере машинного обучения до разработки веб-приложений и десктопных проектов.Преподаватель:Ковалева Карина Сергеевна-лектор

Программирование на Java

Сегодня Java является одним из основных языков программирования в разработке корпоративных приложений, веб-сайтов для больших проектов в e-commerce, мобильных приложений. Основная особенность данного языка в том, что он кроссплатформенный. Это значит, что программное обеспечение, написанное на одной платформе, будет запускаться и на других устройствах. Java находится в числе самых популярных языков на GitHub по количеству коммитов. Язык востребован благодаря огромному выбору библиотек под любые задачи. Использовать Java можно в таких областях как разработка для Android, виртуальная и дополненная реальность, разработка игр, беспилотные автомобили и т.д.В рамках дисциплины «Программирование на языке Java» студенты познакомятся с основными понятиями платформы Java, возможностями объектно-ориентированного языка Java, основными приемами работы с пакетами. По результатам освоения данной дисциплины студенты приобретут навыки разработки многопоточных приложениях, а также узнают подходы к созданию консольных и визуальных кроссплатформенных программ. Знания полученные в рамках данного курса по разработке на языке Java необходимы будут, в том числе, для разработки мобильных приложений для операционной системы Android.Преподаватель:Пирская Любовь Владимировна – лектор

Операционные системы и системное ПО

Что операционные системы – это «самые главные» компьютерные программы, это сейчас знает каждый. Все готовы с видом знатоков обсуждать различие версий Windows, Linux, Android или iOS. А что это такое на самом деле – операционная система? Как она устроена, что должна делать и что об этом нужно знать программисту? Операционные системы – один из самых сложных типов программ, созданных за все время существования компьютеров. Благодаря им, программирование из фокуса, доступного особо продвинутым единицам, превратилось в отрасль промышленности. Программировать могут миллионы людей, пользоваться программами – уже, наверное, миллиарды. Но и тем, кто считает себя «особо продвинутыми», есть чем заняться. Прогресс компьютерной отрасли не стоит на месте, а вместе с компьютерами должны совершенствоваться и их операционные системы. Для этого нужны специалисты, глубоко понимающие принципы устройства операционных систем и способы их реализации, способные предлагать новые, прорывные идеи в этой области. Или, как минимум, умеющие грамотно использовать имеющиеся системы и выжать из них все возможное для повышения эффективности работы прикладных программ.Операционная система – это сложный комплекс подпрограмм, выполняющих одновременно много разных задач. Главное – она должна обеспечить запуск прикладных программ и их параллельное выполнение, честно поделить между ними имеющуюся память (которой всегда не хватает) и процессорное время (которого не хватает еще больше). Если эта задача решена плохо – программы тормозят, а пользователь злится. При этом система должна управляться с многочисленными внешними устройствами, подключенными к компьютеру, от клавиатуры и мышки до принтера и роутера. Она должна обеспечивать надежное хранение файлов и доступ к ним. Она обязана защищать пользователя от вирусов и злоумышленников. Поддерживать работу с сетью. Автоматически обновляться. Варить кофе и делать бутерброды (но это в будущем). И при этом быть красивой и удобной для пользователей! Вот эти вопросы мы и будем рассматривать на лекциях и лабораторных занятиях по нашему курсу. Не обещаем, что после изучения курса вы сможете создать новую, самую лучшую операционную систему. (Хотя предложить новые идеи – почему нет? Мечтать не вредно!) Но хорошо разобраться в существующих системах, поковыряться в исходных текстах системы с открытыми кодами и кое-что изменить в ее работе – это пожалуйста. Мы ждем заинтересованных студентов.Преподаватели:Дроздов Сергей Николаевич – лектор Проскуряков Александр Викторович – лектор Жиглатый Артемий Александрович – ассистент

Качество и тестирование ПО

9 ноября 2011 г. ракета «Зенит-2SБ» с межпланетной станцией «Фобос-грунт» стартовала с космодрома Байконур. 15 января 2012 г. между 21:40 и 22:10 МСК на 1097-м зафиксированном витке при снижении в плотных слоях атмосферы АМС «Фобос-Грунт» прекратила своё существование вследствие аэродинамического перегрева, механического разрушения и сгорания. По сообщению газеты «Коммерсантъ» от 31 января 2012 года, рассматриваемые комиссией по расследованию катастрофы версии какого-либо внешнего воздействия на станцию подтверждения не нашли. При этом основной причиной в выводах Межведомственной комиссии назван программный сбой, вызвавший одновременный перезапуск двух работающих каналов бортового вычислительного комплекса (БВК), вследствие ошибки при программировании БВК. В одном из анализов показывается, что причиной нештатной ситуации могла стать рассинхронизация на 1 час между бортовым временем, установленным на энергонезависимых часах станции, и декретным московским временем, по которому была рассчитана часть циклограммы полёта. «Новизна космического аппарата «Фобос-Грунт», с учётом того что мы двадцать лет ничего не делали, даже свыше 90 процентов» - Владимир Поповкин, глава Российского космического агентства в 2011—2013 г.г. Стоимость проекта «Фобос-Грунт» — около 5 миллиардов рублей. Стоимость самого космического аппарата составила 1 млрд 200 млн рублей. И ведь такие случаи не единичны! Еще хуже, когда ошибки в программах приводят к человеческим жертвам. Достаточно вспомнить недавние катастрофы с новейшим самолетом Boeing 737 MAX. Приведенные выше общеизвестные факты, взятые из Википедии, очень наглядно показывают важность изучения и скрупулезного применения методов обеспечения качества программного обеспечения. Дисциплина предназначена для ознакомления с основами метрологии программного обеспечения и освоения основных методов обеспечения качества программного обеспечения: тестирования, метрологической оценки качества ПО и верификации (метод проверки моделей программ). Мы ждем заинтересованных студентов.Преподаватели:Данилов Игорь Геннадьевич – лектор Проскуряков Александр Викторович – лектор Жиглатый Артемий Александрович – ассистент

Архитектура, технологии и инструментальные средства разработки ПО

Чем программирование отличается от программной инженерии? Можно программировать для удовольствия, для того, чтобы научиться, можнопрограммировать в рамках научных разработок. А можно заниматься промышленным программированием. Как правило, это происходит вкоманде, и совершенно точно – для заказчика, который платит за работу деньги. При этом необходимо точно понимать, что нужно пользователю, выполнить работу в определенные сроки и результат должен быть нужного качества – того, которое удовлетворит заказчика и за которое он заплатит. Чтобы удовлетворить этим дополнительным требованиям, программирование "обрастает" различными дополнительными видами деятельности: разработкой требований, планированием, тестированием, конфигурационным управлением, проектнымменеджментом, созданием различной документации. Разработка программного кода предваряется анализом и проектированием (первое означает создание функциональной модели будущей системы без учета реализации, для осознания программистами требований и ожиданийзаказчика; второе означает предварительный макет, эскиз, план системы на бумаге). Требуются также специальные усилия по организации процесса разработки. Как организовать взаимодействие внутри команды, с внешними разработчиками, с заказчиком, пользователями. Для того что бы быть уверенным в том, что система сделано правильно и работает правильно, и обладает необходимыми параметрам качества, необходимы усилия по тестированию. Система документируется на многих уровнях, создаются правила оформления программного кода – то есть оставляются многочисленные семантические следы, помогающие создать и сохранить, поддерживать единую, стройную архитектуру, единообразный стиль, порядок. Все эти и другие дополнительные виды деятельности, выполняемые в процессе промышленного программирования и необходимые для успешного выполнения заказов и составляют программную инженерию (software engineering). Так что если хотите выйти за пределы «сделаю сайт за 21 день» , то вамточно нужно знать какие виды деятельности кроме программирования естьпри создании программного обеспечения, какие роли в команде должно быть и как это всё увязать в единый процесс промышленного производства программного обеспечения.Преподаватели:Калачев Дмитрий Петрович- лектор

Дисциплины специализации направления 02.03.03 Математическое обеспечение и администрирование информационных систем

Теория языков программирования и вычислительных процессов

«Не будьте разработчиками шаблонного ширпотребного софта. Вместо этого, постарайтесь разрабатывать новые инструменты для пользователей и других программистов. Если провести историческую аналогию, то кем бы вам больше хотелось быть: работником за ткацким станком, ежедневно выполняющим рутинные операции или разработчиком новых моделей таких станков?» Rastislav Bodik, Университет Беркли (США) После того, как программист изучил уже не один язык программирования, он начинает понимать, что они отличаются друг от друга значительно меньше, чем того можно было бы ожидать. На каком-то этапе обучения он уже обращает внимание не столько на синтаксис языка программирования, сколько на лежащие в его основе идеи, модель памяти, принципы выполнения инструкций, способы организации взаимодействия объектов и модулей. Всё это можно назвать теорией языков программирования и теорией вычислительных процессов, с точки зрения которых разные языки просто реализуют несколько различные версии одних и тех же базовых идей. В современном ИТ-мире разработано уже огромное количество языков программирования, однако процесс разработки новых языков не останавливается. И причина кроется в том, что до сих пор мы не всегда можем удобно выразить, что же мы хотим получить на выходе программы и как это должно быть рассчитано. Ну а если я не хочу разрабатывать новые компиляторы, не всем же создавать языки и фреймворки, зачем мне этот курс, спросите Вы? Чтобы быть хорошим программистом, нужно понимать основные принципы реализации языков, и это даст возможность понимать почти любые конструкции в почти любом языке. А забывшееся ключевое слово или функцию из стандартной библиотеки всегда можно подсмотреть в документации… Понимание того, как какой объем работы по обработке написанной Вами программы выполняет компилятор или интерпретатор, позволит Вам строить оптимальный код. А владение моделями распределения памяти и работы с подпрограммами и потоками позволит сделать его максимально эффективным. Кроме того, имея знания о внутренней организации языков программирования, вам легче будет выбирать один из них для решения тех или иных задач. Языки программирования расцветают и устаревают. Вчера был в моде Python, а сегодня его оттесняют Ruby и SWIFT. Знания основных парадигм позволят Вам оставаться на острие прогресса, легко осваивая синтаксис новых языков, что откроет Вам доступ к более интересным проектам или хорошим компаниям. В нашем курсе Вы научитесь понимать особенности языков программирования (как самого языка, так и транслятора), нюансов выполнения написанных на них программ, вытекающих из принятых традиционных способов организации трансляторов (компиляция и интерпретация, время связывания, статические и динамические свойства). Кроме того, Вы познакомитесь с тем, как организованы вычислительные процессы внутри компьютера, как эти процессы взаимодействуют между собой, как делят общую память и ресурсы компьютера, какие при этом возникают сложности и как они решаются. Мы обсудим, что такое многозадачность и посмотрим, как она устроена, когда многозадачность это хорошо, а когда – не очень. Вы научитесь понимать и использовать особенности организации многопоточных приложений, узнаете, какие бывают типы взаимодействий процессов, что такое планирование процессов и как выбрать жертву при управлении памятью. Имея за плечами багаж таких курсов, как «Структуры и алгоритмы обработки данных», «Объектно-ориентированное программирование», «Операционные системы и системное программирование», на лабораторных работах Вы получите практические навыки разработки сложных структур данных и алгоритмов для работы с ними. Ведь основным элементом программирования на этапе синтаксического анализа является рекурсия (рекурсивные функции), а основной структурой данных - деревья. Связь синтаксической и семантической компонент работает на принципах динамического связывания и событийного программирования. Организуя взаимодействие нескольких процессов, выполняемых как на одном компьютере, так и на множестве рабочих станций сети, вы получите возможность как «прокачать» свои навыки организации сетевого взаимодействия, так и проанализировать эффективность такого взаимодействия, все его плюсы и минусы. Основные темы: 1. Формальные языки и грамматики2. Модели лексического, синтаксического и семантического анализа программ3. Компиляция и интерпретация4. Процессы и потоки. Межпроцессное взаимодействие5. Планирование процессов6. Управление памятью. Алгоритмы замещения страниц7. Сети Петри и моделированиеПреподаватели:Балабаева Ирина Юрьевна – лектор Хашковский Валерий Валерьевич – лектор

Администрирование информационных систем

У студентов направлений 02.03.03 и 09.03.04 курс «Администрирование информационных систем» является одним из профессионально направленных курсов, который в дальнейшем может быть углублен по желанию студента в рамках дисциплины «Системное администрирование».Слушатели познакомятся с организацией администрирования информационных систем, развернутых на платформах UNIX/LINUX, а также на платформе системы управления базами данных ORACLE. Это базовый курс по администрированию, ориентированный на формирование основных навыков работы в среде операционных систем с точки зрения администрирования, сетевого взаимодействия, поиска и устранения неисправностей, эксплуатации информационной системы.Отличительной особенностью данного курса является использование увеличенного объема лабораторных занятий, примеры типовых ситуаций из практики.Лабораторные занятия ориентированы на основные темы, такие как установка и конфигурирование ОС Linux, установка и конфигурирование сервера имен, установка и конфигурирование web-сервера, установка и конфигурирование сервера электронной почты, установка и конфигурирование сервера Oracle, реализация механизмов импорта/экспорта данных на платформе Oracle.Основные темы:Основы администрирования Linux;Идентификация сущностей в ИС;Информационные системы для Интернет/онлайн;Информационные системы для Интернет/оффлайн;Основы конфигурирования ORACLE;Основы командного интерфейса ORACLE;Основы управления транзакциями;Основы управления импортом/экспортом данных.Преподаватель:Хашковский Валерий Валерьевич – лектор

Функциональное и логическое программирование

Дисциплина изучается в последнем, 8-м семестре и для успешного ее изучения не обязательно обладать какими-либо знаниями в областипрограммирования. Основным кирпичиком функциональных программ (ФП) является функция (на всякий случай, из Википедии – это именованный блок кода, который вызывается в нужных местах программы по имени и, как правило, возвращает какое-либо значение). Чем отличается функциональное программирование от императивного (изучали в школе) и объектно- ориентированного (изучается на втором курсе)? В последних основа программы – переменные, которые в процессе выполнения программы изменяют свои значения, в том числе и под воздействием функций. В любой момент времени программист может получить значения переменных программы и историю их изменений. В функциональных программах никакой истории переменных выделить нельзя, да и переменных может не быть вовсе. Функциональная программа – выражение, состоящее из последовательных вызовов функций как библиотечных, так и созданных программистом. Говорят, чтофункциональное программирование – это декларативное программирование: программист объявляет цель, которую он хочет получить и для ее достижения строит соответствующее выражение. Чем привлекает функциональное программирование? Из-за особенностей построения программ они удобны для распараллеливания – вычисление выражения выполняется одновременно на нескольких процессорах. Например, функциональный язык Erlang широко используется в телекоммуникационных проектах фирмами WhatsApp, Яндекс, Facebook и др. Логическое программирование также является декларативным. Но единицей программы является не функция, а предикат – конструкция, похожая на функцию, но ничего не возвращающая, результатом выполнения которой может быть только истина или ложь. Предикаты объединяются в выражение на основании правила «если предикат – истина, то продолжаем вычисления». Языки логического программирования являются инструментальным средством для создания экспертных систем. Изучаем функциональные языки Haskell, Common Lisp и язык логического программирования Visual Prolog, для чего слушаем лекции и выполняем лабораторные работы.Преподаватель: Лутай Владимир Николаевич-лектор

Дисциплины специализации направления 09.03.04 Программная инженерия

Компьютерное моделирование и разработка компьютерных игр

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

Проектирование пользовательского интерфейса


Управление проектами разработки ПО

В 1956 г. двое энтузиастов Уолкер и Келли попытались использовать средства ЭВМ Univac для составления планов-графиков крупных комплексов работ по модернизации заводов фирмы «Дюпон». В результате был создан метод описания проекта с использованием ЭВМ, который получил название метода критического пути. А его применение позволило завершить модернизацию заводов на год раньше намеченного срока. Так было положено начало современной отрасли знаний по управлению проектами. С тех пор было разработано много других подходов и методов, созданы автоматизированные системы управления проектами, в которых эти методы реализованы на уровне пользовательского интерфейса.Данный курс предназначен для изучения особенностей технологии управления проектами применительно к проектам разработки программного обеспечения. Вы узнаете много интересного: как организовать работу проектной команды; как составить план работ и реализовать его; как загрузить разработчиков без простоев и перегрузок; как составить бюджет проекта и не выйти за его рамки; как собрать данные о прогрессе проекта и сделать прогноз о ходе его выполнения; как применять Microsoft Project для планирования и управления проектом.Полученные навыки вы можете использовать в своей профессиональной деятельности на должности менеджера проекта в любой компании по разработке программного обеспечения. Поступайте на наши программы! Становитесь успешными менеджерами программных проектов!Преподаватель:Скороход СергейВасильевич-лектор

Прикладные дисциплины (по сферам ИТ)

Инженерия ПО для систем реального времени и Интернета вещей

Попытки "связать" компьютер с окружающими устройствами начались с появлением первых микропроцессоров. Сначала это были информационно-управляющие системы для сбора информации о состоянии различных технических систем и управления ими. Сейчас это огромное разнообразие систем от контроллера елочной гирлянды до смартфонов, пластиковых карт, бытовой техники, беспилотных транспортных средств и умных (Smart) городов. Общим для них является то, что вычислительный модуль тесно интегрирован (встроен) в те физические объекты, которыми он управляет. Поэтому такие системы называются "встраиваемыми&quot или "встроенными" системами (Embedded Systems). У встраиваемых систем есть свои особенности: работа в реальном масштабе времени, автономность работы (без управления человеком), ограниченные вычислительные ресурсы и ресурсы памяти, необходимость взаимодействия с внешними устройствами (датчиками и другими системами). Раньше, чтобы сделать даже самую простую систему класса Embedded Systems, нужно былознать многое из курса электроники, уметь работать паяльником, хорошо разбираться в электрических схемах. Сегодня многое изменилось. Появилось множество типовых аппаратных решений, а вся интеллектуальная "начинка" все больше и больше реализуется программным способом, появился термин "встраиваемое ПО" (Embedded Software). Растущие разнообразие исложность прикладных задач, многообразие аппаратных платформ, вопросы надежного и безопасного функционирования встраиваемых систем, необходимость рефакторинга полученных ранее результатов на всех этапах проектирования – привели к формированию специального направления в программной инженерии: Инженерия программного обеспечения встраиваемых систем и систем реального времени. А примером того, насколько эта отрасль сейчас быстро развивается, является одно из ее направлений: интернет вещей (IoT) - это принцип построения вычислительной сети на основе предметов, оснащённых встроенными технологиями для взаимодействия друг с другом или с внешней средой, в том числе без участия человека. Дисциплина "Системы реального времени и Интернет вещей" познакомит слушателей с архитектурами современных микроконтроллеров, которые наиболее широко используются при построении встраиваемых систем. Будут рассмотрены протоколы взаимодействия микроконтроллера с внешними устройствами, принципы реализации опроса датчиков и управления исполнительными устройствами различного типа, вопросы организации сетевого взаимодействия и обмена данными между устройствами. В рамках выполнения лабораторных работ слушатели будут создавать проекты по тематике интернета вещей на базе платформы ARDUINO и облачных сервисов IoT. Несколько занятий будут посвящены теме промышленного интернета вещей (Industrial IoT). Большое внимание будет уделено особенностям разработки приложений для систем реального времени, требующих высокой производительности и/или многозадачности. На примере процессоров цифровой обработки сигналов семейства SHARC ADSP слушатели познакомятся с архитектурой DSP-процессора, принципами оптимизации кода для RISC- процессоров, способами программной организации обработки сигналов в алгоритмах различного типа, принципами написания обработчиков прерываний и драйверов для портов ввода/вывода на языке низкого и высокого уровня.Вопросы создания многозадачных приложений, функционирующих под управлением операционной системы реального времени (разграничение доступа к ресурсам, реализация протоколов обмена данными, программно-аппаратные интерфейсы) будут рассмотрены напримере операционных систем реального времени QNX, VxWorks, Linux. Особое внимание будете уделено вопросам проектирования, разработки и верификации программного обеспечения систем реального времени для критических приложений, требующих высокой надежности и отказоустойчивости системы. Хотя программист систем реального времени – одна из наиболее высокооплачиваемых позиций в списках вакансий работодателей, требующая высокого уровня базовой подготовки сразу в нескольких смежных областях программирования и вычислительной техники, после изучения данного модуля вы вполне сможете придумать и реализовать свою собственную встраиваемую систему, функционирующую в реальном времени.Преподаватели:Данилов Игорь Геннадьевич – лектор Хусаинов Наиль Шавкятович – лектор Вяткин Валерий Владимирович – лектор Усатова Дарья Васильевна - ассистент

Программирование компьютерной графики

Дисциплина изучается студентами направлений 02.03.03 и 09.03.04 на третьем курсе. Предполагается, что студенты уже получили основныенавыки разработки и отладки программного кода, проектирования структуры программных модулей и готовы применить полученные навыки к одной из наиболее интересных областей современных IT-технологий – программированию компьютерной графики. Данная дисциплина является одной из специализированных дисциплин, ориентированных на конкретную область, в данном случае – спектр возможного применения достаточно широк, поскольку разработка практически любого современного программного продукта предполагает необходимость реализации графического пользовательского интерфейса, способа отображения и визуализации информации. Фундамент дисциплины включает основные методы и алгоритмы компьютерной графики – базовые элементы растровой графики: пиксель, растровое изображение, алгоритмы растровой развёртки и отсечения, а также элементы планиметрии: точка, прямая, многоугольник, методы определения пересечения плоских фигур, включения точки в множество. На этой базе производится индуцирование более сложных теоретических и практических аспектов методов и алгоритмов векторной и трёхмерной графики, включающих решение задач преобразования объектов трёхмерной сцены, представление видимых элементов, удаление невидимых частей сцены, расчет освещенности объектов, вычисление теней, наложение текстур и многое другое. Материал дисциплины позволяет освоившему дисциплину студенту реализовывать практически любые графические приложения современного уровня – от компактных проблемно-ориентированных программных решений визуализации до интерактивных графических приложений и компьютерных игровых приложений. Полученные знания и навыки в рамках данной дисциплины могут быть полезны при выполнении выпускной работы, в том числе, дипломная работа может быть полностью посвящена одному из популярных направлений из области компьютерной графики: фрактальные алгоритмы, алгоритмы рендеринга, разработка игровых приложений, визуализация произвольной информации. Поскольку область компьютерной графики в настоящее время находится в фазе активного развития, то многие элементы области компьютерной графики могут быть приняты в качестве предмета исследования в рамках НИР на старших курсах бакалавриата и в магистратуре.Преподаватель: Селянкин Владимир Васильевич - лектор Гуляев Никита Андреевич – ассистент

Искусственный интеллект и анализ данных

Физики неплохо понимают ньютонову механику, максвеллову теорию света, релятивизм и квантовую теорию — но базовые законы разума до сих пор скрыты покровом тайны. Искусственный интеллект (ИИ) видит и слышит гораздо лучше нас, но не понимает увиденного и услышанного. Наш мозг неосознанно распознает объекты, производя при этом многие триллионы операций. Мы, к счастью, этого просто не замечаем. Причина того, что значительная часть действий мозга скрыта даже от нас самих, — эволюция. Другими словами, действия нашего мозга напоминают огромный айсберг. То, что мы осознаем, лишь верхушка айсберга, сознание. Подсознание, скрытое от глаз и гораздо более объемное, задействует громадное количество «вычислительной мощи» мозга, чтобы мы постоянно были в курсе простых вещей: где мы, с кемразговариваем, что находится вокруг. Все эти действия мозг проделывает автоматически, не спрашивая нас и не отчитываясь о них; мы просто не замечаем этой работы. Рей Курцвейл, предсказывает в 2037 г. гигантский прорыв в понимании тайны человеческого мозга. В будущем никто не отнимет у человека профессии, требующие здравого смысла, связанные с творчеством, талантом, юмором, развлечениями, анализом и лидерством. Именно эти качества делают нас уникальными, именно их так трудно воспроизвести в компьютере. Именно они делают нас людьми. Могут ли машины обладать сознанием? По этому вопросу, возможно, слишком много научных трудов написано поколениями философов и психологов. Процесс мышления в мозге не локализован, а распределен. Просто в каждый момент времени за первенство в нем состязаются различные центры, все они соревнуются между собой и стараются захватить наше внимание. Может ли искусственный интеллект представлять опасность? Физики работают над посткремниевой технологией. Результаты не слишком обнадеживают. Квантовые, оптические, атомные компьютеры, компьютеры на основе ДНК. На каждом направлении имеются громадные трудности… Более реальной угрозой представляется зависимость нашей инфраструктуры от компьютеров. Чтобы все работало, придется вводить в эти компьютерные сети ИИ. Превзойдут ли компьютеры нас по разумности? В принципе это не запрещено никакими законами природы. В постбиологическом мире наша ДНК может оказаться никому не нужной,потому что она проиграет эволюционную гонку сопернику нового типа. Курс начинается с истории развития искусственного интеллекта. Она в чем-то забавна  ведь первыми реальными достижениями были красивые программы, способные к логическим доказательствам и сложным вычислениям. Но затем мы захотели сделать машину, которая умела бы отвечать на вопросы по простым рассказам из книжки для первоклассников. На сегодняшний день не существует машины, способной на это. Далее, Вы получите представление об Artificial Intelligent, нейроинформатике. Изучите практическое представление знаний в интеллектуальных системах, методы вывода на знаниях: дедуктивный, индуктивный, абдуктивный, вероятностный, нечеткий, нейросетевой, эволюционный. Мы разберем технологии инженерии знаний, системы и методы распознавания образов, гипертекстовые, многоагентные и онтологические системы, интеллектуальные сенсорные системы. Вы узнаете о методах интеллектуального анализа данных, перспективных интеллектуальных системах. На лабораторных и практических занятиях будут решаться практические задачи по представлению экспертных знаний, математическому обеспечению и программированию нейросетевых систем, распознаванию изображений, интеллектуальному анализу данных. Где понадобятся полученные знания и навыки? – Недавно в нашей стране заработала национальная стратегия развития технологических и программных решений, приводящих к результату, аналогичному или превосходящему человека, и используемых для решения прикладных задач на основе больших данных с помощью систем компьютерного зрения, обработки естественного языка, распознавания и синтеза речи. Каждое из этих направлений является критическим, в том числе и подготовка дефицитных кадров по образовательным программам в области ИИ.Преподаватель: Профессор Родзин Сергей Иванович – лектор

Мобильная разработка

Современный мир уже невозможно представить без мобильных устройств: планшетов, смартфонов и многих других «умных» устройств: часов, телевизоров и т.п., которыми пользуются все: от продвинутой молодёжи до пенсионеров. Разработчик мобильных приложений ‒ это специалист,создающий программные приложения для таких устройств. Множество компьютерных программ перебазировалось на мобильные устройства и успешно там функционирует. Сегодня разработка мобильны приложений ‒ это одно их самых перспективных и востребованных, а можно сказать и «модных», направлений специализации программистов. Преимущество и уникальность профессии мобильного разработчика в том, что всё зависит только от тебя самого: имея изначально хорошую идею, навыки разработки мобильных приложений и грамотно воплотив её в мир мобильных технологий, не вкладывая ресурсов, можно в самые короткие сроки создать международный проект, аналогичный Instagram, и стать миллионером. Дисциплина «Разработка мобильных приложений» позволит студенту приобрести достаточно знаний, умений и навыков для самостоятельной разработки полноценных мобильных приложений для различных устройств. В рамках данной дисциплины будут рассмотрены 2 модуля:  модуль «Программирование на языке Java», в котором студенты познакомятся с основными понятиями платформы Java, возможностями объектно-ориентированного языка Java, основными приемами работы с пакетами;  модуль «Программирования для мобильных устройств», который познакомит студентов с особенностями основных мобильных операционных систем, различными современными инструментами разработки программного обеспечения для мобильных устройств (детальное изучение одного из них), основными приёмами и методами программирования мобильных приложений. Разработка мобильных приложений уже превратилась в самостоятельную отрасль, для которой нужны свои специалисты, она ждет именно Вас!Преподаватели:Пирская Любовь Владимировна – лектор

Веб-разработка. Программирование в базах данных и интернет

Сейчас ты стоишь на пороге своего самого главного выбора – выбора своей будущей профессии. Если при выборе будущей профессии тыдумаешь: «Я б в айтишники пошел. А куда еще идти?», тогда тебе именно к нам на кафедру Математического обеспечения и применения ЭВМ (МОПЭВМ) – единственную профильную кафедру ЮФУ по подготовке специалистов в области разработки программного обеспечения. Если ты заинтересовался программированием и хочешь стать разработчиком, поздравляем! Ты сделал отличный выбор. Программисты бывают разные и одно из направлений – это разработка web-приложений. Блок дисциплин: «Web-разработка и дизайн» включает 3 курса:«Программирование Web-интерфейсов», «Программирование баз данных для Web-приложений» и «Проектирование и реализация Web-приложений».Каждый курс длится один семестр и позволяет получить теоретические и практические навыки, необходимые в дальнейшей работе web-программисту. Все 3 блока являются практико-ориентированными, а это значит, что на рассмотрение основного теоретического материала отводится около ~30% от всего курса, а остальные ~70% – это практика, для получения и закрепления необходимых навыков для успешного web-разработчика. Целью освоения блока дисциплин «Web-разработка и дизайн» является развитие профессиональных навыков в области современных технологий разработки web-приложений, что, в свою очередь, обусловлено потребностью бизнеса в квалифицированных web-специалистах с высшим образованием и трудовыми умениями в соответствии с профессиональными стандартами в данной области. По окончанию обучения по направлению «Web-разработка и дизайн» ты приобретешь навыки разработки web-проекта: от этапа принятия технического задания от заказчика до программной реализации и выпуска продукта, научишься разрабатывать сайты от одностраничных до интернет- магазинов, сможешь выполнять настройку web-сервера для работы web-приложения, и сможешь в дальнейшем применять свои знания и навыки в компаниях, занимающихся разработкой сайтов, web-приложений, проектов различного масштаба и уровня сложности. В общем, стать хорошим IТ-специалистом сложно, но, как говорится, игра стоит свеч. Качественный программист сейчас – на вес золота. Если ты задумался о том, что web-разработка — это твое направление, то мы ждем тебя у нас! Преподаватели:Пилипушко Елена Михайловна - лектор Ковалева Карина Сергеевна - ассистентПилипушко Татьяна Александровна - ассистент