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

Когда гаснет звезда: интервью с Джимом Вейрихом

Anna | 20.06.2014 | нет комментариев

От переводчика: Джим Вейрих — мифическая фигура в Ruby-сообществе. К сожалению, он, как и все мы, бренен. Не так давным-давно он оставил нас. Данный перевод — подать уважения к этому человеку, тот, что немножко изменил мир.
Я наслышан о Джиме довольно давным-давно: чай он — автор утилиты rake, ставшей реально эталоном де-факто среди рубистов. К моей огромный удаче, я был в числе слушателей его выступления на GoRuCo 2012, на котором было рассказано о продвинутых вероятностях rake. Помню, как меня поразила та ловкость и легкость, с которой Джим говорил на трудные темы. Позднее, в том же году на конференции RubyConf я отслеживал еще одно его восхитительное выступление, в котором объяснялись некоторые базовые тезисы Лямбда-исчисления. Джим не только доступно объяснил эту не самую примитивную тему, но также не утратил своих слушателей по дороге.

Думаю, сейчас вы понимаете, отчего я был так рад взять у Джима это интервью, чай это неповторимая вероятность узнать о нем чуточку огромнее и чему-то обучиться. Нам также удалось побеседовать о начале его пути в мире разработке, о его первых шагах в Руби, о функциональном программировании, модели потоков в Руби и даже о его фреймворке для тестов: RSpec-Given). Так что открывайте это интервью, не поленитесь узнать об одном из самых передовых и харизматичных разработчиков!


Короткое резюме программиста

Как ты стал разработчиком? По каким причинам ты предпочел эту профессию? 

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

А что обозначает сокращение BCD?

BCD — это «Binary Coded Decimal», система, в которой все числа хранятся в десятичной системе счисления (в различие от обычной двоичной).

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

Не томи, что там была написано?

Ну, что-то как бы:

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

Позже этого я и подумал, что программирование — это здорово, но такая работа… Нет уж, увольте!

Во время моей учебы в колледже наш референт порекомендовал мне: «Отчего бы тебе не записаться на курс ‘Фортран для начинающих’? Тебе может понравиться». Когда я пришел на первое занятие, лектор подошел к доске и принялся писать код, по ходу его поясняя. До сих пор помню наименование первой функции, которую он написал — member. Я слушал лекцию и внезапно меня осенило: «Это какой-то слишком необычный диалект Фортрана. Слишком много скобочек!». О да, это был Лисп! Как оказалось, я попал на 1-й и исключительный курс Дэна Фридмена, автора книги Little Lisper.

Ну, а как же зловещее изложение программиста из брошюрки? 

Ха, программирование оказалось крайне общественной деятельностью. На сегодняшний день, даже если трудишься в одиночку, то неизменно дозволено пообщаться с другими людьми посредством Твиттера, IRC, issues на гитхабе, либо почтовых рассылок… Мы огромнее не одинокие волки, какими нас описывали в 1970х.

Радостное открытие

Как ты пришел к Руби?

Это было в 2000 году, если мне изменяет память. Я тогда писал на C и Java, а также крайне пристойно на Perl (ну, ты знаешь, мелкие скрипты для уменьшения каждодневной рутины). И Перл, к сожалению, через некоторое время начал меня расстраивать: он отменно подходил для стремительных хаков, но и только, от того что на нем трудно писать прекрасные абстракции. Вот, к примеру, мне необходим список — пожалуйста, в Перле это раз плюнуть, а вот когда теснее нужен список списков — то все, язык начинает вести себя неуклюже.

И вот я принялся искать новейший, подходящий лично мне язык. Хотелось чего-то больше колоритного, разрешавшего бы энергичнее применять абстракции. А от того что я любил объектно-ориентированное программирование, то и язык хотелось соответствующий. Я дюже, дюже наблюдательно постигал Python и сделал как минимум 3 подхода к нему. Но, ты знаешь, не было в голове этакого «Бам!». Следственно через некоторое время я остановил свои подвижки в Питоне, от того что он так и не стал мне близок.

Где-то во время моей 3 попытки исследовать Питон мне пришло письмо от Дейва Томаса, в котором он написал: «Я здесь обнаружил маленький язык под наименованием Руби и мне он дюже понравился, также он может прийтись по душе и тебе.» Я тогда завершил читать книжку The Progmatic Programmer и решил, что если уж сам Дейв что-то рекомендует, то на это определенно стоит как минимум взглянуть. Я скачал Руби, поигрался с ним дословно несколько минут и внезапно понял: «Ну вот же оно! Это именно тот язык, что я искал!». Через 3 дня я перестал писать на Perl и всецело перешел на Руби.

Что за версия Ruby это была?

Это был Руби 1.6 (от того что на дворе тогда было лето 2000).

Чем именно тебя так зацепил Руби?

Он делал все таким же образом как и Перл, но только в объектно-ориентированной повадке. Помню, я тогда думал: «Ну хорошо, эту задачку я бы написал на Perl, но если бы у меня были объекты, то я бы решил задачу теснее вот таким методом». Позже этого я садился за Руби, и мое решение, построенное на объектах легко работало! Безусловно, при этом я мог применять стремительные (и чумазые) трюки, аналогично тем, что дозволял делать Перл, но через некоторое время я нашел, что у Руби есть легко великолепные абстракции и сам язык прогрессировал дюже верно. Я был легко радостен, что встретил его.

Функционален ли Руби?

Ну что ж, Руби — объектно-ориентированный язык. Но является ли он при этом функциональным? И что вообще слово «функциональный» значит?

Это отличный вопрос, на самом деле. Сегодня функциональным языкам уделяют повышенное внимание, вот к примеру, сегодня вечером у меня будет встреча с программистами на функциональных языках в городе Cincinnati. Моя жена в результат на это решение сказала: «Ну хорошо, а завтра ты встречаешься с примитивными бренными разработчиками?».

Вообще, существует 2 требования, Дабы сделать язык функциональным, 1-й из которых — это манипуляция функциями в качестве объектов первого класса: передача функций из одного места в другое, связывание их с переменными, применение замыканий для создания новых функций и так дальше. Руби удовлетворяет первому требованию: у нас есть лябды и замыкания, мы можем объединять их с переменными и даже создавать динамически новые функции. Так что, если глядеть с этой стороны, то Руби — это дюже даже функциональный язык.

Но есть и второе требование! Оно и делает функциональные языки такими увлекательными. Оно заключается в недопустимости метаморфозы состояния сущностей. Руби не удовлетворяет данному требованию, от того что в нем непрерывно происходят метаморфозы состояний объектов!

Функциональное программирование увлекательно своей реализацией многопоточности. Одна из значимых задач в многопоточном программировании это состояние гонки, когда у вас есть, к примеру, 2 потока работающих с одними и теми же данными. При этой гонке неведомо, кто победит. К примеру, увеличение счетчика. Есть 2 потока, 1-й из которых считывает нынешнее значение, увеличивает его в регистре памяти и после этого кладет обратно. В это время 2-й поток считывает, увеличивает значение и записывает его. Если(и только если), они будут чередоваться в суровом порядке друг за ином и мы начнем с числа 10, то дальше будут 11, 12 и так дальше. Необходимо быть дюже, дюже осмотрительным, когда у потоков разделяемый источник может быть изменен.

Для решения этой задачи есть 2 метода: не применять разделяемый источник, либо не изменять данный самый источник. Функциональное программирование использует 2-й подход: данные не изменяются, а только создаются. При таком подходе многопоточное программирование становится приметно проще. Я думаю, что в нашем технологичном обn Backus. Это одна из первых публикаций, которую он назвал «ML», то есть функциональный язык программирования. ML стал основанием для таких языков как Haskell и OCalm.

Еще одно великолепное изыскание, которым я бы хотел поделиться, это Reflections on Trusting Trust от Ken Thompson. Он описал хак для компилятора, с поддержкой которого дозволено добавить баг в Unix, которого нет в начальном коде.

Выступления

У тебя природный дар: ты умеешь объяснить дюже трудные темы. Как у тебя это получается?

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

При подготовке к выступлению я люблю пользоваться белой доской с маркером либо утилиту, подобно Omnigraffle для Mac OS. Я начинаю с маленьких прямоугольников, внутри которых пишется идея. Позже этого я соединяю соответствующие идеи линиями. К примеру, если выступление связано с Руби, то я выписываю все те вещи, о которых мне бы хотелось побеседовать. Позже этого, я соединяю их связями, ну ты знаешь, подобно «mind mapping». У меня, правда, получается направленный граф.

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

То есть, это что-то как бы технического писателя?

Да, мне нравится такое изложение!

Преобразить такие сложные темы как Лямбда-исчисление в увлекательную историю — это искусство. Думаю, у многих бы вывалились глаза при попытке почитать подлинные научные работы на эту тему, написанные 80 лет назад.

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

Rspec-given

Планируешь ли ты еще выступать?

В Январе я собираюсь рассказать о своем детище: фреймворке Given/When/Then. Это мое любимое дитя: всякий раз, когда я пишу тесты, то использую именно мой фреймворк, от того что он дюже изящно выражает мои мысли. Я расскажу о нем на CodeMash.

Имеет ли данный фреймворк что-то всеобщее с философией BDD? А с Cucumber? Либо тот факт, что ты используешь те самые 3 ключевых слова — легко совпадение?

Это легко совпадение, мой фреймворк не связан с Cucumber, правда мне он дюже нравится своим подходом с применением Given/When/Then.

Применяя Rspec-Given вы легко указываете: вот это дано, вот код, тот, что мы тестим и вот это должно быть правдивой, чтобы тесты прошли. По моему, это чудесный метод для написания тестов. Я применял схожий подход, даже когда писал на Test::Unit: даны данные, вот код тестов, а вот и сами тесты. Но я пытался обнаружить больше изысканное решение, от того что ни Test::Unit, ни Rspec не дают необходимых способов.

Около 2-3 лет назад я думал над этой задачей, набрасав свои идеи на бумагу. В то время я был на конференции Ruby Hoedown в городе Nashville. Я передал данный клочок бумаги разработчиками по соседству, чтобы собрать отзывы и суждения. И здесь Joe O’Brien повернулся ко мне и сказал: «Ты же не собираешь писать следующий фреймворк для тестов?».

Я игрался со своими идеями на протяжении года-2-х, пока не наткнулся на дюже примитивную реализацию в Rspec, восхитительно работавшей. Это резко, что Rspec владеет довольной гибкостью и абстрактностью для реализации того, что мне хотелось. В результате была написана крошечная библиотека поверх Rspec. Таким образом, дозволено применять познания, полученные при написании на Rspec с добавлением большей ясности к тестам.

От переводчика: Пожалуйста, уведомляйте о обнаруженных ошибках с поддержкой личных сообщений, они будут оперативно поправлены.

Ссылки:

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