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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

71
задан 7 revs, 3 users 100% 18 February 2012 в 12:53
поделиться

38 ответов

My wife knows absolutely nothing about programming and computers. But she did understand when I explain that the computers are absolutely brainless and only follow instructions. You can define and control those instructions with a programming language. Basically you're telling a computer what to do using a programming language; it is the language a computer (in)directly understands.

It can be a long story, but a good demonstration example is a calculator such as calc.exe (or whatever calculator program your OS is using). Every programmer should be able to explain in easy-to-understand language what it is doing "under the hood" (telling the computer that it should listen and remember what buttons are pressed and what to do with those values). You could also consider to try to demonstrate that as well in your own language, which should at end also be fairly easy to understand. At least, it helped my wife (I assume ;) ).

0
ответ дан 24 November 2019 в 12:48
поделиться

Я бы сказал: либо использовать какой-нибудь стандартный алгоритм в псевдокоде (почти любой алгоритм сортировки n ^ 2 должен подойти. Мне нравится сортировка по выбору.), Либо указать им на http: / /99-bottles-of-beer.net/

опять же, мне просто нравится указывать людям на 99-bottles-of-beer.net B -)

1
ответ дан 24 November 2019 в 12:48
поделиться

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

Затем объясните, что то, что вы показали, составляет 0,01% от всей программы. И объясните, что 90% вашего времени вы тратите не на написание материалов, а на попытки прочитать их и выяснить, почему они не работают.

0
ответ дан 24 November 2019 в 12:48
поделиться

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

qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
0
ответ дан 24 November 2019 в 12:48
поделиться

Покажите R основы, это проще, чем C для понять, имеет много встроенных функций, таких как среднее или sqrt, и, по крайней мере, знак назначения R - "<-"

0
ответ дан 24 November 2019 в 12:48
поделиться

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

.
1
ответ дан 24 November 2019 в 12:48
поделиться

Мне нравится мотивировать интро-программирование с помощью "Locker Room Problem" (скажем, 100 раздевалок, изначально закрытых). Человек 2 входит и открывает все четные номера, человек 3 входит и меняет статус с открытого на закрытое и наоборот всех шкафчиков, чьи номера кратные 3, человек 4 входит и те, которые это для шкафчиков, чьи номера кратные 4 и т.д., пока человек 100 не войдет). Вопрос в том, какие шкафы остаются закрытыми? Конечно, есть элементарное математическое решение этого вопроса (открытыми остаются только идеальные квадраты), но это хорошее упражнение для интропрограммирования, я думаю

.
1
ответ дан 24 November 2019 в 12:48
поделиться

Цитирую Стивен C. McConnell, из своей великой книги Code Complete, в гл.2 он рассказывает о метафорах программного обеспечения

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

  • Фред Брукс говорит, что написание программ подобно земледелию, охоте на оборотней или утоплению с динозаврами в смоляной яме (1995).
  • Дэвид Грис говорит, что это наука (1981).
  • Дональд Кнут говорит, что это искусство (1998).
  • Уоттс Хамфри говорит, что это процесс (1989).
  • Пи-Джей Плэгер и Кент Бек говорят, что это как управлять автомобилем (Плэгер 1993, Бек 2000).
  • Алистер Кокберн говорит, что это игра (2001).
  • Эрик Рэймонд говорит, что это как базар (2000).
  • Пол Хеккель говорит, что это как снимать "Белоснежку и семь гномов" (1994).
0
ответ дан 24 November 2019 в 12:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: