Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Интервью с Джоном Скитом

Anna | 17.06.2014 | нет комментариев
Во втором номере этого журнала, мы рады видеть Джона Скита в нашем «виртуальном» кресле. Джон Скит — подлинный помощник сообщества (взгляните на его значки на StackOverflow), ведущий C# эксперт и автор множества книг. Джон является MS MVP начиная с 2003 года. В реальное время он работает в компании Google.

Дамы и господа, без лишних слов, представляем вашему вниманию Программного Инженера и Джентльмена — Джона Скита.

DNC: Здравствуй Джон, мы дюже рады, что ты обнаружил время в своём графике для этого интервью. Для начала мы все хотим знать огромнее о Джоне Ските, расскажи нам как все началось? Как Джон начал трудиться с компьютерами?

JS: Мой 1-й компьютер — всеобщий для каждой семьи был Sinclair ZX Spectrum 48 K, тот, что мы приобрели когда мне было 8. Со временем я приобретал и другие модели Spectrum-а, но после этого понемногу перешел на PC. Длинное время я проводил множество своего времени за компьютером, легко играя в игры, но программирование так же неизменно присутствовало.

DNC: С какими трудными задачами ты столкнулся при работе на Sinclair? Задачи, которые погрузили тебя глубже в компьютерные науки?

JS: Одним из моих первых «крупных» планов на Spectrum-е было написание аналога языка Logo. В школе у нас были микрокомпьютеры BBC Micros и Logo применялся как язык для вступления в вычисления; я подлинно им наслаждался и хотел применять его дома, но у нас не было интерпретатора для Logo. Я не имел представления о тригонометрии и не имел классного представления о структурном программировании, но я проявил упорство и завершил с довольно недурной реализацией. Начальство, которое было совместно с Spectrum-ом было дюже отличным, я дословно выучил оттуда всю элементарную тригонометрию, за длинно до того как мы начали постигать её в школе.

Я все еще помню одну подпрограмму рисующую либо удаляющую треугольник представляющий собой черепаху. Подпрограмма начиналась со строки под номером 7000 и если итог выглядел не вовсе верно, я легко добавлял вызов «GOSUB 7000» до тех пор пока она работала. Я понимал, что если имеется больше одного вызова подпрограммы в определенном месте, значит что-то было неверно… но я не неизменно знал, что именно.

DNC: Отлично, мы хотели оставить данный вопрос на потом, но теперь ты сказал, что сотворил аналог Logo когда тебе было… 8(?)… Задумывался ли ты когда-нибудь о создании своего собственного языка программирования?

JS: Изредка… но не думаю, что у меня есть довольно мощное воображение, Дабы сделать что-то подлинно революционное (безусловно же у меня нет на это времени). Я думаю я могу подмогнуть команде проектирующей дизайн нового языка, но чай гораздо проще быть диванным дизайнером — указывать на ошибки идеальные в существующих языках, чем делать настоящие вещи.

DNC: Что ж, есть много диванных экспертов и здесь у нас есть Джон. Мы все знаем о твоей любви к C#. Множество твоей работы связано с Java. Какие другие языки программирования ты используешь для работы? Какие-нибудь языки ты постигаешь как хобби либо хотел бы постигать? Отчего?

Мой секрет заключается в том, что я подлинно не знаю другие языки программирования. Я довольно знаю VB, Дабы отвечать на некоторые вопросы на StackOverflow, и я могу читать некоторые вопросы по F#, но я дюже не многоязычен в этом смысле.

JS: Мой секрет заключается в том, что я подлинно не знаю другие языки программирования. Я довольно знаю VB, Дабы отвечать на некоторые вопросы на StackOverflow и я могу читать некоторые вопросы по F#, но я дюже не многоязычен в этом смысле. Я определено хочу исследовать подробнее F# и верю выучить Go, от того что мои сотрудники много говорили о нём.

Каждая хитрость заключается в том, Дабы обнаружить фактическое использование вещам — множество моего хобби связанно с созданием .NET библиотек таких как Noda Time либо написание статей о C#.

Я не разработчик приложений, для которого я думаю гораздо проще пробовать другие языки программирования. Теперь у меня есть Raspberry PI, тот, что я верю зажжёт мое воображение на что-либо. Правда Mono работает над этим, я собираюсь испробовать применять его (Raspberry PI) для постижения языка Go.

DNC: Дюже отлично, сейчас мы можем добавить и тег Go к твоему списку на StackOverflow. Как программист полиглот как Зачастую у тебя бывает чувство «ммм… это увлекательно, это работает по-различному в других языках?» Что-нибудь приходит в голову?

JS: Замыкания. Когда вы ссылаетесь на внешнюю переменную из замыкания, что на самом деле это обозначает? Различные языки имеют различные ответы… В языке C# результат на данный вопрос менялся с течением времени (если вы захватите переменную цикла в foreach в C# 2.0 — 4.0 то вы в финальном выводе будете захватывать одну и ту же переменную для всякого значения в последовательности; в C# 5.0 будет захватываться новая переменная на всякой итерации).

DNC: Возвратимся к твоей любви к C#, какую одну функцию ты неизменно хотел но которая никогда не будет реализована либо если бы ты мог добавить «исключительную» функцию в C#, что это было бы?

JS: Я бы хотел видеть огромнее поддержки неизменяемым типам в той либо другой форме. Существует много мест, где она может оказаться пригодной. К примеру, я люблю поведение неизвестных типов — легко неизменяемые классы которые переопределяют способы Equals, GetHashCode и ToString пригодным методом, а так же разрешают давать надобные имена их свойствам. Если бы мы могли делать то же самое для обыкновенных классов так же легко! Создание «обыкновенного» класса, тот, что содержит несколько свойств, имеет конструктор принимающий значения и переопределяет разные способы делает код немножко boiler-plate (Boiler-plate code — так называют повторяющиеся ломтики программного кода, которые с небольшими изменениями воспроизводятся много раз), исключительно если вы хотите сделать вправду readonly переменные, а не имеющие свойства с private set-ером.

Помимо того, я бы хотел видеть огромнее поддержки для создания неизменяемых типов — инициализаторы объектов и коллекций отличны, но работают только для изменяемых типов. Вы можете применять паттерн строитель, но это не дюже прекрасно. Я сомневаюсь будет ли добавление функциональности связанной с паттерном строитель увлекательным дополнением к языку. По крайней мере именованные доводы и параметры по умолчанию дают альтернативную функциональность. Безусловно, эти идеи о неизменяемости на поверхностном ярусе. Глубокая неизменяемость трудна, но даёт крупные превосходства. Я знаю команда C# знают об этой пользе — если они сумеют придумать результативное решение то это будет восхитительно.

DNC: C# начинал как статически типизированный язык, впрочем принял много динамических черт. Есть что-нибудь, что дозволено было бы добавить в C#, что было бы новаторским либо это будет эволюция для чего-то присутствующего?

JS: Самое увлекательное во каждому этом заключается в том, что многие функции которые первоначально возникли в динамических языках на самом деле не являются динамическими. LINQ — всецело статически типизированный, но генераторы списков возникли в Python-e до этого. Так же «var» делает C# схожем на динамический язык, но без потери типобезопастности. Безусловно тип «dynamic» добавленный в C# 4.0 вовсе другое дело.

Я думаю новая функциональность async/await добавленная в C# 5.0 (и безусловно VB) изменит игру.

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

DNC: Помимо неизменяемости, которая, кажется изменилась только в поддержке ReadOnlyCollections в C# 5.0, что еще находится в списке твоих пожеланий для C# 6.0?

JS: Это все, что я мог предложить, я уверен у команды C# есть что-то значительно больше восхитительное на уме. Я теснее говорил об усовершенствованной поддержки неизменяемых типов, так же я бы хотел увидеть усовершенствованную поддержку кортежей способных сделать определенный код гораздо проще, но я так же считаю значимым, Дабы C# избежал засорение непотребной функциональностью. Команда разработчиков должна удерживать дюже высоко планку для новых функций, только так они могут рассчитывать на то, что разработчики узнают о ней со временем. Мне посчастливилось узнать C# начиная с версии 1.0, но можете ли вы представить начать его постижение с C# 5.0? Как много времени вам понадобится, Дабы выучить каждый язык, включая самые последние добавленные функции? (Я намерено держусь подальше от небезопасного кода, реально я вырезал целый раздел из познания языка, верю он мне никогда не потребуется).

DNC: Расскажи нашим читателям огромнее о плане Protobuf (портированном на .NET). Помимо плана Protobuf есть ли у тебя сверх тайные планы над которыми ты трудишься?

JS: Protocol Buffers применяется для представления структурированных данных в Google. Это довольно легкой язык для изложения конструкции, а так же для особенно результативного представления для хранения и передачи. Это платформо-самостоятельный формат, тот, что видимо будет вам пригоден если у платформы которую вы используете есть помощь соответствующей библиотеки. Google сделал план Protocol Buffers открытым примерно сразу, позже того как я к нему присоединился и я решил портировать его на .NET. Моя версия находится приблизительно на ровне с Java и C версиями, которые предоставляет Google, но есть и другие порты. В частности, я знаю, Marc Gravell проделал увлекательную работу в его версии Protobuf для .NET, которая использует немножко иной подход.

Теперь я немного тружусь над Protocol Buffers — множество моего open source кодинга я провожу над NodaTime, тот, что начинал как порт с JodaTime date/time библиотеки для Java, но завершил, тем что стал портом «движка» JodaTime, но с достаточно разным API поверх него. Это подлинно отличный план для постижения дизайна API.

DNC: Пожалуйста задай нашим читателям 3 увлекательных вопроса о C#.

JS: ОК! Несколько вопросов разной трудности:

Вопрос 1: Вызов какого конструктора вы можете применять, Дабы данный код распечатал True (в реализации .NET от Microsoft)

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: Применяя локальную переменную, как вы можете обронить данный код во 2-ой строчке?

string text = x.ToString(); // No exception
Type type = x.GetType(); // Bang!

DNC: Можете предпочесть одну либо две увлекательных бесед на StackOverflow? (Лично я люблю читать факты о Джоне Ските :) )

JS: Да мне тоже нравится страница фактов о Джоне Ските. Как я теснее говорил это не вовсе все обо мне, я легко комфортное имя, Дабы повесить его на шутку. Посты, которые мне нравятся — это те, в которых я узнаю что-то новое о C# либо те которые дали причина написать подлинно ужасающий код — как правило совместно с комментарием — «это жутко, не используйте его в реальной жизни». Мне было дюже славно, когда Эрик Липперт добавил комментарий к одному из таких постов — «это лучшее злоупотребление C#, которое я когда-либо видел». Одно из превосходств быть C# разработчиком-любителем заключается в том, что я могу писать код на подобие этого без каких-либо последствий.

DNC: Если начинающий/молодой разработчик тяготится быть схожим на Джона Скита — экстраординарного программиста с чего им начинать? Допустимо ли сделать «большую копию» Джона Скита по программированию?

JS: Начнем с того, что планку нужно удерживать гораздо выше! Сплетни о моей компетенции крепко преувеличены, как вы не раз слышали если говорили с моими коллегами. Я прочитал спецификацию C# больше детально, чем многие люди, и у меня есть дар намеренного злоупотребления вероятностями языка и мои навыки общения довольно классны, но невзирая на это я не эксперт. У меня есть твердое суждение по поводу API и дизайна языка, но попросите меня написать целое приложение, и я окажусь беззащитным.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB