Ось чому ваш цикл читання-виведення-друку такий дивовижний

Одна з речей, яка робить технічну спільноту настільки особливою, це те, що ми завжди шукаємо шляхи ефективнішої роботи. У кожного є свій улюблений набір інструментів, завдяки якому вони працюють краще. Як професійний розробник інтерфейсу, Chrome DevTools та Node.js read-eval-print-loop (REPL) стали моїми улюбленими інструментами на початку. Я помітив, що вони дозволили мені працювати ефективніше і дозволили швидше пізнавати нові речі.

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

«Причиною номер один у тому, що школи відходять від Java як мови викладання, є високі бали для програм Hello-world». - Стюарт Хеллоуей

Що таке REPL?

REPL означає цикл читання-оцінки-друку, і це в основному все.

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

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

За словами Стюарта Хеллоуея, відсутність REPL в Java є найважливішою причиною того, чому школи почали переходити на інші мови для викладання програмування. Деякі люди навіть використовують REPL для написання кращих модульних тестів.

Я вже сьогодні використовую REPL (подібний інструмент)?

Це основне пояснення могло нагадати вам деякі інструменти, якими ви користуєтеся щодня. Якщо ви знаєте і користуєтесь одним із наведених нижче інструментів, відповідь «так»:

  • Інструменти розробника вашого браузера (наприклад, Chrome DevTools)
  • Ваш термінал / оболонка
  • Блокноти Юпітера
  • Процес REPL у Clojure
  • Repl.it, jsfiddle.net або jsbin.com
  • Інтернет-валідатори регулярних виразів

Чому REPL так корисний?

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

Перебуваючи в потоці

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

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

REPL не потрібно компілювати або розгортати ваш код. Це призводить до дуже короткого часу відгуку (<100 мс). Таким чином, ви можете перевірити свої гіпотези, не втрачаючи потоку.

Позитивне підкріплення

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

Це ефект, який мене найбільше приваблює. Ваш мозок вчиться віддавати перевагу певним діям, коли вони були винагороджені в минулому. Ця винагорода може бути бонусом від вашого боса після видатного місяця або простою "Чудовою роботою!" від вашого інструктора з лижного спорту.

Щоразу, коли ваш експеримент REPL вдається, і ви вирішуєте головоломку / проблему, ваш мозок також відчуває винагороду! Це також має місце, коли ви кодуєте в загальній IDE. Але REPL реагує швидше і дозволяє частіше повторювати. Отже, більше експериментів призводить до більшого підкріплення. Цей ефект змушує вас частіше використовувати REPL і не стежить за м'ячем (замість того, щоб відволікатись, перевіряючи електронні листи).

Цифрова амнезія

Тенденція забувати інформацію, яку легко знайти в Інтернеті за допомогою Інтернет-пошукових систем. (джерело)

Зізнаюся, я часто поєдную синтаксис Java, Python та JavaScript, оскільки цю інформацію можна знайти в Інтернеті. Я б запитав себе: "Чи потрібно використовувати add () , append () або push (), щоб додати новий елемент до масиву в JavaScript?". Таким чином, для мене прикладом цього ефекту є згадування назв методів API та посилань на мови.

У REPL я бачу доступні функції відразу з автозаповненням:

Чудова річ у тому, що це працює понад стандартні об’єкти мов програмування. Це працює для всіх фреймворків та модулів , що робить REPL потужнішим, ніж ваша IDE! Більше немає необхідності порівнювати номери версій модулів та посилання на API:

«Істину можна знайти лише в одному місці: код». - Роберт К. Мартін, «Чистий кодекс»

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

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

Оновлення 13.02.2019:

Я також написав допис у блозі про використання REPL у середовищі Cloud Foundry.

Перегляньте це відео від DJ Adams, якщо хочете побачити REPL в дії :)