Як я можу пояснити батькам, що я вивчаю мови програмування?


64

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

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

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

Хтось має хороші аналогії з реальним? Освітлюючі приклади, що спричиняють "а-ха" моменти? Чи повинен я дійсно показати короткий і простий фрагмент коду 60-річному віку, не маючи досвіду інформатики (ні академічного)? Якщо так, то якою мовою я користуватись? Хтось тут стикався з подібними проблемами?


Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
DW

3
Це запитання отримало зворотний зв'язок та один чи декілька близьких прапорів, якщо я правильно розумію панель. Прошу залишити коментар, щоб я міг його покращити. Хоча я дещо ховався тут, я вперше беру активну участь на сайті і, можливо, я не знайомий з деякою політикою.
efeffe


1
Я просто не можу зрозуміти, чому це питання є більш підкресленим, ніж питання, пов'язане з конкретною проблемою, що є більш корисним. Це питання є смішним і було смішно підкреслено. Неймовірно!
nbro

2
@nbro Я не розумію, що насправді сміливо стосується питання, і я не впевнений, як ти вирішив, що конкретне питання "корисніше", ніж інше.
efeffe

Відповіді:


59

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

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

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

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

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


27
Сортування колоди карт - це також простий спосіб ввести поняття алгоритмів.
Морвен

2
@Morwenn Це правда! Є безліч алгоритмів, які ми виконуємо в повсякденному житті! Картки для розсилки є алгоритмічними, трафік має багато алгоритмічних аспектів, хоча вони засновані на подіях і не є обов'язковими. Готування є алгоритмічним, коли ви робите це на автопілоті. Причина, що мені подобається, полягає в тому, що всі вивчали один і той же алгоритм в початковій школі, тоді як для сортування списку чисел стратегія людей відрізняється, і вони не є методичними: вони намагаються знайти зразки близьких, сусідніх чисел, і не всі знають замовити колоду карт у будь-якому випадку (це серця перед лопатами?)
Lieuwe Vinkhuijzen

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

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

@JAB Це дивовижно! Але ти, мабуть, уже знаєш Кіксорта в глузді своєї думки. Перевага пояснення додавання та сортування полягає в тому, що будь-хто має один і той же алгоритм додавання, але жоден лайперсон не має жодного методичного алгоритму сортування. З іншого боку, це може бути перевагою! Ви можете пояснити різні алгоритми. Це маршрут, який я проходжу, коли я розмовляю з ким-небудь математично налаштованим за межами cs, і він стикається з концепцією різних алгоритмів для одного завдання з різними часовими рамками, і чому нижні межі важкі.
Ліюве Вінкхуйзен

18

Я б спробував щось подібне:

Програмісти можуть сказати комп'ютерам, що робити. Для цього їм потрібно використовувати мову програмування. Це мова, яку розуміють і комп'ютери, і люди. Наприклад, якщо ви редагуєте документ Word і натискаєте клавішу, на комп'ютері відобразиться натиснута вами літера. Це тому, що програміст написав програму, кажучи: Якщо користувач натисне "A", покладіть "A" в документ. Якщо користувач натискає "B", помістіть "B" в документ тощо. Комп'ютер просто слідує правилам програми, які написав програміст.

Зараз інколи програмісти помилково пишуть дурне правило. Комп’ютер у будь-якому разі намагатиметься слідувати дурному правилу, але якщо ви будете керуватися поганим правилом, трапиться щось погане. Наприклад, іноді, коли ви редагуєте документ Word, раптом усе застигає, і комп'ютер більше не реагує. Це може бути тому, що якийсь програміст Microsoft написав програму, що не є досконалою.

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

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

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

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


12

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

Для приготування перогії: Доведіть до кипіння великий горщик злегка підсоленої води. Кидайте перогії по одному. Вони робляться, коли пливуть на вершину. Не кип'ятіть занадто довго, інакше вони будуть ситими! Вийміть щілинною ложкою.

Yikes. Розглянемо добру пораду бабусі. Кидайте їх по одному ... так що всі вони мають різну тривалість часу, коли вони знаходяться в горщику. Зрозумів. Вони робляться, коли пливуть на вершину . Ну скільки це "їх"? Я ловлю кожного з них, коли він з'являється? Чи зачекаю, коли 80% підняться на вершину, а потім їх усі? Це божевільно неточно. Не кип'ятіть занадто довго, інакше вони будуть ситими! Як я міряю, коли вони збираються промокнути, щоб вони не були занадто довгими? Якщо одночасно п’ять спливуть на вершину, я встигну їх усіх отримати?

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

Чи не було б величним, якби хтось спеціалізувався на тому, щоб зробити рецепти більш надійними? Хтось сказав, що "ми можемо перекласти перогії, щоб вони вискочили та вийшли з води!" або "ми можемо додати перогію спеціальний барвник, безпечний для вживання в їжу, звичайно, який надає їм різних відтінків, і ми знаємо, що першими вийде найтемніший, оскільки вони найбільше ризикують стати мокрими". Ми хочемо, щоб експерт міг прийняти цей рецепт і виправити можливі проблеми з ним. Життя перогі-кухарів у всьому світі буде простішою, і менше соковитих макаронно-картопляних грудочок буде згодовано собаці.

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


7

Ось як я (спробую) пояснити це своїй мамі:

Мови програмування люди використовують для надання інструкцій до комп'ютера. Все, що робить комп’ютер, робиться через деякий комп'ютерний код, написаний програмістом мовою програмування.

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

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

Одні використовуються для створення веб-сайтів, інші - для створення додатків для ноутбуків (наприклад, Microsoft Word).

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

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

І так, в основному, це те, що я вивчаю: Як різні частини мов програмування впливають на продуктивність програміста? Які частини певної мови покращують написання коду для веб-сайту? Чому деякі мови популярніші за інші?

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


7

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

Мови програмування використовуються для надання інструкцій комп'ютерам. Людські мови використовуються для передачі ідей іншим людям та для формування власних думок. Гіпотеза Сепіра-Уорфа говорить про те , що мова , який ви використовуєте впливає на вашу думку. (Ступінь, на якій справжня гіпотеза Сапіра-Ворфа, є дискусійною, але ми можемо просто визнати це істинним при обговоренні мов програмування. В іншому випадку ви можете також відмовитися від доктора наук. 😜)

Існує велика різноманітність людських мов, деякі з особливостями, які ми вважаємо екзотикою. Наприклад:

  • Деякі мови вимагають, щоб ви вказували доказовість у кожному твердженні: чи це твердження, пов'язане з вашим власним досвідом, вашим власним висновком, чутками, домислами тощо.
  • Деякі мови утворюють величезні слова шляхом аглютинації; кожне слово може бути сильно модифікованим, щоб кодувати багато інформації про його граматичну роль. Інші мови навряд чи змінюють слова взагалі і покладаються на порядок слів або частинки, щоб висловити цю інформацію.
  • Мови відрізняються за розміром лексики . У деяких мовах є слова, які можна перекласти лише циркуляційним текстом (наприклад, 엄친아 ). Деякі мови мають яскраві вирази, які настільки гарні, що інші мови запозичують їх (наприклад, Schadenfreude).
  • Деякі мови не мають поняття зліва / справа; ви повинні висловити все з точки зору північ / південь / схід / захід.
  • Деякі мови не мають цифр. Мови також різняться за кількістю поширених назв кольорів .
  • Мови відрізняються за своєю фонотактикою. Наприклад, частота складів змінюється, японці схильні використовувати багато простих складів, а китайська - повільніше, але кодує інформацію в тонах.
  • Мови різняться за щільністю інформації . Якщо ви подивитеся на китайсько-англійський-французький переклад, ви побачите, що китайська версія дуже компактна на папері, а французька займе найбільше місця.
  • Деякі мови, як-от англійська, є безладною: кожен може вільно запозичити слово з іншої мови та англійською мовою. Інші мови, як французька, мають стандартизуючий орган, який чинить опір змінам. Наприклад, ісландський від природи жорстоко консервативний.

Чи є найкраща мова, об'єктивно кажучи? Відповідь може залежати від того, що ви намагаєтесь зробити.

  • Якщо ви намагаєтеся таємно спілкуватися по радіо, Навахо було б гарною ставкою. (Згадайте свою улюблену мову "лише для запису".)
  • Якщо ви намагаєтесь написати попередження майбутнім поколінням, і напис повинен бути зрозумілим через кілька тисяч років, ви можете скористатися китайською (через велику кількість ораторів та стабільність її системи письма) або, можливо, Англійська (яка кардинально змінилася за останнє тисячоліття, але дуже широко відома). (C та JavaScript, ймовірно, житимуть "назавжди".)
  • Китайці, маючи багато омофонів, чудово підходять для кару . (Поезія Perl)
  • Можливо, важливий нейтралітет, і в цьому випадку ви можете вибрати есперанто. (Java розроблена таким чином, щоб вона була портативною; C - менше.)
  • Можливо, вам потрібно висловити думку з повною точністю, і жодної природної мови не вистачить. Ви повинні вдатися до Іткуїла !
  • Переклад між деякими мовними парами (наприклад, арабсько-англійською ) може бути дуже важким через великі культурні відмінності та культурні конотації певними словами. Так само деякі ідеї не легко висловити в певних комп'ютерних мовах, оскільки поняття просто не існує (наприклад, рекурсивність хвоста).

Зрештою, все на комп’ютері перекладається на машинну мову, але вибір правильної мови для роботи може сильно вплинути на продуктивність, надійність, продуктивність та спритність вашого програмного забезпечення. Для "серйозних" проектів ми вибираємо мови жакетів, як Ada або Java, і Ruby або Perl для максимальної чіткості . Для запитів до бази даних SQL є звичайною мовою; написання власного коду С було б ідіотичним.

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


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

@TextGeek Навіть в англійській мові є діалекти. Люди сперечаються про мовні правила, як подвійний негатив та закінчення речень з прийменником. Мова постійно розвивається, іноді суперечливо. Популярність текстових повідомлень призвела до появи нових скорочень. В американській англійській мові ви можете перетворити будь-який іменник у скандал, додавши суфікс "-gate". Я не думаю, що ви повинні бути двомовними, щоб цінувати мовні інновації та різноманітність.
200_успіх

3
  • комп'ютерні мови дещо орієнтовно відносяться до людських мов. вони використовують стандартні / загальні / спільні слова. вважають, що існує тисяча людських мов, деякі неіснуючі, інші - активні, і їхній словниковий запас та використання постійно змінюється з часом. деякі люди створюють нові корисні слова, щоб висловити поняття, які раніше не були виразними. Іншим аспектом, що перекривається, комп’ютерною мовою та людською мовою є граматика . деякі мови, наприклад, англійська, мають дуже складну граматику. врахуйте всі різні терміни та складні правила, які ними керуються. інші мови не мають однакових часів . інша кореляція - з частинами мовикатегорії, наприклад, іменник, дієслово, прислівник, прикметник тощо, вони функціонують дещо як типикомп'ютерними мовами. уявіть створення нових мов з різними частинами мовних категорій, які раніше не розглядалися, або з новими комбінаціями частин мови, які походять з різних мов тощо; тому зауважте, що лінгвістика має зв'язок з інформатикою, наприклад, esp в теорії мови Чомського.

  • програмне та апаратне забезпечення часто пов'язані з двигунами та машинами і навіть названі після цього. є стара аналогія програмного забезпечення, що намагатися змінити складну виробничу систему 24/7 - це як змінити двигуни літака, коли він знаходиться в польоті . також зауважте, що реактивні двигуни відрізняються високою складністю і передбачають великі точні характеристики взаємозамінних деталейі тут є деяка аналогія з комп'ютерними мовами, які керують обладнанням. уявіть всю складність документів, які точно описують, як створювати реактивні двигуни: всі деталі, як вони побудовані, як вони з'єднуються між собою, як вони збираються тощо; їх створюють / складають інженери, використовуючи точний формат / структуру / звичайні правила; програмне забезпечення дещо аналогічне цьому.

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

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


1
Чому спростували цю? Я думаю, що існує багато розумінь. Не можна погодитись у всіх питаннях, але можливостей тут багато. +1
efeffe

3

Ви просто говорите: "Я допомагаю хлопцям, які навчають комп'ютери працювати"

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


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

@effeffe: але вони знають, що комп'ютери існують? І вони, ймовірно, мають деяке уявлення про те, що є речі, які називаються "програми", "програми" або "програми", навіть якщо вони ніколи свідомо не використовували комп'ютер самі. Отже, для простоти програмування - це, крім усього іншого, створення програми, записуючи інструкції, які може виконувати комп'ютер. Звичайно, знадобиться багато часу та інструкції, щоб вони оцінили будь-яку деталь програмування або про те, як її можна вдосконалити, але якщо вони знають, що комп’ютери та програми з часом стають кращими, вони принаймні знають про комп'ютери.
Стів Джессоп

3

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

Люди створили комп'ютери, тому ми знаємо, як працює розум комп’ютера. Але комп'ютер зазвичай не "знає", як працює наш розум. (Або яким був наш власний намір, коли ми пишемо хитромудрий і тонко створений помилок, який щасливо живе в мішанках нашого коду протягом багатьох циклів;)) Таким чином, нам належить вдосконалити мову, яку ми використовуємо для спілкування з ними, і зменшити можливості для непорозумінь. І це ти робиш. Аналогії, такі як перевірка орфографії або граматики, звичайно, дуже вітаються в цьому контексті.


3

Ось дві аналогії, які можуть бути вам корисними:

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

  • Я допомагаю розробляти кращі інструменти для людей у ​​своїй галузі. Так само, як людям у виробничій галузі допомагають такі інновації, як акумуляторні дрилі, лазерні різаки та 3D-принтери (жоден з яких не існував 60 років тому), людям у галузі розробки програмного забезпечення допомагають більш потужні, точніші, надійніші або більш прості у використанні мови програмування та їх функції.


2

Ну, швидше за все, у вас є якісь причини для вивчення мов - використовуйте цю причину. Наприклад:

Я намагаюся зробити комп’ютери та їх додатки дешевшими, простішими у користуванні та безпечнішими.

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

Мови вниз по сходах комп'ютера. Люди, яким ви намагаєтесь пояснити, напевно, не знають, що таке алгоритм , тим більше, що існують різні способи подання зазначеного алгоритму, які є більш-менш корисними. Ви можете пояснити що завгодно, якщо пройдете досить обережно, але будьте готові пройти багато шарів, якщо хочете пояснити щось настільки "глибоке", як "мова програмування RnD". Це допомагає, якщо люди, яких ви пояснюєте, вже добре поводяться з математикою, але це так само рідко, як знання комп'ютера :)

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

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


▲ за пропозицію поетапного та щадного підходу.
PJTraill

1

Я вважаю, що найкращі аналогії пристосовані до людини, з якою ти розмовляєш. Вони художник? Обговоріть, як те, що ви робите, еквівалент вивченню теорії, як зробити кращі пензлі, лише цьому полі лише 60 років замість 600! Equestrians? Порівняйте його з розробкою конкретних взуттєвих взуття за ці роки.

Якщо вони дійсно хочуть зрозуміти краще, мій улюблений спосіб пояснити це - поговорити про заповнення податкових форм та інструкцій у кожному рядку. Я вважаю, що більшість людей старше 20 років мають певний досвід роботи з IRS Form 1040, і ті поля, які ви заповнюєте, досить добре відповідають розмові про призначення змінних. Тоді я зазначаю, що програмне забезпечення робить еквівалент приблизно 2 мільярди з цієї хвилини (складене число, але воно отримує крапку впоперек). Якщо ви вивчаєте комп'ютерні мови, люди зрозуміють, чому насправді кращі інструкції мають значення =)

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

Я часто говорю про вбудовані системи, тому іноді зливаю аналогію Форми 1040 з роботом, який готує буханець хліба (або 500). Зазвичай це працює добре, хоча чомусь перехід від податкових форм IRS до виготовлення чогось, що залишає гарний смак у ваших устах, є дуже важким розтяжкою для деяких людей.


1

У ваших батьків є якийсь комп’ютер. Напевно, не один, але багато. У них може бути настільний комп'ютер, ноутбук, телефон або iPad. Якщо ні, то у них є пральна машина або відеозапис, DVD-програвач або щось із комп’ютером всередині.

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

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


-1

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

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

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


Автор не вивчає програмування. Вони вивчають дизайн мов програмування.
Девід Річербі

@DavidRicherby Ось чому я запропонував використовувати приклад ОП, дивлячись, як виглядають рецепти різних видів ручної роботи. Мабуть, вони теж дуже різні.
Thorbjørn Ravn Andersen

-1

Це магія!

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

Якщо вони не впевнені, я попросив увімкнути їхній смарт-телефон і розповісти, як все на цьому дійсно працює. Зазвичай вони кажуть: "Я не знаю, це просто так. Я натискаю кнопки і все відбувається". Тоді я їм кажу: "Так, але я знаю, що насправді відбувається, і це в основному те саме, що Гаррі Поттер махає паличкою і каже:" Hocus pocus "" Для всіх намірів і цілей, для непрофесійних працівників, я думаю, що це цілком законне пояснення.

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

Епічний провал

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

Мертві закінчується

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


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

На жаль, можливо, ні, але програмування взагалі є закритою книгою для 99 +% світового населення. Я протягом багатьох років витрачав неабияку кількість часу, намагаючись змусити непрограмістів зрозуміти програмування без успіху. Пояснення тонкощів і делікатесів різних типів систем схоже на пояснення фізики субатомних частинок тим самим людям - їх очі засклінуть, і вони, ймовірно, будуть ввічливими, але вони цього не отримають. І це нормально - їм НЕ ПОТРІБНО це розуміти, і, швидше за все, вони НЕ ДАЛЮЮТЬСЯ, щоб вони не розуміли цього. Досить, що МИ робимо. :-)
Боб Джарвіс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.