На каком языке разговаривать с будущим? Программисты из Санкт-Петербурга предложили свой вариант. "Огонек" присмотрелся к опыту, который получил мировое признание
Сообщение о том, что язык программирования Kotlin, разработанный российскими программистами из Санкт-Петербурга, стал одним из официальных языков американского Google, зал в Маунтин-Вью (Калифорния), собравший видных разработчиков в мае этого года, встретил овацией. Появление нового языка на столь высоком уровне — знаковое событие для IT-мира. А тот факт, что на этом поприще отличились именно наши соотечественники, особо приятен: в последний раз нечто подобное имело место в 1966-м. Именно тогда, полвека назад, появился созданный кибернетиком Валентином Турчиным язык РЕкурсивных Функций Алгоритмический, он же — Рефал (название до сих пор часто пишется по-русски, как и в случае с другими языками, созданными в советское время). Это один из старейших языков программирования, который со временем получил мировую известность. Его до сих пор иногда используют для решения специфических задач в науке, например, различные лаборатории ядерной физики в Обнинске, военные и математические центры, но в основном все же в России.
Kotlin (или Котлин — по имени острова, где расположен Кронштадт), особенно после признания таким гигантом, как Google, известен значительно шире. Если раньше при соответствующем запросе в поисковой строке на слово "Котлин" выпадало "небольшой остров в Финском заливе Балтийского моря" или, в крайней случае, информация об одноименном польском кетчупе "Котлин", то теперь на первом месте — российский программный продукт. Сейчас им пользуются сотни тысяч человек по всему миру, включая программистов из КНР, США, России, Германии, Индии, Японии, Великобритании и даже экзотического Тринидада и Тобаго.
— Мы изначально ставили перед собой задачу создать универсальный язык программирования, который будет удобен для применения в самых разных сферах,— говорит "Огоньку" руководитель проекта Kotlin компании JetBrains, один из создателей языка Андрей Бреслав.— Это могут быть и разработки для мобильных телефонов, сервисные и клиентские приложения. К тому же в нем есть много средств для взаимодействия с другими языками, он полностью совместим с Java — одним из самых популярных на сегодняшний день языков программирования. Мы изначально хотели сделать не исследовательский проект, а прикладной инструмент для работы, чтобы облегчить жизнь программистам.
Умножение сущностей
Надо признать, что у программистов по этой части проблем и в самом деле хватает. Сегодня в ходу около 2 тысяч языков программирования, но в мейнстриме из них только пять или шесть.
— Конечно, для разных задач следует выбирать разные языки программирования,— объясняет директор центра студенческих олимпиад факультета компьютерных наук НИУ ВШЭ Михаил Густокашин.— Например, для военной промышленности лучше всего писать на старом добром Pascal — языке, который родился еще в 1970 году. Почему? Да просто потому, что он надежней... Приложения для бизнеса можно писать на Java — этот язык тоже достаточно надежен, но гораздо более прост в использовании.
По словам эксперта, вместе с тем в программировании существует масса задач, которые такого набора дифференцированных инструментов не требуют — речь о мобильных приложениях и всевозможных интернет-приложениях. Но здесь все тоже непросто.
— Сегодня специалистам во всем мире очевидно, что в программировании "что-то пошло не так",— рассказал "Огоньку" преподаватель кафедры компьютерных технологий Университета информационных технологий, механики и оптики (ИТМО) Роман Елизаров.— Лет двадцать назад можно было на одном языке Pascal решить практически любую задачу, не относящуюся к узким направлениям деятельности. Но с тех пор рынок очень сегментировался. Если я хочу создать в современном мире универсальный продукт, который будет доступен и на мобильном телефоне, и в различных приложениях, мне нужно писать одно и то же на разных языках программирования. Это тяжело даже для больших компаний, потому что приходится содержать несколько команд. Сегодня обычная ситуация, когда рядом сидит группа людей, которая пишет приложения под Android и тут же другие люди пишут то же самое под Apple. Налицо чудовищная неэффективность, которую пытаются исправить во всем мире.
Каким же чудом именно россияне оказались успешнее других в решении этой задачи? Ученые из Санкт-Петербурга отвечают на этот вопрос с вызовом: они убеждены, что в России можно развивать наукоемкий бизнес мирового уровня, даже несмотря на отсутствие госфинансирования, связей науки с предприятиями и постоянную утечку умов. Все, что нужно,— мотивированный частный капитал и желание всерьез вложиться в систему образования, как это сделала, к примеру, та же JetBrains, вложившая за последние пять лет 6 млн долларов в систему подготовки IT-кадров в России.
Код прибыли
Так и тянет сказать, что российские программисты — самые талантливые в мире. Но это не так: талантливые специалисты в IT-области в разных странах появляются на свет примерно с одинаковой частотой. Другое дело, что чем больше плотность населения, тем, по определению, таких талантов больше. Поэтому, если сегодня пройтись по коридорам компаний и научных центров в американской Кремниевой долине, то там будет больше китайцев или индийцев, приехавших из мекки компьютерного мира — технопарка в Бангалоре. (Правда, в последние несколько лет Китай все больше делает акцент на качество образования студентов, а индийцы ставят по-прежнему на количество). Впрочем, и русских в Кремниевой долине тоже много, до сих пор считается, что у россиян хорошая научная база.
Не секрет, что программирование уже несколько лет в топе самых престижных и высокооплачиваемых профессий. Даже в России, несмотря на кризис, средний ценник высококлассных специалистов в районе отметки 300 тысяч рублей в месяц и выше.
— Вообще, все, что касается денег в программировании, "устроено" сегодня довольно странно,— рассказал "Огоньку" старший вице-президент по инвестициям, исследованиям и образовательным проектам в компании JetBrains Андрей Иванов.— Большие суммы крутятся вокруг стартапов. Выглядит это так: программисту приходит в голову гениальная идея, он выходит с нею на рынок, находит инвестора, который дает, предположим, 10 млн долларов и говорит: развивай свою идею. Теоретически это не ваши деньги, но вы их можете потратить именно на развитие бизнеса. Если вы успешный программист, то в какой-то момент ваш стартап вдруг покупают и вы в одночасье становитесь долларовым миллионером. При этом понять, почему выстрелил именно тот, а не другой проект, иногда достаточно сложно.
Из таких неожиданных взлетов последнего времени специалисты называют — Instagram. По сути, это довольно банальный инструмент для хранения и выкладывания фото, который Facebook купил за огромные деньги. Почему? Это загадка, ведь ничего особенно сложного в этой программе нет. Или Uber — успешнейший бизнес, который вообще не про программирование. Изначально это была программа, которая распознавала, где вы находитесь, и вызывала такси по геолокации.
— Если же говорить о наемных работниках,— продолжает Андрей Иванов,— то хорошие деньги получают аналитики, которые занимаются машинным обучением и работой с большими данными. Количество информации в современном мире столь велико, что упорядочить его и извлечь какую-то выгоду можно только с помощью совершенных компьютерных программ.
Среди создателей самых известных и популярных бизнесов тоже полно программистов. Вот только некоторые: создатель самого большого IT-проекта XX века — сети "Интернет" Тим Бернерс-Ли; один из создателей компании Microsoft Билл Гейтс; создатель языка программирования C (Си) и ключевой разработчик операционной системы UNIX Деннис Ритчи; создатель ядра операционной системы GNU/Linux Линус Торвальдс; разработчик и сооснователь поисковой системы Google Сергей Брин...
Покажите язык
И тем не менее среди всех компьютерных наук создание новых языков программирования остается элитной областью. В том смысле, что никто просто так ею заниматься не будет: это слишком затратно, а уверенности, что на выходе получится хоть что-то стоящее, никакой. Популярные языки создают, как правило, либо очень талантливые энтузиасты, как, например, гениальный швейцарец, специалист по информационным технологиям Никлаус Вирт, написавший в одиночку популярнейший язык Pascal. Либо очень крупные компании, наподобие Microsoft, у которых есть свои платформы для разработок и большое количество денег. В России пошли по другому пути, собрав "поштучно" команду молодых профессионалов, которые восприняли Kotlin как дело своей жизни — каждый программист на самом деле мечтает создать свой язык. Андрей Бреслав до прихода в компанию в 2010-м стажировался в Microsoft Research и выбирал между карьерой в США и в России. Программист Михаил Глухих вернулся в Питер после работы в Германии, Денис Жарков — из Томска, кто-то переехал из Екатеринбурга, некоторые специалисты — из Москвы. В итоге сегодня над языком работает команда примерно из 40 человек, среди которых больше всего профессиональных программистов и математиков, но программируют здесь и физики, и менеджеры по продажам, и даже психолог по основному образованию.
— На самом деле ценность математического образования для программиста в целом сильно преувеличивают,— говорит Андрей Иванов из JetBrains.— Высшая математика в вузе оперирует серьезными сложными абстракциями, которые в программировании применимы в 2 процентах случаев. Программирование — вещь вполне конкретная. И вот этой конкретики в нашем высшем образовании в сфере информационных технологий еще совсем недавно не было. В России преподавали то, что в жизни никак не могло пригодиться. Мы попробовали переломить эту ситуацию, сложившуюся еще в советское время.
По советскому счету
В СССР с преподаванием информатики все складывалось очень причудливо. Как известно, советские компьютерные технологии развивались за тяжелым железным занавесом, поэтому многое приходилось создавать в отрыве от мировой научной мысли — практически заново. Сильно затормозила и борьба с кибернетикой, которую в 1950-е годы признали реакционной буржуазной теорией. В итоге в СССР продолжала семимильными шагами развиваться вычислительная техника, необходимая в первую очередь для оборонки, а все, что связано с внедрением компьютерной обработки информации в разные сферы жизни, застыло на уровне все тех же 1950-х.
Компьютеров в Союзе всегда было катастрофически мало. В книге "Понедельник начинается в субботу" главный герой на просьбу выполнить некую задачу отвечает: "Это стоит два часа машинного времени". Машинное время, то есть доступ к компьютеру, было валютой, которой на всех не хватало. В крупном институте на 500 человек мог стоять всего один компьютер.
Уже в 1970-е знаменитый основатель сибирской школы информатики академик Андрей Ершов сравнил уровень преподавания компьютерных наук в советских и американских школах и сделал удручающий вывод: мы отстали, увы, безнадежно.
— Тем не менее вплоть до 1980-х бытовала чья-то фраза, что "отсутствие компьютеров не снижает ценности занятий информатикой в школе",— рассказывает Андрей Иванов.— Поэтому учителя информатики проверяли домашнее задание у учеников, как учитель литературы проверял сочинения — по бумажке. Именно в таком варианте дети знакомились с языками программирования — Fortran и Algol.
Обязательным предметом в советских школах информатика стала лишь с 1 сентября 1985 года. Тогда в школы пришли преподавать инженеры и программисты профильных НИИ. В это время из-за рубежа уже стала просачиваться информация, и наши программисты смогли развивать не только свои идеи, но и сверяться с тем, что происходило на Западе. А потом пришли 1990-е. По оценке директора Института системного программирования РАН Арутюна Аветисяна, с 1994 по 2000 год в США, Западную Европу, Израиль и даже в Новую Зеландию уехало около 80 процентов (!) и без того немногочисленных отечественных IT-специалистов. "Когда мы были не так давно в израильской "кремниевой долине", ее руководители не скрывали, что одним из пяти факторов, определивших бурное развитие программирования в Израиле, была именно эмиграция классных программистов из СССР и России в 1990-е годы",— говорит Арутюн Аветисян.
— В это время образовалась своеобразная яма в высшем образовании программистов,— говорит Андрей Иванов.— Весь мощный программистский преподавательский состав, который двигал какие-то фундаментальные аспекты науки вперед, уехал. А остались в основном те, кого никуда не позвали. Они, кстати, так и преподают во многих вузах по сей день. Выпуски рубежа нулевых представляли собой печальное зрелище, и тогда стало понятно, что нормальному программированию в России практически нигде не учат. Чтобы как-то изменить ситуацию, в 2005-м году мы создали на частные деньги первый образовательный проект — "Академию современного программирования". Это были вечерние курсы, где студентов (отбирали самых талантливых) учили базовым вещам, которые должен давать любой бакалавриат. На двухгодичных курсах мы помогали умным ребятам с желанием учиться систематизировать имеющиеся знания, получить недостающие и применить все это на практике в реальных проектах. Наших выпускников охотно брали на работу в ведущие российские и мировые компании. Ведь на самом деле, чтобы изучить программирование на уровне, необходимом для того, чтобы работать в хорошей компании, хватает двух лет.
В итоге что-то сдвинулось ближе к концу двухтысячных, когда в образование программистов начали вкладывать солидные средства частные компании и государство. Во многих вузах возникли небольшие магистратуры, где талантливая молодежь может учиться бесплатно практически по тем же программам, что в ведущих мировых IT-вузах. Курсы здесь составляют компании-меценаты исходя из того, что актуально на рынке именно сейчас и что интересно им самим. Например, сегодня один из самых больших конкурсов среди программистов на факультете компьютерных наук в Высшей школе экономики в Москве (по сути, это факультет "Яндекса"), на факультете инноваций и высоких технологий в МФТИ (проект базовых кафедр различных компаний) и на кафедре математических и информационных технологий Академического университета РАН — здесь при активном участии JetBrains создана программа полного шестигодичного обучения. Поступить в подобные места чрезвычайно трудно, потому что молодежь съезжается сюда со всей России — это вполне реальный шанс попасть из провинциального города в число лучших программистов мира
— Я поступил в Академический университет после Томского государственного университета,— рассказывает один из разработчиков Kotlin Денис Жарков.— Вначале учиться было довольно сложно из-за интенсивности программы и необычного подхода. У студентов было много вариантов для курсов по выбору. Что и в каком семестре слушать, нужно было выбирать индивидуально вместе с куратором. Именно он рекомендовал какие-то курсы в зависимости от того, что интересного происходило в мире на рынке программирования. В итоге мы получали актуальные знания, которые можно было сразу применять на деле, практика — обязательный элемент обучения. Именно тогда я услышал про создание новых языков, это показалось мне интересной и очень красивой областью, в которой я занят по сей день.
— Программа обучения в том же Академическом университете составлена на основе международных стандартов в области программной инженерии,— рассказывает старший вице-президент по инвестициям, исследованиям и образовательным проектам в компании JetBrains Андрей Иванов.— Опыт в целом пока очень удачный. Программирование оказалось той сферой, где пересеклись образовательные инициативы государства и бизнеса. Мы ищем такие вузы, где готовы не только брать деньги и давать стипендии талантливым студентам, но и пускать нас в образовательный процесс. Мне кажется, что за таким подходом, в принципе, будущее. На самом деле большая часть команды Kotlin сформирована как раз из таких вчерашних студентов, которые обучались по индивидуальной траектории. Известно, что большую часть знаний, приобретенных в университете, мы со временем забываем. Тем не менее что-то в головах у студентов остается надолго. Мы задались вопросом, что объединяет знания, которые не улетучились, а закрепились, и в результате выделили два основных критерия. Во-первых, предмет должен быть студенту интересен. Во-вторых, теоретические знания должны быть подкреплены практикой. Эти два наблюдения и положены в основу образовательной системы в наших проектах. Число обязательных курсов минимально. Обучение подкрепляется обязательной практической работой, которая в той или иной форме представлена в программе с самого начала, от "игрушечных" проектов, выполняемых под постоянным контролем старших товарищей на младших курсах, до участия в реальной промышленной разработке или научных исследованиях в рамках подготовки диссертаций.
Интересно, что если в России такое индивидуально-штучное образование родилось во многом не от хорошей жизни, то на Западе к такой системе пришли параллельно с нами как раз от хорошей. Иванов видит в этом принципиальную закономерность.
— Главный вызов современного мира,— говорит Андрей Иванов,— в том, что знания стали какими-то слишком сложными и приобрели колоссальные масштабы. Например, накопленные человечеством знания передовому инженеру физически невозможно передать за всю жизнь. Вывод: нужно выстраивать достаточно строгую систему отбора знаний. Недавно мы слушали мастер-класс в Массачусетском технологическом институте (MIT), где говорилось о том, что нужно глобально перенастраивать все мировое инженерное образование. И в его основу должно лечь индивидуальное образование студентов.
Надо признать, что, несмотря на то что у нас объявлен курс на цифровую экономику, которая должна расцвести к 2024 году, пока в России ситуация такова, что сильных студентов оказывается больше, чем мест, где им могли бы дать образование на том уровне, который сегодня является высшим.
Праздник N 256
Осенью в США пройдет большая конференция по языку Kotlin, которая соберет поклонников нового продукта со всего мира. Можно не сомневаться, что собравшиеся там специалисты заодно поздравят друг друга и с профессиональным праздником, его программисты отмечают в 256-й день каждого года (обычно приходится на 12 или 13 сентября). Почему выбран именно 256-й день? Это вопрос для непосвященных: для всех собравшихся ответ очевиден: ну как же, два в 8-й степени — то количество чисел, которые можно выразить с помощью восьмиразрядного байта и максимальная степень числа 2, которая меньше 365 (дней в году).
— Программирование со времен падения железного занавеса в 1990-е стало тем языком, который объединяет людей по всему миру,— говорят разработчики Kotlin.— А программисты — той движущей силой, которая меняет мир на наших глазах.
Очевидно, пришло время, когда понимать тех, кто пишет новые языки мирового общения, должны уже не только профессионалы.