Как я могу объяснить своим родителям, что я изучаю языки программирования?

64

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

Теперь возникает реальный вопрос: как я могу объяснить, что я (хочу) делать людям, не имеющим предварительных знаний ни в области компьютерных наук, ни в смежных областях?

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

У кого-нибудь есть хорошие аналогии с реальным миром? Просвещающие примеры, вызывающие моменты "а-ха"? Должен ли я на самом деле показать короткий и простой фрагмент кода для людей старше 60 лет без опыта работы в области компьютерных наук (или академических навыков)? Если да, какой язык мне использовать? Кто-нибудь здесь сталкивался с подобными проблемами?

effeffe
источник
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
DW
3
Этот вопрос получил понижение и один или несколько флагов закрытия, если я правильно понимаю панель. Пожалуйста, оставьте комментарий, чтобы я мог его улучшить. Хотя я некоторое время скрывался здесь, я впервые активно участвую в работе сайта, и, возможно, я не знаком с некоторыми политиками.
Effeffe
Смежный вопрос .
Рафаэль
1
Я просто не могу понять, почему за этот вопрос проголосовали больше, чем за вопрос, связанный с конкретной проблемой, которая более полезна. Этот вопрос смешной и был смехотворно поддержан. Невероятно!
nbro
2
@nbro Я не понимаю, что смешного в этом вопросе, и я не уверен, как вы решили, что конкретный вопрос «более полезен», чем другой.
февраля

Ответы:

59

Если у вас есть несколько минут, большинство людей знает, как сложить и умножить два трехзначных числа на бумаге. Попросите их сделать это (или признать, что они могли бы, если бы пришлось) и попросить их подтвердить, что они выполняют эту задачу методично: если это число больше 9, то добавьте перенос и так далее. Это описание, которое они только что дали, является примером алгоритма .

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

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

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

Моя цель - сделать так, чтобы человек чувствовал себя немного более осведомленным, чем он, входя в него, испытывая волнение по поводу мира, которого он не знал, но с которым вы теперь познакомили его. Я считаю, что это гораздо более ценно, чем объяснение моих конкретных вопросов исследования.

Лиуве Винхуйзен
источник
27
Сортировка колоды карт также является простым способом ввести понятие алгоритмов.
Morwenn
2
@ Morwenn Это правда! Есть множество алгоритмов, которые мы выполняем в повседневной жизни! Работа с картами является алгоритмической, трафик имеет много алгоритмических аспектов, хотя они основаны на событиях и не являются обязательными, приготовление пищи является алгоритмическим, когда вы делаете это на автопилоте. Причина, по которой мне нравятся дополнения, заключается в том, что все изучали один и тот же алгоритм в начальной школе, тогда как для сортировки списка чисел стратегии людей различаются, и они не методичны: они пытаются найти шаблоны близких, смежных чисел, и не все знают заказать колоду карт в любом случае (червы перед пиками?)
Лиуве Винкхейзен
Лично, когда меня спрашивают о квантовых вычислениях, я склонен полностью избегать физики, но стараюсь дать общее представление (что квантовый компьютер не работает лучше или быстрее, но может просто выполнять вычисления так, что это выходит за рамки обычных компьютеров). Если они спрашивают, что это такое, они, как правило, довольны упрощенным представлением, в основном таковым при обработке SIMD (с линейными ресурсами, достаточными для доступа к экспоненциальному размеру параллельных входных данных), которым, в конце концов, является большинство алгоритмов.
The Vee
Вы можете выйти за рамки только карт; Недавно я обнаружил, что использую вариант быстрой сортировки для сортировки стопки документов, которые мне пришлось организовать, даже не задумываясь об этом, потому что их было слишком много для основной сортировки вставкой.
JAB
@JAB Это потрясающе! Но вы, наверное, уже знаете Quicksort в глубине души. Преимущество объяснения сложения по сравнению с сортировкой состоит в том, что у всех есть один и тот же алгоритм сложения, но ни у какого непрофессионала нет никакого методического алгоритма сортировки. С другой стороны, это может быть преимуществом! Вы можете объяснить различные алгоритмы. Это тот путь, по которому я берусь, когда я разговариваю с кем-то математически настроенным вне cs, и он сталкивается с концепцией разных алгоритмов для одной и той же задачи с разными временными рамками, и почему нижние оценки трудны.
Lieuwe Vinkhuijzen
18

Я бы попробовал что-то вроде этого:

Программисты могут сказать компьютерам, что делать. Для этого им нужно использовать язык программирования. Это язык, который понимают как компьютеры, так и люди. Например, если вы отредактируете документ Word и нажмете клавишу, компьютер покажет нажатую букву. Это потому, что программист написал программу: «Если пользователь нажимает« А », вставьте« А »в документ. Если пользователь нажимает «B», вставьте «B» в документ и так далее. Компьютер просто следует правилам программы, которую написал программист.

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

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

Конечно, поскольку это исследование, я работаю только над небольшим аспектом, а не над всем сразу, но это общая картина того, чего мы пытаемся достичь.

Я использую объяснение в похожем стиле для своей области (языки, специфичные для предметной области), и я могу сообщить, что оно часто помогало мне преодолеть «о, ты ученый-компьютерщик, я никогда не смогу сделать это, что позволило мне уйти и перестать говорить» для вас "вопрос. Похоже, ключом является получение первых нескольких предложений, пока одно не дойдет до примера, к которому другой человек может относиться, например, к документам Word в этом случае. Бонусные баллы за специальный пример для другого человека, например, Excel для бухгалтеров или Powerpoint для боссов или компьютерные игры для геймеров или веб-браузеров или что-то еще.

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

Toxaris
источник
12

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

Для приготовления перги: довести до кипения большую кастрюлю с слегка подсоленной водой. Бросьте перги по одному за раз. Они сделаны, когда они плавают на вершину. Не кипятите слишком долго, иначе они будут сырыми! Удалить с помощью выдолбленной ложки.

Хлоп. Давайте рассмотрим добрый совет бабушки нам. Бросьте их по одному за раз ... так что у них разное время пребывания в банке. Понял. Они сделаны, когда они плавают на вершину . Ну, сколько «они»? Я поймаю каждого по мере его появления? Я жду 80%, чтобы всплыть на вершину, а затем получить их все? Это безумно неточно. Не кипятите слишком долго, иначе они будут сырыми! Как я могу измерить, когда они собираются промокнуть, чтобы они не слишком долго? Если пять всплывают одновременно, смогу ли я получить их все?

И поверь мне, я испортил много перги за мой день. Это серьезная проблема, с которой сталкивался любой повар. Но, несмотря на эти проблемы, которые возникают даже при самом простом анализе, люди все еще могут делать перги, используя тот же самый метод. Но есть ли что-то, что мы можем сделать, чтобы сделать больше партий перогий успешными, а меньше партий перги - неудачными?

Разве не было бы замечательно, если бы кто-то специализировался на создании более надежных рецептов? Кто-то, кто сказал: «Мы можем направить перги, чтобы они выскакивали из воды!» или «мы можем добавить специальный краситель в перги, безопасный для употребления, конечно, который придает им разные оттенки, и мы знаем, что нужно сначала выпустить самые темные, так как они больше всего рискуют стать сырыми». Нам нужен эксперт, который сможет взять этот рецепт и исправить возможные проблемы с ним. Жизнь повара-Perogie по всему миру будет проще, и собакам будет скапливаться меньше мокрых кусочков макаронного картофеля.

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

corsiKa
источник
7

Вот как я бы (попытался) объяснить это моей маме:

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

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

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

Некоторые используются для создания веб-сайтов, другие для создания приложений для ноутбуков (например, Microsoft Word).

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

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

В общем, вот что я изучаю: как разные части языков программирования влияют на производительность труда программиста? Какие части конкретного языка облегчают написание кода для веб-сайта? Почему некоторые языки более популярны, чем другие?

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

Мэтт Холл
источник
7

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

Языки программирования используются для предоставления инструкций для компьютеров. Человеческие языки используются для передачи идей другим людям и для формирования собственных мыслей. Гипотеза Сапир-Уорф гласит, что язык, который вы используете, влияет на вашу мысль. (Степень, в которой гипотеза Сапира-Уорфа верна, обсуждается, но мы можем просто принять ее как правду при обсуждении языков программирования. В противном случае вы могли бы также отказаться от своей докторской степени. 😜)

Существует большое разнообразие человеческих языков, некоторые с особенностями, которые мы считаем экзотическими. Например:

  • Некоторые языки требуют, чтобы вы указывали доказательства в каждом утверждении: связано ли это утверждение с вашим собственным опытом, вашим собственным выводом, слухами, предположениями и т. Д.
  • Некоторые языки образуют огромные слова путем агглютинации; каждое слово может быть сильно изменено, чтобы закодировать много информации о его грамматической роли. Другие языки почти никогда не изменяют слова и полагаются на порядок слов или частицы для выражения этой информации.
  • Языки отличаются по размеру словарного запаса . В некоторых языках есть слова, которые можно переводить только с помощью обводки (например, 엄친아 ). Некоторые языки имеют блестящие выражения, которые настолько хороши, что другие заимствуют их (например, Schadenfreude).
  • Некоторые языки не имеют понятия левый / правый; Вы должны выразить все в терминах север / юг / восток / запад.
  • Некоторые языки не имеют номеров. Языки также различаются по количеству распространенных названий цветов .
  • Языки различаются по своей фонотаксике. Например, скорость слога варьируется: японцы склонны использовать много простых слогов, в то время как китайский медленнее, но кодирует информацию в тонах.
  • Языки различаются по плотности информации . Если вы посмотрите на китайский-английский-французский перевод, вы увидите, что китайская версия очень компактна на бумаге, а французский займет больше места.
  • Некоторые языки, такие как английский, беспорядочные: любой может свободно заимствовать слово из другого языка и переводить его на английский язык. Другие языки, такие как французский, имеют стандартизированный орган, который сопротивляется изменениям. Исландский, например, яростно консервативен по своей природе.

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

  • Если вы пытаетесь тайно общаться по радио, навахо будет хорошим выбором. (Укажите ваш любимый язык «только для записи».)
  • Если вы пытаетесь написать предупреждение будущим поколениям, и надпись должна быть понятной через несколько тысяч лет, вы можете захотеть использовать китайский язык (из-за огромного количества говорящих и стабильности его системы письма) или, возможно, Английский (который сильно изменился за последнее тысячелетие, но очень широко известен). (C и JavaScript, вероятно, будут жить «вечно».)
  • Китайский, имеющий много гомофонов, отлично подходит для наказания . (Поэзия Perl)
  • Возможно, важен нейтралитет, и в этом случае вы можете выбрать эсперанто. (Java разработана, чтобы быть переносимой; C меньше так.)
  • Может быть, вам нужно выразить мысль с полной точностью, и естественного языка не хватит. Вы должны прибегнуть к Ithkuil !
  • Может быть очень трудно переводить между некоторыми языковыми парами (например, арабским-английским ) из-за огромных культурных различий и культурных коннотаций с определенными словами. Точно так же некоторые идеи нелегко выразить на определенных компьютерных языках, потому что концепция просто не существует (например, хвостовая рекурсивность).

В конце концов, все на компьютере переводится на машинный язык, но выбор правильного языка для работы может значительно повлиять на производительность, надежность, производительность и гибкость вашего программного обеспечения. Мы выбираем языки смирительной рубашки, такие как Ada или Java, для «серьезных» проектов, а Ruby или Perl для максимальной гибкости . Для запросов к базе данных SQL является обычным языком; написание собственного кода на C было бы идиотским.

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

200_success
источник
1
Одна из сложностей заключается в том, что некоторые люди никогда не задумывались о своем естественном языке. Таким образом, примеры языка могут быть почти такими же трудными для понимания некоторыми людьми, как и понятие языка программирования. Если вы знаете, что человек (по крайней мере) двуязычен, перспективы, вероятно, лучше ...
TextGeek
@TextGeek Даже на английском языке есть диалекты. Люди спорят о языковых правилах, таких как двойной негатив и окончание предложения предлогом. Язык развивается постоянно, иногда противоречиво. Популярность текстовых сообщений привела к появлению новых сокращений. В американском английском вы можете превратить любое существительное в скандал, добавив суффикс "-gate". Я не думаю, что вы должны быть двуязычными, чтобы ценить языковые инновации и разнообразие.
200_success
3
  • компьютерные языки относятся примерно к человеческим языкам. они используют стандартные / общие / общие слова. Учтите, что существуют тысячи человеческих языков, некоторые из которых более не существуют, другие активны, а их словарный запас и использование постоянно меняются с течением времени. некоторые люди создают новые полезные слова, чтобы выразить понятия, которые раньше не могли быть выражены. Еще один частично совпадающий аспект компьютерного языка и человеческого языка - это грамматика . некоторые языки, например английский, имеют очень сложную грамматику. рассмотрите все различные времена и сложные правила, которые управляют ими. другие языки не имеют такие же времена . другая корреляция с частями речикатегории, например, существительное, глагол, наречие, прилагательное и т. д., эти функции похожи на типы в компьютерных языках. представьте себе создание новых языков с различными частями речевых категорий, которые ранее не рассматривались, или с новыми комбинациями частей речи, которые происходят из разных языков и т. д .; Итак, обратите внимание, что лингвистика имеет связь с информатикой, например, esp в теории хомского языка.

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

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

  • Алгоритмы сортировки - отличная метафора начального уровня в информатике. Можно посмотреть на разные списки инструкций или алгоритм для каждой сортировки. можно узнать, что такое пузырьковая сортировка по сравнению с вставкой, можно использовать колоду карт. Теперь сконцентрируемся на различных наборах инструкций и рассмотрим, что они должны быть написаны на очень точном языке, таком же точном, как математические операторы, который имеет строгий синтаксис и т. д. и имеет основные сходства / структуры: условную логику, циклы, переменные и т. д. и объясните, что искусство этой точной спецификации касается компьютерных языкови что некоторые разные языки могут давать одни и те же алгоритмы, но есть некоторые тонкие стилистические вариации в этих языках, которые изучаются очень глубоко, и т. д.

ВЗН
источник
1
Зачем понижать это? Я думаю, что есть много идей. Можно не согласиться по всем пунктам, но здесь есть много возможностей. +1
effeffe
3

Вы просто говорите: «Я помогаю парням, которые учат компьютеры работать»

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

лал
источник
«Я думаю, что это сработает, если они уже немного разбираются в компьютерах» , и в этом весь смысл: если вы внимательно прочитаете мой ответ, вы увидите, что основная проблема заключается в объяснении того, что я делаю, тем, кто не знает, как на самом деле работает компьютер. ,
effeffe
@effeffe: но они знают, что компьютеры существуют? И они, вероятно, имеют некоторое представление о том, что существуют вещи, называемые «программами», «приложениями» или «приложениями», даже если они никогда не использовали компьютер сознательно. Таким образом, для простоты, программирование (помимо прочего) создает приложение, записывая инструкции, которым может следовать компьютер. Естественно, им потребовалось бы много времени и инструкций, чтобы оценить какие-либо детали программирования или узнать, как их можно улучшить, но если они знают, что компьютеры и программы со временем становятся лучше, они, по крайней мере, немного знают о компьютерах.
Стив Джессоп
3

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

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

Сэр джейн
источник
3

Вот две аналогии, которые вы можете найти полезными:

  • Моя работа чем-то похожа на изучение новых подходов к музыкальной нотации. ( пример ) Хотя преобладающие системы обозначений довольно сложны, важно изучить альтернативы, которые уменьшают время / усилие / ошибки для композитора, для исполнителя или позволяют вещи, которые неуклюжи или невозможно выразить в преобладающей системе, или даже просто продвигать различные типы мышления и таким образом приводить к новым композициям. (Это позволяет легко понять, что одна из проблем заключается в том, чтобы убедить людей принять новый материал.)

  • Я помогаю разрабатывать лучшие инструменты для людей в моей отрасли. Точно так же, как людям в обрабатывающей промышленности помогают такие инновации, как аккумуляторные дрели, лазерные резаки и 3D-принтеры (ни один из которых не существовал 60 лет назад), людям в индустрии разработки программного обеспечения помогают более мощные, более точные, более надежные или простые в использовании языки программирования и их особенности.

Artelius
источник
2

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

Я пытаюсь сделать компьютеры и их приложения дешевле, проще в использовании и безопаснее.

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

Языки - это путь вниз по компьютерной лестнице. Люди, которых вы пытаетесь объяснить, скорее всего, не знают, что такое алгоритм , тем более что существуют разные способы представления указанного алгоритма, которые более или менее полезны. Вы можете объяснить все что угодно, если будете действовать достаточно осторожно, но будьте готовы пройти через много слоев, если вы хотите объяснить что-то столь же «глубокое», как «язык программирования RnD». Это помогает, если люди, которых вы объясняете, уже хорошо разбираются в математике, но это примерно так же редко, как знание компьютера :)

Полегче на аналогиях. Они звучат так, как будто помогают, но по моему опыту они обычно добавляют путаницы, даже если вы думаете, что они очень помогают. Языки программирования вроде как адвокат говорит ... но это не очень полезно для людей , которые не уже понимают , как программирования и адвокатские, на самом деле. Если вам действительно нужна дополнительная помощь, примеры работают достаточно хорошо - но вам нужно согласовать их с человеком, которому вы объясняете (и что именно вы исследуете)

Вы знаете, как вы не можете разделить на ноль? Я пытаюсь сделать так, чтобы компьютеры никогда не пытались делить на ноль, чтобы они не зависали, когда кто-то совершал ошибку.

Luaan
источник
▲ за предложение поэтапного и щадящего подхода.
PJTraill
1

Я считаю, что лучшие аналогии специально созданы для человека, с которым вы разговариваете. Они художник? Обсудите, что то, что вы делаете, является эквивалентом изучения теории о том, как делать лучшие кисти, только этой области всего 60 лет вместо 600! Наездники? Сравните это с разработкой конкретных подков на протяжении многих лет.

Если они действительно хотят лучше понять, мой любимый способ объяснить это - поговорить о заполнении налоговых форм и инструкциях в каждой строке. Я обнаружил, что большинство людей старше 20 лет имеют некоторый опыт работы с IRS Form 1040, и те поля, которые вы заполняете, очень хорошо соответствуют разговорам о назначении переменных. Затем я отмечаю, что программное обеспечение делает примерно 2 миллиарда из них в минуту (вымышленное число, но оно все понимает). Если вы изучаете компьютерные языки, людям легко понять, почему на самом деле важны лучшие инструкции =)

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

Я часто говорю о встроенных системах, поэтому иногда я объединяю аналогию с Form 1040 с роботом, готовящим буханку хлеба (или 500). Обычно это работает хорошо, хотя по какой-то причине переход от налоговых форм IRS к созданию чего-то, что оставляет приятный вкус во рту, для некоторых людей является действительно сложным процессом.

Корт Аммон
источник
1

У твоих родителей какой-то компьютер. Вероятно, не один, а много. У них может быть настольный компьютер или ноутбук, или телефон, или iPad. Если нет, то у них есть стиральная машина или видеозапись, DVD-плеер или что-то с компьютером внутри.

Если они этого не делают, вы говорите: «Извините, но вам удалось жить полностью без компьютеров. Поэтому я не могу объяснить вам, что я делаю. Но мир меняется. Вам просто нужно поверить мне в это». Я знаю, что я делаю. "

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

gnasher729
источник
-1

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

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

Затем вы можете использовать пример «Я смотрю на то, как разные рецепты для вязания, вязания крючком, Nålebinding и тому подобного» и обучения X (где вам нужно найти аналогию для того, что вы на самом деле делаете ).

Турбьерн Равн Андерсен
источник
Аскер не изучает программирование. Они изучают дизайн языков программирования.
Дэвид Ричерби
@DavidRicherby Вот почему я предложил использовать пример OP, который рассматривает, как рецепты выглядят для разных видов рукоделия. Видимо, они тоже очень разные.
Торбьерн Равн Андерсен
-1

Это магия!

Когда люди без технической подготовки вообще спрашивают, что значит писать программы / программы / заниматься разработкой программного обеспечения, я просто говорю им, что это на самом деле: магия. Маги вводят заклинания на эзотерическом языке для выполнения определенных задач, машут палочками, и происходит что-то волшебное. Я произношу определенные заклинания на эзотерическом языке, покачиваю мышью, и происходит что-то волшебное (насколько они касаются).

Если они не убеждены, я попросил их включить свой смартфон и сказать мне, как что-нибудь на нем действительно работает. Они обычно говорят: «Я не знаю, просто так. Я нажимаю кнопки, и все происходит». Затем я говорю им: «Да, именно так, но я знаю, что на самом деле происходит, и это в основном то же самое, что Гарри Поттер машет своей палочкой и говорит:« Сосредоточиться покус »« Для всех намерений и целей, для мирянина, я думаю это вполне законное объяснение.

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

Epic Fail

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

Мертвые концы

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

Газонокосилка человек
источник
1
Я не понимаю, как это связано с вопросом. В частности, вопрос заключается в том, как объяснить теорию типов мирянам, а теория типов - математикой.
Дэвид Ричерби
Возможно, к сожалению, возможно, нет, но программирование в целом является закрытой книгой для 99 +% населения мира. Я потратил немало времени, пытаясь заставить непрограммистов понять программирование, но безуспешно. Объяснение тонкостей и деликатесов систем разных типов сродни объяснению физики субатомных частиц тем же людям - их глаза будут блестеть, и они, вероятно, будут вежливы, но они этого не поймут. И это нормально - им НЕ НУЖНО это понимать, и, по всей вероятности, они НЕ ЗАБЫВАЮТ, что они этого не понимают. Достаточно того, что МЫ делаем. :-)
Боб Джарвис