Мій друг днями запитав мене днями, чи я просто переглядаю списки чисел, коли програмую, або як це працює. Я намагався пояснити, що це, як правило, більше схоже на математичні формули, з кинутим дивним англійським словом, і що воно, як правило, переважно читабельне. Але це дуже розмите пояснення, і воно насправді мало що пояснює непрограмісту.
Але це змусило мене задуматися над тим, що може стати хорошим прикладом. Не тому, що я хочу навчити її програмуванню чи чомусь іншому, а просто дати їй уявлення про те, як "виглядає" програмний код.
І це змусило мене замислитися над тим, що насправді могло б служити хорошим прикладом. І це виявляється напрочуд важко.
Моєю першою думкою була очевидно проста програма "Привіт Світ". Але насправді це не показує нічого корисного. Це насправді не показує, як ми використовуємо функції, або змінні, або керуємо структурами потоку, як-от if
або while
для створення програми, яка насправді щось робить . Тут немає логіки. Програма ні на що не реагує.
Тож, можливо, щось на зразок обчислення простих чисел було б кращим прикладом. Але знову ж таки, це може бути занадто теоретично і непрактично ... (Що це хорошого? Яке відношення це має до написання "справжніх" програм?) І знову ж таки, в ньому немає суттєвої логіки управління потоком. Це просто пряма послідовність математики.
А також, якою мовою слід користуватися?
В ідеалі, я не думаю, що це повинна бути дуже "чиста" мова. Але скоріше це, мабуть, має зробити структуру чіткою. Якщо це зробить, тоді певна кількість шуму та безладу може бути нормальною. Можливо, щось на зразок С ++ насправді було б кращим прикладом, ніж Python, з цієї причини. Явні фігурні дужки та специфікатори типу є очевидними "гачками", які допомагають пояснити структуру програми або підкреслити, що це не просто прості висловлювання, які майже можна прочитати як англійську.
Але з C ++ ми також потрапляємо в якийсь відвертий дивний синтаксис. Чому std::cout << x
використовується роздрук x? Чому б не "нормальний" синтаксис виклику функції? І printf
це не набагато краще, з його аркановим форматом рядка та відсутністю розширюваності (я хочу ускладнити програму, використовуючи char*
для рядків? Або я використовую std::string
і погоджуюсь на виклик, здавалося б, непотрібного, s.c_str()
щоб отримати рядок, який можна надрукувати за допомогою printf
?
Можливо, все-таки мова вищого рівня була б кращою. Але який? І чому?
Я знаю, що тут є багато подібних питань про те, яку мову / приклад програми використовувати для навчання програмуванню. Але я думаю, що вимоги тут різні. Викладаючи програмування, ми хочемо простоти більше, ніж будь-чого іншого. Ми хочемо уникати всього, чого ще не навчили. Ми хочемо переконатись, що студент може зрозуміти все на екрані.
Мене не цікавить простота як така. Але, швидше, даючи уявлення "стороннім" про те, "як виглядає програма". А програми не прості. Але вони , як правило, виявляють певну структуру та метод до божевілля. Яка мова / програма найкраще це підкреслить?
Редагувати
Дякую за всі пропозиції на сьогодні. Деякі з вас мали дещо інший кут, ніж я передбачав.
Можливо, приклад у порядку. Я не можу літати на літаку, але я базово розумію, як виглядає кабіна, і що "робить" пілот під час польоту.
І я не навчений тесляр, але знаю пилу чи молоток, коли бачу.
Але коли ви бачите щось спільне з програмуванням у фільмах, наприклад, це, як правило, просто екрани, заповнені сміттям (як у зеленому тексті в Матриці). Це не схоже на те, що насправді може зробити нормальна людина . У ньому немає нічого впізнаваного. Той, хто не є програмістом, просто вважає, що це чорна магія.
Я не хочу навчити її літати або програмувати програмне забезпечення. Але я хотів би дати їй основні орієнтири. Просто ідея "ах, отже, це те, з чим ви працюєте. Тож це не просто випадкові символи та цифри на екрані". Навіть просто показ простого if
твердження було б відкриттям порівняно із випадковими символами та цифрами в стилі Матриці.
Деякі з вас пропонували пояснити алгоритм або використовувати псевдокод, але цього я хочу уникати. Я хотів би чогось, що просто показує, як виглядає фактичний код, так само, як вам не потрібно бути столяром, щоб дивитись на пилку і отримати базове уявлення про те, що це і як це працює.
Коли я був дитиною, ми якось поїхали відпочивати в Італію. Спускаючись, пілот впустив мене в кабіну літака. Звичайно, я не навчився керувати літаком. Але я таки зазирнув у світ пілота. Я отримав уявлення про те, як вони змушують літак їхати, що насправді робить пілот.
Це справді все, що я хочу зробити. Моя подруга не цікавиться вивченням програмування, і я не хочу змушувати її розуміти вихідний код. Але їй було цікаво, з якими інструментами чи структурами я працюю. Це символи в стилі матриці, які прокручуються по екрану? Чиста математика? Англійська в прозовій формі?
Все, що мені цікаво передати, - це дуже високе розуміння "Як це виглядає, коли я працюю".