Как программисты, вы должны постоянно учиться. Вы изучаете учебники, документацию, вопросы по Stack Overflow — всё, что можно найти и что может помочь вам писать код и поддерживать актуальность своих навыков. Но как часто вы заглядываете в академические статьи по компьютерным наукам, чтобы лучше программировать?
Руководства могут помочь вам написать код здесь и сейчас, но академические статьи могут помочь понять, откуда и куда движется программирование. Каждая особенность программирования, начиная с указателя null (также известного как ошибка на миллиард долларов) и заканчивая объектами (в смысле Smalltalk), построена на основании исследований, восходящих к 1960-м (и более ранним) годам. Предстоящие инновации будут основаны на сегодняшних исследованиях. Продолжение — к старту нашего флагманского курса по науке о данных.
Мы поговорили с тремя участниками группы онлайн-репозитория Papers We Love об их любимых академических статьях в Computer Science.
Технический директор BlockFi Зишан Лакхани, руководитель технической группы Datadog Даррен Ньютон и сертифицированный инженер SageSure Дэвид Эшби познакомились друг с другом во время работы в компании Arc90. Как они заметили, никто из них не получил формального образования в области компьютерных наук, но все хотели узнать больше. Все трое — выходцы из гуманитарных и художественных дисциплин: Эшби получил степень по английскому языку и закончил непрофильный курс по истории, Ньютон дважды учился в художественной школе, а Лакхани — в киношколе на последнем курсе, а затем защитил магистерскую по музыке и аудиотехнике. Все эти сферы всецело зависят от текстов, лежащих в основе соответствующих дисциплин, и позволяют понять теоретические основы, на которых строится вся практическая деятельность.
Как и все хорошие студенты-гуманитарии, эти трое отправлялись на поиски ответов в архивы. «Внутри меня живёт библиотекарь, — говорил Ньютон. — Поэтому я всегда интересуюсь историческими истоками всего, чем я занимаюсь».
История
В ходе изучения истории программирования Эшби читал «Душу новой машины» (Soul of a New Machine) Трейси Киддера, книгу о гонке за разработку 32-битного микрокомпьютера в конце 1970-х. В книге рассказывается об инженерной культуре того времени, а также о проблемах и концепциях, над которыми бились инженеры. Это было ещё до выхода процессоров и стандартных компонентов материнских плат на массовый рынок, поэтому многое из того, что мы сегодня воспринимаем как должное, тогда ещё находилось на стадии разработки.
В книге Киддера Лакхани, Ньютон и Эшби увидели целую историю компьютерных наук, к которой не имели никакого отношения, поэтому они решили попробовать прочитать основополагающую книгу Тони Хоара «Взаимодействующие последовательные процессы» (Communicating Sequential Processes)» 1978 года издания. Тогда они работали с Clojure и Clojurescript, поэтому книга показалась им актуальной. Сев за обсуждение этой статьи, они поняли, что даже не знают, как подойти к её пониманию. «Я как будто не могу понять и половину всего этого формализма, но введение, видимо, хорошее, — сказал Лакхани. — Однако нам нужен кто-то вроде Дэвида Нолена, кто мог бы объяснить всё это нам».
Нолен выступал с докладом о Clojure и других похожих на Lisp языках, ссылаясь на многие из ранних работ Джона Маккарти. Услышав его лекцию с академическим контекстом, и начались размышления. Так родилась идея проекта Papers We Love.
Знание истории понятий из области вычислений, с которыми вы сталкиваетесь каждый день, позволяет многое понять о том, как они работают на практике. Инструменты, с которыми вы работаете, от баз данных до языков программирования, построены на фундаменте академических исследований. «Понимание истоков тех вещей, над которыми вы работаете, открывает много знаний, которые вы не получите, просто используя их каждый день, потому что вы не понимаете, как удалось избежать неудач», — рассказывает Эшби.
Вот их любимое выступление Брета Виктора «Будущее программирования» (The Future of Programming):
В 2013 году Брет выступил, одетый как инженер из 1970-х: белая наглухо застёгнутая рубашка, брюки цвета хаки, чехол-протектор в нагрудном кармане. Лекцию предваряет пятно потолочного проектора, в котором написано название доклада. Брет центрирует слайд пальцем, и в кадре появляется дата — 1973 год [см. видео, 1:00. — Прим. перев.]. Он продолжает доклад и рассказывает обо всём грандиозном, что появилось благодаря исследованиям, обо всём, что взбудоражит компьютерную науку. И это — то, с чем аудитория в зале имеет дело. Например, переход от последовательного выполнения к параллельным моделям.
«Главной темой было то, что всё это занимает много времени, — сказал Лакхани. — Многое из того, что было старым, опять становится новым. Так происходит снова и снова». Одни и те же задачи не теряют актуальности, ведь они сложнее, чем считалось ранее, или исследование этих задач получило широкое распространение.
Трио авторов Papers We Love не одиноко в своей любви к истории вычислительной техники. Растёт интерес к ретрокомпьютингу (retrocomputing). Инженеры рассматривают системы прошлого, чтобы больше узнать о практике применения технологий. В этом состоит обратная сторона изучения старых работ. Вы рассматриваете старое оборудование и программное обеспечение, которое некогда использовали программисты, и работаете над ним с учётом сегодняшних реалий. «Многие запускают эти древние операционные системы на Raspberry PI и работают с ними, — сказал Ньютон. — Например, запускают старую виртуальную машину Smalltalk на Raspberry PI или же воссоздают PDP-10».
Видя проблемы в их первоначальном контексте, в частности, читая исследовательские работы, где пытались их решить, можно лучше понять современное состояние дел. Это приводит к самым разным озарениям. «Объекты выполняют свою работу благодаря Smalltalk из восьмидесятых, — рассказывает Эшби. — Поэтому большие системы выглядят так. И поэтому Java выглядит так».
Этот новый взгляд может помочь вам в решении задач, с которыми вы сталкиваетесь сейчас.
Будущее программирования (сегодня)
Чтение академических статей не всегда связано с пониманием истории вопроса. Вы можете узнать новые способы решения проблем, читая современные исследования. «Идея Stack Overflow такова: кто-то до вас уже сталкивался с вашей проблемой, — поясняет Эшби. — Академические статьи написаны теми, кто уже думал над той же проблемой».
Если ваша работа связана с вариациями старого доброго приложения CRUD в новых пространствах, возможно, академические статьи вам не помогут. Если же вы пытаетесь решить уникальные задачи своей отрасли, некоторые исследования в проблемных областях могут помочь вам их решить. «Я считаю, что статьи расширяют представление о возможностях работы, которую вы выполняете, — говорит Эшби. Они могут помочь вам понять, что есть и другие способы решить эти проблемы».
Для Ньютона и его коллег из Datadog академические статьи являются неотъемлемой частью работы. Их программа для мониторинга должна обрабатывать в реальном времени большое количество информации, чтобы инженеры могли получить представление об их прикладных задачах и рабочем стеке: «Мы очень заинтересованы алгоритмами производительности и лучшими способами ведения статистики для больших объёмов данных, — рассказывает Ньютон. — В некоторых подобных случаях мы должны полагаться на академические исследования».
Одно только существование исследований, разумеется, не подразумевает, что ваши задачи решены автоматически. Порой отдельная работа даёт вам только часть решения. «В Comcast мы хотели использовать работу по балансировке нагрузки посредством маршрутизации, — сказал Лакхани. — В итоге мы задействовали три вида независимых работ. Мы вложили семантику в сетевые пакеты, маршрутизировали (routed) их по определённому протоколу и внедрили ряд спецификаций IETF. Сейчас часть этой работы находится в библиотеке Rust, которую можно запустить». Это поиск нитей академических работ и сплетение их для решения поставленных перед нами задач.
Не прочитав этих работ, команда Лакхани не разработала бы столь эффективного решения. Возможно, они пришли бы к этому и сами, но представьте себе объём работы по исследованию этих трёх концепций. Не нужно изобретать велосипед. Согласно крылатой фразе, мы стоим на плечах гигантов, и, если вы достигли вершин в своей области, вы знаете наверняка, на чьи плечи встать.
Как найти плечи гигантов
Как гуманитарий, я, конечно, хотел узнать, какие работы, которые должны быть в учебном плане, можно считать гигантами от компьютерных наук, как если бы мы составляли программу для гуманитариев. Считайте это картой плеч гигантов, на которые вы можете встать, чтобы продвинуться вперёд.
Я оказался не первым, кто задаётся вопросом о том, что входит в канон компьютерных наук. В 1996 году Филипп Лаплант написал книгу «Великие работы в области компьютерных наук» (Great Papers in Computer Science), которая в наше время, возможно, немного устарела. В качестве более свежего взгляда на этот вопрос трио рекомендует книгу «Идеи, создавшие будущее» (Ideas That Created the Future), опубликованную в 2021 году. Лакхани, который сейчас готовится к защите кандидатской (PhD) в области компьютерных наук в моей [автора статьи] alma mater — университете Карнеги — Меллона, отмечает, что на момент его учёбы там был курс по важным работам в этой сфере.
В некотором смысле этот канон — именно то, что намерены создать авторы репозитория Papers We Love. Он содержит статьи и ссылки на них, организованные по темам. Группа приветствует новые запросы на добавление академических статей, которые вы все любите и хотите отметить.
Вот отдельные работы (и выступления), рекомендуемые всем, кто хочет начать читать исследовательские работы:
- Dynamo: Amazon’s Highly Available Key-value Store
- A Unified Theory of Garbage Collection
- Communicating Sequential Processes
- Out of the Tar Pit
Но, конечно же, их намного больше.
Если вас пугает начало работы над статьёй, ознакомьтесь с некоторыми презентациями Papers We Love, где в общих чертах указано, как понять статью. В целом идея этих выступлений возникла из первого разочарования в статье и дальнейшего поиска решения задачи с чьей-либо помощью. «У них есть конспекты типа CliffsNotes, — рассказал Лакхани. — Теперь можно приняться за статью и по-настоящему её понять».
Комьюнити Papers We Love постоянно пытается навести мосты между IT-индустрией и академической средой. От этого выиграют все: практики получит доступ к новым решениям прежде, чем кто-то другой внедрит их и сделает общедоступными, а теоретики же смогут наблюдать, как их идеи проверяются и воплощаются в реальных условиях.
«Одна из целей Papers We Love — создать ресурс, где вы могли бы быстрее находить информацию, — сказал Лакхани. — Возможно, это многое изменит».
А мы прививаем мышление программиста и погружаем в среду современной IT-компании, чтобы вы приобрели полезный опыт. Скидка 45% по промокоду HABR.
Data Science и Machine Learning
- Профессия Data Scientist
- Профессия Data Analyst
- Курс «Математика для Data Science»
- Курс «Математика и Machine Learning для Data Science»
- Курс по Data Engineering
- Курс «Machine Learning и Deep Learning»
- Курс по Machine Learning
Python, веб-разработка
- Профессия Fullstack-разработчик на Python
- Курс «Python для веб-разработки»
- Профессия Frontend-разработчик
- Профессия Веб-разработчик
Мобильная разработка
Java и C#
- Профессия Java-разработчик
- Профессия QA-инженер на JAVA
- Профессия C#-разработчик
- Профессия Разработчик игр на Unity
От основ — в глубину
А также