Язык программирования c бьярне страуструп
Бьёрн Страуструп: что в C++ надо было сделать по-другому, зачем его учить и совет начинающим программистам
Бьёрн Страуструп (дат. Bjarne Stroustrup) — технический сотрудник и управляющий директор Morgan Stanley в Нью-Йорке и профессор Колумбийского Университета. Бьёрн сделал весомый вклад в развитие IT — он создал C++.
Авторы курса Learn C++ из Codecademy взяли у Страуструпа интервью; мы перевели рассуждения создателя C++ про значимость языка и в качестве бонуса — совет всем начинающим программистам.
— Был ли момент, когда вы осознали, что C++ может изменить ход развития индустрии программного и аппаратного обеспечения?
Наверное, нет. Я был слишком занят разработкой C++ и написанием программ на нём.
Близким к поворотному можно считать момент, когда в 1989 году в моём офисе Bell Labs появились представители IBM и HP и настояли, что мне «очень хотелось бы» стандартизировать C++ в комитете ANSI. Или когда мне предложили написать статью о C++ для конференции ACM History of Programming Languages (HOPL). Мне кажется, даже тогда я недооценивал C++ и подходы к программированию, которые он открывал.
— Если бы вы смогли вернуться в прошлое и изменить одну вещь в оригинальном C++, что бы это было?
Но если бы я всё же смог вернуться в прошлое и не было проблем с совместимостью, то я бы убрал неявное приведение типов, меняющее значение. Это логически неверно и вызывает много ошибок. Например:
— Какие применения C++ вас удивили или поразили?
Меня поразил диапазон применения: от рисоварок до космических ракет. Это большая честь — осознавать, что C++ используется повсеместно: в автомобилях, фильмах, играх, медицине, финансах, компьютерах, сельском хозяйстве… Больше всего меня радует, что С++ используют в науке: проект «Геном человека», фундаментальные исследования в области физики в CERN и других лабораториях, марсоходы. Это здорово, что я сделал вклад в это, пускай и маленький.
— C++ всё ещё изучают в школах и вузах, используют в различных отраслях. Зачем в 2020 году нужно учить C++?
C++ — один из самых полезных языков, этого уже должно быть достаточно. Человеку, который хочет стать профессионалом, стоит знать несколько языков, а C++ хорош там, где нужна производительность и надёжность.
Кроме того, этот язык широко используется в экономике, играх, телекоммуникациях, электронике и производстве. Взгляните на пост в блоге JetBrains и мою страницу «C++ Applications» и попытайтесь понять, почему язык без маркетинга настолько популярен.
По-моему, главная причина для изучения C++ — он помогает понять различные подходы к программированию и методологии разработки, которые можно применять и в других языках.
— Какие советы вы бы дали начинающему программисту?
Программирование может быть забавой, но это не только развлечение. Развитие цивилизации зависит от качества программного обеспечения.
Какая бы область вас ни интересовала, там найдётся место программированию: будь то литература, производство автомобилей, история, варка кофе, ветряная и солнечная энергетика, создание фильмов, ракетостроение, фермерство, медицина, наука, инженерия или что-то ещё.
Возможно, в конечном счёте вы сможете внести весомый вклад в ту отрасль, которую вы считаете важной и интересной. Чтобы добиться этого, нужно хорошо изучить выбранную область, а также инструменты и технологии разработки ПО. Изучите фундаментальные вещи, такие как структуры данных и устройство компьютера.
Не дайте эйфории захлестнуть вас и не думайте, что станете экспертом всего за несколько недель. Подумайте, сколько времени нужно, чтобы изучить иностранный язык на уровне носителя, или стать хорошим спортсменом, или научиться играть на музыкальном инструменте так, чтобы вас хотела слушать не только мама.
Персона. Создатель С++ Бьярне Страуструп, который «никогда не любил» языки программирования
У создателя С++ было очень мало шансов «выйти в люди»: бедная семья, худшая школа в городе, отсутствие якро выраженных склонностей к чему-либо. Он даже не был «гениален».
Это человек, которого можно назвать self-made. Его главной целью было добиться настоящего успеха в чем бы то ни было.
Возможно, всем нам повезло, что его «занесло» в программирование. Потому что сейчас очень трудно представить современную ИТ-индустрию без наследия С++.
Бьярне Страуструп родился 30 декабря 1950 года в датском городе Орхус. Это второй по величине (250 тысяч жителей) город Дании, расположенный на восточном побережье Ютландии.
Несмотря на то, что его родители не были «академиками», он отлично учился в школе. Хотя, как потом выяснил Бьярне, это была одна из худших школ в городе.
В детстве будущий инженер любил играть в футбол, кататься на велосипеде. Кроме того, он был бойскаутом. Как большинство мальчиков в то время, Страуструп подрабатывал доставкой газет и молока.
После окончания школы он все-таки поступил в местный Университет на отделение компьютерных технологий. Бьярне допускал, что мог бы стать и архитектором, и историком, и социологом. Но в конце концов он остановился на математике и компьютерных науках. На его решение повлиял школьный учитель математики, который привил мальчику любовь к этой науке.
Университет
Он впервые познакомился с компьютером уже в стенах ВУЗа. Algol-60 был первым языком программирования, который выучил Бьярне.
Орхусский университет входил в ТОП-100 высших учебных заведений мира. Страуструп со страхом думал о том, что ему придется работать учителем математики, если не найдется работа в сфере программирования. Он был убежден, что математика должна иметь практическое приложение.
Однако на втором курсе он понял, что программирование, и компьютерные технологии в целом, – это не только и не столько математика. Кроме того, оказалось, что Бьярне был не так хорош в математике, как он думал.
В одном из интервью Страуструп обозначил свою позицию по поводу обучения программированию:
Я оцениваю образование выше обучающих курсов. Я в большинстве случаев выберу специалиста с широким кругозором и глубокими базовыми знаниями, чем кого-то с сертификатом о прохождении узкоспециализированных курсов. Вообще мои идеал – это сочетание академических знаний и практических навыков.
В университетские годы Страуструп подрабатывал тем, что писал небольшие программы для подразделения компании Burroughs в Орхусе. Тогда он понял, что коммерческая разработка имеет мало общего с написанием программ для себя или друзей, и тем более, с выполнением лабораторных работ в ВУЗе. Бьярне получил опыт общения с пользователями, опыт поддержки и сопровождения кода.
Часть вырученных денег студент тратил на оплату собственного обучения. Помимо того, что он принес пользу себе, его разработки помогли вывести компанию на новый уровень: Burroughs в дальнейшем объединилась с Sperry, в результате чего образовалась компания Unisys – мировой производитель комплексных программно-аппаратных решений.
Кроме того, студент разрабатывал ПО и для нужд университета. В 1975 году Страуструп окончил его и получил степень магистра.
Кембридж
Ближе к концу обучения Бьярне заинтересовался микропрограммированием. Интерес усилился после стажировки в Кембридже. Поэтому Страуструп переехал в Англию, чтобы продолжить свое образование в Кембриджском университете. Там было все необходимое оборудование для изысканий в области микропрограммирования.
Кроме того, новый университет помог ему повысить требования к себе. В этом ВУЗе уровень студентов и педагогов был намного выше, чем в орхусском университете. Это мотивировало Страуструпа развиваться активнее.
В Кембридже, в Вычислительной лаборатории, он занимался проектированием распределенных систем. В 1979 году Бьярне получил докторскую степень.
В этом же году Страуструп вместе с женой Мэриэн переехал в Нью-Джерси (США), где стал работать в Центре компьютерных исследований фирмы Bell Labs. В то время фирма была в «дружеских» отношениях с Кембриджским университетом.
Когда Страуструп занимался исследованиями в фирме, ему потребовалось написать несколько имитационных программ для моделирования распределенных вычислений. SIMULA-67 — объектно-ориентированный язык – мог бы стать идеальным инструментом для решения подобных задач, если бы не его сравнительно низкая скорость выполнения программ. К слову, этот язык Бьярне использовал еще во время написания своей диссертации в Кембридже – там он разрабатывал симулятор распределенных систем.
До этого в сферу интересов Страуструпа не входила разработка языков программирования. Его интересовало микропрограммирование, операционные системы, архитектура вычислительных машин, разработка виртуальных машин. Правда, еще до окончания университета он успел изучить двадцать языков программирования. Но несмотря на это, Бьярне утверждает, что большого интереса к языкам он все-таки не испытывал.
Тем не менее, Страуструп принял решение начать работу над новым языком программирования.
Если вам приходится выбирать между написанием «хорошего» и «быстрого» кода, значит, здесь что-то не так. Потому что «хороший» код должен быть «быстрым», – объясняет Страуструп свою позицию в интервью.
Так был создан язык программирования С++, первоначально получивший название «Си с классами» (С with classes). Название «С++» придумал Рик Мэсчитти. «++» — это оператор инкремента в С, который как бы намекает на то, что язык С++, нечто больше, чем просто С.
В 1983 году язык подвергся значительным изменениям. Страуструп разработал свой язык таким образом, чтобы код не компилировался в машинный язык, а преобразовывался в набор команд препроцессора языка С. Это открывало к нему доступ сотням тысяч С-программистов, имевших соответствующий компилятор.
В 1984 году Bell Labs была реорганизована и получила название AT&Т Bell Labs. Первыми, кому фирма предложила С++, причем практически бесплатно, стали университеты.
В 1985 году Страуструп опубликовал одну из самых широко известных книг «Язык программирования С++», которая выдержала четыре издания (1985, 1991, 1997, 2000), и была переведена на 19 языков.
Как пишет Том Даффи: «Множество открытий обязаны своим происхождением случаю. Но есть и немало других, которые стали возможны благодаря кропотливой работе и предвидению. Язык программирования С++, впервые предложенный лабораторией Bell Labs университетам в 1985 году, безусловно относится ко второй категории».
Формирование сообщества
Язык быстро нашел свою аудиторию. В 1987 году на конференции по С++ собралось 200 человек. На следующий год число участников возросло до 600, а в начале 90-х годов число разработчиков на С++ приближалось к 500 тысячам. Это сделало данный язык мировым лидером по скорости распространения.
В 1990 году вышла очередная книга Страуструпа – «Справочное руководство по языку программирования С++ с комментариями» (The Annotated C++ Reference Manual), которая в дальнейшем была удостоена награды за непревзойдённое мастерство в области технической документации по мнению журнала Dr. Dobb’s Journal.
Кроме того, по версии журнала Fortune magazine Страуструп был признан одним из «двенадцати лучших молодых американских учёных».
Страуструп тем временем продолжал работать в AT&Т Bell Labs, где возглавлял подразделение широкомасштабных программных исследований, активно занимался совершенствованием своего языка и созданием его стандарта. Стандарт ANSI/ISO С++ был выпущен в 1999 году.
Страуструп был главой отдела исследований программирования в Bell Labs с 1995 по 2002 год.
Бьярне Страуструп – о C/С++
«Я придумал C++, записал его первоначальное определение и выполнил первую реализацию. Я выбрал и сформулировал критерии проектирования C++, разработал его основные возможности и отвечал за судьбу предложений по расширению языка в комитете по стандартизации C++, – писал его автор. – Язык C++ многим обязан языку C, и язык C остается подмножеством языка C++ (но в C++ устранены несколько серьезных брешей системы типов C). Я также сохранил средства C, которые являются достаточно низкоуровневыми, чтобы справляться с самыми критическими системными задачами. Язык C, в свою очередь многим обязан своему предшественнику – BCPL».
В 2003 году в интервью Страуструп рассказал о своем отношении к проблемам совместимости С и С++:
Я думаю, что существующие проблемы несовместимости С и С++ – самое ужасное, что могло произойти в истории этих языков. В идеале эти языки нужно объединить. И мне кажется, это технически реализуемо только при условии внесения изменений в оба языка. Однако из-за нежелания вносить эти изменения языки продолжают отдаляться друг от друга, отравляя жизнь практически каждому C- и С++-разработчику.
Я пытаюсь заставить людей увидеть положительные стороны в объединении. Я написал серию статей на эту тему. Но кто-то заинтересован в том, чтобы этого не произошло. Кроме того, я не вижу большого интереса и со стороны сообщества. Наверное, большинство, как обычно, надеется на то, что все «само рассосется».
После AT&Т Bell Labs
С 2002 года Бьярне является профессором техасского университета A&M (Texas A&M University). Он проработал в индустрии почти в четверть века, поэтому ему есть, что сказать студентам.
Кроме того, он сотрудничает с Колумбийским университетом как приглашенный педагог-профессор компьютерных наук.
В 2014 году Бьярне предложил работу один из крупнейших финансовых конгломератов мира – Morgan Stanley.
Страуструп начал сотрудничать с этой фирмой, так как решил вернутся из сферы чистой педагогики к решению реальных проблем. Его огромный опыт оказался полезен банку Morgan Stanley при решении вопросов, связанных с производительностью, надежностью и безопасностью.
Кроме того, он хотел переехать в Нью-Йорк, чтобы быть ближе к детям и внукам.
Бьярне Страуструп был избран членом Национальной Академии Инженерии в США («National Academy of Engineering») в 2004 году с формулировкой «за создание языка С++». Как первый компьютерный учёный, он получил награду («William Procter Prize for Scientific Achievement from Sigma Xi») американского научно-исследовательского сообщества в 2005 году. Он также получил награду компьютерного сообщества IEEE «за начало разработки и коммерциализации объектно-ориентированной технологии создания программ и за большие изменения, внесённые в бизнес и индустрию».
Язык программирования c бьярне страуструп
Название книги: Язык программирования С++. Краткий курс
Автор: Бьярне Страуструп
Год: 2019
Издательство: Диалектика
ISBN 978-5-907144-12-5
Страниц: 320
Язык: Русский
Формат: PDF
Размер: 29 Mb
Содержание: Программисты на C++ — от стершего пальцы о клавиатуру профессионала до только начинающего учиться этому замечательному языку школьника — всегда с нетерпением ждут выхода в свет новых книг серии C++ In-Depth.
С еще большим нетерпением они ждут выхода книг Бьярне Страуструпа, который известен как автор не только замечательного языка программирования, но и замечательных книг.
Что же тогда говорить о книге Бьярне Страуструпа, вышедшей в серии C++ In-Depth?
Книга «Язык программирования C++. Краткий курс» не ставит целью научить читателя программировать (для этого есть другая книга того же автора — Программирование. Принципы и практика с использованием C++. Второе издание).
Не является она и исчерпывающим учебником, который приведет вас на вершины мастерства C++ (для этого автор написал Язык программирования C++.
Четвертое издание). Но если вы — программист на C или C++, желающий получше ознакомиться с текущим состоянием языка программирования C++, или программируете на другом языке программирования и желаете увидеть точную картину и преимущества современного C++, то более короткого, простого и при этом строгого и точного введения в C++, чем эта книга, вам не найти.
В очень небольшой объем Страуструп сумел не только поместить описание языка C++ в его современном виде (включая возможности, которые должны появиться в стандарте C++20), и основных компонентов стандартной библиотеки C++, но и сопроводить этот материал массой советов о том, как лучше воспользоваться всем этим богатством.
Эта книга, как и другие книги серии C++ In-Depth, достойна занять свое место на полке любого программиста на C++.
В этой книге создатель языка C++ Бьярне Страуструп описывает, что собой представляет современный C++.
Это краткое самодостаточное руководство охватывает основные функциональные возможности языка и основные компоненты стандартной библиотеки — пусть и не с полной глубиной изложения материала, однако на высоком профессиональном уровне.
Книга включает множество конкретных примеров, которые облегчают изучение данного языка программирования.
Страуструп представляет функциональные возможности C++ в контексте поддерживаемых ими стилей программирования, таких как объектно-ориентированное и обобщенное программирование. Его книга на удивление всеобъемлюща — она начинается с основ языка программирования C++ и постепенно переходит к таким сложным темам, как многие новые и уже устоявшиеся функциональные возможности C++17, включая семантику перемещения, однородную инициализацию, лямбда-выражения, усовершенствованные контейнеры, случайные числа и параллелизм.
Сюда входят и некоторые расширения C++20, например концепты и модули. Заканчивается книга обсуждением дизайна и эволюции C++.
Книга «Язык программирования C++. Краткий курс» не ставит целью научить читателя программировать (для этого служит другая книга того же автора — Программирование. Принципы и практика с использованием C++. Второе издание). Не является она и исчерпывающим учебником, который приведет вас на вершины мастерства C++ (здесь можно порекомендовать книгу Страуструпа Язык программирования C++. Четвертое издание и множество источников информации в Интернете).
Однако если вы являетесь программистом на C или C++, желающим получше ознакомиться с текущим состоянием языка программирования C++, или программистом на другом языке программирования, желающим увидеть точную картину и преимущества современного C++, то более короткого и простого введения в C++, чем эта книга, вам не найти.
Тридцать лет С++. Интервью с Бьерном Страуструпом
Если вы держите хорошие идеи при себе, они бесполезны. Вы могли бы с таким же успехом разгадывать кроссворды. Только сформулированные в письменном виде и высказанные в беседах идеи становятся вкладом. (с) Бьерн Страуструп
Основам объектно-ориентированного программирования вы научились у Кристена Нюгора, создавшего вместе с Оле-Йоханом Далем объектно-ориентированный язык программирования Simula. Кристен Нюгор часто посещал ваш университет в Дании. Как он повлиял на вашу карьеру?
Кристен был интересным человеком со впечатляющим характером. Он был, конечно, очень творческой натурой и гигантом во всех отношениях. Для начала, рост его был около 6 футов и 6 дюймов и он был довольно широким. Вдохновившись чем-то, он мог обнять, как медведь. Обсуждение с ним любой темы — скажем, программирования, криминальной фантастики или трудовой политики всегда было интересным, иногда вдохновляющим.
Будучи молодым студентом магистратуры, я часто встречался с ним, потому что мой студенческий кабинет находился у начала лестницы, ведущей в гостевую квартиру. Каждый месяц он приезжал из Осло на неделю или около того. По прибытии он звал меня, чтобы (перефразируя) «доставить подозреваемых». Моей работой было привести полдюжины хороших учеников и ящик пива. Затем мы говорили — а это значит, что Кристен пару часов выдавал информацию на различные темы. Так я узнал много нового о проектировании и об основах объектно-ориентированного программирования. Это была скандинавская школа ООП, где главную роль, конечно, играет проектирование и моделирование реального мира в коде.
В 1979 году вы получили степень доктора философии (прим. перев. российский аналог степени — кандидат наук) по информатике в Кембриджском университете под руководством Дэвида Уиллера. Что вы узнали от Девида Уилера такого, что было полезно для вашей будущей работы?
Дэвид Уиллер был мастером своего дела. О его умениях в проектировании ходили легенды. Интересен был стиль преподавания. Каждую неделю я приходил в его офис, чтобы рассказать, какие замечательные идеи у меня возникли или с какими я столкнулся за это время. Реакция была предсказуемой: «Да, Бьёрн, это неплохая идея; на самом деле, мы почти использовали ее для EDSAC-2». То есть у него была такая же идея, когда я поступил в начальную школу, и он отказался от нее в пользу чего-то лучше. Я слышал, что некоторым студентам было трудно справиться с такими ответами, но был очарован, потому что Девид затем приступил к разъяснению моих идей, оценивал их в контексте и подробно рассказывал об их сильных и слабых сторонах, возможных улучшениях и альтернативах. Я задавал вопросы, мы обсуждали проблемы, решения и компромиссы в течение часа или более. Он научил меня многому в том, как исследовать пространства проектирования и как объяснять идеи — всегда на конкретных примерах. При этом я нахожу его официальные лекции смертельно скучными. Не думаю, что ему нравилось их читать. У Дэвида были другие сильные стороны.
В мой первый день в Кембридже он спросил меня: «Какая разница между магистром и доктором?». Я не знал. «Если я должен сказать тебе, что делать, то ты магистр», — сказал он и продолжил (неизменно вежливо) указывать на то, что быть магистром Кембриджа — это судьба хуже смерти. Я не возражал, потому что, как он, наверное, забыл, я только что получил замечательную степень магистра математики в области вычислительной техники в Университете Орхеса.
За те годы, что он наблюдал за мной, не думаю, что он дал мне больше, чем один направляющий совет. В последний день перед отъездом из Кембриджа, после завершения диссертации, он пригласил меня на ланч и сказал: «Ты едешь в Bell Labs. Это очень хорошее место со множеством прекрасных людей, но в то же время, это черная дыра. Хорошие люди приходят туда и о них больше никогда не слышат. Что бы ты ни делал, будь на виду». Здесь идеально подходит формулировка: если вы держите хорошие идеи при себе, они бесполезны. Вы могли бы с таким же успехом разгадывать кроссворды. Только сформулированные в письменном виде и высказанные в беседах идеи становятся вкладом.
В Дэвиде Уиллере меня привлек его отличный послужной список как в аппаратном, так и в программном обеспечении. А Кристен Нюгор и Деннис Ритчи — честные, добрые и великодушные люди, которым можно доверять. Они усердно трудились ради того, что считали важным.
Вы говорили, что спроектировали C++ ещё в 1979 году, чтобы ответить на вопрос «Как вы непосредственно манипулируете аппаратным обеспечением, а также поддерживаете эффективную высокоуровневую абстракцию?» Вы все ещё верите, что это была хорошая идея?
Определенно! Деннис Ритчи известен тем, что различает языки, призванные «решить проблему», и языки, призванные «доказать точку зрения». Подобно C, C++ относится к первой категории. Граница между программным и аппаратным обеспечением интересна, сложна, постоянно меняется и приобретает все большее значение. Фундаментальной идеей C++ было предоставить поддержку прямого доступа к оборудованию, основанную на модели языка C, а затем позволить людям «уйти» к уровням выражения выше, через так называемую абстракцию без накладных расходов. Похоже, что в этом пространстве проектирования есть бесконечная необходимость в коде. Я начал с С и Simula-подобных классов. С годами, улучшения (например, шаблоны) значительно расширили выразительные возможности и оптимизируемость С++.
Почему вы выбрали C в качестве основы для своей работы?
Я решил не начинать с нуля. Мне хотелось быть частью технического сообщества и не повторять все фундаментальные проектные решения. Я знал по меньшей мере десяток языков, которые мог бы использовать, гибких и с хорошим доступом к аппаратным средствам. Например, я знаком с Algol 68 и мне понравилась его система типов. Но у языка не было большого индустриального сообщества. Вместе с этим, поддержка статической проверки типов в C была слабой. Но поддержка сообщества была превосходной: Деннис Ритчи и Брайан Керниган были прямо по коридору от меня! Кроме того, подход к работе с аппаратным обеспечением в C был отличным, поэтому в качестве основы я выбрал C и стал добавлять функциональность по мере необходимости, начиная с проверки аргументов функций и классов с конструкторами и деструкторами.
Вы также писали, что на С++ можно смотреть как на результат трех десятилетий противоречивых требований. Сделай язык проще! Добавь эти две важные особенности сейчас! Не ломай мой код! Вы можете объяснить, что понимаете под этими требованиями?
У многих людей есть очень разумные пожелания по улучшению. Но часто эти пожелания противоречат друг другу. Любой хороший дизайн должен включать в себя компромиссы.
Какие основные уроки вы извлекли за годы существования C++?
Я извлек много уроков, так что трудно выбрать главный. Полагаю, вы имеете в виду уроки проектирования языка.
С годами я все больше ценю инструментальную поддержку. Мы пишем программы не просто на языке программирования, а в определенной цепочке инструментов и среде, состоящей из библиотек и конвенций. Мир C++ предлагает ошеломляющее разнообразие инструментов и библиотек. Многие из них превосходны, но нет доминирующих «неофициальных стандартов», поэтому очень трудно выбирать и сотрудничать с людьми разных предпочтений. Я надеюсь на сближение людей, которое существенно поможет разработчикам C++ и преподаванию C++. Это обсуждается в моей работе HOPL-4 и в Thriving in a crowded and changing world: C++ 2006–2020.
Кто все ещё использует C++?
Больше разработчиков, чем когда-либо. C++ — основа многих, многих систем и приложений, включая некоторые из наших наиболее широко используемых и известных систем. Это также обсуждается в Thriving in a crowded and changing world: C++ 2006–2020. Компании Google, Facebook — одни из основных пользователей. Полупроводниковая промышленность, игры, финансы, автомобильная и аэрокосмическая промышленность, медицина, биология, физика высоких энергий и астрономия — C++ используется во всех этих областях. Многое, однако, невидимо для конечных пользователей.
Разработчиков C++ трудно подсчитать, но опросы говорят о 4,5 миллионах пользователей и это число растет. Я даже слышал «5 миллионов». Нет хорошего подхода для подсчета. Многие индексы, такие как Tiobe, считают «шум», то есть упоминания в сети. Но один увлеченный студент размещает гораздо больше упоминаний, чем 200 занятых разработчиков важных приложений.
Во времена искусственного интеллекта С++ все ещё актуален?
Конечно! C++ — основа большинства современных AI/ML. Большая часть нового автомобильного программного обеспечения — это C++, на C++ работает много высокопроизводительного программного обеспечения. Независимо от того, какой язык вы используете для AI/ML, реализация включает критическую часть на некоторых библиотеках C++. Пример — Tensorflow. Серьезный специалист по данным выразил это так: «Я трачу 97% своего времени на написание кода на Python и мой компьютер использует 98.5% циклов, работающих на C++, чтобы выполнить его».
Какие из существующих сейчас языков наиболее интересны?
Может быть C++. Многие идеи современных языков пришли из С++ или пошли в массы через С++. RAII для управления ресурсами. Шаблоны для обобщенного программирования. Шаблоны и функции constexpr для вычислений во время компиляции. Различные механизмы конкурентного выполнения. В свою очередь, С++, конечно же, во многом обязан более ранним языкам и исследованиям. В смысле будущих разработок, которые повлияют на методы программирования, я буду следить за статической рефлексией. Много интересной работы делается в функциональных языках и в «скриптинге» (например, TypeScript).
Почему вы решили оставить работу на полный рабочий день в академии и присоединиться к Morgan Stanley?
Есть несколько связанных с этим причин. Больше десяти лет я делал большую часть того, что делал академик в смысле карьеры: преподавал студентам магистратуры, аспирантами, работал с будущими докторами философии, планировал учебные программы, писал учебники (например, Programming — Principles and Practice Using C++ (Second Edition), научные работы на конференциях и в журналах (например, Specifying C++ Concepts), получал исследовательские гранты, заседал в университетских комитетах. Эта работа перестала быть новой, интересной и сложной.
Я чувствовал, что мне нужно вернуться «в шахту», в промышленность, чтобы убедиться, что мои работы и мнения все ещё актуальны. В академических кругах трудно было заниматься тем, что мне интересно: масштабированием, надежностью, производительностью и поддержкой. Кроме того, я почувствовал необходимость стать ближе к своей семье в Нью-Йорке и в Европе. Морган Стенли находился в Нью-Йорке, у него были очень интересные проблемы, связанные с надежностью и производительностью распределенных систем, большими базами кода на C++, и — что немного удивило меня, учитывая репутацию финансовой индустрии — было много приятных людей, с которыми можно работать.
Вы приглашенный профессор информатики в Колумбийском университете. Какое главное послание вы хотите передать молодым студентам?
Наша цивилизация в значительной степени зависит от программного обеспечения. Мы должны совершенствовать наши системы и для этого должны расти профессионально. То же самое я бы попытался передать опытным разработчикам, менеджерам и руководителям. Также я рассказываю о принципах проектирования С++ и показываю практические примеры того, как они воплощались на протяжении десятилетий. Нельзя преподавать проектирование абстрактно.
Вы хотите что-нибудь добавить?
Образование важно, но не все люди, которые хотят писать программное обеспечение, нуждаются в одинаковом образовании. Мы должны убедиться, что существует путь через лабиринт образования с хорошей поддержкой для людей, которые будут писать критически важные системы. Те системы, которым мы доверяем жизнь и средства к существованию. Мы должны стремиться к тому, чтобы уровень профессионализма был равен тому, который мы видим у лучших врачей и инженеров.