В настоящее время я заканчиваю магистратуру в области компьютерных наук. Я заинтересован в языках программирования, особенно в системах типов. Я заинтересовался исследованиями в этой области, и в следующем семестре я начну работу над докторской диссертацией на эту тему.
Теперь возникает реальный вопрос: как я могу объяснить, что я (хочу) делать людям, не имеющим предварительных знаний ни в области компьютерных наук, ни в смежных областях?
Название происходит от того факта, что я даже не могу объяснить, что я делаю своим родителям, друзьям и так далее. Да, я могу сказать, что «весь смысл в том, чтобы помочь разработчикам программного обеспечения писать лучшее программное обеспечение» , но я не думаю, что это действительно полезно: они не знают о «программировании», они не имеют ни малейшего представления о том, что это значит. Такое чувство, будто я говорю, что я автомеханик кому-то из средневековья: они просто не знают, о чем я говорю, не говоря уже о том, как это улучшить.
У кого-нибудь есть хорошие аналогии с реальным миром? Просвещающие примеры, вызывающие моменты "а-ха"? Должен ли я на самом деле показать короткий и простой фрагмент кода для людей старше 60 лет без опыта работы в области компьютерных наук (или академических навыков)? Если да, какой язык мне использовать? Кто-нибудь здесь сталкивался с подобными проблемами?
Ответы:
Если у вас есть несколько минут, большинство людей знает, как сложить и умножить два трехзначных числа на бумаге. Попросите их сделать это (или признать, что они могли бы, если бы пришлось) и попросить их подтвердить, что они выполняют эту задачу методично: если это число больше 9, то добавьте перенос и так далее. Это описание, которое они только что дали, является примером алгоритма .
Это то, как я учу людей алгоритму слова, и по моему опыту это был лучший пример. Затем вы можете объяснить, что можно представить, что есть более сложные задачи, которые должны выполнять компьютеры, и что, следовательно, существует потребность в однозначном языке, чтобы обеспечить компьютер этими алгоритмами. Таким образом, наблюдается рост числа языков программирования, потому что люди выражают свои мысли по-разному, и вы исследуете способы разработки этих языков, чтобы было сложнее совершать ошибки.
Это очень узнаваемая ситуация. Большинство людей не имеют представления о том, что компьютеры, на которых они работают, запускают программы, или что эти программы представляют собой написанный человеком исходный код, или что компьютер может «читать» исходный код, или что вычисления, которые они связывают с арифметикой, - единственное, что компьютеры делать (и перемещение данных, и сеть, может быть).
Я занимаюсь квантовыми вычислениями, поэтому, когда люди спрашивают меня, что я делаю, я не пытаюсь это объяснить. Вместо этого я пытаюсь объяснить, что квантовая физика существует (они обычно слышали о коте Шредингера и вещах, которые находятся в двух местах одновременно), и что из-за этой странной физики возможно более быстрое вычисление.
Моя цель - сделать так, чтобы человек чувствовал себя немного более осведомленным, чем он, входя в него, испытывая волнение по поводу мира, которого он не знал, но с которым вы теперь познакомили его. Я считаю, что это гораздо более ценно, чем объяснение моих конкретных вопросов исследования.
источник
Я бы попробовал что-то вроде этого:
Я использую объяснение в похожем стиле для своей области (языки, специфичные для предметной области), и я могу сообщить, что оно часто помогало мне преодолеть «о, ты ученый-компьютерщик, я никогда не смогу сделать это, что позволило мне уйти и перестать говорить» для вас "вопрос. Похоже, ключом является получение первых нескольких предложений, пока одно не дойдет до примера, к которому другой человек может относиться, например, к документам Word в этом случае. Бонусные баллы за специальный пример для другого человека, например, Excel для бухгалтеров или Powerpoint для боссов или компьютерные игры для геймеров или веб-браузеров или что-то еще.
Обратите внимание, что вам не нужно оставаться на этом поверхностном уровне. Если вы (и другой человек!) Этого хотите, вы можете углубиться в детали того, что именно вы делаете. Например: «В моем текущем проекте я пытаюсь математически доказать, что то, что я изобрел в прошлом году, действительно работает. Это означает, что мне нужно очень тщательно определить, что на самом деле означает программа, и что мое изобретение предсказывает, что означает программа, а затем Я могу показать, что прогноз на самом деле прав ».
источник
Большинство людей понимают рецепты. Если вы будете следовать инструкциям, вы получите достойную еду. Иногда, однако, инструкции могут быть сложными для выполнения. Например, когда вы делаете перги, вы найдете такие инструкции, взятые слово в слово из польских перги бабушки :
Хлоп. Давайте рассмотрим добрый совет бабушки нам. Бросьте их по одному за раз ... так что у них разное время пребывания в банке. Понял. Они сделаны, когда они плавают на вершину . Ну, сколько «они»? Я поймаю каждого по мере его появления? Я жду 80%, чтобы всплыть на вершину, а затем получить их все? Это безумно неточно. Не кипятите слишком долго, иначе они будут сырыми! Как я могу измерить, когда они собираются промокнуть, чтобы они не слишком долго? Если пять всплывают одновременно, смогу ли я получить их все?
И поверь мне, я испортил много перги за мой день. Это серьезная проблема, с которой сталкивался любой повар. Но, несмотря на эти проблемы, которые возникают даже при самом простом анализе, люди все еще могут делать перги, используя тот же самый метод. Но есть ли что-то, что мы можем сделать, чтобы сделать больше партий перогий успешными, а меньше партий перги - неудачными?
Разве не было бы замечательно, если бы кто-то специализировался на создании более надежных рецептов? Кто-то, кто сказал: «Мы можем направить перги, чтобы они выскакивали из воды!» или «мы можем добавить специальный краситель в перги, безопасный для употребления, конечно, который придает им разные оттенки, и мы знаем, что нужно сначала выпустить самые темные, так как они больше всего рискуют стать сырыми». Нам нужен эксперт, который сможет взять этот рецепт и исправить возможные проблемы с ним. Жизнь повара-Perogie по всему миру будет проще, и собакам будет скапливаться меньше мокрых кусочков макаронного картофеля.
Программисты тоже следуют рецептам. Но иногда, оборудование, которое они используют, инструкции, которые они используют, и интерпретации, которые они используют, не объединяются, чтобы сделать щедрую еду, которую они хотели. К счастью, есть люди, которые посвящают свою карьеру тому, чтобы сделать жизнь программиста более продуктивной. В вашем случае вы специализировались на одном из инструментов, которые использует программист, на языке, чтобы попытаться сделать их лучше.
источник
Вот как я бы (попытался) объяснить это моей маме:
Языки программирования используются людьми для предоставления инструкций компьютеру. Все, что делает компьютер, делается с помощью компьютерного кода, написанного программистом на языке программирования.
Так, например, если мы хотим, чтобы при нажатии кнопки телеканал менялся, то для этого нам нужно было бы написать некоторый код на языке программирования. То же самое касается всего, что происходит с ноутбуком, смартфоном и всем остальным, чья работа связана с компьютером.
Может показаться, что может быть один язык программирования, который программисты могли бы использовать для написания всех программ. Но это не тот случай. Существуют разные языки программирования для всех типов приложений.
Некоторые используются для создания веб-сайтов, другие для создания приложений для ноутбуков (например, Microsoft Word).
Одна из причин, по которой существует много разных языков программирования, заключается в том, что некоторые из них лучше подходят для некоторых задач, чем другие. Другая причина в том, что некоторые языки предназначены для использования на разных компьютерах. Поэтому вы не всегда можете взять код, написанный для смартфона, и запустить его на ноутбуке. И хотя некоторые программисты могут программировать на многих языках, а многие способны или могут изучать новые языки быстро, любой программист будет знать некоторые языки лучше, чем другие, а некоторые - совсем нет.
Таким образом, языки программирования являются одной из ключевых технологий, которые заставляют компьютеры работать. Хорошо спроектированные языки программирования могут значительно повысить производительность труда программистов. Они также могут повысить безопасность и уменьшить ошибки программирования, ошибки и дефекты.
В общем, вот что я изучаю: как разные части языков программирования влияют на производительность труда программиста? Какие части конкретного языка облегчают написание кода для веб-сайта? Почему некоторые языки более популярны, чем другие?
Хотя может показаться, что эти вопросы эзотеричны и далеки от повседневной жизни обычного человека, верно и обратное. Изучение языков программирования имеет жизненно важное значение для любого продукта или услуги, которая использует компьютер. И сегодня это означает почти все;)
источник
Ваш лучший выбор может заключаться в проведении аналогий с человеческими языками.
Языки программирования используются для предоставления инструкций для компьютеров. Человеческие языки используются для передачи идей другим людям и для формирования собственных мыслей. Гипотеза Сапир-Уорф гласит, что язык, который вы используете, влияет на вашу мысль. (Степень, в которой гипотеза Сапира-Уорфа верна, обсуждается, но мы можем просто принять ее как правду при обсуждении языков программирования. В противном случае вы могли бы также отказаться от своей докторской степени. 😜)
Существует большое разнообразие человеческих языков, некоторые с особенностями, которые мы считаем экзотическими. Например:
Есть ли лучший язык, если говорить объективно? Ответ может зависеть от того, что вы пытаетесь сделать.
В конце концов, все на компьютере переводится на машинный язык, но выбор правильного языка для работы может значительно повлиять на производительность, надежность, производительность и гибкость вашего программного обеспечения. Мы выбираем языки смирительной рубашки, такие как Ada или Java, для «серьезных» проектов, а Ruby или Perl для максимальной гибкости . Для запросов к базе данных SQL является обычным языком; написание собственного кода на C было бы идиотским.
Основываясь на этих аналогиях, я уверен, что вы сможете в течение нескольких часов изложить такие идеи, как функциональное программирование, безопасность типов, вывод типов и т. Д.
источник
компьютерные языки относятся примерно к человеческим языкам. они используют стандартные / общие / общие слова. Учтите, что существуют тысячи человеческих языков, некоторые из которых более не существуют, другие активны, а их словарный запас и использование постоянно меняются с течением времени. некоторые люди создают новые полезные слова, чтобы выразить понятия, которые раньше не могли быть выражены. Еще один частично совпадающий аспект компьютерного языка и человеческого языка - это грамматика . некоторые языки, например английский, имеют очень сложную грамматику. рассмотрите все различные времена и сложные правила, которые управляют ими. другие языки не имеют такие же времена . другая корреляция с частями речикатегории, например, существительное, глагол, наречие, прилагательное и т. д., эти функции похожи на типы в компьютерных языках. представьте себе создание новых языков с различными частями речевых категорий, которые ранее не рассматривались, или с новыми комбинациями частей речи, которые происходят из разных языков и т. д .; Итак, обратите внимание, что лингвистика имеет связь с информатикой, например, esp в теории хомского языка.
программное и аппаратное обеспечение часто связано с двигателями и машинами и даже названо в честь этого. Существует старая аналогия с программным обеспечением, которая заключается в том, что пытаться модифицировать сложную круглосуточную производственную систему - это все равно, что менять двигатели самолета во время полета . Также обратите внимание, что реактивные двигатели очень сложны и включают массивные точные спецификации сменных частей.и здесь есть некоторая аналогия с компьютерными языками, которые управляют оборудованием. представьте всю сложность документов, которые описывают, как именно строить реактивные двигатели: все детали, как они сконструированы, как они сочетаются друг с другом, как они собираются и т. д .; они создаются / компилируются инженерами с использованием точного формата / структуры / обычных правил; Программное обеспечение несколько аналогично этому.
повторно машины, кто -то без научного или математического образования или даже ребенок может понять основные концепции и многие аспекты машины Тьюринга! чудесное творение один подозревает, что Тьюринга вдохновили пишущие машинки и / или телетайпы. Можно описать таблицу состояний и показать им примерную таблицу состояний, которая вычисляет умножение, а кто-то может посмотреть анимацию YouTube на машине Тьюринга для вычисления базовых вычислений, таких как умножение. сказать им , что состояние таблицы можно вычислить или буквально решить на язык, и что входы буквально называются слова . на самом деле машины Тьюринга принимают слова на языкахи т. д. затем скажите им, что есть две таблицы состояний, которые обе вычисляют умножение, но одна намного быстрее или эффективнее другой, и что ваше исследование включает в себя поиск лучших концепций таблиц состояний. выяснить, как эффективно создавать таблицы состояний, задействовать языки программирования, которые суммируют содержимое больших таблиц состояний! компилятор преобразует код , написанный на языке программирования в большую таблицу состояний.
Алгоритмы сортировки - отличная метафора начального уровня в информатике. Можно посмотреть на разные списки инструкций или алгоритм для каждой сортировки. можно узнать, что такое пузырьковая сортировка по сравнению с вставкой, можно использовать колоду карт. Теперь сконцентрируемся на различных наборах инструкций и рассмотрим, что они должны быть написаны на очень точном языке, таком же точном, как математические операторы, который имеет строгий синтаксис и т. д. и имеет основные сходства / структуры: условную логику, циклы, переменные и т. д. и объясните, что искусство этой точной спецификации касается компьютерных языкови что некоторые разные языки могут давать одни и те же алгоритмы, но есть некоторые тонкие стилистические вариации в этих языках, которые изучаются очень глубоко, и т. д.
источник
Вы просто говорите: «Я помогаю парням, которые учат компьютеры работать»
Идея в том, что программисты учат компьютеры делать что-то с помощью программ, а вы им помогаете. Я думаю, что это будет работать, если они уже немного знают о компьютерах.
источник
Если вы не хотите использовать сравнения, хотя я думаю, что «алгоритм», который привел Лиуве, очень хорош для передачи этой идеи, вы можете сказать, что вы хотите уменьшить недопонимание между людьми и компьютерами. В конце концов, вы имеете дело с языками, и это, наверное, очень важно для людей. Так почему бы не сделать вид, что компьютер - это просто еще один разум, с которым вы хотите поговорить?
Люди создали компьютеры, поэтому мы знаем, как работает компьютерный разум. Но компьютер обычно не «знает», как работает наш разум. (Или каково было наше реальное намерение, когда мы пишем запутанную и тщательно продуманную ошибку, которая счастливо живет во многих циклах нашего кода;)) Таким образом, мы должны уточнить язык, который мы используем для общения с ними, и уменьшить возможности для недоразумений. И это то, что вы делаете. В этом контексте, конечно, приветствуются аналогии, такие как проверка орфографии или грамматика.
источник
Вот две аналогии, которые вы можете найти полезными:
Моя работа чем-то похожа на изучение новых подходов к музыкальной нотации. ( пример ) Хотя преобладающие системы обозначений довольно сложны, важно изучить альтернативы, которые уменьшают время / усилие / ошибки для композитора, для исполнителя или позволяют вещи, которые неуклюжи или невозможно выразить в преобладающей системе, или даже просто продвигать различные типы мышления и таким образом приводить к новым композициям. (Это позволяет легко понять, что одна из проблем заключается в том, чтобы убедить людей принять новый материал.)
Я помогаю разрабатывать лучшие инструменты для людей в моей отрасли. Точно так же, как людям в обрабатывающей промышленности помогают такие инновации, как аккумуляторные дрели, лазерные резаки и 3D-принтеры (ни один из которых не существовал 60 лет назад), людям в индустрии разработки программного обеспечения помогают более мощные, более точные, более надежные или простые в использовании языки программирования и их особенности.
источник
Ну, скорее всего, у вас есть основания для изучения языков - используйте эту причину. Например:
Если это то, что привлекает их внимание, не стесняйтесь идти немного глубже, но не забывайте об умственной дистанции - у большинства людей возникают огромные проблемы с объяснением чего-то, что слишком далеко от существующего опыта и знаний студента.
Языки - это путь вниз по компьютерной лестнице. Люди, которых вы пытаетесь объяснить, скорее всего, не знают, что такое алгоритм , тем более что существуют разные способы представления указанного алгоритма, которые более или менее полезны. Вы можете объяснить все что угодно, если будете действовать достаточно осторожно, но будьте готовы пройти через много слоев, если вы хотите объяснить что-то столь же «глубокое», как «язык программирования RnD». Это помогает, если люди, которых вы объясняете, уже хорошо разбираются в математике, но это примерно так же редко, как знание компьютера :)
Полегче на аналогиях. Они звучат так, как будто помогают, но по моему опыту они обычно добавляют путаницы, даже если вы думаете, что они очень помогают. Языки программирования вроде как адвокат говорит ... но это не очень полезно для людей , которые не уже понимают , как программирования и адвокатские, на самом деле. Если вам действительно нужна дополнительная помощь, примеры работают достаточно хорошо - но вам нужно согласовать их с человеком, которому вы объясняете (и что именно вы исследуете)
источник
Я считаю, что лучшие аналогии специально созданы для человека, с которым вы разговариваете. Они художник? Обсудите, что то, что вы делаете, является эквивалентом изучения теории о том, как делать лучшие кисти, только этой области всего 60 лет вместо 600! Наездники? Сравните это с разработкой конкретных подков на протяжении многих лет.
Если они действительно хотят лучше понять, мой любимый способ объяснить это - поговорить о заполнении налоговых форм и инструкциях в каждой строке. Я обнаружил, что большинство людей старше 20 лет имеют некоторый опыт работы с IRS Form 1040, и те поля, которые вы заполняете, очень хорошо соответствуют разговорам о назначении переменных. Затем я отмечаю, что программное обеспечение делает примерно 2 миллиарда из них в минуту (вымышленное число, но оно все понимает). Если вы изучаете компьютерные языки, людям легко понять, почему на самом деле важны лучшие инструкции =)
Если они все еще кажутся заинтересованными, это примерно тот момент, когда я начинаю пытаться объяснить управление потоком. Обычно, когда я заканчиваю обсуждать управление потоком над формой 1040, они начинают волноваться и начинают спрашивать, продал ли я какую-либо из моих идей правительству!
Я часто говорю о встроенных системах, поэтому иногда я объединяю аналогию с Form 1040 с роботом, готовящим буханку хлеба (или 500). Обычно это работает хорошо, хотя по какой-то причине переход от налоговых форм IRS к созданию чего-то, что оставляет приятный вкус во рту, для некоторых людей является действительно сложным процессом.
источник
У твоих родителей какой-то компьютер. Вероятно, не один, а много. У них может быть настольный компьютер или ноутбук, или телефон, или iPad. Если нет, то у них есть стиральная машина или видеозапись, DVD-плеер или что-то с компьютером внутри.
Если они этого не делают, вы говорите: «Извините, но вам удалось жить полностью без компьютеров. Поэтому я не могу объяснить вам, что я делаю. Но мир меняется. Вам просто нужно поверить мне в это». Я знаю, что я делаю. "
Если у них есть какой-либо компьютер, вы говорите: «Это компьютер, и он не просто работает по волшебству. Он работает, потому что какой-то умный мужчина или женщина написали программу, которая говорит вашему компьютеру, как работать. этим умным мужчинам и женщинам действительно тяжело, и я помогаю им облегчить работу ».
источник
Некоторое время назад я решил, что хорошей аналогией для программирования, которую легко понять людям с небольшим опытом работы с компьютером или нет, будет написание рецептов вязания .
Хороший рецепт вязания содержит несколько размеров в одном и том же списке инструкций, которые дают вам циклы и операторы if. Это нечитаемо для тех, кто не вяжет, и если в нем есть ошибки, вы получите смещенные узоры или дополнительный рукав. Затем вы, как автор рецептов, должны выяснить, где был неправильный рецепт, основываясь на неправильных свитерах, и исправить это.
Затем вы можете использовать пример «Я смотрю на то, как разные рецепты для вязания, вязания крючком, Nålebinding и тому подобного» и обучения X (где вам нужно найти аналогию для того, что вы на самом деле делаете ).
источник
Это магия!
Когда люди без технической подготовки вообще спрашивают, что значит писать программы / программы / заниматься разработкой программного обеспечения, я просто говорю им, что это на самом деле: магия. Маги вводят заклинания на эзотерическом языке для выполнения определенных задач, машут палочками, и происходит что-то волшебное. Я произношу определенные заклинания на эзотерическом языке, покачиваю мышью, и происходит что-то волшебное (насколько они касаются).
Если они не убеждены, я попросил их включить свой смартфон и сказать мне, как что-нибудь на нем действительно работает. Они обычно говорят: «Я не знаю, просто так. Я нажимаю кнопки, и все происходит». Затем я говорю им: «Да, именно так, но я знаю, что на самом деле происходит, и это в основном то же самое, что Гарри Поттер машет своей палочкой и говорит:« Сосредоточиться покус »« Для всех намерений и целей, для мирянина, я думаю это вполне законное объяснение.
Почти все знают, кто такой Гарри Поттер, что он делает и что делает его особенным (по крайней мере, он волшебник и может творить магические вещи). Вы можете просто объяснить, что иногда волшебникам нужно писать свои заклинания на новом языке, чтобы сделать их магию еще более мощной, что на самом деле не так уж далеко от истины. Вы можете просто сказать им, что изучаете процесс создания более мощных книг заклинаний, чтобы помочь поколению еще более могущественных волшебников, которые могут создавать еще большую магию на своих любимых потребительских устройствах. Все это ценят.
Epic Fail
Если это не удастся, я вернусь к примеру с рецептом, потому что неравномерность решений, по крайней мере, учит людей, что существует более одного способа убрать кошку (или испечь пирог), и это является частью того, что делает программирование таким сложно. Это также помогает поставить человека в положение процессора и иногда следовать инструкциям, которые они могут не понять (большинство людей, вероятно, не знают разницы между пищевой содой и разрыхлителем, и почему рецепт должен иметь один или другой).
Мертвые концы
Мне не нравится использовать математику в качестве примера, потому что, чтобы заниматься математикой, вы должны понимать, для чего эти шаги. Вы не можете сделать очень много математики, следуя инструкциям вслепую (ну, вы можете, но обычно это не так, как люди учат это). Мне не нравится сортировка в качестве примера, потому что это слишком технично, чтобы мирянин мог это оценить. Если я разговариваю с кем-то, кто может оценить пример сортировки, то он, вероятно, уже имеет некоторое представление о том, что такое программирование, и, вероятно, попробовал его сами.
источник