Что является хорошим примером, чтобы показать не-программисту, чтобы объяснить, как программируется "похоже"?

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

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

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

Моя первая мысль была, очевидно, простой программой Hello World. Но это действительно не показывает ничего полезного. На самом деле это не показывает, как мы используем функции или переменные или структуры потока управления, такие как if или while, чтобы сделать программу, которая на самом деле что-то делает. Там нет логики. Программа ничего не реагирует.

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

А также, какой язык следует использовать?

В идеале я не думаю, что это должен быть очень "чистый" язык. Но, скорее, это должно сделать структуру понятной. Если это так, то может возникнуть определенный шум и беспорядок. Возможно, что-то вроде С++ на самом деле будет лучшим примером, чем Python по этой причине. Явные фигурные скобки и спецификаторы типов - это очевидные "крючки", которые помогают объяснить, как структурирована программа, или подчеркнуть, что это не просто простые утверждения, которые можно почти прочитать как английский.

Но с С++ мы также попадаем в какой-то совершенно странный синтаксис. Почему std::cout << x используется для печати x? Почему не синтаксис вызова функции "нормальный"? И printf не намного лучше, с его тайной форматированной строкой и отсутствием расширяемости (хочу ли я усложнять программу с помощью char* для строк? Или я использую std::string и соглашаюсь на вызов, казалось бы, ненужного s.c_str(), чтобы получить строку, которая может быть напечатана с помощью printf?

Возможно, более высокий уровень языка был бы лучше. Но какой? И почему?

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

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

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

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

И я не тренированный плотник, но я знаю пилу или молоток, когда вижу его.

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

Я не хочу научить ее летать или программировать программное обеспечение. Но я хотел бы дать ей базовую систему отсчета. Просто идея "ах, так, с чем вы работаете, поэтому это не просто случайные символы и цифры на экране". Даже просто показать простое if -statement было бы откровением по сравнению со случайными символами и номерами в стиле Matrix.

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

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

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

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

Ответ 1

Чтобы ответить на ваш вопрос напрямую - какое программирование "выглядит", я бы показал им распечатку из большого приложения. Приложения для игрушек или милые вещи, такие как qsort in haskell, действительно дают неправильную идею.

Ответ 2

BASIC

10 PRINT "Sara is the best"
20 GOTO 10

Обновление:, когда мне было 12, мой кузен (ему было 14 лет) принес Turbo Pascal 7.0 и установил его на моем компьютере.
Он запрограммировал игру tic tac toe с нуля (в режиме BGI, для тех, кто знает).
Я наблюдал/наблюдал шаг за шагом, как развивается программа, пока она не станет полным приложением. До тех пор я знал только, как печатать строки в BASIC: -B

Вы можете сделать аналогичную вещь. Программирование пар. Ну, на самом деле ваш друг будет наблюдателем, но она получит идею;)

Ответ 3

Почему бы не рассмотреть язык, который не существует (или, если вы так полагаете), и используйте Pseudo Code? Я думаю, в зависимости от того, чего вы хотите достичь - я бы рассмотрел пример задачи, знакомый человеку, но вырезанный в пример псевдокода.

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

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

Существует очень определенное несколько этапов:

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

Я уверен, что вы можете видеть, куда это идет...;)

Существует много общего с кулинарией и программированием (так как есть много вещей, но больше людей понимают кулинарию, чем строительство дома). Там стадии/сходства (как я вижу):

  • Сбор: (объявление того, что требуется для достижения цели и получения их вместе).
  • Preperation: измельчение ингредиентов или подготовка объектов подключения данных и т.д. для первого использования.
  • Асинхронный: способность иметь что-то одно, а другая вещь идет.
  • Функции: приготовление риса, приготовление курицы и приготовление карри требуют отдельных процессов, и только в конце вы можете использовать функцию makeCurry (курица, рис).
  • Тестирование. Убедитесь, что по мере того, как вы продвигаетесь вперед, вы не пропускаете никаких бит и что все идет гладко. чтобы цыпленок готовил, прежде чем переходить на следующий этап.
  • Мусор. Как только вы это сделаете, вы должны убедиться, что вы убираете.;)
  • Принципы лучшей практики. Существуют эффективные способы делать то, что нравится кулинарии, начинающим программистам приходится учиться в дополнение к коду - иногда это может быть трудно обойти. например D.R.Y, как эффективно нарезать ножом и не есть сырой цыпленок;)

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

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

Ответ 4

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

Как сделать две чашки кофе?

  • Заполните чайник
  • Варить воду

  • Кофе в чашке

  • Налить воду
  • Добавить сахар
  • Добавить молоко

  • Сделайте снова 3-6

Ответ 5

A junior coder at work

Это немного похоже на это. Иногда.

Ответ 6

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

Ответ 7

Думаю, вам нужно загрузить какое-то большое приложение win32, написанное на языке ассемблера AT & T, и показать его в блокноте и сказать ей: "Как видите, для программирования требуется сверхчеловек, как я, чтобы программировать".

Ответ 8

Введите код, который имеет какое-либо приемлемое значение для не-программиста. Если бы я продемонстрировал Quicksort моей маме, это было бы бесполезно.

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

Если человек использует Twitter, код что-то, что считает последователей его последователей или что-то в этом роде.

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

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

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

Ответ 9

Чтобы дать моей жене представление о том, что я делаю, чтобы принести зарплату (это настоящая работа! Я обещаю! мы не просто просматриваем Интернет весь день!) Однажды я сел с ней на Python и показал ей пара основных понятий: вызов функции (печать), назначение и чтение переменной и как работает оператор if. Поскольку она учительница, я сравнил концепцию условностей с работой с дошкольниками:)

IF you hit Jonny THEN you're in time out OTHERWISE you can have a snack.

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

# Guessing Game
import random

print("Guess a number between 1 and 100: ")

target = random.randint(1, 100)
guess = 0
guess_count = 1

while guess != target:
    guess_count += 1
    guess = int(input())

    if guess == target:
        print("Correct!")
    if guess < target:
        print("Higher...")
    if guess > target:
        print("Lower...")

print("Congratulations! You guessed the number in " + str(guess_count) + " guesses!")

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

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

Ответ 10

Появился графический пакет CLI под названием LOGO и наиболее известен Turtle Graphics, используется для рисования фигур на экране с помощью команд типа LT 90, RT 105 и т.д. Смотрите, можете ли вы найти это, было бы неплохо попробовать попробовать что-то среднее.

LOGO - Логически ориентированный язык с графическим ориентированием.

REPEAT 360 [FD 1 RT 1] -- draws a circle, etc.

Подробнее на logothings или Wikipedia который также имеет ссылки на современных интерпретаторов логотипов.

Ответ 11

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

Затем:

(источник: markharrison.net)

Сейчас:

Ответ 12

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

Я не претендую на изобретение этого ответа.

О вашем редактировании: боюсь, программисты даже меньше думают о идее, которую другие имеют о программировании.;-) Люди думают, что программирование - это гранулярная коррупция в зеленой видеокарте примерно так же, как они думают, что шпионы все оснащены игрушками для Джеймса Бонда. И любой профессионал в любой области обычно раздражается при просмотре фильма о своей работе. Потому что кинопроизводитель понятия не имеет! Знаем ли мы, как правильно изображать программирование в фильме, с другой стороны?; -)

Ответ 13

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

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

Как, что должно произойти, если пользователь вводит отрицательную сумму кредита? Что делать, если пользователь не может позволить себе кредит? Как это могло бы знать о займе? Как заявка на кредит узнает, какой банковский счет проверять и какую историю платежей проверять (т.е. кто на самом деле является пользователем)? Что делать, если пользователь пытается ввести свое имя в поле суммы кредита? Что делать, если пользователь пытается взять кредит на 75 лет? Должны ли мы ограничить выбор списком доступных длин?

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

Бонусные баллы, если вы можете заставить своего друга затем реагировать: Но что, если мы что-то забыли? Ну, тогда у нас есть ошибки, и теперь вы знаете, почему нет программного обеспечения тоже без ошибок:)

Ответ 14

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

Почему? Не-программист, как правило, тоже не-математик, поэтому он не получит красоты сортировки. Однако показывая что-то нарисованное на экране ( "смотреть, окно!", "Смотреть, так мало печатать, и у нас есть 3D-окно, вращающееся!" ) Может творить чудеса;).

Ответ 15

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

Нет ничего плохого в том, чтобы начать работать в hello world, если вы можете показать, что на самом деле делает с ним компьютер. Затем вы можете ввести одну конструкцию за раз. Это то, что программирование like- Внесение постепенных изменений и просмотр результатов.

Итак, у вас есть программа Hello World. Теперь измените его на

string Name = getLine();
printf("Hello, %s", name);

тогда конструкция if

printf("Do you like cake?");
string answer = getLine();
if(answer == "yes") {
    printf("Yeay! I like cake too!");
} else if(answer == "no") {
    printf("Filthy cake hating pig!");
}

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

и так далее. Я не думаю, что вам нужно углубляться в такие глубокие понятия, как рекурсия или даже функции.

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

Ответ 16

Как это выглядит, когда вы работаете?

Похоже на ввод текста.

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

Ответ 17

alt text
(источник: wikimedia.org)

{
   wait for 6/8;
   play F (5), sustain it for 1/4 and a half;
   play E flat (5), sustain it for 1/8;
   play D flat (5), sustain it for 1/8 and a half;
   play F (4), sustain it for 1/16;
   // ...
}

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

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

Ответ 18

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

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

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

Такие вещи, как Robocode и LOGO, действительно хороши для этого.

Ответ 19

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

Ответ 21

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

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

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

например.

IF today date is the 1st of may then
  print to screen "Happy Birthday"
ELSE
  print to screen "It not your birthday yet"

Красота кода psuedo почти любой может понять это, и в этом суть.

Ответ 22

Хотите показать ей, что такое программирование? Просто введите терминал и

find / 

Ответ 23

Удивленный, это все еще открыто и удивляет, что никто не ответил на этот вопрос. (Я думаю, я, возможно, случайно пропустил один из 40 вопросов, которые никто не собирается читать).

Ваш ответ в вашем вопросе

Когда я был ребенком, мы однажды отправились в отпуск в Италию. По пути вниз, пилот впустил меня в кабину самолета. Конечно, я не научиться летать на самолете. Но я действительно заглянул в пилот Мир. Я получил представление о том, как они делают самолет, что пилот фактически делает.

Это действительно все, что я хочу сделать.

Это все, что вам нужно. Выберите короткое упражнение из учебника. Умеренно более длинный графический интерфейс также может быть полезным благодаря добавленным визуальным эффектам. (Игры могут немного оттолкнуть длину.) И пусть она смотрит вам код. Это. Это то же, что и ваш пилотный пример.

Также есть несколько онлайновых REPLs, которые сделают просмотр кода еще более быстрым.

Ответ 24

Я говорю, покажу ему пузырь.

Это простой, понятный трюк, преобразованный в формальный язык.

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

Ответ 25

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

Ответ 26

Мой обычный выбор - получить набор записей клиентов из базы данных. Используя С# и LINQ в Visual Studio, требуется больше 10 минут для создания веб-страницы и выгрузки клиентов базы данных "Northwind" в сетку. Приятно, что "список клиентов" - это то, что почти каждый может понять.

Ответ 27

Полностью зависит от уровня ее интереса (или вашего уровня интереса к ней). Большинство людей задают этот вопрос как простой разговор и не хотят этого знать.

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

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

Язык: используйте что-то вроде python. Действительно высокий уровень, не фигурные скобки, вероятно, лучше.

Ответ 28

Alice, который был разработан в Carnegie Mellon.

Alice - это инновационная среда 3D-программирования, которая упрощает создание анимации для рассказывания истории, игры в интерактивной игре или видео для публикации в Интернете. Алиса является учебным инструментом для вводных вычислений. Он использует трехмерную графику и интерфейс перетаскивания, чтобы облегчить более привлекательный, менее разочаровывающий первый опыт программирования.

Ответ 29

В псевдокоде:

function dealWithPerson(person){
    if(ILike(person)){
        getCookie().giveTo(person);
    }
    else{
        person.tell("You shall receive no cookies!");
    }
}

dealWithPerson(Person.fromName("Nick"));
dealWithPerson(Person.fromName("John"));

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

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

Ответ 30

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

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

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

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