Во втором выпуске этого журнала мы рады видеть Джона Скита в нашем «виртуальном» кресле.
Джон Скит — настоящий координатор сообщества (см.
его пины на StackOverflow), ведущий эксперт по C# и автор множества книг.
Джон является MS MVP с 2003 года.
В настоящее время он работает в Google.
Дамы и господа, без лишних слов представляем вашему вниманию инженера-программиста и джентльмена — Джона Скита.
Национальный комитет Демократической партии: Привет, Джон, мы так рады, что ты нашел время в своем расписании для этого интервью.
Прежде всего, мы все хотим узнать больше о Джоне Ските, расскажите, как все началось? Как Джон начал работать с компьютерами? ЯС: Моим первым компьютером, которым пользовалась вся семья, был Sinclair ZX Spectrum 48 K, который мы купили, когда мне было 8. Со временем я покупал другие модели Spectrum, но затем постепенно перешел на ПК.
Долгое время большую часть времени я проводил за компьютером, просто играя в игры, но программирование присутствовало всегда.
Национальный комитет Демократической партии: С какими проблемами вы столкнулись, работая в Sinclair? Проблемы, которые привели вас глубже в информатику? ЯС: Одним из моих первых «больших» проектов на Спектруме было написание аналога языка Logo. В школе у нас была BBC Micros, и логотип использовался как язык для знакомства с компьютером; Мне он очень понравился, и я захотел использовать его дома, но у нас не было переводчика для Logo. Я понятия не имел о тригонометрии и не имел хорошего понимания структурного программирования, но я упорствовал и в итоге получил довольно хорошую реализацию.
Руководство, идущее в комплекте со Спектрумом, было очень хорошим, я буквально выучил оттуда всю основную тригонометрию, задолго до того, как мы начали ее изучать в школе.
Я до сих пор помню одну процедуру, которая рисовала или удаляла треугольник, изображающий черепаху.
Подпрограмма начиналась со строки номер 7000, и если результат выглядел не совсем правильно, я просто добавлял вызов «GOSUB 7000», пока она не работала.
Я знал, что если в определенном месте было более одного вызова подпрограммы, что-то было не так.
но я не всегда знал, что именно.
Национальный комитет Демократической партии: Ладно, мы хотели оставить этот вопрос на потом, но сейчас вы сказали, что создали аналог Logo, когда вам было.
8(?).
Вы когда-нибудь задумывались о создании собственного языка программирования? ЯС: Иногда.
но я не думаю, что у меня достаточно сильное воображение, чтобы создать что-то по-настоящему революционное (конечно, у меня нет на это времени).
Я думаю, что могу помочь команде, разрабатывающей новый язык, но гораздо проще быть кабинетным дизайнером и указывать на ошибки, допущенные в существующих языках, чем делать реальные вещи.
Национальный комитет Демократической партии: Ну, есть много диванных специалистов, и вот у нас есть Джон.
Мы все знаем о вашей любви к C#.
Большая часть вашей работы написана на Java. Какие еще языки программирования вы используете для работы? Есть ли какие-либо языки, которые вы изучаете в качестве хобби или хотели бы изучить? Почему?
Мой секрет в том, что я действительно не знаю других языков программирования.
Я достаточно знаю VB, чтобы ответить на некоторые вопросы по StackOverflow, и могу прочитать некоторые вопросы по F#, но в этом смысле я не очень многоязычен.
ЯС: Мой секрет в том, что я действительно не знаю других языков программирования.
Я достаточно знаю VB, чтобы ответить на некоторые вопросы по StackOverflow, и могу прочитать некоторые вопросы по F#, но в этом смысле я не очень многоязычен.
Я определенно хочу узнать больше о F# и надеюсь изучить Go, поскольку мои коллеги много об этом говорили.
Хитрость заключается в том, чтобы найти реальное применение вещам — большинство моих хобби связано с созданием .
NET-библиотек, таких как Noda Time, или написанием статей о C#.
Я не разработчик приложений, и мне кажется, что гораздо проще попробовать другие языки программирования.
В настоящее время у меня есть Raspberry PI, который, я надеюсь, пробудит мое воображение.
Несмотря на то, что там работает Mono, я попробую использовать его (Raspberry PI) для изучения Go. Национальный комитет Демократической партии: Очень хорошо, теперь мы можем добавить тег Go в ваш список StackOverflow. Как программист-полиглот, как часто у вас возникает чувство «хммм… это интересно, на других языках это работает по-другомуЭ» Что-нибудь приходит на ум? ЯС: Замыкания .
Когда вы ссылаетесь на внешнюю переменную из замыкания, что это на самом деле означает? В разных языках есть разные ответы.
В C# ответ на этот вопрос со временем изменился (если вы захватываете переменную цикла в foreach в C# 2.0–4.0, то в конечном итоге вы будете захватывать одну и ту же переменную для каждого значения в последовательность в C# 5.0 будет захватывать новую переменную на каждой итерации).
Национальный комитет Демократической партии: Возвращаясь к вашей любви к C#, какую функцию вы всегда хотели, но которая так и не была реализована, или если бы вы могли добавить «одну» функцию в C#, что бы это было? ЯС: Мне бы хотелось видеть больше поддержки неизменяемых типов в той или иной форме.
Есть много мест, где это может быть полезно.
Например, мне нравится поведение анонимных типов — просто неизменяемых классов, которые полезным образом переопределяют методы Equals, GetHashCode и ToString, а также позволяют давать нужные имена их свойствам.
Если бы мы могли так же легко сделать то же самое и для обычных занятий! Создание «обычного» класса, содержащего несколько свойств, конструктора, принимающего значения и переопределяющего различные методы, превращает код в стандартный битовый код (Бойлерный код — это название повторяющихся фрагментов программного кода, которые воспроизводятся множество раз).
раз с небольшими изменениями), особенно если вы хотите создавать переменные, доступные только для чтения, а не иметь свойства с частным установщиком.
Кроме того, мне бы хотелось видеть больше поддержки для создания неизменяемых типов — инициализаторы объектов и коллекций хороши, но работают только для изменяемых типов.
Вы можете использовать шаблон построителя, но это не очень красиво.
Я сомневаюсь, что добавление функциональности, связанной с шаблоном строителя, станет интересным дополнением к языку.
По крайней мере, именованные аргументы и параметры по умолчанию предоставляют альтернативную функциональность.
Конечно, эти представления о неизменности поверхностны.
Глубокая неизменяемость сложна, но имеет большие преимущества.
Я знаю, что команда C# осознает это преимущество: если они смогут найти эффективное решение, это будет здорово.
Национальный комитет Демократической партии: C# начинался как статически типизированный язык, но в нем было реализовано множество динамических функций.
Можно ли добавить в C# что-нибудь инновационное или это будет эволюция чего-то существующего? ЯС: Самое интересное во всем этом то, что многие функции, изначально появившиеся в динамических языках, на самом деле не являются динамическими.
LINQ полностью статически типизирован, но генераторы списков появились в Python раньше.
Кроме того, «var» делает C# похожим на динамический язык, но без потери безопасности типов.
Конечно, «динамический» тип, добавленный в C# 4.0, — это совсем другое дело.
Я думаю, что новая функциональность async/await, добавленная в C# 5.0 (и VB, конечно), изменит правила игры.
Я знаю, что подобные функции существуют и в других, менее популярных языках программирования, но думаю, что это принесет большую пользу рядовым разработчикам.
Возможность создавать асинхронный код, не превращая его в спагетти-код, просто поразительна.
Я очень воодушевлен этой функциональностью и надеюсь, что она изменит наше представление о написании кода, так же, как я думаю, что LINQ изменил то, как многие люди думают о манипулировании данными.
Национальный комитет Демократической партии: Помимо неизменяемости, которая, похоже, изменилась только с появлением поддержки ReadOnlyCollections в C# 5.0, что еще есть в вашем списке пожеланий для C# 6.0? ЯС: Это все, что я мог предложить.
Я уверен, что команда C# задумала нечто гораздо более удивительное.
Я уже говорил об улучшенной поддержке неизменяемых типов, и мне также хотелось бы увидеть улучшенную поддержку кортежей, которая может значительно упростить некоторый код, но я также считаю важным, чтобы C# не был загрязнен ненужной функциональностью.
Команда разработчиков должна поддерживать очень высокую планку для новых функций, чтобы они могли ожидать, что разработчики со временем узнают о них.
Мне посчастливилось изучить C# начиная с версии 1.0, но можете ли вы себе представить, что я начну изучать его с C# 5.0? Сколько времени вам понадобится, чтобы выучить весь язык, включая самые последние добавленные функции? (Я намеренно держусь подальше от небезопасного кода, фактически вырезал из знания языка целый раздел, надеюсь, он мне никогда не понадобится).
Национальный комитет Демократической партии: Расскажите нашим читателям подробнее о проекте Protobuf (портированном на .
NET).
Помимо проекта Protobuf, есть ли у вас какие-либо совершенно секретные проекты, над которыми вы работаете? ЯС: Буферы протокола используются для представления структурированных данных в Google. Это довольно простой язык для описания структуры, а также наиболее эффективное представление для хранения и передачи.
Это платформонезависимый формат, который, очевидно, будет вам полезен, если используемая вами платформа поддерживает соответствующую библиотеку.
Google сделал проект Protocol Buffers открытым исходным кодом почти сразу после того, как я присоединился к нему, и я решил портировать его на .
NET. Моя версия примерно соответствует версиям Java и C++, предоставляемым Google, но есть и другие порты.
В частности, я знаю, что Марк Гравелл проделал интересную работу над своей версией Protobuf для .
NET, в которой используется немного другой подход. Сейчас я мало работаю над протокольными буферами — большая часть моего кода с открытым исходным кодом написана на NodaTime, который начинался как порт библиотеки даты/времени JodaTime для Java, но в конечном итоге стал портом движка JodaTime. но с совершенно другим API. Это действительно хороший проект для изучения дизайна API. Национальный комитет Демократической партии: Пожалуйста, задайте нашим читателям 3 интересных вопроса о C#.
ЯС: ХОРОШО! Несколько вопросов разной сложности: Вопрос 1: Какой вызов конструктора вы можете использовать, чтобы данный код печатался как True (в реализации Microsoft .
NET)
Помните, что это всего лишь вызов конструктора, и вы не можете изменить тип переменных.object x = new /* fill in code here */; object y = new /* fill in code here */; Console.WriteLine(x == y);
Вопрос 2: Как заставить этот код скомпилироваться так, чтобы он вызывал три разные перегрузки метода? void Foo()
{
EvilMethod<string>();
EvilMethod<int>();
EvilMethod<int?>();
}
Вопрос 3: Как можно, используя локальную переменную, поместить этот код во вторую строку? string text = x.ToString(); // No exception
Type type = x.GetType(); // Bang!
Национальный комитет Демократической партии: Можете ли вы выбрать один или два интересных разговора на StackOverflow? (Лично я люблю читать факты о Джоне Ските :)) ЯС: Да, мне тоже нравится страница фактов о Джоне Ските.
Как я уже сказал, на самом деле дело не только во мне, я просто удобное имя, которое можно использовать в качестве шутки.
Мне нравятся сообщения, в которых я узнаю что-то новое о C#, или те, которые дают мне повод написать действительно ужасный код - обычно вместе с комментарием «это ужасно, не используйте это в реальной жизни».
Мне было очень приятно, когда Рик Липперт добавил комментарий к одному из этих постов — «это лучшее злоупотребление C#, которое я когда-либо видел».
Одним из преимуществ разработчика C#-любителя является то, что я могу писать такой код без каких-либо последствий.
Национальный комитет Демократической партии: Если начинающий/молодой разработчик стремится быть похожим на Джона Скита — выдающегося программиста, с чего ему начать? Можно ли создать «глубокую копию» программы Джона Скита? ЯС: Начнем с того, что планку надо держать гораздо выше! Слухи о моей компетентности сильно преувеличены, о чем вы не раз слышали, общаясь с моими коллегами.
Я прочитал спецификацию C# более подробно, чем многие люди, и у меня есть дар к сознательному злоупотреблению языком, и мои коммуникативные навыки довольно хороши, но, несмотря на это, я не являюсь экспертом.
У меня твердое мнение об API и языковом дизайне, но попросите меня написать целое приложение, и я беспомощен.
Теги: #c#.
net #Джон Скит #перевод #.
NET #C++
-
График Визуальных Эффектов И Вихри
19 Oct, 24 -
Самая Бесполезная Трата Денег
19 Oct, 24 -
Подводные Камни Технологизации Компании
19 Oct, 24