Интервью с Гербертом Шилдтом

Герберт Шилдт (Herbert Schildt) - всемирно известный автор книг по программированию. Если сложить все вышедшие из типографии тиражи, то количество экземпляров его книг по всему миру превысит два миллиона. Бессмысленно упоминать, что его книги переведены почти на все языки мира. Перу Герберта Шилдта принадлежат бестселлеры "C++: The Complete Reference", "С: The Complete Reference", "Java Programmer's Reference", "Teach Yourself C", "Teach Yourself C++2, "C++ from the Ground Up", "Window 98 Programming from the Ground Up2" и "STL Programming from the Ground Up". Герберт также является президентом Universal Computing Laboratories, консалтинговой фирмы по программному обеспечению в Mahomet, штат Иллинойс.


TanaT: Герберт, расскажите немного о себе.

Герберт Шилдт: Родился в Чикаго, штат Иллинойс (Illinois). Я и сейчас живу в штате Иллинойс (здесь находится Иллинойский Университет), в городе Урбана/Шампань (Urbana/Champaign). Я окончил Иллинойский Университет, женился и сейчас у меня четверо детей.


TanaT: В каких областях программирования вы считаете себя экспертом?

Герберт Шилдт: Меня интересуют языки программирования сами по себе. Я являюсь экспертом по C, C++, C# и Java.



Один из наиболее полных справочников по С в мире


TanaT: Вы написали огромное количество книг о С и С++. А сейчас пишите что-нибудь новое?

Герберт Шилдт: Я только что закончил писать третье издание книги "C++ From the Ground Up". Сейчас работаю над новой книгой под названием "The Art of Java". Она учит, как эффективно использовать Java для решения многих прикладных задач. Например, книга показывает, как самому реализовать синтаксический анализатор, языковой интерпретатор на Java, как создавать сетевые приложения (на примере менеджера закачек и почтового клиента). Книга даже включает главу, посвященную искусственному интеллекту. Я рассмотрел несколько типичных задач и привел их решения.


TanaT: Вы считаете себя больше теоретиком или практиком в программировании?

Герберт Шилдт: Сложный вопрос. Давайте поищем ответ вместе. Чтобы стать хорошим программистом, необходимо понимание того, что язык программирования - это и есть душа самого процесса под названием "программирование". Если под "теоретиком" вы понимаете человека, больше интересующегося языками программирования (которые и используют программисты), чем приложениями (которые создают программисты), тогда я могу назвать себя теоретиком.
Тем не менее, есть и другая сторона данного вопроса. Я думаю, что все программы - все типы программ - должны быть практичными и удобными в работе. Не люблю код, в котором программист показывает все "трюки" которыми владеет, в результате человеку со стороны ничего не понятно. "Трюки" делают код нечитабельным и нерасширяемым. То есть, можно сказать, что я очень "практичный программист", когда дело доходит до собственно написания кода.


TanaT: Вы не являетесь активным членом С++ сообщества. Вы не принимаете участие в создании и совершенствовании стандартов. Вы не влияете на судьбу С++. Почему?

Герберт Шилдт: Мне кажется странным ваш вопрос, потому что я много писал и пишу о С++, был членом комитета ANSI/ISO, который и принимал стандарты С++. Мне трудно понять, как можно быть более активным! Возможно, вы имели в виду, почему я не вовлечен в политику, окружающую эволюцию языка? Потому что у меня нет на это времени и желания. К тому же, все, что я хотел сказать о С++, написано в моих книгах.
Иногда люди не понимают, что я делаю, и почему я это делаю. Моя работа, как работа технического писателя, заключается в том, чтобы документировать и описывать все особенности языка, обучать программированию на нем. Для этого я должен понятно, точно, аккуратно и объективно освещать затронутую мной тему. Я не хочу принимать участие во всяких спорах и дебатах, где никто не слушает чужих аргументов... Я также не хочу быть судьей во всех этих словесных баталиях. Мне больше по душе другая роль, роль беспристрастного комментатора, который объективно освещает все тонкости языков программирования так, чтобы можно было их легко понять и применить самому. Такая объективность иногда приводит к тому, что мои читатели и сами становятся экспертами.
Что касается будущего самого языка С++, то Бьярн Страуструп (создатель языка) - выдающийся провидец. Под его управлением, будущее С++ - в хороших руках.


TanaT: Вы написали множество книг о С и С++ и всего лишь несколько о .NET. Собираетесь писать что-нибудь еще о .NET?

Герберт Шилдт: К настоящему времени, я написал две книги о .NET: "C#: A Beginner's Guide" и "C#: The Complete Reference". У меня есть еще несколько задумок, но они будут ждать, пока освободится место в моем плотном писательском графике.



А вот и новая книга Герберта


TanaT: Вам нравится .NET?

Герберт Шилдт: Да, мне нравится .NET. Это блестящее решение для огромного множества современных компьютерных задач. Я считаю, что в будущем .NET сыграет важную роль в развитии программирования.


TanaT: Вы написали много книг о Java, С, С++, С#, Visual C++, C++ Builder и т.д. Неужели один человек способен быть специалистом по стольким языкам?

Герберт Шилдт: Как я уже говорил, языки программирования - это моя специальность, и даже больше. Это - моя непреодолимая тяга. Языки - это квинтэссенция логики, ее воплощение, которое показывает, как мы воспринимаем работу программиста, как подходим к ней. Используемые языки определяют предел того, что мы, как программисты, можем сделать, типы решаемых задач и их логическую постановку. Это очень важно.
Что касается конкретно вашего вопроса, да, я очень хорошо знаю С, С++, С# и Java. Я провел уйму времени, изучая эти языки, и много написал о них. Как вы знаете, они не совсем обособленны. Точнее, они составляют семейство языков, связанных друг с другом. С++ можно считать надстройкой над С. Java очень многое переняла от С++. С# тоже произошел от С++, но он включает элементы, введенные впервые в Java.
Вместе С, С++, С# и Java определяют мир профессионального программиста. Я уверен, что все профессиональные программисты владеют этими языками. Именно данные языки определяют современное программирование.



Эта книга может составить конкуренцию даже всемирно известной книге Б. Страуструпа "Язык программирования С++"


TanaT: Вы не могли бы сравнить Java и С#?

Герберт Шилдт: Вы имеете ввиду, могу ли я сравнить компиляторы Java и С#? Нет, полное сравнение займет целую книгу, здесь я могу сказать лишь несколько слов по этому поводу. Как я только что объяснил, Java и С# тесно связаны между собой. Они - как два брата. Оба произошли от одного и того же предка и имеют много общих особенностей. Например, оба компилятора создают промежуточный код, оба используют похожие объектные модели и оба используют для освобождения выделенной, но не используемой памяти, сборщик мусора. Они так похожи, что вы легко сможете преобразовать код из одного языка в другой, часто просто с помощью "Поиск/Замена".
Тем не менее, существуют и отличия между С# и Java. Возможно, самое важное состоит в том, что С# позволяет вам оперировать указателями (как в опасном коде). Опасный код - это обыкновенный код, не контролируемый платформой .NET (которая следит за выполнением промежуточного кода). В Java вы должны использовать native-код (обычно написанный на С или С++), чтобы получить доступ к указателям. Другое различие состоит в том, что С# поддерживает свойства (properties), а Java - нет.


TanaT: Бьярн Страуструп написал несколько статей о несовместимости С и С++. Несколько экспертов по С++ (Herb Sutter и Steve Clamage) согласны с Бьярном в том, что это - действительно большая проблема для программистов. Они считают, что пропасть между С и С++ растет с каждым принятым новым стандартом. А что вы думаете по этому поводу?

Герберт Шилдт: Я читал статьи, о которых вы говорите и, в общем, согласен с мнением Бьярна. Однако, мне кажется, что проблема несовместимости С/С++ в настоящее время скорее теоретическая, чем практическая. Я не думаю, что сейчас большинство программистов сталкивается с ней. Давайте объясню почему.
Как вы знаете, С++ основан на С. Более значительно то, что он был создан в 1989 году на базе стандарта С, известного как С89. Это означает, что С++ поддерживает все особенности и библиотеки С89. Таким образом, не составит труда написать код на С , компилируемый С++. Именно так и поступает большинство программистов.
Проблема в том, что в 1999-м был принят новый стандарт для языка С, известный как С99. Согласно его требованиям, в С появились некоторые особенности, не поддерживаемые С++. Поэтому программы на С, использующие эти нововведения, не компилируются компилятором С++. Однако сейчас, С99 не особо распространен. Фактически, поскольку все были в этом заинтересованы, мир программистов на С начал использовать нечто среднее между С89 и С99. А большинство программистов вообще вернулись к С89. Таким образом, несовместимость чувствуется лишь в незначительной степени.
Несовместимость может вызвать большие проблемы после выхода следующего стандарта С++. Однако, готов поспорить, также можно будет писать программы, компилирующиеся одинаково хорошо как под компилятором С, так и под компилятором С++.



По STL очень мало книг вообще, эта, пожалуй, лучшая


TanaT: Какой компилятор С++ вам больше всего нравится? И какую IDE для программирования под Windows на C++ вы предпочитаете? C++ Builder, Visual C++ или что-то еще?

Герберт Шилдт: Я использую Visual C++ и C++ Builder.


TanaT: У вас есть какие-то особо любимые языки программирования?

Герберт Шилдт: Я искренне люблю C/C++/C#/Java! Они используют разный подход для решения одних и тех же задач.


TanaT: Какое программное и аппаратное обеспечение вы используете в своей работе?

Герберт Шилдт: Стандартный набор: компьютер на базе Intel и Windows.


TanaT: Вы поддерживаете отношения с другими известными компьютерными писателями?

Герберт Шилдт: Да, с несколькими.



Хотите научиться программировать на С? Один из вариантов - прочесть эту книгу


TanaT: Герберт, у вас есть какие-нибудь увлечения? Занимаетесь ли вы спортом?

Герберт Шилдт: Я увлекаюсь робототехникой и создаю экспериментальных роботов. Я верю, что мы живем в начале эпохи роботов. Роботы очень популярны в двух крупнейших промышленных отраслях: игрушки и военный комплекс. По моим наблюдениям, развитие в этих областях происходит очень быстро.


TanaT: Что бы вы хотели сказать напоследок нашим читателям?

Герберт Шилдт: Программирование все больше и больше отдаляется от "железа" и низкоуровневого системного ПО. Например, Java и C# создают промежуточный код. К тому же, развитие средств разработки и платформ дошло до того, что многие программисты не вполне понимают архитектуру, лежащую в основе их программ. Например, на сегодняшний день многие программисты под Windows не могут точно сказать, что такое цикл обработки сообщений или почему дескрипторы ресурсов должны освобождаться после использования. Многие программисты не знают, как писать код на ассемблере, люди просто не понимают, что такое стек и прерывания. А ведь это - основа основ. Я искренне надеюсь, что эта пропасть между аппаратной частью и операционной средой не приведет к катастрофе в будущем.


TanaT: Спасибо, что уделили нам время. Удачи вам и всего доброго!