Сущность метапрограммного интервью: Мета-программное интервью. Основные вопросы Мета-программного интервью.

Метапрограммы вопросы. Оценка метапрограммы. Пример.

Мы привыкли с вами оценивать содержание речи собеседника. Когда слушаем текст собеседника, мы обращаем внимание на смысл этого текста, его логичность и уместность.
Для оценки метапрограмм необходимо оценивать не содержание, а форму речи, ее структуру. Это немного непривычно, нужна тренировка.
Рекомендую сначала тренироваться в обычной жизни. Пробуйте подмечать структуру фраз в обычных беседах с окружающими вас людьми. А затем применяйте оценку метапрограмм на собеседовании.

Как работать с метапрограммами?

Не пытайтесь оценивать на собеседовании кандидата по всем метапрограммам. Вы его замучите и сами запутаетесь.
Выберите несколько метапрограмм, по которым будете проводить оценку. Подготовьте вопросы. Для удобства эти вопросы можно добавить отдельным блоком в бланк экспресс-оценки.
Суть оценки метапрограмм:

  • задать правильно сформулированные вопросы,
  • оценить формулировку ответа.

Формулировать вопросы необходимо в формате проективных вопросов (подробнее в статье «Проективные вопросы»).
Ответ может содержать формулировки нескольких метапрограмм. Посчитайте их соотношение, чтобы понять какая преобладает.

Примеры вопросов и ответов для оценки метапрограмм на должность менеджера по продажам

1. Тип референции

Вопросы
1. Вы считаете себя успешным менеджером по продажам? Почему?
2. Вы умеете легко и быстро адаптироваться в новом коллективе? Почему вы так думаете?
3. Как вы определяете, успешно ли идут переговоры?
4. Вы легко устанавливаете контакт во время холодного звонка? Почему вы так считаете?

5. У вас назначено 2 встречи. Успеваете только на одну. Каким образом вы решаете какого клиента выбрать? Почему именно его?
Ответы
Внутренняя – формулировки «Я сам», «Я думаю», «Я решил», «Я считаю».
Внешняя – «ссылка на нормы, правила», «мои коллеги говорят», «мой руководитель считает», «люди думают».
Смешанная – равное количество формулировок с внутренней и внешней референцией.

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

Вопросы
1. Что Вас больше всего привлекает в работе менеджера по продажам?
2. Какой тип клиентов вам нравится больше всего?
3. Опишите идеальный рабочий день.
4. С каким руководителем вы хотели бы работать в идеале?
5. В каком коллективе вы хотели бы работать?
Ответы
Стремление – использует «позитивные формулировки».
Избегание – использует «отрицательные формулировки», с частицей «не»; рассматривает все с негативной стороны.

Вопрос
Ответ
СтремлениеИзбегание
С каким руководителем вы хотели бы работать в идеале?С уравновешенным, умным человеком, который умеет ставить задачи перед командой, мотивировать. Организует работу так, что у всех высокие показатели продаж.Чтобы он не орал по поводу и без. Чтобы не был деспотом и тираном, который не умеет слышать подчиненных.
3. Процесс – Результат

Вопросы
1. Что Вам больше всего нравится в процессе продажи?
2. Что вы вкладываете в понятие «успешный менеджер по продажам»?
3. Что необходимо, чтобы успешно пройти собеседование?
4. Как вы организуете работу с холодными звонками?
5. Расскажите о своей самой удачной сделке.
Ответы
Процесс

– описывает процессы, использует формулирование «как делать». В ответ подробно описывает структуру процесса.
Результат – рассказывает про результаты, использует формулирование «что сделать».

ВопросОтвет
ПроцессРезультат
Как вы организуете работу с холодными звонками?Узнаю есть ли уже готовый сценарий звонка. Если нет необходимо составить правильный сценарий. Чтобы он содержал все блоки, и обход секретаря, и выявление потребностей (перечисляет все составляющие). Составить список потенциальных клиентов. Отсортировать его. Запланировать время для холодных звонков…Нужно составить сценарий звонка. Делаю обзвон по 150 клиентов в день. Необходимо выйти на результат – 1 встреча из 10 звонков.
4. Процедуры – Возможности

Вопросы
1. Вам необходимо написать сценарий холодного звонка. Как вы будете готовиться? Во время холодных звонков вы будете четко следовать заготовленному сценарию?
2. Подобные первому вопросы про – переговоры, презентацию.
3. Каждый день вы едете с работы домой. Вы всегда выбираете один и тот же маршрут или чередуете разные?
4. Вам предложили корпоративный сценарий продаж. Что вы выберете: пользоваться стандартным или разработать новый?
5. Какое ваше самое большое достижение?
6. Вам предложили оплатить ваше обучение с возможностью выбора. Что вы выберете – развитие ваших навыков продаж или изучение новой профессии?
Ответы
Процедуры – будет выбирать типовой, стандартизированный путь; придерживается установленных норм и правил; четко следует инструкции.

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

ВопросОтвет
ПроцедурыВозможности
Вам предложили корпоративный сценарий продаж. Что вы выберете: пользоваться стандартным или разработать новый?Буду использовать ваш корпоративный сценарий продаж.Я хотел бы разработать новый сценарий. Хотя я в работе никогда не иду по сценарию, всегда подстраиваюсь по ситуации.
5. Сходство – Различие

Вопросы
1. Сравните технологию продаж холодного и теплого звонка.
2. Сравните систему продаж B2C и B2B?
3. Сравните продажи по телефону и при личной встрече с клиентом.
4. Сравните продажи дилерам и напрямую клиентам.
5. Сравните организацию работы отдела продаж на своем последнем и предыдущем местах работы.

Ответы
Сходство – в ответах формулирует «что общее», «чем похожи».
Различие – в ответах формулирует «в чем разница», «чем отличается».

ВопросОтвет
СходствоРазличие
Сравните продажи по телефону и при личной встрече с клиентом.И там, и там главное – продать. Одинаково нужно выявить потребности, презентовать товар.В продажах по телефону нет визуального контакта. Отличаются тем, что по телефону – продаем встречу, а на встрече – продаем товар.
6. Одиночка – Командный игрок – Менеджер

Вопросы
1. Расскажите о самом сложном клиенте за свою карьеру. Как вы справились с ситуацией?

2. Какие ваши самые большие достижения в жизни?
3. Расскажите про вашу самую удачную сделку/проект.
4. Как вы поймете, что выполнили свою работу хорошо?
Ответы
Одиночка – говорит только о своих собственных успехах, своей зоне ответственности. Формулировка «Я».
Командный игрок – говорит об общих достижениях. Формулировка «Мы».
Менеджер – говорит о достижениях команды как о личных достижениях. Формулировка «Я убедил», «Я организовал», «Я и команда».

ВопросОтвет
ОдиночкаКомандный игрокМенеджер
Как вы поймете, что выполнили свою работу хорошо?Я получу результат, который запланировал.Руководитель скажет, что эти показатели хорошие и наш отдел справился с задачейЯ увижу реальный результат. И другие будут использовать успешный способ решения задачи, который я внедрил.
7.
Содержание – Окружение

Вопросы
1. Почему вы выбрали работу менеджера по продажам?
2. Как вы выбирали компанию куда отправить свое резюме?
3. Что Вас больше всего привлекает в работе менеджера по продажам?
4. Какой тип клиентов вам нравится больше всего?
5. Опишите идеальный рабочий день.
Ответы
Содержание – в ответах информация о содержании работы, ее составляющих.
Окружение – в ответах присутствует информация о людях.

ВопросОтвет
СодержаниеОкружение
Почему вы выбрали работу менеджера по продажам?Мне нравится ставить цели, выполнять план, добиваться высоких показателей продаж. Нравится анализировать рынок; составлять сценарии продаж, писать коммерческие предложения; разбираться в том, как работают сценарии и продающие тексты.Я очень люблю общение с людьми. На этой работе столько разных интересных личностей встречаешь.
8. Активность – Рефлективность

Вопросы
1. Что вы будете делать в свой первый рабочий день?
2. Ваша задача – вывести на новый рынок наш продукт. Расскажите последовательность действий.
3. Вам необходимо запустить в продажу новый продукт. С чего начнете?
Ответы
Активность – формулировки в ответе указывают на действия – «делаю», «делаем», «пытаюсь», «изучаю».
Рефлективность

– формулирование указывает на анализ – «изучение», «необходимо выполнить, сделать», «мне скажут», «будет сделано, изучено».

ВопросОтвет
АктивностьРефлективность
Что вы будете делать в свой первый рабочий день?Изучу всю необходимую документацию. Составлю план действий, согласую с непосредственным руководителем. Попробую осуществить первые продажи.Необходимо будет поговорить с руководством. В зависимости от того, что мне скажут выполнять. Нужно будет узнать какую документацию изучать, с чего лучше начинать.

Психолингвистика: как услышать метапрограмму кандидата и что с этим делать дальше

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

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

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

Метапрограмма — это ключевой момент в процессе мотивации и принятия решений. Ее можно воспринимать в качестве оценочной шкалы, которая условно имеет два полюса. Это значит, что оказавшись в определенных условиях, человек будет выбирать между двумя диаметрально противоположными вариантами поведения и предпочтет тот, который более соответствует его внутренним показателям «+» и «–».

Какие же существуют метапрограммы и как они проявляются? С помощью анализа речи можно определить тип референции, мотивацию на достижение или избегание, ориентацию на процесс или результат, склонность к работе в одиночестве или в команде, стремление опираться на прошлый опыт или искать новые решения, предрасположенность к активным действиям или к рефлексии и анализу, тяготение к общению с людьми или взаимодействию с техникой…

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

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

Человек с внутренней референцией часто употребляет на интервью местоимение «я», говорит от первого лица и мотивирует решения своим видением ситуации: «я так решил», «я это знаю», «я чувствую». Подчиненный с внутренней референцией оценивает все сквозь призму собственного мнения. Так, например, если ему нравятся результаты работы, а другим — нет, то, по его мнению, это проблема других. Подобные люди часто считают себя авторами самых выдающихся идей, и для них не будут работать такие способы мотивации, как похвала при коллегах, грамоты, награды, фото на доске почета и так далее. Нужно быть внимательным, донося до них обратную связь об их работе и формулируя задачи.

Специалист с внешней референцией при формировании своей точки зрения, напротив, опирается на мнение других, нуждается в мотивации и сопровождении, во внешних стандартах и в субъективной обратной связи по своей работе. Он ориентируется на чужое мнение и в речи подкрепляет свои решения позицией авторитетных для него людей. Такие люди ценны для коллектива, так как бывают хорошими фасилитаторами, они управляемы и слышат коллег. Для них идеален вариант, когда другие люди предоставляют им решения, из которых они выбирают.

Еще одна важная метапрограмма — это стремление/избегание. Она говорит о том, что с большей вероятностью мотивирует человека к действию: желаемый результат или стремление избежать неудачи, провала, наказания. Речевая характеристика выражается в проявлении отрицания.

Чем чаще человек употребляет отрицательные частицы или слова «нормальный, приемлемый», тем больше вероятность, что он ориентирован на избегание. Такой соискатель говорит о сложностях, проблемах, он ориентирован на поиск ошибок или негатива. В работе сотрудники с мотивацией избегания идеально подходят для контролирующих должностей. В управлении для людей избегания более действенными будут порицание или возможность избежать неприятностей. Для них неприемлема завышенная планка целей: они начинают избегать ситуаций, в которых не способны добиться успеха. В отношении людей, у которых избегание проявляется точечно, очень важно не завышать планку целей и по возможности минимизировать критику и наказания: на то, чтобы избавиться от имеющегося недостатка, им потребуется некоторое время.

Люди с мотивацией достижения говорит о возможностях, перспективах и своих желаниях. Они используют позитивную структуру предложения, слова с позитивной коннотацией. Такие специалисты хорошо проявят себя на должностях, где важен количественный результат — продажи, наймы, заключенные сделки. Людей стремления гораздо эффективнее мотивировать различными формами поощрения, а также установкой более высокой планки цели. Руководителю важно помнить о том, что абсолютное стремление часто подразумевает неумение видеть и обходить опасные моменты, так что при управлении таким сотрудником следует больше внимания уделять «подводным камням».

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

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

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

Метапрограмма «одиночка-командный игрок» говорит сама за себя. Кандидат, которому комфортнее работать одному, отразит это в речи, употребляя местоимение «я», иллюстрируя свою историю примерами собственного успеха или результатов. Такой человек любит брать на себя ответственность и не склонен перекладывать работу на других. Специалист же, который ориентирован на коллективную работу, чаще говорит «мы», рассказывает о командных результатах. В работе он больше заинтересован в результате команды, легко распределяет задачи и ответственность, умеет делегировать и помогать другим.

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

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

Марина Хомич

HR-tv

Метамодель НЛП — Замечание убеждений, ограничивающих вас

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

Вот Ян Принс представляет метамодель из нашего портативного тренинга для практиков

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

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

Яркий пример — внутренний голос некоторых людей (конечно, не вас), который говорит: «Вы не можете этого сделать!» Если этот комментарий о полете на Луну на тонких крыльях, то да, он точен. Однако в других случаях может быть действительно свободным спросить этот голос, человека или часть вас «согласно кому?» или «что произойдет, если я это сделаю?»

Например, у меня был друг с чудесным голосом, у которого всегда были ужасные времена, когда ему приходилось проводить какую-либо презентацию. Для продавца это было настоящим ограничением. После разговора о таком опыте он заметил такой голос, говорящий: «Ты не можешь говорить публично». Он осторожно спросил: «Ну и дела, я не помню… кто сказал, что я не могу?» Он вспомнил случай в начальной школе, когда он был довольно энергичным ребенком. Один учитель, в частности, постоянно говорил ему: «Перестань болтать обо всех!»

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

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

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

Модальные операторы необходимости и невозможности:

Необходимость: «должен», «должен», «следует», «требуется» и т. д.

Невозможность: «не может», «невозможно» и т. д.

Ответ на слова необходимости:

«Что произойдет, если вы сделаете/не сделаете?» Это позволяет получить информацию о прогнозируемых последствиях.

Ответы на слова невозможности:

  •   «Что произошло бы, если бы вы могли?» Это имеет тенденцию проецировать человека в будущие возможности. — Что было бы, если бы ты мог? Это обеспечивает доступ к будущему желаемому состоянию.
  • «Что вас останавливает?» получает информацию о прошлых или настоящих препятствиях или вторичной выгоде.

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

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

Если вы хотите еще больше углубиться в метамодель, книга «Magic DeMystified» — отличный источник. И, естественно, вы можете получить всестороннее обучение с помощью нашего курса «Взломай свой мозг с помощью НЛП».

Интервью с Доном Саймом

Как упоминалось в предыдущем посте, я имел большое удовольствие провести день в Microsoft Research в Кембридже на прошлой неделе. Мой хозяин, Дон Сайм, очень заботился обо мне и был очень щедр на свое время и знания.

Немного предыстории того, почему я решил попросить о встрече с Доном: Дон — человек, стоящий за F#, новым языком программирования, который за последний год или около того превратился из исследовательского проекта в полноценный язык .NET. с полной поддержкой в ​​средствах разработки Microsoft. Ожидайте увидеть возможность создавать проекты F# (так же, как сегодня вы можете это делать с VB и C#) в Visual Studio в ближайших выпусках. Я не видел официального объявления о том, что F# будет частью выпуска Visual Studio 2010, но я должен верить, что это план. (Для ясности: это не вопрос, который я задавал Дону, это чистая спекуляция с моей стороны.)

Раньше я называл Дона и «отцом F#», и «мистером F#», но, учитывая его скромность, он предпочитает титул «дизайнер» или «исполнитель» F#. Ясно одно: Дон был значительной движущей силой F# и в значительной степени руководил как его разработкой, так и его переходом на полную поддержку со стороны Microsoft.

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

Рискуя повториться, я еще раз кратко пройдусь по некоторым основам…

F# — это прежде всего функциональный язык программирования, что означает, что его синтаксис сильно отличается от языков, с которыми в настоящее время работает большинство из нас. самый знакомый. В вашем коде вы определяете ряд значений с помощью вездесущего оператора «let», а значения, которые принимают аргументы, являются функциями. Каждое определяемое вами значение основано на входных данных или значениях, которые вы назначили ранее. И последнее значение, указанное в функции, является ее выходом. Это очень упрощенная точка зрения: в то время как код C# или VB, который следует этому шаблону, в значительной степени можно написать, возможности функциональных языков означают, что определенные типы операций намного проще выполнять: как Дон упоминает в интервью, F# очень хорош для например, работа с большими наборами данных.

Вы также можете использовать F# для написания чистого кода . Чистый код, с функциональной точки зрения, не содержит побочных эффектов (которые включают, например, запись в файл или вывод на экран), и не изменяет изменяемое состояние (т. е. он не содержит переменных: вы присваиваете значения символам, но эти значения не меняются, они неизменны ). Чистый код имеет определенные преимущества в мире, в котором мы живем сегодня: с крахом закона Мура (или, говоря более широко, с его переходом к производителям чипов, поставляющим несколько ядер, а не пытаясь продолжать увеличивать тактовую частоту) и с переходом По отношению к облачным вычислениям чистый код дает много преимуществ, поскольку его гораздо проще распараллелить. Еще одной полезной особенностью чистого кода является его потенциал для запоминания: чистая функция будет при одних и тех же входных данных всегда генерировать один и тот же результат, и, поскольку у нее нет побочных эффектов или состояния, мы не получаем никакой выгоды от вызова функцию несколько раз. Что в основном означает, что мы можем хранить результаты и использовать их напрямую, а не повторять избыточные (и, возможно, дорогостоящие) вызовы функций.

Чисто функциональное программирование по-прежнему используется в основном в академических кругах: реальные реализации, как правило, время от времени должны выполнять побочные эффекты (классическая шутка заключается в том, что вы можете сказать, что чисто функциональные программы работают только потому, что коробка нагревается:- ), поэтому Дон отстаивал — на мой взгляд, очень мудро — разработку прагматичного функционального языка , который, хотя и способен создавать чистый код, не ограничивает вас в сохранении состояния и создании побочных эффектов. В первую очередь F# — помимо OCaml, прагматичного языка, на котором он основан, — это его способность работать поверх Common Language Runtime (CLR) и взаимодействовать как с компонентами .NET, так и с кодом, написанным на других .NET. языки.

Так почему я считаю, что это важно для нашей работы? Функциональное программирование действительно хорошо подходит для научного программирования в целом, и потребность в нем возрастает по мере того, как инженерный анализ и моделирование все теснее интегрируются в процесс проектирования. И у нас также есть все более полноценный набор инструментов на основе .NET, предоставляемый нашими различными продуктами, что означает, что код F # может быть интегрирован с — например. используется для анализа и модификации моделей почти во всех продуктах Autodesk для проектирования на базе Windows, будь то AutoCAD, Revit, Inventor или что-то еще.

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

В качестве недавнего дополнительного материала по этой теме я настоятельно рекомендую эти два видео, снятых на прошлой неделе на конференции JAOO в Дании. Первый — это основной доклад Андерса Хейлсберга, а второй — интервью с Андерсом Хейлсбергом и Гаем Стилом на канале MSDN 9. .

А теперь интервью с Доном.

[Типографские соглашения: мои собственные слова выделены жирным шрифтом , слова Дона выделены обычным текстом. Я приложил редакционные комментарии [жирным курсивом в квадратных скобках] .]

Откуда взялась идея F#?

Основная предпосылка F# — убедиться, что типизированное функциональное программирование имеет место на платформе .NET. Это парадигма с огромным количеством возможностей, о чем уже давно знают пользователи таких языков, как Miranda, OCaml и Haskell. На меня также сильно повлияло то, что Intel хорошо использует типизированный функциональный язык (называемый FL) внутри компании. Они используют это при проверке своего оборудования и некоторых конвейерах проектирования.

Зачем использовать OCaml в качестве основы?

Типизированное функциональное программирование — это простые, композиционные высокоуровневые манипуляции с данными с использованием основных ортогональных строительных блоков. OCaml — отличный пример системы функционального программирования с типизированными данными, оказавший большое влияние на направление работы в этой области. Подход OCaml к разработке языка имеет правильный характер для создания практичного функционального языка, а базовый язык хорошо известен и хорошо протестирован и часто используется в качестве основы для экспериментов. Сам OCaml стал результатом такого рода экспериментов, основанных на системе под названием Caml-Light.

С 1999 по 2003 год мы закладывали основы F#. В 1999 году мы начали проект 7, в рамках которого мы работали с исследовательскими группами по всему миру, чтобы ориентироваться на различные языки в .NET Common Language Runtime (CLR). Проект 7 привел непосредственно к включению .NET Generics в C# 2.0. Следующим логическим шагом была непосредственная реализация языка в стиле OCaml, и разработчики OCaml были очень воодушевлены, когда мы говорили с ними о переносе этого класса языков в пространство .NET. Это привело к ранним версиям F#.

Могут (и делают) ли люди выполнять кросс-компиляцию между F# и OCaml? Это возможно?

На практике кросс-компиляция не так важна: часто мешают различия в библиотеках между .NET и OCaml. Это больше касается перехода и повторного использования методов, а иногда и основных механизмов, таких как пример обработки PDF.

Тем не менее, это возможно, и мы делаем это в нашей группе для некоторых компонентов. Этот метод также используется в коммерческих целях — есть компания, которая создает инструменты для работы с PDF на основе OCaml — отличное применение функционального программирования — они выполняют кросс-компиляцию между F# и OCaml.

Каковы преимущества «функционального мышления» или «мышления FP» для людей, кодирующих на других языках (C++, C#, VB.NET)?

Вы должны посмотреть на проблемный домен, чтобы понять, применима ли FP. Мне нравится характеризовать области, в которых функциональное программирование наиболее применимо, либо как с интенсивным использованием данных , либо как с интенсивным управлением . Программирование AutoCAD является примером работы с интенсивным использованием данных. Символьное программирование также требует больших объемов данных: например. манипулировать PDF как форматом — всасывать его, анализировать, преобразовывать. Параллельное и асинхронное программирование требуют интенсивного управления и хорошо подходят для функционального программирования.

Есть места, где FP не даст вам преимущества. Программировать ядро? Тогда не используйте функциональное программирование. Программирование графического интерфейса или какая-то другая работа, очень ориентированная на презентацию? Тогда может быть неважно, какой язык вы используете: важнее всего инструменты дизайнера.

Первое, что замечают программисты на C# или C++, когда переходят к F#, — это то, как функциональное программирование меняет «программирование в малом»: их удивляет отказ от шаблонного кода и снижение сложности реализации объектов и функций. Следующее, что замечают люди, — это ориентация на неизменность. Я видел, как люди проводили целые доклады о том, как неизменность меняет ваш взгляд на программирование.

Верно и то, что концепции функциональных языков определенно оказывают влияние и на другие языки .NET.

Мне нравится говорить, что почти все, что мы добавили к платформе .NET в отношении языков начиная с версии 1.0, было функциональным программированием. Если мы посмотрим на дополнения к C#: дженерики, добавленные группой функционального программирования, основанные на принципах функционального программирования. Анонимные функции, синтаксис запросов в C# 3.0, метапрограммирование на основе дерева выражений — на все это сильно повлияло функциональное программирование. Даже итераторы C# ближе к функциональному программированию, чем к объектно-ориентированному программированию, что ясно проявляется в версии F# этой языковой функции.

.NET сама по себе также хорошо подходит для функционального программирования. Вы заметите, что в .NET нет действительно глубоких иерархий наследования; он больше ориентирован на делегатов и интерфейсы. Также многие типы являются неизменяемыми — например, System.DateTime. В целом я вижу в этом часть долгой тенденции к интеграции функциональных идей в объектно-ориентированное программирование.

Некоторые функции .NET 2.0 в значительной степени позволили вам реализовать F#, одним из которых являются дженерики. Предвидели ли вы это, реализовали ли вы дженерики, чтобы реализовать F#?

Да, безусловно. Это определенно был фактор. Первая версия F# — самая, самая первая версия — была выпущена в 2003 году, когда мы еще работали над дженериками .NET.

Так что это определенно было частью плана.

Это был план, чтобы убедиться, что мы сможем поддерживать этот класс языков. Мы получили то, что нам нужно, в .NET 2.0.

Кем вы себя считаете пуристом или прагматиком?

Меня никогда раньше об этом не спрашивали. 🙂  Для пуриста я прагматик, для прагматика я, наверное, пурист. Я, наверное, как раз посередине. 🙂

Моя работа определенно заключалась в преодолении разрыва между академически ориентированным миром программирования и промышленностью. Если вы вернетесь в 2004 год, то в наших сводных докладах по дженерикам .NET у нас есть эти слайды, на которых с одной стороны были научные круги, а с другой — промышленность, а между ними огромная пропасть. До Проекта 7 между этими лагерями было очень мало общения, за некоторыми заметными исключениями, такими как работа с дженериками Java. Было очень весело иметь возможность помочь преодолеть этот разрыв.

И у вас есть коллеги из Microsoft Research, которые очень консервативны.

Да, мы делаем все: в самой Microsoft у нас есть все, от ультра-пуристов до ультра-прагматиков.

И у вас все ладится?

Мы все ладим. Это правда. 🙂

Что касается других языков, вы можете определить Haskell как более чистый. Я очень рад поддержке, которую мы получили от исследовательской группы Haskell здесь, в MSR: это был отличный период сотрудничества.

Есть ли компромиссы при разработке прагматичного (по сравнению с чистым) функционального языка?

Да, очень. Было очень интересно послушать на прошлой неделе пользователей на конференции «Коммерческие пользователи функционального программирования» от Говарда Мэнселла из Credit Suisse. Credit Suisse широко использует F# в своей глобальной группе моделирования и анализа. Они описали, почему они используют F#, и это было очень забавно, их описания того, что люди думают о F# [см.0018 этот документ для заметок, которые случайно сделал мой старый профессор во время конференции] .

Они обсудили пару возможных будущих расширений F#, которые они хотели бы увидеть, например, предварительные условия. Что меня заинтересовало, так это то, что они поняли, почему мы не делаем этого, по крайней мере, в F# V1: часть нашей цели с F# состоит в том, чтобы все было просто. Это означает, что команда разработчиков F# сделала несколько преднамеренных ограничений в дизайне F#, чтобы сделать его простым и доступным.

Это важно: когда вы встретите другого программиста F#, он, вероятно, будет использовать одни и те же языковые устройства аналогичным образом. Языки — это не только мощь и выразительность: они также предназначены для совместного использования и согласованности.

С F# у вас есть прагматичная среда разработки, в которой вы можете создавать побочные эффекты по своему усмотрению. Изменчивость не используется по умолчанию, и вы сообщаете, когда переменные изменяются, потому что у вас есть явный оператор для этого… Ожидаете ли вы ситуацию, когда чистота будет проверяться автоматически, а код будет профилирован и развернут соответствующим образом?

Имеется в виду какое-то автоматическое распараллеливание?

Да, на самом деле это то, что я записал в первоначальном вопросе. 🙂

Внедрение чистого подмножества в F# — это не то, что мы будем делать в первой версии F#, но это направление разработки, которое мы будем рассматривать в будущем. Нашим главным приоритетом является гладкое взаимодействие без барьеров. Если вы посмотрите на пример программирования AutoCAD, который вы мне показывали, где вы перешли от данных к объектам AutoCAD: взаимодействие имеет важное значение. Эти объекты AutoCAD не имеют никакой гарантии чистоты, но крайне важно не ставить барьеры на пути создания этих объектов и управления ими.

Что касается распараллеливания, основное внимание в F# V1 уделяется явному распараллеливанию, чтобы дать вам инструменты для управления сложностью явного распараллеливания. Шаблон управления Async.Parallel fork-join, который вы использовали, является одним из примеров этого [Дон имел в виду пример в этого поста ] . Точно так же вы можете зафиксировать суть архитектуры на основе агентов, отправив результаты обратно в поток визуализации. Например, архитектура моделирования.

Автоматическое распараллеливание в конце концов дойдет до промышленности. Мы увидим сочетание технологий компиляции и распараллеливающих движков: база данных, такая как SQL Server, извлекает все виды параллелизма в движке, как это делает веб-сервер, как и графический конвейер. Компиляторы исходного языка могут обрабатывать относительно простые случаи, такие как автоматическое распараллеливание циклов for, интенсивно использующих ЦП, над чистыми объектами. Мы собираемся укротить параллелизм с помощью сочетания методов: ни один из них не станет серебряной пулей для решения проблемы параллелизма.

Чем вас привлекла парадигма функционального программирования?

Моим первым программированием был AppleBasic, потом много разных языков, LOGO был один, так что я был рад увидеть ваш переводчик. Моя первая реальная работа по программированию была связана с PROLOG, где я увидел ценность языка символов высокого уровня в контексте систем поддержки принятия решений для государственных служб. Затем я использовал функциональный язык на постоянной основе в течение 5 лет для символьных манипуляций и задач проверки. Это была просто удивительно мощная парадигма. Итак, мое увлечение функциональным программированием во многом основывалось на опыте. Это отличная парадигма для информационного программирования.

Промышленность тоже начинает соглашаться.

Да, забавно, как все происходит. Для меня ключевым моментом является то, что такие платформы, как .NET, действительно позволяют вам взглянуть на мир на нескольких языках, что открывает возможности повторного использования и использования подходящего инструмента для работы. Сам F# реализован на смеси F#, C# и Visual Basic. Мы можем просто добавить эти компоненты, внести некоторые изменения, и они заработают.

Кроме того, переход к гетерогенной, веб-архитектуре и архитектуре на основе служб также позволяет выбрать правильный инструмент для работы. Таким образом, произошел своего рода сдвиг в роли, которую играют языки.

Вы не увидите, чтобы F# захватил мир в смысле вытеснения C# и VB.NET.

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

Презентация означает разработку пользовательского интерфейса.

Верно. Для многих приложений F# уровень представления использует инструменты конструктора C# и Visual Basic с основными вычислительными и алгоритмическими компонентами в F#. Это не означает, что компоненты F# просто обрабатывают числа и символы — например, они могут обрабатывать асинхронное программирование — но реальная работа дизайнера презентаций, мы очень рады видеть, что это делается с использованием инструментов, которые генерируют, скажем, C# или VB. .

Судя по всему, к F# проявляли интерес в секторе финансовых вычислений. В каких других областях вы ожидаете найти F# привлекательным?

На ум приходят инженерные области. Они связаны с основными приложениями, такими как AutoCAD и ГИС, и традиционно эти приложения не имеют хорошей расширяемости с помощью типизированного функционального языка программирования. Таким образом, F# — это первый случай, когда люди смогут использовать типизированное функциональное программирование в сочетании с этими инструментами.

В более широком смысле мы видим большой интерес со стороны технических областей вычислений, то есть науки, технологии, инженерии, математики. Еще одна область — статистическое машинное обучение. Посмотрите, что делает такая компания, как Google: умные веб-приложения и реклама, основанная на статистической обработке массивных наборов данных. Поначалу не так уж очевидно, зачем веб-рекламная компания нанимает так много программистов, но программирование лежит в основе их бизнеса, и это своего рода программирование, в котором F# превосходит другие. У нас было несколько тематических исследований внутри Microsoft, использующих F# для обработки данных веб-рекламы, и он был чрезвычайно успешным в этой роли. Поэтому, когда я говорю «статистическое машинное обучение», это звучит как какая-то нишевая сфера: но на самом деле на хороших алгоритмах теперь можно строить целые предприятия.

Часто ли F# используется на стороне сервера?

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

Я полагаю, что после того, как F# превзойдет стадию CTP и станет более доступным, его внедрение на стороне клиента будет более широким.

Случаи типа AutoCAD интересны, так как данных больше на клиентской машине. На самом деле, я бы не обязательно классифицировал F# как клиент или сервер: на самом деле речь идет о том, где находятся данные. Например, внутри Microsoft используется F# для анализа списков управления доступом (ACL) на компьютерах во внутренней сети. ACL очищаются процессом системного администратора и анализируются программой F#. Программы F# выполняются в момент объединения данных.

Давайте посмотрим, как F# используется, скажем, в группе количественного финансирования. Код F# начинает свою жизнь как исследование проблемы на клиентском компьютере аналитика в сравнении с локальными наборами данных или текущими рыночными данными, поступающими из какой-либо программной службы. Если алгоритм доберется до производственной системы, он в конечном итоге будет работать как алгоритм оценки на ночных серверах.

Итак, когда вы спрашиваете «где находится код F#?» это весь путь от разработки концепции до фактического исполнения на серверах. Так что это на стороне сервера, но пользователи не думают об этом таким образом: они будут думать о себе как о парнях, занимающихся количественными финансами, которые пишут алгоритм.

Типичное использование F# очень ориентировано на предметную область. Пользователи F# могут быть не так хорошо знакомы с концепциями информатики. Они просто сосредоточатся на своей области, например, на инженерном анализе в AutoCAD или на вероятностном моделировании. Где он работает, не является ключевым фактором: люди, выполняющие развертывание, обычно заботятся о таких вещах.

Что вы чувствовали, когда было принято решение о выпуске F#?

Очень рад. Очень взволнован. Я горжусь коллективным процессом принятия решений внутри Microsoft. Процесс принятия решения о доведении F# до качества продукта был во многом одним из тех, которые лучше всего демонстрируют Microsoft Research. Это также показывает лучшие стороны команды Microsoft: было много открытых дверей, чтобы поговорить с командами разработчиков о наших исследованиях и о том, почему мы их проводим. Мы сделали этот проект, потому что это было отличное исследование, но тот факт, что оно оказалось достаточно ценным, чтобы довести его до качества продукта: это фантастика.

About the Author

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Related Posts