Темы научных работ лицеистов — 2016
2 min readJul 8, 2016
Мои любимые темы — Computer Science, функциональное программирование (ФП), языки программирования (изучение старых и проектирование новых), распределённые системы.
Язык программирования Haskell, с которым я имею удовольствие работать уже несколько лет, — самый интересный представитель мира ФП, и практически — как средство для построения систем любой сложности, и теоретически — как полигон для научных изысканий.
Некоторые слова в этом тексте могут показаться заумными и страшными, на самом деле все концепции простые и вполне под силу лицеисту (или команде лицеистов).
[Список может пополняться.]
- Ваше предложение. Спросите у родителей, знакомых, какие проблемы возникают в их жизни или работе, и попробуйте придумать им IT-решение. Включите фантазию на всю катушку, придумывайте что угодно, я помогу развить то, что реализуемо, и отсечь то, что нереализуемо.
- Развитие инструментария построения графиков и визуализации для Haskell и IHaskell.
Они сейчас не дотягивают по возможностям и красоте до IPython и R, хотелось бы предоставить возможности учёным и бизнес-аналитикам инструменты для визуализации данных, в том числе из Haskell.
Возможности IHaskell сейчас: [1], [2], [3].
Возможности IPython (к чему стремимся): [1], [2]. - Вычислительный кластер по модели MapReduce на базе технологии Cloud Haskell.
Функциональный подход даёт потрясающие возможности для параллельных вычислений! MapReduce — это простой способ разбить алгоритм на составные части так, что его можно будет легко масштабировать на любой кластер. - Поисковая система по документации и исходному коду для библиотек языка Haskell, альтернатива веб-интерфейсу Hackage. Существующий интерфейс хаскелльной системы документирования Haddock имеет множество возможностей для улучшения. Например, можно сделать
а) саджест по имени функции (и оператора),
б) для заданного типа находить его ко- и контравариантные применения,
в) сравнение (diff) программных интерфейсов между версиями пакетов.
Бонус: [1] - Статически типизированный shell для обнаружения максимального количества ошибок до запуска программ.
Если можно заставить компьютер проверять, правильно ли программист вызывает программы и соединяет их в цепочки, то надо его заставить. - Консистентный расширяемый язык разметки, ТеХ двадцать первого века.
Язык программирования каждый может написать, а вот такой язык программирования, на котором ещё и тексты можно писать, — это должно быть поинтереснее. - Реализация любого CRDT (распределённый сходящийся тип). CRDT — это основа современных распределённых баз данных. Например, без такой техники невозможно (или очень сложно) написать даже счётчик лайков под фоточкой в соцсети, если мы хотим чтобы он был достаточно быстрым и точным.
- Доказательство теорем на языке программирования.
Базовая идея тут довольно простая — программа является доказательством теоремы (изоморфизм Карри — Ховарда). Тип программы — это, собственно, доказываемое утверждение. Мы просто формулируем теорему, пишем доказательство, а компьютер проверяет, правильное ли оно.
[1], [2], [3], [4] - Универсальный парсер S-выражений с инфиксными операциями и прочими сахарами. Возможно, удастся приблизить к чему-нибудь похожему на ML.