Один мой друг спросил меня на днях, если я просто смотрю списки номеров, когда я программирую, или как это работает. Я попытался объяснить, что он в целом больше похож на математические формулы, причем странное английское слово подбрасывается и что оно в основном читаемо. Но это очень неопределенное объяснение, и на самом деле это не очень объясняет не-программисту.
Но это заставило меня задуматься о том, что станет хорошим примером. Не потому, что я хочу научить ее программированию или чему-либо, а просто дать ей представление о том, какой программный код "выглядит".
И это заставило меня задуматься о том, что на самом деле будет служить хорошим примером. И это оказалось удивительно трудным.
Моя первая мысль была, очевидно, простой программой Hello World. Но это действительно не показывает ничего полезного. На самом деле это не показывает, как мы используем функции или переменные или структуры потока управления, такие как if
или while
, чтобы сделать программу, которая на самом деле что-то делает. Там нет логики. Программа ничего не реагирует.
Так что, возможно, что-то вроде вычисления простых чисел будет лучшим примером. Но опять же, это может быть слишком теоретическим и непрактичным... (Что хорошего в этом? Какое отношение это имеет к написанию "реальных" программ?) И опять же, в нем нет значительной логики управления потоком. Это просто прямая последовательность математики.
А также, какой язык следует использовать?
В идеале я не думаю, что это должен быть очень "чистый" язык. Но, скорее, это должно сделать структуру понятной. Если это так, то может возникнуть определенный шум и беспорядок. Возможно, что-то вроде С++ на самом деле будет лучшим примером, чем Python по этой причине. Явные фигурные скобки и спецификаторы типов - это очевидные "крючки", которые помогают объяснить, как структурирована программа, или подчеркнуть, что это не просто простые утверждения, которые можно почти прочитать как английский.
Но с С++ мы также попадаем в какой-то совершенно странный синтаксис. Почему std::cout << x
используется для печати x? Почему не синтаксис вызова функции "нормальный"? И printf
не намного лучше, с его тайной форматированной строкой и отсутствием расширяемости (хочу ли я усложнять программу с помощью char*
для строк? Или я использую std::string
и соглашаюсь на вызов, казалось бы, ненужного s.c_str()
, чтобы получить строку, которая может быть напечатана с помощью printf
?
Возможно, более высокий уровень языка был бы лучше. Но какой? И почему?
Я знаю, что здесь есть много похожих вопросов о том, какую программу языка/примера использовать для обучения программированию. Но я думаю, что требования здесь разные. При обучении программированию мы хотим простоты больше всего на свете. Мы хотим избежать всего, чему еще не научили. Мы хотим убедиться, что студент может понять все на экране.
Меня не интересует простота как таковая. Но скорее в том, чтобы дать "аутсайдеру" идею "как выглядит программа". И программы не просты. Но они, как правило, демонстрируют определенную структуру и метод безумия. На каком языке/программе лучше всего выделить это?
Edit
Спасибо за все предложения. У некоторых из вас был несколько иной угол, чем я предполагал.
Возможно, пример в порядке. Я не могу летать на самолете, но у меня есть общее представление о том, как выглядит кокпит, и что пилот "делает" во время полета.
И я не тренированный плотник, но я знаю пилу или молоток, когда вижу его.
Но когда вы видите что-то, что связано с программированием в фильмах, например, обычно это просто экраны, заполненные мусором (как в зеленом тексте в матрице). Это не похоже на то, что реально может сделать нормальный человек. В этом нет ничего узнаваемого. Тот, кто не программист, просто думает, что это черная магия.
Я не хочу научить ее летать или программировать программное обеспечение.
Но я хотел бы дать ей базовую систему отсчета. Просто идея "ах, так, с чем вы работаете, поэтому это не просто случайные символы и цифры на экране". Даже просто показать простое if
-statement было бы откровением по сравнению со случайными символами и номерами в стиле Matrix.
Некоторые из вас предложили объяснить алгоритм или использовать псевдокод, но этого я хочу избежать. Я хотел бы что-то, что просто показывает, как выглядит фактический код, таким же образом, что вам не нужно быть плотником, чтобы посмотреть на пилу и получить представление о том, что это такое и как оно работает.
Когда я был ребенком, мы однажды отправились в отпуск в Италию. По дороге вниз пилот позволил мне попасть в кабину самолета. Конечно, я не научился летать на самолете. Но я действительно заглянул в пилотный мир. Я понял, как они делают самолет, что делает пилот.
Это действительно все, что я хочу сделать. Мой друг не заинтересован в программировании, и я не хочу заставлять ее понимать исходный код. Но ей было любопытно, с какими инструментами или сущностями я работаю. Символы в стиле Матрицы прокручиваются по экрану? Чистая математика? Английский в прозе?
Все, что меня интересует, - это очень высокоуровневое понимание "Как это выглядит, когда я работаю".