Интервью с Робом Пайком
Интервью, которое Evrone взяли у Роба Пайка, соавтора языка программирования Go. Поговорили о карьере, охватывающей четыре десятка лет, об эволюции языка Go за последние 10 лет и перспективах на будущее.
Введение
Мы поговорили с Робом Пайком, соавтором языка программирования Go, о карьере охватывающей четыре десятка лет, об эволюции языка Go за последние 10 лет и перспективах на будущее.
Интервью
Evrone: В отличие от многих современных разработчиков, вы начали свою карьеру десятилетия назад в Bell Labs. Что, с учётом вашего опыта, больше всего изменилось в разработке?
Роб: Масштаб сегодня намного больше. Не только компьютеров и сети, но и самих программ. Вся версия Unix 6 (примерно 1975 год) удобно помещалась на одном диске RK05, который имел чуть более 2 МБ дискового пространства, и ещё оставалось свободное место для пользовательского программного обеспечения. И это была прекрасная вычислительная среда, или, по крайней мере, в то время выглядела таковой. Я, конечно, могу объяснить большую часть роста — это удивительно, но, возможно, не все это обосновано.
Evrone: Учитывая идеи «сопротивления изменениям» и «обещания совместимости», как вы видите следующие 10 лет для языка программирования Go и его экосистемы? Какой вариант будущего будет самым выдающимся для вашей технологии?
Роб: Хотя я не очень уверен, но после более десяти лет работы я вижу это как проектирование для параметрического полиморфизма, что в просторечии, но не совсем верно, называется дженериками, и это то, что придет в следующем году или через год. Было очень трудно найти структуру, которая работала бы в существующем языке и ощущалась максимально органично, но Иэн Тейлор вложил решение проблемы феноменальное количество энергии, и похоже, что ответ уже найден.
Будет интересно наблюдать, как это повлияет на библиотеки, экосистему и сообщество.
Evrone: Из-за смешивания языков с «последовательной типизацией» с языками с «динамической типизацией» и «выводом типов» в «статически типизированные» языки, грань между двумя теперь размыта. Каково ваше мнение по поводу системы типов для современных языков программирования?
Роб: Я большой поклонник статической типизации из-за стабильности и безопасности, которые она дает.
Я большой поклонник динамической типизации из-за забавного и легкого ощущения, которое это приносит. (В качестве примечания, большой толчок для интегрированного модульного тестирования может быть приписан таким языкам, как Python, который стимулировал тестирование показывать корректность, которую не смогла обеспечить система типизации.)
Я не фанат программирования, основанного на типизации, иерархий типов, классов и наследования. Хотя многие успешные проекты были построены таким образом, я чувствую, что такой подход слишком рано подталкивает к важным решениям на этапе проектирования, прежде чем практика сможет повлиять на него. Другими словами, я предпочитаю композицию наследованию.
Однако я говорю тем, кому удобно использовать наследование для структурирования своих программ: не обращайте внимания и продолжайте использовать то, что вам подходит.
Evrone: Иногда люди используют технологии странным образом. Например, для генерации практичного кода Go из высокоуровневого кода Python или Ruby (да, мы видели такое). За прошедшие годы, какое самое странное, творческое или забавное использование Go вы видели? Что вас больше всего удивило?
Роб: Самый удивительный случай был, когда мы узнали, что Go используется для написания вредоносных программ. Вы не можете контролировать, кто будет использовать вашу работу или что они будут с ней делать.
Evrone: Вы создали несколько текстовых редакторов. Что вы думаете о Visual Studio Code? С такими технологиями, как LSP, грань между «текстовым редактором» и IDE теперь размыта. Как вы думаете, разработчикам программного обеспечения нужны полнофункциональные IDE, такие как GoLand, или использование VSCode - это нормально?
Роб: Я из другого времени, до IDE, но в начале проекта говорилось о том, нужна ли Go для успеха IDE. Ни у кого в команде не было нужных навыков, поэтому мы не пытались ее создать. Тем не менее, мы создали базовые библиотеки для парсинга и печати кода Go, что вскоре позволило использовать высококачественные плагины для всех типов редакторов и IDE — это был сказочный успех.
Совсем недавно мы усердно работали над LSP-сервером для Go под названием gopls, который может использоваться любым редактором или IDE, который поддерживает этот протокол, для улучшения работы с языком.
Возможно, из-за нашего удобства работы с более простыми стилями редактора, мы позаботились о том, чтобы в Go можно было комфортно работать независимо от среды программирования. Безусловно IDE может помочь: большинство из тех, кого я вижу работающими на Go сегодня, используют один IDE или, по крайней мере, у них есть редактор с кастомной поддержкой Go. Они получают от этого большую пользу.
Какой стиль редактора использовать — это вопрос вкуса, окрашенного культурой языка, на котором вы работаете.
Evrone: Разработчики программного обеспечения обычно вешают ярлыки, например, Dart – «язык интерфейса», C – «системный язык низкого уровня» и так далее. Как бы вы характеризовали язык программирования Go сейчас, учитывая его набор функций и использование?
Роб: Go - это язык программирования общего назначения. Напишите на нем все, что вы хотите, и не беспокойтесь о том, чтобы закрепить язык или любую другую технологию за одной проблемной областью.
Evrone: Какие еще современные языки программирования вам нравятся?
Роб: Опыт Go научил меня тому, что люди любят высказывать свое мнение о языках, возможно, больше, чем о любой другой теме в нашей области. И я, конечно, делал это сам. Но я устал от негатива, поэтому теперь я стараюсь избегать высказывать суждения.
Последние 10 лет были настоящей эпохой Возрождения в области проектирования языков, после периода, когда появлялось и преуспевало очень мало новых языков. Приятно наблюдать за этим процессом и за инновациями, которые он приносит.
Evrone: Как вам помогает разрабатывать и направлять язык Go то факт, что вы являетесь сотрудником Google? Насколько важно иметь возможность спросить «расскажите нам, как вы используете наш язык» в Твиттере и получать ответы от крупнейших компаний со всего мира? Это просто приятное дополнение или неотъемлемая часть развития языка? Как Google помогает вам?
Роб: Google очень щедро поддерживает проект Go, за что я очень благодарен. И, конечно, язык был создан, потому что мы думали, что это нужно Google; то, что стало называться «облачными вычислениями», нуждалось в языке с хорошей поддержкой параллельного доступа и легким развертыванием, среди прочего. Но Google не направил проект каким-либо существенным образом. Он поддерживает нас и позволяет нам делать то, что мы считаем лучшим.
Что касается других компаний и других пользователей, то вклад сообщества является жизненно важной частью понимания того, как продвигается проект. Под проектом я имею ввиду язык, компилятор, инструменты, рантайм, библиотеку, среду — все это.
Evrone: После 10 лет разработки Go и наблюдения за его использованием, что вы можете назвать самым большим успехом и, напротив, самым большим провалом в проектировании языка? Какие его самые сильные и слабые стороны?
Роб: Я бы назвал две вещи: одну техническую и одну политическую.
Техническая — первоклассная поддержка для параллельных вычислений. Go всего десять лет или около того, но когда он был разработан, многопоточность и параллелизм не были широко признаны сообществом программистов. Фактически, основной причиной для создания Go была трудность параллельных вычислений в C++ в то время. Вскоре после запуска стало ясно, что поддержка параллелизма была главным достоинством, которое компенсировала то, что некоторые считают недостатками в других частях языка. Параллелизм задел за живое. И когда люди начали играть с параллелизмом, заодно они стали узнавать язык лучше, и оказалось, что он больше, чем они первоначально думали. Поддержка параллелизма была входными воротами.
По словам Джона Грэма-Камминга из Cloudflare: "Я пришел для простого параллелизма, а остался из-за легкой композиции".
Go изменил разговор о том, как программировать многоядерные компьютеры.
Политический успех был твердым обещанием, сделанным по поводу совместимости для Go версии 1. После того, как мы, вместе с сообществом, использовали Go в течение нескольких лет, у нас появился длинный список исправлений, но изменения были разрушительными. Таким образом, мы разработали основательную программу обновлений с командой “go fix”, чтобы привлечь внимание сообщества, и как только это было сделано, мы не только остановились, но и пообещали оставаться на месте. Эта стабильность (программы Go, написанные в 2012 году, будут продолжать компилироваться и отлично работать сегодня) стала огромным фактором роста. Компании могли использовать язык с гарантией того, что мы не разрушим их программное обеспечение. Уровень внедрения резко возрос с версии 1, и появилось обещание совместимости. И хотя, с тех пор, мы узнали многое, что хотелось бы изменить, мы не можем сломать существующие программы, и мы принимаем этот факт.
Evrone: Как выглядит ваш баланс между работой и личной жизнью? Сейчас много говорят о «выгорании», и эпидемическая обстановка не улучшает ситуацию. Есть ли у вас какие-нибудь приемы для новых поколений разработчиков, учитывая ваш 40-летний опыт?
Роб: Лучший способ избежать выгорания — это делать то, что вам действительно нравится в среде, где вас поддерживают. В этом отношении, удача сопутствовала мне на протяжении всей моей карьеры, но я понимаю, что не всем так везет. Если работа вызывает стресс, вам нужно сделать перерыв или поменять направление, особенно в нашей текущей ситуации.
Evrone: Оглядываясь назад, популярность многих технологий была достигнута благодаря так называемым «killer apps», которые сделали их популярными. Можете ли вы назвать такие «killer apps» для языка программирования Go, и что вы думаете о такой идее «killer apps» в целом?
Роб: Несколько лет назад Дэнни Беркхольц назвал Go «новым языком облачной архитектуры», и это не случайно. Люди, работающие в Google, разработали Go, чтобы упростить написание программного обеспечения, соответствующего Google, в частности сетевых серверов. Сегодня мы называем это «облаком». (Некоторые мотивы для проектирования приведены в моем выступлении на Splash 2012 под названием Go at Google: Language Design in the Service of Software Engineering.)
Хотя мне было приятно и важно видеть, что Docker, Kubernetes и многие другие компоненты облачных сервисов написаны на Go, это не было чем-то удивительным. Go действительно стал языком облачной архитектуры.
Evrone: Каких соперников вы видите для языка программирования Go сейчас и в какой области? Что вы думаете о Rust с его идеями «без сбора мусора» и гарантиями времени компиляции?
Роб: Rust — интригующий язык, и я с интересом слежу за его развитием. От высказывания своего мнения я воздержусь, как уже объяснял ранее.
Evrone: Go только что достиг 70 тысяч звезд на GitHub. По вашему мнению, как разные социальные медиа-активности, такие как Reddit, Twitter, оффлайн и онлайн конференции, вебинары и так далее, влияют на язык? Они важны для успеха языка или просто отражают этот успех?
Роб: Люди, с которыми мы встречались на конференциях и в социальных сетях, были важной частью развития Go и всех его элементов. Очень многие участники внесли положительный вклад в разработку, включая оригинальный порт для Windows и ряд архитектур, отличных от x86, разработку инструментов и библиотек, вдумчивые обсуждения технических предложений и многое другое.
Это работает и в другом направлении, когда команда Go обращается к сообществу, чтобы начать обсуждения, задать вопросы и попросить помощи и руководства.
Одна вещь, которая, на мой взгляд, важна, это взаимодействовать с сообществом как единая команда, а не как отдельные лица. Последовательное сообщение легче для понимания.
Evrone: Вы – автор одного из популярных языков программирования. Как это изменило вашу жизнь?
Роб: Поправка: я соавтор, а не автор. Кен Томпсон и Роберт Гриземер начали проект со мной, и многие другие внесли большой вклад. Поэтому, пожалуйста, не выделяйте меня как автора.
На ваш вопрос я могу ответить, что Go, безусловно, сделал мой публичный профиль более заметным, и познакомил меня с новым ярким сообществом, но не более того. У меня была долгая карьера и другие успехи (и несчетное количество неудач).
Evrone: Представьте, что у вас есть возможность путешествовать во времени и вы можете дать один совет молодому себе, примерно в то время, когда вы начали разрабатывать спецификацию языка Go. Какой совет вы бы дали себе и своим коллегам?
Роб: Это просто: не обращайте внимания на хейтеров. Просто слушайте голоса, которые понимают и разделяют ваши цели; только они должны вас заботить. Не все согласны с тем, что вы делаете, и это нормально. Но те, кто занимается продвижением того, что вы пытаетесь сделать, могут быть фантастическим источником идей, энергии и вдохновения.
Мы всегда будем благодарны нашему, влюбленному в свое дело, сообществу.
В Evrone мы гордимся тем, что пользуемся лучшими инструментами для работы, будь то Ruby on Rails, Python, Elixir или, конечно, Go. Мы стремимся оставаться на передовой линии ряда технологий, чтобы у нас была возможность предоставлять лучшие и наиболее подходящие способы решения задач наших клиентов. И мы рады делать все возможное, чтобы помочь объединить сообщество разработчиков.