Темы научных работ лицеистов — 2016

Yuriy Syrovetskiy
2 min readJul 8, 2016

--

Мои любимые темы — Computer Science, функциональное программирование (ФП), языки программирования (изучение старых и проектирование новых), распределённые системы.

Язык программирования Haskell, с которым я имею удовольствие работать уже несколько лет, — самый интересный представитель мира ФП, и практически — как средство для построения систем любой сложности, и теоретически — как полигон для научных изысканий.

Некоторые слова в этом тексте могут показаться заумными и страшными, на самом деле все концепции простые и вполне под силу лицеисту (или команде лицеистов).

[Список может пополняться.]

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

--

--