Открыл семестр небезызвестный Александр Сергеевич Куликов, среди многочисленных званий которого: кандидат физико-математических наук, научный сотрудник Лаборатории математической логики ПОМИ РАН, преподаватель АУ РАН, координатор Computer Science клуба при ПОМИ РАН, куратор направления Computer Science в CS центре. Лекции, проходившие с 13 по 15 сентября, были посвящены алгоритмам для NP-трудных задач.
Что же такое NP-трудные задачи и с чем их едят?
Одним из центральных открытых вопросов компьютерных наук является вопрос о равенстве классов P и NP. Неформально его можно сформулировать так: «Верно ли, что для каждой алгоритмической задачи, решение которой можно быстро проверить, можно быстро найти решение?» Ответа мы до сих пор не знаем. NP-трудные задачи — в некотором смысле самые сложные из алгоритмических задач. Классический пример — задача трехцветной раскраски графа, в которой вершины данного неориентированного графа нужно покрасить так, чтобы концы всех рёбер были разного цвета. Действительно, проверить, является ли заданная раскраска правильной, легко. В то же время мы не знаем алгоритмов, которые бы за полиномиальное время проверяли, есть ли у данного графа такая раскраска. Таких задач очень много, они часто возникают на практике.
Александр Куликов дал обзор для алгоритмов для таких задач. Более конкретно, слушатели курса узнали:
Отдельное внимание было уделено открытым задачам данной области.
«Java: курс молодого бойца», или как освоить профессиональные инструменты за три дня
Принял эстафету Алексей Александрович Владыкин, который провел курс лекций, освещающий некоторые профессиональные инструменты Java-программирования.
Алексей Владыкин — инженер-программист компании OpenWay, а также преподаватель Computer Science Center — прилетел к нам, как он сам выразился, из солнечного Санкт-Петербурга.
Мероприятие длилось с 28 по 30 ноября по две лекции в день.
«Всё хорошо, когда всё параллельно», — гласила надпись на одном из слайдов. В первый день слушатели узнали о многопоточности в Java. Знакомство началось с общих сведений о параллелизме: мотивация, закон Амдала, универсальный закон масштабируемости. Далее речь пошла об управлении потоками, их синхронизации и модели памяти. Под конец Алексей дал советы, которые помогут правильно построить программу с использованием распараллеливания. Так под бурю аплодисментов завершилась первая часть курса.
Maven и JUnit стали второй ступенью для наших бойцов.
Maven является словом из языка идиш, смысл которого можно примерно выразить как «собиратель знания». В мире Java же этот инструмент позволяет облегчить и сэкономить время при сборке проектов. На конкретных примерах наставником были продемонстрированы основы работы с этим фреймворком.
Каждому программисту периодически приходится видеть сообщение об ошибках, допущенных при работе программы. Порой приходится прогонять код сотни раз, чтобы добиться его стабильной работы. Алексей рассказал, как начинал свой путь с должности тестировщика и посоветовал книгу, являющуюся Библией для специалистов в этой области — "The Art of Unit Testing". И тут же приоткрыл секрет написания хорошего теста — это плохое настроение. Открыл двери к использованию библиотеки JUnit для модульного тестирования программного обеспечения на языке Java. А после к Алексею ещё подходили за советом и задавали интересные вопросы.
Третий день открыл завесу тайны над фреймворком Spring и о том, как написать свой сервер на Java.
Перед началом все получили визитки нашего гуру, который с удовольствием дал согласие ответить на вопросы уже вне аудитории.
Лекция же началась с истории создания Spring и его пути к популярности среди разработчиков. Spring — это фреймворк, делающий разработку на Java более эффективной и гибкой. Интересным было также увидеть работу сервера, перед написанием которого Алексей продемонстрировал простую модель взаимодействия компьютеров между собой. В конце все поблагодарили Алексея, а он в свою очередь выразил благодарность за теплый прием, отзывчивую и любознательную аудиторию.
Баграмов Роберт, студент 3-го курса, руководитель Научно-практической платформы отозвался о курсе: «Сравнительно недавно я начал изучать Java. Поначалу рассматривал его как очередной язык программирования, которым он и является во многих отношениях. Но познакомившись с ним чуть лучше, я стал его поклонником. Поэтому новость о прибытии Алексея Владыкина стала для меня чем-то грандиозным. Конечно же, я с удовольствием побывал на всех его лекциях.
Мне стало понятно, что знания, которыми я владею, это лишь песчинка в пустыне. И надо изучить ещё немало, чтобы стать хорошим программистом. Но этот курс помог мне перейти на другой уровень и дал определенное направление для развития в этой области».
Приезду гостей посодействовал Computer Science клуб в Казани, созданный при поддержке Антона Лиходедова (Deutsche Bank) и Казанского федерального университета (КФУ). Также одним из организаторов встречи стал Фарид Мансурович Аблаев - заведующий кафедрой теоретической кибернетики ИВМиИТ КФУ.