Який хороший приклад показати непрограмісту, щоб пояснити, як «виглядає» програмування?


74

Мій друг днями запитав мене днями, чи я просто переглядаю списки чисел, коли програмую, або як це працює. Я намагався пояснити, що це, як правило, більше схоже на математичні формули, з кинутим дивним англійським словом, і що воно, як правило, переважно читабельне. Але це дуже розмите пояснення, і воно насправді мало що пояснює непрограмісту.

Але це змусило мене задуматися над тим, що може стати хорошим прикладом. Не тому, що я хочу навчити її програмуванню чи чомусь іншому, а просто дати їй уявлення про те, як "виглядає" програмний код.

І це змусило мене замислитися над тим, що насправді могло б служити хорошим прикладом. І це виявляється напрочуд важко.

Моєю першою думкою була очевидно проста програма "Привіт Світ". Але насправді це не показує нічого корисного. Це насправді не показує, як ми використовуємо функції, або змінні, або керуємо структурами потоку, як-от ifабо whileдля створення програми, яка насправді щось робить . Тут немає логіки. Програма ні на що не реагує.

Тож, можливо, щось на зразок обчислення простих чисел було б кращим прикладом. Але знову ж таки, це може бути занадто теоретично і непрактично ... (Що це хорошого? Яке відношення це має до написання "справжніх" програм?) І знову ж таки, в ньому немає суттєвої логіки управління потоком. Це просто пряма послідовність математики.

А також, якою мовою слід користуватися?

В ідеалі, я не думаю, що це повинна бути дуже "чиста" мова. Але скоріше це, мабуть, має зробити структуру чіткою. Якщо це зробить, тоді певна кількість шуму та безладу може бути нормальною. Можливо, щось на зразок С ++ насправді було б кращим прикладом, ніж Python, з цієї причини. Явні фігурні дужки та специфікатори типу є очевидними "гачками", які допомагають пояснити структуру програми або підкреслити, що це не просто прості висловлювання, які майже можна прочитати як англійську.

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

Можливо, все-таки мова вищого рівня була б кращою. Але який? І чому?

Я знаю, що тут є багато подібних питань про те, яку мову / приклад програми використовувати для навчання програмуванню. Але я думаю, що вимоги тут різні. Викладаючи програмування, ми хочемо простоти більше, ніж будь-чого іншого. Ми хочемо уникати всього, чого ще не навчили. Ми хочемо переконатись, що студент може зрозуміти все на екрані.

Мене не цікавить простота як така. Але, швидше, даючи уявлення "стороннім" про те, "як виглядає програма". А програми не прості. Але вони , як правило, виявляють певну структуру та метод до божевілля. Яка мова / програма найкраще це підкреслить?

Редагувати
Дякую за всі пропозиції на сьогодні. Деякі з вас мали дещо інший кут, ніж я передбачав.

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

І я не навчений тесляр, але знаю пилу чи молоток, коли бачу.

Але коли ви бачите щось спільне з програмуванням у фільмах, наприклад, це, як правило, просто екрани, заповнені сміттям (як у зеленому тексті в Матриці). Це не схоже на те, що насправді може зробити нормальна людина . У ньому немає нічого впізнаваного. Той, хто не є програмістом, просто вважає, що це чорна магія.

Я не хочу навчити її літати або програмувати програмне забезпечення. Але я хотів би дати їй основні орієнтири. Просто ідея "ах, отже, це те, з чим ви працюєте. Тож це не просто випадкові символи та цифри на екрані". Навіть просто показ простого ifтвердження було б відкриттям порівняно із випадковими символами та цифрами в стилі Матриці.

Деякі з вас пропонували пояснити алгоритм або використовувати псевдокод, але цього я хочу уникати. Я хотів би чогось, що просто показує, як виглядає фактичний код, так само, як вам не потрібно бути столяром, щоб дивитись на пилку і отримати базове уявлення про те, що це і як це працює.

Коли я був дитиною, ми якось поїхали відпочивати в Італію. Спускаючись, пілот впустив мене в кабіну літака. Звичайно, я не навчився керувати літаком. Але я таки зазирнув у світ пілота. Я отримав уявлення про те, як вони змушують літак їхати, що насправді робить пілот.

Це справді все, що я хочу зробити. Моя подруга не цікавиться вивченням програмування, і я не хочу змушувати її розуміти вихідний код. Але їй було цікаво, з якими інструментами чи структурами я працюю. Це символи в стилі матриці, які прокручуються по екрану? Чиста математика? Англійська в прозовій формі?

Все, що мені цікаво передати, - це дуже високе розуміння "Як це виглядає, коли я працюю".


44
Я підозрюю, що їй вже нецікаво, і якщо ви спробуєте пояснити це ще раз детальніше, ви вийдете одержимим.
Бретон

17
Але коли ви бачите щось спільне з програмуванням у фільмах, наприклад, це, як правило, просто екрани, заповнені сміттям : це теж непоганий підсумок реального програмування, чи не так?
просто хтось

15
Що, ти кажеш мені, що ви, хлопці , не програмуєте, дивлячись лише на зелені матричні номери цілий день? Чоловіче, не дивно, що C # було так важко переглядати.
Лассе В. Карлсен,

15
"Той, хто не є програмістом, просто вважає, що це чорна магія". - Будь ласка, не псуйте цю ілюзію; ми повинні якось заробляти свої гроші. :)
Джефф

18
Одного разу моя дружина побачила, як я працюю вдома, вона була дуже розчарована, коли виявила, що "полювання на помилок" не так захоплююче для перегляду, як це звучить ...
Педді

Відповіді:


35

Щоб прямо відповісти на ваше запитання - як "виглядає" програмування , я показав би їм роздруківку з великої програми. Програми для іграшок або милі речі, такі як qsort в haskell, насправді дають неправильну думку.


Так, це насправді може бути найкращим підходом. Просто дозвольте їй поглянути на фактичний код, з яким я зараз працюю
jalf

39
Звичайно, якщо вона почне критикувати ваш стиль відступу або ваше погане використання алгоритмів STL, ви можете пошкодувати про такий підхід.

6
Ха-ха, якщо вона це зробить, вона може взяти на себе налагодження стану перегонів, за яким я переслідував останній тиждень ... Це навчить її! ;)
jalf

Але не люди зазвичай задають ці питання після того, як побачити кілька екранів на makeвиході і стверджуючи , що вони не могли зрозуміти навіть , що за життя у них?
Майкл Крелін - хакер

1
Це те, чим я в кінцевому підсумку займався. Власне, нарешті мені вдалося виправити помилку, на яку я полював, коли вона вперше запитала, і просто показав їй помилкову лінію та те, чим я її замінив. У всякому разі, приймаючи це :)
jalf

51

ОСНОВНІ

10 PRINT "Sara is the best"
20 GOTO 10

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

Ви можете зробити подібне. Парне програмування. Ну, насправді ваша подруга буде спостерігачем, але вона отримає уявлення;)


12
Насправді, я думаю, що це найкраща ідея на сьогодні.

3
Це, безумовно, найкраща Сара :).
Liran Orevi

За умови, скільки разів її вже хвалили ... (відповідь надіслана 37 хвилин тому, згідно SO)
Майкл Крелін - хакер

3
+1 для парного програмування, і той факт, що ви можете проводити її покроково і показувати результати, звучить досить класно!
melaos

3
+1 хоча б за згадку про BGI :) --- Як допоміжна примітка, моя бабуся була дуже горда, коли побачила своє ім'я в одній з моїх перших базових програм - Else.
peterchen

41

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

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

Я прошу людину уявити, що у них був досить складний рецепт - наприклад, блюдо з каррі та рисом. Потім я пропоную їм спробувати записати це для тих, хто абсолютно не знає, що робить, щоб вони могли це приготувати.

Існує кілька певних етапів:

  • Зберіть інгредієнти та інструменти для роботи.
  • Підготувати інгредієнти. Це складно. напр
    • отримати 3 маленьких червоних перцю.
    • на кожен червоний перець, який у вас є, подрібніть його на шматочки площею близько 1 см.
    • помістіть шматочки червоного перцю в миску на потім.
  • Окремо до цього, викличте функцію підготовки рису, і працюйте асинхронно у фоновому режимі, поки ви продовжуєте готувати.

Я впевнений, ви бачите, куди це йде ...;)

У кулінарії та програмуванні багато спільного (як і в багатьох речах, але більше людей розуміють кулінарію, ніж будують будинок). Є етапи / подібності (як я бачу):

  • Збір : (декларація про те, що потрібно для досягнення мети, та їх збір ).
  • Підготовка : подрібнення інгредієнтів або підготовка об’єктів передачі даних тощо для першого використання.
  • Асинхронний : Можливість мати одне, а інше.
  • Функції : Приготування рису, приготування курки та приготування каррі вимагають окремих процесів, і лише в кінці ви можете мати функцію makeCurry (куряче м’ясо, рис).
  • Тестування : Переконайтеся, що, рухаючись далі, ви не пропускаєте жодних шматочків і що все проходить гладко - наприклад, переконайтесь, що курка готується перед тим, як переходити до наступного етапу.
  • Сміття : як тільки ви закінчите, ви повинні переконатися, що ви прибираєте. ;)
  • Принципи найкращої практики : Є ефективні способи робити такі речі, як кулінарія, початківці програмісти повинні навчитися на додаток до коду - іноді буває важко розібратися в голові. напр., СУХО, як ефективно рубати ножем і не їсти сиру курку;)

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

Я думаю, що для цього може не бути однієї "правильної відповіді". Але я думаю, що, можливо, кілька справді хороших ідей, які ви могли б взяти шматочки від усіх.


9
Чудова відповідь. Нарешті, хтось зосереджується на принципах програмування, а не на виродкових матеріалах, які майже не мають сенсу для непрограмістів.
CesarGon

5
У багатьох випадках я б погодився, але в цьому випадку, я думаю, це найвигідніші речі, які є найбільш актуальними. Її питання полягало не в тому, "як ти пишеш програму", а просто в тому, "як це виглядає? Ти просто дивишся на екран, повний цифр?" Я думаю, що найкраща відповідь - показати якийсь фактичний код, показати, що в ньому приховано справжнє значення та структуру. Що це насправді означає , менш актуальне. Неважливо, чи зможе вона прочитати код, але чи зможе вона усвідомити, що він складається з кількох англійських слів (if, while), а невеликі математичні вирази (x = y + z) дають базову систему відліку.
jalf

3
Я з цим взагалі не можу погодитися. Коментарі такого роду походять від фундаментального непорозуміння щодо того, як працює навчання. Всі ці абстрактні поняття могли б полегшити для вас розуміння програмування , але лише тому, що ви вже мали переваги сотень конкретних прикладів і, мабуть, певного досвіду програмування. Чому хтось абсолютно новий жадає, - це конкретні приклади насправді дійсно програмування на реальному коді, інакше ні до чого не можна пов’язувати ці абстрактні поняття, ні до особистого досвіду, до якого це стосується. Крім того, це занадто багато.
Бретон,

Вибачте, мій коментар був спрямований на CesarGon та Amadiere, а не на jalf
Бретон

Я дотримуюся свого коментаря, що Псевдокодексу буде достатньо для того, щоб людина могла хотіти досягти. Це досить схоже на код, щоб показати закодовану структуру, і в той же час пропонує ключові деталі. Якщо вона зацікавлена ​​у вивченні програмування - тоді, звичайно, потрібні мови. Але показати комусь те, що ви можете очікувати побачити замість 1 & 0 - ідеально підходить псевдокод (imho). Якщо ви хочете показати якийсь фактичний код, я б показав їй щось, що ви знаєте і можете пояснити досить добре (і я б радив не вимагати великої довжини).
Amadiere

35

Я б пояснив, що програмування дає детальні інструкції, щоб комп’ютер міг виконувати складні завдання.

Як приготувати дві чашки кави?

  1. Наповніть чайник
  2. Закип’ятити воду

  3. Кава в чашці

  4. Вилити на воду
  5. Додати цукор
  6. Додати молоко

  7. Знову зробіть від 3 до 6


9
Хоча це корисно для опису дисципліни програмування, насправді не дає уявлення про те, "як виглядає програмний код". Подруга jalf запитала, чи просто він переглядає списки чисел під час програмування: вона хоче наочно уявити, з якими сутностями працює jalf. Тому я думаю, що він хотів би показати, наприклад, функції, класи та змінні: чайники та чашки програмування , а не приготування кави.
itowlson

5
Код - це лише покрокові інструкції, я думаю, що це ідеальний приклад того, як "виглядає" програмування без відображення досить лякаючого арсеналу термінологій та мов. І наскільки ми знаємо, колись програмування буде таким.
kowsheek

1
Мені подобається цей приклад, киньте "якщо чайник порожній" перейти до 1. Тоді у вас є структура програмування.
Qwark

1
Я просто збирався запропонувати це, коли побачив цю публікацію. Я завжди кажу допитливим, що кодування - це все одно, що писати рецепти їжі. Це гідна аналогія того, що таке алгоритм.

1
я думаю, що приклад насправді поганий, але, можливо, тому, що я ніколи не писав додаток для кави. ви не програмуєте поза роботою, так?
IAdapter


15

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


Так, це майже те, що я теж думав. Просто покажіть її у вашому робочому середовищі на кілька хвилин, як я натискаю тут для запуску, тут для відкриття файлів, тут я редагую текст тощо
Фабіан Стіг

13

Думаю, вам слід завантажити якусь велику програму win32, написану мовою збірки AT&T, показати їй у блокноті та сказати: «Як бачите, для програмування потрібна надлюдина, як я».


7
+1. Нарешті, застосуйте сентенцію: "Вашому користувачеві 22 роки у загальній гуртожитку. Як це програмне забезпечення змусить його покласти?" для переповнення стека. Ти революціонер, чоловіче.
Адріан Петреску,

Курчата копають гуру Unix? Прокляття це прокляття МС, яке оплачує мої рахунки!
Джейсон Д,

1
LOL @ Коментар Карсона Майерса ... Трохи схожий на те, як я викопую прибирання калюжі блювоти ЩО БІЛЬШЕ, ніж прибирання двох калюж. :)
j_random_hacker

(Виступаючи як програміст, який часто
збирає

10

Кодуйте щось, що має якесь зрозуміле значення для непрограміста. Якби я продемонстрував Quicksort своїй матері, це не принесло б жодної користі.

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

Якщо людина користується Twitter, кодуйте щось, що підраховує послідовників його послідовників, або щось подібне.

Ці завдання досить прості, щоб їх зробити за дуже короткий час, і вони вже використовують багато основних інструментів, які ми, програмісти, використовуємо, такі як цикли, бібліотеки (для всіх задіяних матеріалів http), можливо, рекурсія.

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

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


1
Мені подобається ідея залучення Twitter. Можливо, зробіть це за допомогою HTML та JS / jQuery: це дозволяє вам підготувати щось, що вони також можуть бачити на своєму комп’ютері. Чорт, набий на Інтернетах. "І тепер кожен може скористатися цим, просто перейшовши на example.com/myawesomestuff. Наскільки це круто?"
Самір Талвар

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!")

Окрім дещо абстрактного поняття "імпорт", це дуже прямий приклад, за яким легко слідувати і "підключатись" до того, що відбувається на екрані, не кажучи вже про те, що він насправді робить щось цікаве та інтерактивне. Я думаю, що моя дружина пішла від досвіду, трохи менш загадкованого цілою концепцією, насправді не потребуючи знати багато про те, що стосується коду.

Я думаю, що ключовим фактором є можливість того, щоб хтось бачив код І це кінцевий результат поруч.


8

Був графічний пакет CLI під назвою LOGO , найвідоміший за графікою Turtle Graphics , який використовувався для малювання фігур на екрані за допомогою таких команд, як LT 90, RT 105і т.д.

LOGO - мова програмування, орієнтована на логіку.

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

Докладніше див. У логотипах або Вікіпедії, яка також має посилання на сучасні інтерпретатори логотипів.


Це, мабуть, було моє перше введення в програмування. У ньому є достатньо основ, щоб люди могли зрозуміти, про що йде мова в програмуванні, не набридаючи їм до смерті.
Роберт Полсон,

6
тоді ваш друг може задати запитання на ТО про те, як перемістити черепаху в логотип ...
Ентоні

+1 Антоній. Я б посміявся, якби побачив тут питання ЛОГОТИ ... говорячи про яке я не робив жодного ЛОГОТИПУ десятки років ... це було трохи ... ну ... нецікаво для мене ... навіть у вік 12 ...
Джейсон Д,

цьому навчали в моїй початковій школі! Не можу сказати, що це зараз мало стосунку до мого інтересу. було давно. з цим ви могли б робити круті речі, пам’ятаю, ми склали кілька (відносно) вражаючих ігор.
Нона Урбіз

@ Джейсон Д: Можливо, вам слід тоді перевірити це. stackoverflow.com/questions/1003841/…
Самір Талвар

8
  1. Комп’ютерний програміст пише програми.
  2. Не програмуючи, програміст дратує привабливих жінок на своєму робочому місці.

Тоді: (джерело: markharrison.net

)

Зараз:


3
Отже, ви говорите, що всі програмісти - соціально невмілі чоловіки. Мені прикро, коли спостерігаю, як люди пропагують цей негативний стереотип. Я дам вам [1], як запропоновано прочитати, і залишу це на цьому. [1] sas.upenn.edu/~nathanen/files/cbi-gender.pdf
Стів Ленді

1
Я програміст. Я знав багатьох, хто відповідає зображеному вище стереотипу ... і багатьох, хто цього не робить. Я все ще добряче посміявся.
Джейсон Д,

Стіве, полегши, це смішно, бо це визнано стереотипом. Два зображення розділені майже півстоліттям, але по суті ідентичні. Я думав, що всі впізнають мавпу Coulter / SpiffWorld Code, але я додав посилання на зображення. Перевірте, це здорово!
Mark Harrison

8
хе-хе, я згоден, якщо програмісти не можуть висміяти програмістів, над ким ми можемо знущатися? :)
melaos

2
Це історично неточно. На верхньому знімку молода жінка, швидше за все, була програмістом, а повзучий - швидше за все менеджером.
Marcin

7

Коли моя 5-річна дочка задала мені запитання, я змусив її "розробити" програму для маленької стрілочки "робота", яка потрапить у верхній лівий кут дошки, використовуючи блок-схематичні аркуші паперу, що означають ходи, повороти та умови. Думаю, це стосується і дорослих.

Однак я не претендую на винахід цієї відповіді.

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


3
Іноді програмування більше схоже на RoboRally ( en.wikipedia.org/wiki/RoboRally ), ніж цілком втішне.
itowlson

1
Існує початкове середовище програмування на Python під назвою [Guido van Robot (або GvR)] [1], яке справді досить добре зроблено. На диво, це включає в себе навчання різному способу керувати маленьким значком робота навколо сітки. [1]: gvr.sourceforge.net
Пітер Роуелл

itowlson, я знав цю техніку з попередника вже доступної російської програми KuMir (не пам'ятаю її назви) ще в школі наприкінці 80-х ;-)
Майкл Крелін - хакер

Пітере, спочатку я думав, що було б зручніше, якби це не стосувалося ні комп’ютерів, ні мови. Однак виявилося, що писати відступи, як це робимо в мовах програмування, є прийнятною технікою зараз, коли їй виповнилося 5 років і 4 місяці, коли ми провели чергову "сесію" програмування
Майкл Крелін - хакер

6

Я виявив, що найкращий підхід "навчити когось, що таке програмування, не навчаючи його програмуванню" - насправді просто кинути все, що пов'язане з певною мовою програмування.

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

Мовляв, що має статися, якщо користувач введе негативну суму позики? Що робити, якщо користувач не може дозволити собі позику? Звідки заява про позику може це знати? Звідки заявка на позику може знати, який банківський рахунок перевірити та яку історію платежів перевірити (тобто, хто насправді користувач)? Що робити, якщо користувач намагається ввести своє ім’я в поле суми позики? Що робити, якщо користувач намагається взяти позику протягом 75 років? Чи слід обмежувати вибір переліком доступних довжин?

І врешті-решт: програмування - це прийняття всіх цих правил і написання їх мовою, яку розуміє комп’ютер, щоб вона дотримувалася цих правил буквально. На цьому етапі, якщо це вважається необхідним, я витягнув би якийсь простий код, щоб можна було переглянути загальну мову, а потім, можливо, виписати одне з правил на цій мові.

Бонусні бали, якщо ви можете змусити свого друга зреагувати: Але що, якщо ми щось забули? Ну, тоді у нас є помилки, і тепер ви знаєте, чому жодна програма теж не є помилкою :)


5

Точно щось із графікою чи вікнами, мовами вищого рівня.

Чому? Непрограміст, як правило, теж нематематик, тому він не отримає краси сортування. Однак показ чогось намальованого на екрані ("дивись, вікно!", "Дивись, так мало набираєш тексту, і ми маємо 3D-вікно, що обертається!") Може творити чудеса;).


"дивіться, так мало набору тексту, і у нас обертається 3D-вікно!" - І якою чарівною мовою ви працюєте, яка може створити тривимірний обертовий блок у формі "так мало набору тексту?" Більшість моїх "Я можу haz box!" код становить щонайменше близько 100 LOC. (Створіть вікно, створіть екземпляр тривимірної бібліотеки, налаштуйте матриці, створіть версії / індекси, перенесіть їх у графічну пам’ять, оновіть обертання, прив’яжіть та відтворіть версії, давайте навіть не поговоримо про текстури чи освітлення ...)
Toji

Ось 3D-вікно, що обертається в одному рядку коду, який хтось створив: codegolf.stackexchange.com/a/5168 Не використовуйте це як приклад :)
1j01

5

Як це виглядає, коли ти працюєш?

Це схоже на друк.

Хоча серйозно, програмування подібне до того, якби Legos був текстом, і, щоб побудувати великий будинок Lego, вам довелося вводити багато тексту, в самий раз, підключаючи потрібні кілочки потрібними отворами. Отож, як я це взагалі описую.


Це як випікання торта, за винятком того, що інгредієнти - це слова, і для того, щоб заморозити його, потрібно було набрати багато слів.
Бретон,

Це як грати в хокей, за винятком того, що ключка - це клавіатура, шайба - це слова, а цілі - правильний синтаксис.
Бретон,

Це все одно, що боятися клоуна, за винятком того, що слова, які ви говорите, щоб змусити клоуна піти, - це слова, а наполегливість клоуна намагатись розважитись нагадує ваше щоденне розчарування керівництвом вашої компанії
Бретон,

Це як буріто, за винятком того, що квасоля - це слова, сальса - це директиви підготовки, а коржик - компілятор.
Бретон,

Це як відвідування театру, за винятком того, що сценарій складений зі слів, і ти не засинаєш за 5 хвилин до антракту.
Бретон,

5

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

Немає нічого поганого в тому, щоб розпочати роботу з привітного світу, поки ви можете показати, що насправді робить із цим комп’ютер. Потім можна вводити по одній конструкції за раз. Ось що таке програмування - внесення поступових змін і перегляд результатів.

Отже, у вас є привітальна світова програма. Тепер змініть його на

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)


Мені сподобався приклад у цій відповіді, +1!
Carl Smotricz

4

Робототехніка чудово підходить для пояснення програмування, я думаю, адже навіть прості, надумані приклади практичні. Робототехнічний еквівалент Hello World або друк списку чисел може передбачати, що робот рухається по лінії або крутиться по колу. Непрограмісту легко зрозуміти, що, щоб робот робив ЩО-небудь корисне, він повинен спочатку рухатися і позиціонувати себе. Це дозволяє пояснити просту структуру програми та управління потоком.

Ви хочете, щоб робот рухався вперед, але лише тоді, коли нічого не перешкоджає його шляху. Потім ви хочете, щоб він повернувся і перемістився знову. Це проста процедура з використанням базового управління потоком, і функції, які ви викликаєте, досить легко зрозуміти (якщо ваша платформа все одно має гідні абстракції).

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

Такі речі, як Robocode та LOGO, мабуть, дійсно хороші для цього.


4

текст заміщення
(джерело: 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;
   // ...
}

Можливо, метафорою може бути композитор, який пише музичну партитуру. Робота композитора - це інтелектуальна діяльність по створенню музики. Композитор з партитурою говорить піаністу, що потрібно грати, і робить це за допомогою точних інструкцій (нот, пауз тощо). Якщо "інструкції" недостатньо точні, піаніст зіграє щось інше.

Робота розробника програмного забезпечення полягає в інтелектуальній діяльності з вирішення проблем (проблем, пов’язаних з автоматизованою обробкою даних). За допомогою вихідного коду розробник повідомляє комп’ютеру, що робити, і робить це за допомогою точних інструкцій. Якщо інструкції недостатньо точні, комп’ютер зробить щось інше і не вирішить проблему правильно.


2
Що стосується музики, від виконавця явно очікується художньої інтерпретації буквальних нот на сторінці, для яких існує багато можливих виразів. Комп’ютери такого поняття не мають. Отже, це порівняння було б особливо погано використовувати з музикантом.
Філ Міллер

Це порівняння, мабуть, мало б сенс лише для музиканта. Скільки людей вважають читання музики такою ж незрозумілою, як читання коду?
Тодзі

@Novelocrat: звичайно, я згоден з тим, що інтерпретація є частиною історії, все ж комп’ютер також може додати незначні варіації (не з художніми намірами). Наприклад, думайте навмання (). Крім того, багато сучасної електронної музики насправді написано за допомогою "програм" (мовами графічного програмування, блок-схемами тощо)
Федеріко А. Рампоні,

3

Я б просто написав щось у псевдокоді, яке демонструє, як використовувати комп’ютер для вирішення повсякденної проблеми. Можливо, визначити, в якому магазині дешевше купити той чи інший продуктовий список чи якийсь такий.


3

Чому б просто не показати відеозапис timelapse "День у житті команди Scrum" ?


1
Проблема полягає в тому, що більшість програмістів ідентифікують те, що відбувається у цьому відео, але хтось інший побачить групу людей, яка затримується, багато базікає, бере довгий обід, обдурює і лише зрідка махає руками в напрямку комп'ютер. (Я знаю, що ми робимо, але ми не хочемо справляти на людей невірне враження, правда?)
Тодзі

3

Програміст пише інструкції для роботи комп’ютера.
Результати запуску програми на комп’ютері насправді дотримуються цих інструкцій.

Прикладом є те, що кухар буде слідувати рецепту, щоб спекти коровай. (навіть якщо це в їх голові) ... це програмування. На відміну від моєї дружини, комп’ютер точно кожного разу дотримується рецептів. Моя дружина, робить це в голові, і це виходить по-різному, але щоразу смачно ;-)

Якщо ви хочете продовжити і навчити цього більш докладно, тоді псевдокод легко зрозуміти.

напр

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

Краса коду psuedo - це майже кожен, хто може його зрозуміти, і в цьому його суть.


2

Хочете показати їй, як виглядає програмування? Просто підключіть термінал і

find / 

2

Здивований, це все ще відкрито, і здивований, що ніхто ще не дав цієї відповіді. (Думаю. Можливо, я випадково пропустив одне з 40 питань, які і так ніхто не збирається читати.)

Ваша відповідь - у вашому запитанні

Коли я був дитиною, ми якось поїхали відпочивати в Італію. Спускаючись, пілот впустив мене в кабіну літака. Звичайно, я не навчився керувати літаком. Але я таки зазирнув у світ пілота. Я отримав уявлення про те, як вони змушують літак їхати, що насправді робить пілот.

Це справді все, що я хочу зробити.

Це все, що вам потрібно зробити. Виберіть коротку вправу з підручника . Помірно довший графічний інтерфейс також може бути корисним завдяки доданим візуальним елементам. (Ігри можуть трохи збільшити довжину.) І нехай вона дивиться, як ви кодуєте . Це воно. Це те саме, що ваш пілотний приклад.

Також існує ряд онлайн-відповідей, які зроблять перегляд коду ще більш безпосереднім.


1

Я кажу, покажи йому сортування міхурів.

Це легкий, зрозумілий трюк, перетворений на офіційну мову.

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


1
Але хіба не це робить його хорошим прикладом? Ви не програмуєте комп’ютер так, як даєте вказівки людині. Комп’ютери не мають інтуїції; або можливість побачити і взяти правильний ярлик. Той факт, що сортування міхурів навіть ІСНУЄ, пояснює, що у нас взагалі є програмісти. Багато аспектів програмування залежать від того, що комп'ютери швидкі, а не розумні.
mmc

3
@ Установіть, що я дивлюсь на них ВСІ ОДИН раз і знаходжу найбільший. Що я не роблю, це дивлюся на карту 1, порівнюю її з картою 2 тощо у циклі.

3
Коли мені доводиться сортувати велику кількість предметів, наприклад, коли мені доводилося розпаковувати тисячу книжок і впорядковувати їх на своїх полицях, я думаю, я використовую щось більше на зразок вставки.
Багатий

1
Так, я б сказав, що сортування вставки є більш нормальним людським алгоритмом (хоча, як зазначав Ніл, ми зазвичай можемо розглядати більші партії, ніж 2 карти одночасно, щоб знайти найбільшу карту. Але як тільки у нас є найбільша, ми зазвичай зробити щось на зразок вставки сортування.)
jalf

1
@ Ніл, можливо, твоя здатність дивитись на них усіх відразу є абстракцією над фактичним алгоритмом сортування мозку :) Ти знаєш, що він повинен бути.
Карсон Майерс

1

Кодуйте щось швидке, що читає котирування акцій і записує їх у таблицю Excel. Це досить просто зробити за кілька хвилин і дуже швидко вражає нетехнічних типів, оскільки вони бачать практичну цінність цього.


Насправді йдеться не про "враження", а просто про те, щоб дати їм уявлення про те, як "виглядає" код. Те, що в основному називається "виклик бібліотеки А. Передати результат до бібліотеки В", ймовірно, не є ідеальним.
jalf

1
можливо, "вражати" не було правильним словом. Заміна "показує значення" замість цього
ennuikiller

Так, але я хочу насправді дати їй уявлення про те, що це означає, коли я кажу, що програмую. На що я дивлюсь, якщо не просто таблиці необроблених чисел чи одиниць і одиниць?
jalf

це буде робити, оскільки воно включає введення, випуск та обчислення (покажіть середнє значення цін на акції або щось подібне.
ennuikiller

1

Моїм звичайним вибором є отримання набору записів клієнтів з бази даних. Використовуючи C # та LINQ у Visual Studio, потрібно приблизно 10 хвилин, щоб побудувати веб-сторінку та скинути клієнтів бази даних "Northwind" у сітку. Приємно те, що "список клієнтів" - це те, що може зрозуміти майже кожен.


1

Повністю залежить від рівня її зацікавленості (або вашого рівня інтересу до неї ). Більшість людей ставлять це питання як бездіяльну розмову, і насправді не хочуть знати.

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

Для того, щоб по-справжньому навчити програмуванню, може допомогти повернутися до власного першого досвіду програмування, свого першого вчителя програмування, своєї першої мови програмування. Як ти навчився? Коли ви навчалися, які навички ви вже мали у свіжості (тобто числення)? Що спонукало вас зрозуміти, що таке змінна, або чому існує три різні типи циклів?

Мовно: використовуйте щось на зразок python. Дійсно високий рівень, не фігурні дужки, мабуть, краще.


1

Аліса, яка була розроблена в Карнегі-Меллон.

Аліса - це інноваційне середовище тривимірного програмування, яке дозволяє легко створити анімацію для розповіді історії, гри в інтерактивній грі або відео для обміну в Інтернеті. Аліса - це інструмент для вступних обчислень. Він використовує тривимірну графіку та інтерфейс перетягування, щоб полегшити більш захоплюючий, менш неприємний перший досвід програмування.


Цікаво, і я вирішив його завантажити. . . Однак це може скласти хибне враження про програмування, як сьогодні. . . "Справжнє програмування" набагато менш візуально стимулює. . .
Джейсон Д,

1

У псевдокоді:

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"));

Це демонструє концепцію функцій, об'єктно-орієнтованої та рядків, у С-подібному синтаксисі (коли я кажу С-подібний синтаксис, я маю на увазі дивні символи).
Він також показує, як код можна використовувати повторно. Зауважте, що, хоча це псевдокод, я не здивуюсь, якби якась мова прийняла цей синтаксис (можливо, JavaScript це дозволяє?).

Ви також можете адаптувати цей приклад, щоб мати цикли. Сподіваюся, це допоможе показати цій людині, як виглядає програма (оскільки це реалістичний синтаксис, і його порівняно легко зрозуміти).


Я б сказав, що цей код більше схожий на java, ніж C. . Якщо Java не вважається відгалуженням C ...
Джейсон Д,

Функція - це ключове слово JavaScript, а не ключове слово Java / C. Отже, я думаю, це синтаксис, подібний до JavaScript ... Але я згоден, що об’єктно-орієнтована його частина робить його менш C-ішним. Не те, щоб нетехнічна людина знала.
luiscubal

1

Я викладаю програмування багато років і з’ясував, що кількість способів, якими вам потрібно пояснити речі, дорівнює кількості студентів, які у вас є. Але один із методів, який працює більшу частину часу, полягає в наступному:

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

Весь код - це просто скорочення для природної мови. Написані повною мовою англійською мовою більшість програм здаються тривіальними.

Щодо хорошого алгоритму, це вже інша історія. Сумно бачити, що на багатьох курсах комп’ютерних наук більше не викладають алгоритмів і не обманюють їх.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.