Новый спецкурс C/Data – впечатления благоприятные.
С.И.Мельник
В прошедшем учебном году был в первый раз прочитан спецкурс «Язык программирования Си и обработка потоков данных» (C/Data). Сразу скажу, что, как мне кажется, курс удался. Он получился очень интересным – в рамках курса удалось удачно совместить техническую часть (изучение языка программирования Си) с весьма содержательной алгоритмической частью. Сюжетную канву курса составили алгоритмы работы с текстами, причём в большинстве случаев текст рассматривался как битовый поток данных. Такого рода приложения характерны для Си, учитывая его высокую эффективность, его близость к «железу» (Си часто называют языком среднего уровня, или даже «Ассемблером высокого уровня»), характерный для Си набор инструкций. Более конкретно, при первом прочтении в курс вошли две основные линии: 1. Передача и хранение данных: форматы передачи данных для электронной почты; CRC-коды (распространённая контрольная сумма для обнаружения повреждения данных при передаче или хранении), их реализация и устойчивость; Internet CheckSum. 2. Алгоритмы сжатия без потерь (архивации). Удалось рассмотреть большинство подходов, применяемых в современных архиваторах, и их реализации: статистическое сжатие (в частности, метод Хаффмана построения префиксного кода), арифметическое сжатие, блочное кодирование (преобразование Барроуза-Уилера и методы, используемые совместно с ним), словарные методы (различные варианты алгоритмов Зива-Лемпеля). Кроме того, довольно естественно пришли к рассмотрению некоторых нетривиальных структур данных, например, деревьев и куч. Встречаются структуры такого рода сплошь и рядом. Так что с алгоритмической стороны курс получился очень интересным, хотя ограничения по времени не дали возможности вообще никак затронуть методы криптографии. Но это уже другая (и тоже большая и безумно интересная) история. Надеюсь, соответствующий курс тоже у нас появится в том или ином виде. На протяжении практически всего курса успешно оттачивалась техника работы с битами и битовыми блоками. Изучение собственно языка программирования очень удачно вписалось в курс: действительно, курсанты изучали Си практически в течение всего семестра, постепенно открывая для себя его возможности. Основной акцент в изучении языка в данном курсе приходится не на системные применения, а на обработку битового потока (вот где пригодились низкоуровневость языка и эффективность генерируемого кода). Приятный (и не запланированный) момент состоит в том, что удалось тщательно рассмотреть многие проблемы, часто возникающие при программировании на Си, – проблемы при работе с массивами и указателями, борьба с утечкой памяти, вопросы работы с функциями с переменным числом аргументов. Так часто бывает – адекватный подбор материала провоцирует более глубокое проникновение в технику владения инструментом. Всё это не дало ни минуты скучать и тем курсантам, кто предварительно прослушал наш классический спецкурс C/Unix и уже имел хотя бы минимальный опыт программирования на Си – язык предстал перед ними совсем в другом ракурсе, раскрыл свои неведомые им ранее грани и красόты. Думаю и надеюсь, что спецкурсу C/Data предстоит долгая жизнь.
Про Питонов и графов.
Автор статьи Алесей Лучко имеет дело с Питоном прямо на рабочем месте, поскольку он (Алексей) не только наш выпускник, преподаватель, но и программист-разработчик. Алексей и редакция выражают благодарность выпуксникам Progmeistars’а, за обсуждение этой статьи: Дмитрию Кузьменко из Microsoft, Максиму Реброву из Skype, Ярославу Самчуку из Google.
Здравствуй дорогая ученица и дорогой ученик! Я хочу рассказать тебе сказку о питоне. Питон -- это такая гибкая зверюга. Однажды семья завела себе маленького питона. Их дочурка любила играть с ним, и ему разрешали даже ползать по кроватям во время сна. Потом питон вырос. Однажды он перестал есть, и в один прекрасный день приполз в кровать к девочке и вытянулся вдоль неё. Люди подумали, что зверюга заболел, и отнесли ее к врачу. Доктор осмотрел питона и сообщил им, что тот вполне здоров, а его поведение объясняется просто -- он примеряется к девочке... Все остались целы, но Питона, конечно, сдали в зоопарк. Бояться Питона не надо, но и бдительность терять -- тем более! Семестр о Питоне будет увлекательным. Мы постараемся познакомить вас с его особенностями и способами полезного применения. И не только с ним. Ещё мы будем работать с графами. Графы это не только место обитания питона и его пища. Графы могут приобретать весьма нетривиальные очертания и появляться в разнообразных задачах. При знакомстве с графами нам пригодятся гибкость Питона и прочие его особенности. Вы сможете помериться силой с Питоном и графами и познакомиться с популярным сегодня скриптовым языком. Благодаря своей скриптовости, Питон применяется очень широко. Сфера его возможностей не ограничена конкретной отраслью ИТ. Ему есть место и в моделировании физических процессов, и в исследовании ДНК, и в программных проектах больших компаний. Цитата с сайта http://python.org: "Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we're looking for more people with skills in this language." said Peter Norvig, director of search quality at Google, Inc. Конечно, сразу после 16 занятий на курсах вы не сможете претендовать на место в гугл'е. Но знакомство с ещё одним языком расширит ваш кругозор и технику - вы поймёте специфику программирования на скриптовых языках, поможет вам в дальнейшем при знакомстве с другими языками и концепциями программирования. Графы несут не меньше пользы, чем питоны. Они встречаются в самых неожиданных местах ИТ и навыки общения с ними значительно облегчают поиски правильного решения. Всеми вами любимый скайп -- это прежде всего огромный и постоянно меняющийся граф. Ещё примеры применения графов -- социальные сети; системы управлении, в частности СУБД; конечные автоматы и технология проектирования и написания программ; анализ пространства состояний системы -- это и моделирование фазовых переходов и алгоритмы принятия решений, то есть искусственный интеллект; и многие другие области жизни. P.S. Суть вышеизложенного можно отнести и к спецкурсу Lisp &Prolog.