Бьёрн Страуструп, отец C++: Нам необходимо улучшить баланс между теорией и практикой

Bjarne Stroustrup

Предлагаем вашему вниманию интервью с Бьёрном Страуструпом (Bjarne Stroustrup), создателем C++.

— Что означает ваша фамилия ?
— Означает ? Я не задумывался о значении датских фамилий, но ‘Страуструп’ — это название крошечной деревни в Ютландии, а имя Бьёрн происходит от слова, означающего «медведь «.

— Очень мало известно о ваших юношеских годах. Что вызвало у вас интерес к компьютерам?
— Как и у многих старшеклассников, у меня не было ни малейшего понятия, что делать после окончания школы. Я читал о различных профессиях, и мечтал стать архитектором, историком, социологом, инженером, психологом, и много кем еще. Моя семья советовала выбрать после обучения какую-то очевидную работу и карьерный путь, например стать специалистом в бизнесе.

В итоге я выбрал математику и информатику. Математика была одним из моих любимых предметов в школе, а об информатике у меня сложилось ошибочное впечатление. Я считал, ее одной из разновидностей прикладной математики.

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

Я оказался прав, математика помогла мне сделать прекрасную карьеру, но я совершенно ошибся насчет информатики. Оказалось, что информатика гораздо более интереснее, практичнее и полезнее, чем я себе представлял.

Кроме того, реальная прикладная математика, вероятнее всего была бы за пределами моих ограниченных талантов в этом направлении. Поэтому я выбрал чистую математику и программирование. Вводный курс по информатики зажег во мне интерес к этому предмету.

Расскажите о трудностях, с которыми вы столкнулись во время работы с процедурными языками, которые впоследствии привели к разработке C++?
— Мне нравились многие языки. Как-то я подсчитал, что до начала работы над C++ я использовал более 20 языков. Я был очень доволен процедурными языками, по крайней мере теми, которые не стояли на пути выражения моих идей, и не пытались навязать определенную суженную концепцию написания кода. Сразу же приходит на ум Pascal. Он всегда ставил определенный барьер.

Впервые я познакомился с Simula на курсе в Орхусском университете в моем родном городе. Изучив его достаточно я решил использовать Simula для создания симулятора, который я хотел включить в мою докторскую диссертацию в Кембриджском университете.

Писать симулятор было на удивление легко. Это было больше похоже на написание серии небольших программ, чем на создание большой программы: частота ошибок и период отладки увеличивались линейно, а не квадратически, как я вполне обосновано ожидал. Система типов Simula помогла мне выразить мои идеи ясно, и не стояла на моем пути как система типов Pascal.

Я пришел к выводу, что гибкая и расширяемая система типов была огромным благом в отличии от слабых и менее гибких систем типов большинства языков программирования того времени.

Но вскоре меня постигло очень горькое разочарование: Мой симулятор исчерпал возможности системы университетского компьютера. Мне пришлось найти маленький экспериментальный компьютер — Cambridge CAP, и переписать мой симулятор для него, используя язык BCPL.

BCPL — это прямой предок Cи, который делает Cи похожим на язык очень высокого уровня, но BCPL был быстрее и гибче. Хотя был труден в отладке. Если бы я не написал программную архитектуру на языке Simula, то считаю, что тогда бы не смог завершить свой симулятор. Я пришел к выводу, что нужен не просто язык с гибкой и расширяемой системой типов, а необходим язык, который мог бы эффективно работать на любом компьютере.

Я увидел, что в Simula классы, иерархии классов и строгий контроль статических типов данных, прежде всего означают организованный программный код. Мне не нравился термин «Объектно-ориентированное программирование» из-за того, что он чрезмерно раздутый и ограничительный.

Мой самый первая работа по C++ (тогда он назывался «Си с классами») преподносит пример необходимости параметризации типов, так называемого, абстрактного программирования. Я стремился к синтезу методов программирования и языковой поддержки, которые выходят за рамки классического объектно-ориентированного программирования.

— Все больше и больше людей изучают программирование. Мы видим огромное смещение в сторону веб-технологий, значительная часть программного обеспечения перемещается в облако. Не свидетельствует ли это о лимитированном будущем C++?
— Уникальные сильные стороны C++ проявляются в областях инфраструктуры и решении ресурсоограниченных задач. Первой и самой очевидной областью применения C++ является разработка таких веб-технологий, как браузеры, виртуальные машины (например, для Java), интерпретаторов (например, для JavaScript) и всей критически важной net, web, и телекоммуникационной инфраструктуры, которая лежит в основе всего этого.

На С ++ разработана, компанией Cloudius, новая операционная система для облака — OSv. Также на С++ работают большие приложения с высокими требованиями, такие как платформа поиска Google и платформа веб-коммерции Amazon.

Необходимость в масштабировании портативных устройств — смартфонов, планшетов и т.д, которые требуют сохранение энергии для своих приложений с расширенными возможностями, таких как потоковое видео, обработка изображений в режиме реального времени, распознавание голоса, многопользовательские игры (как на самом устройстве и на стороне облака).

Предпринимаются также усилия для работы C++ в браузере (например, как NaCl портативный клиент Google) и усилия по более или менее автоматическому порту «обычные приложения,» в том числе программы на C++ в облаке (например, Rollapp).

На самом деле, предпринимается очень много усилий для перемещения C++ в облако, но я уверен, что не знаю о большинстве из них. Считаю, что по крайней мере некоторые из них увенчаются успехом.

Я не считаю, что роль C++ в том, чтобы стать самым легким языком программирования для создания простых приложений плохо обученными людьми. Для этого существует много других языков. Если все в чем вы нуждаетесь — это средняя производительность, средняя надежность, приложения средней сложности, созданные средними программистами, тогда для этого существует много языков (конечно, в том числе и C++).

Тем не менее, C++ вступает в свои права, когда вы выходите за эти границы. Главное улучшение в C++ 11, по сравнению, с C++ 98 — это юзабилити, производительность и гибкость. C++ 14, а особенно, C++ 17 будут двигаться дальше по этим направлениям. Ни в одной из этих версий нет ничего специального для «облака». Еще предстоит выяснить, какие, именно, требования для успешной работы в «в облаке» необходимы. Как всегда, я буду делать ставку на универсальность, гибкость и производительность.

— Будучи преподавателем, скажите, какие шаги необходимо предпринять для улучшения преподавания программирования в школах и колледжах по всему миру, чтобы вырастить отличных и работоспособных программистов.
— Нам необходимо улучшить баланс между теорией и практикой. Сейчас много говорится о методах обучения, но я считаю, что реальная проблема заключается в контенте. А не из-за того, что методы обучения неадекватны (хотя, конечно, это также является проблемой во многих учебных заведениях).

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

В принципе, я считаю, что основную базу знаний (по математике, машинной архитектуре, структуре данных и алгоритмам) следует дополнить, какой-то формой специализации (например, графика, компьютерные сети, системы реального времени).

Неудивительно то, что я считаю, что больше внимания следуют уделить практическим аспектам разработки программного обеспечения (корректности, надежности, удобству сопровождения, сервису и производительности). Наконец, я считаю, что хороший разработчик нуждаются в знаниях в некомпьютерных областях. Это необходимо, чтобы научиться ценить других фанатиков своего дела и для общения с непрограммистами.

Это очевидно, поэтому я считаю степень магистра (а не бакалавра) идеально подходит для разработчиков приложений с высокими требованиями.

Я считаю, что мы должны уделять гораздо больше внимания профессионализму. Наша цивилизация зависит от программного обеспечения, поэтому мы нуждаемся в профессионалах, которые будут создавать и поддерживать наше фундаментальное программное обеспечение, а не в полуобразованных ремесленниках, которые охотно готовы поставлять любую программу своим менеджерам, которые дают им указания. Я считаю разработку программного обеспечения потенциально благородной профессией, например, как медики или некоторые классические инженерные специальности. Но нам предстоит длинный путь, чтобы достигнуть этого.

— Как вы считаете, какую самую главную ошибку совершают люди, когда изучают программирование на любом языке?
— Я не уверен, что это можно назвать самой главной ошибкой, но типичная ошибка — это программирование с использованием стилей и методов языков, изученных в предыдущем языке.

Некоторые программисты так и ни когда не избавятся от этого. Некоторые даже пытаются сделать достоинством, свое непонимания, настаивая на том, что знают, как хорошо программировать независимо от языка программирования.

Чтобы научиться хорошо пользоваться языком, необходимо изучить его сильные и слабые стороны, и использовать его идиоматически. Написать Fortran можно на любом языке, в том числе и на Си, но этого не следует делать, а для большинства языков, пытающихся избежать функций, которые выходят за рамки того, что доступно в большинстве языков ведет к недостаточной программной архитектуре, низкоуровнему, сложному коду приложения, на которое затрачиваются чрезмерные ресурсы (время, пространство, производительность, существенное количество энергии).

На титул «самой главной ошибки» есть много кандидатов. Но, возможно, это не принятие разговорного стиля языка и использование, в основном, независимого от языка, низкоуровнего стиля кода (эмуляция ‘чужих’ стилей программирования). Для того, чтобы хорошо использовать любой язык программирования — необходимо понимать основы и «родные» методы этого языка.

— Как вы считает важно выучить один язык досконально или выучить ряд языков на базовом уровне, чтобы писать безошибочные приложения?
— Чтобы стать профессионалом, необходимо научиться идиоматически использовать несколько языков. Знание всего лишь одного языка, ограничивает возможности, а поверхностное понимание нескольких языков ведет к написанию излишне сложного кода.

— Какими тремя ключевыми уроками, вы хотели бы поделиться с молодыми программистами, которые только начинают свою карьеру?
— Почему только тремя? Ну, ладно:

Изучите хорошо несколько языков программирования.

Научитесь ясно выражать мысли в устной и письменной форме.

Развивайте и поддерживайте интерес к чему-то, что выходит за пределы разработки программного обеспечения.

Программирование — это способ выражения идеи, но если отсутствует понимание прикладной области, то не сложится представление о вкладе, который можно сделать в эту область.

В дополнение к базовым знаниям по информатике (таким как, архитектура вычислительной машины, структура данных и алгоритмы), следует потратить значительную часть времени на изучение не компьютерных дисциплин (математику, физику, биологию, историю, архитектуру или литературу).

Источник: www.yourstory.com, 11 декабря 2013


Перевод выполнен abv24.com




Опубликовано 27.01.2014 в 1:26 дп · Автор abv24 · Ссылка
Рубрики: Технологии · Теги: ,

@Mail.ru