Перейти к основному содержимому
Отдельные темы08ГЛАВА 08Демонстрация: показать решение за пять минут0:30задача1:30путь1:00защита1:00устройство1:00вопросысначала работает, потом как

Демонстрация: показать решение за пять минут

Прочитано0%
Квизы0/4
Тренажёрыне пройден0/1
Уровень 1 · Новичок

Зачем это нужно​

Репозиторий в порядке, проект собирается из чистого клона. Осталось показать — и это отдельный навык, которому обычно не учат вовсе.

Показ идёт на волнении, на чужом времени и часто на чужом компьютере. Работает всё то, что подготовлено заранее, и разваливается всё, что делается «по ходу». Хорошая новость: подготовка занимает полчаса и почти целиком состоит из одного приёма — скрипта демонстрации.

Эта глава — про то, как построить пять минут показа, чем скрипт лучше кликов и какая ошибка в самом скрипте чуть не увела показ в неправильную сторону. Пример — тот самый dApp зачётки из блока про Waves, прогнанный вживую.

Пять минут: что за чем​

ПЯТЬ МИНУТ: ЧТО ЗА ЧЕМ0:30что за задача и что получилосьодно предложение, без предыстории1:30главный путь целикомот пустого состояния до результата, без объяснений по дороге1:00что защищенопоказать отказ: неверные данные, чужой доступ1:00как устроенодва-три решения и почему так, а не иначе1:00вопросыоставить время намеренно: это часть показа
Порядок, который работает: результат, потом устройство, потом вопросы

Первые тридцать секунд — что за задача и что получилось. Одно предложение. Не история про то, как вы выбирали технологию, не список того, что не успели, — просто: «модуль ведёт зачётные книжки в блокчейне, оценки нельзя подделать задним числом, вот как это работает».

Следующие полторы минуты — главный путь целиком. От пустого состояния до результата, без объяснений по дороге. Эксперт должен увидеть, что работает, раньше, чем услышит, как устроено.

Минута — что защищено. Показать отказ. Ввести неверные данные, попробовать чужой доступ, нарушить правило. Работающая защита — это то, что отличает готовый модуль от заготовки, и сама она в глаза не бросается: её надо продемонстрировать намеренно.

Минута — как устроено. Два-три решения и почему так, а не иначе. Не архитектура целиком, а места, где вы приняли решение.

Минута — вопросы. Оставить её намеренно. Вопросы — часть показа, а не досадное дополнение: по ответам видно, понимаете ли вы собственный код.

Важно

Самая частая ошибка — тратить первые две минуты на «сначала я расскажу, как всё устроено». К моменту, когда доходит до показа, время кончилось, и эксперт так и не увидел, что решение работает.

Скрипт демонстрации​

ОДИН ПРОГОН ПРОТИВ ДВАДЦАТИ КЛИКОВРуками на показезабыл шаг — начинай сначаласостояние осталось от прошлого разаговоришь и кликаешь одновременноэксперт смотрит на ваши пальцыСкриптомшаги пронумерованы и подписаныкаждый запуск с новыми даннымиговоришь, пока он работаетэксперт смотрит на результатскрипт демонстрации — не показуха, а способ не потерять баллы на волненииего пишут заранее и прогоняют до показа не меньше двух раз подряд
Один прогон против двадцати кликов

Главный приём — написать программу, которая проходит весь путь сама, с подписанными шагами:

const shag = (n, t) => console.log(`\n[${n}/4] ${t}`);

shag(1, 'сеть жива');
const h = await api('/blocks/height');
console.log(' высота цепочки:', h.body.height);

shag(2, 'приложение установлено');
const si = await api('/addresses/scriptInfo/' + DAPP);
console.log(' адрес:', DAPP);
console.log(' функции и их стоимость:', JSON.stringify(si.body.callableComplexities));
Нажми на часть выражения

Живой прогон целиком:

[1/4] сеть жива
высота цепочки: 486

[2/4] приложение установлено
адрес: 3M52rTnLTitKusqJ9JCtJs4JCiptN9Yq4RX
функции и их стоимость: {"zavesti":19,"postavit":18}

[3/4] заводим зачётку и ставим оценку
заведена, блок 486
оценка поставлена, блок 486

[4/4] проверка защиты: балл вне диапазона
отказано: Ball vne diapazona 2..5

итоговое состояние: {"key":"z_z-demo-2_ball","type":"integer","value":5}

Двадцать секунд — и показан весь модуль: сеть, приложение, главный путь и работающая защита. Всё это время можно говорить, а не кликать.

Совет

Идентификатор в примере берётся из аргумента командной строки: node demo.cjs 2. Это важнее, чем кажется. Демонстрация, которую нельзя прогнать дважды подряд, на показе обязательно споткнётся о следы предыдущего запуска — а объяснять эксперту, почему «уже заведена», придётся вам.

Отвечено вопросов: 0 из 3
С чего начинают показ?
Зачем показывать отказ?
Почему идентификатор в скрипте берут из аргумента?
Отвечено верно: 0 из 3

Скрипт тоже может соврать​

Вот настоящий случай из подготовки этой главы. Первая версия скрипта на четвёртом шаге напечатала:

[4/4] проверка защиты: балл вне диапазона
ПРОШЛО — это ошибка!
СКРИПТ, КОТОРЫЙ СОВРАЛ — ЖИВОЙ СЛУЧАЙ[4/4] проверка защиты: балл вне диапазона ПРОШЛО — это ошибка!а сеть на самом деле отказала: в состоянии по-прежнему 5[4/4] проверка защиты: балл вне диапазона отказано: Ball vne diapazona 2..5после того, как проверка стала смотреть на код ответа, а не на исключениепрогон скрипта до показа нужен не для красоты: он ловит ошибки в самом скрипте
Сначала скрипт сказал, что защита не сработала. Она сработала.

Паника на ровном месте: защита якобы не работает. А посмотрели итоговое состояние — там по-прежнему 5. Сеть отказала правильно; ошибка была в самом скрипте:

try { await broadcast(t3); console.log(' ПРОШЛО — это ошибка!'); }
catch (e) { console.log(' отказано:', …); }

Функция broadcast в этом проекте не бросает исключение, а возвращает пару из кода и тела ответа. Ветка catch не срабатывала никогда. Правильно так:

const r3 = await broadcast(t3);
if (r3.status === 200) {
console.error(' ПРОШЛО — защита не работает!');
process.exitCode = 1;
} else {
console.log(' отказано:', String(r3.body.message).split(': ').slice(-1)[0]);
}
[4/4] проверка защиты: балл вне диапазона
отказано: Ball vne diapazona 2..5
Важно

Отсюда два вывода. Первый: прогонять скрипт до показа обязательно — он ловит ошибки в себе самом. Второй: в скрипте демонстрации нужен process.exitCode = 1 на неудаче. Иначе «зелёный» вывод ничего не гарантирует, а именно на него вы и будете смотреть.

Что подготовить заранее​

ЧтоЗачем
Скрипт демонстрацииПройти весь путь одной командой
Два прогона подряд до показаПроверить, что второй раз тоже работает
Окно терминала с крупным шрифтомЭксперт читает с расстояния
Заготовленные данныеНе набирать длинные адреса руками при всех
Открытый нужный файлОдно окно редактора, а не двадцать вкладок
Ответ на «что бы вы улучшили»Этот вопрос задают почти всегда
Совет

Крупный шрифт — не мелочь. На показе смотрят на экран сбоку и с расстояния, и шрифт, удобный вам, эксперту не читается. Проверяется это за пять секунд: отойти от монитора на два шага.

Как отвечать на вопросы​

«Почему выбрали именно это?» Назвать альтернативу и причину отказа от неё. «Взял состояние аккаунта, а не отдельный токен на каждую зачётку: токен стоит 1 WAVES за штуку, а запись — 0,001».

«А если сделать вот так?» Если предложение лучше — так и сказать. Признать хорошее решение — не потеря, а показатель того, что вы понимаете область.

«Что не успели?» Назвать честно и коротко, без оправданий, и сразу — что было бы следующим шагом.

«Не знаю». Законный ответ, если за ним идёт «но проверил бы так-то». Выдуманный ответ распознаётся мгновенно и стоит дороже незнания.

Интересный факт

Вопросы почти всегда про границы: что будет при пустом вводе, при двух одновременных запросах, при отказе сети. Если вы прошли главы про недетерминизм, конфликты версий и проверки платежей — половина ответов у вас уже есть.

Отвечено вопросов: 0 из 3
Зачем в скрипте демонстрации process.exitCode = 1?
Эксперт предложил решение лучше вашего. Что делать?
Про что чаще всего спрашивают?
Отвечено верно: 0 из 3

Типичные ошибки​

Ошибка 1. Начинать с архитектуры.

Время кончится раньше, чем эксперт увидит работающее решение.

Ошибка 2. Кликать руками.

Забытый шаг, оставшееся состояние, невозможность говорить и кликать одновременно.

Ошибка 3. Не прогнать скрипт заранее.

Разобрано выше: ошибка бывает и в самом скрипте.

Ошибка 4. Показывать код вместо результата.

Код эксперт прочитает сам и внимательнее вас. Показ — про поведение.

Ошибка 5. Оправдываться.

«Тут не успел», «тут костыль», «вообще-то я хотел» — каждая такая фраза обращает внимание на слабое место, которое иначе могли и не заметить.

Ошибка 6. Не оставить времени на вопросы.

Вопросы — часть оценки, а не то, что после.

Отвечено вопросов: 0 из 3
Почему не стоит показывать код на демонстрации?
Что делать с недоделанным местом?
Скрипт демонстрации напечатал ожидаемый текст. Достаточно?
Отвечено верно: 0 из 3

Шпаргалка по главе​

ЧтоКак
Структура показа0:30 задача → 1:30 путь → 1:00 защита → 1:00 устройство → 1:00 вопросы
Скрипт демонстрацииподписанные шаги, новые данные из аргумента, код возврата на неудаче
Проверить скриптпрогнать дважды подряд до показа
Шрифт терминалакрупный; проверка — отойти на два шага
Показыватьответ системы, а не свою уверенность
На вопрос без ответа«не знаю, проверил бы так-то»
Недоделкикоротко и честно, без оправданий

Словарь главы​

ТерминЧто это
Скрипт демонстрацииПрограмма, проходящая весь путь решения одной командой
Главный путьСценарий от пустого состояния до результата
Показ защитыНамеренная демонстрация отказа на неверных данных
Код возвратаНенулевой при неудаче: делает «зелёный» вывод осмысленным
Идемпотентность показаСвойство скрипта отрабатывать дважды подряд

Цель: скорость ≥ 95 зн/мин, точность ≥ 90%

const shag = (n, t) => console.log(`\n[${n}/4] ${t}`);

Что должен уметь после главы​

  • построить пять минут показа в правильном порядке;
  • написать скрипт демонстрации с подписанными шагами и честным кодом возврата;
  • сделать скрипт таким, чтобы он отрабатывал дважды подряд;
  • показать работающую защиту, а не только главный путь;
  • подготовить рабочее место: шрифт, данные, открытые окна;
  • отвечать на вопросы про границы и честно говорить «не знаю».

Проверка по главе​

Сводная проверка по всей главе: 10 вопросов, 5:00 на всё, без подсказок по ходу. Вопросы показываются по одному, ответ изменить нельзя. Если время выйдет — экзамен завершится с тем, что успел ответить. Пересдавать можно сколько угодно раз.

Экзамен по блоку: Сдача и демонстрация

Сводная проверка по 2 главам блока: 15 вопросов, 10:00 на всё, по одному вопросу, без возврата. Пересдавать можно сколько угодно раз.

Готовность: экзамены глав сданы 0 из 2. Блок можно сдавать и так, но шанс выше после всех глав.

Куда дальше: проверенные ресурсы​

Видео по теме

ВидеоКак проводить демо в IT — сценарий, показ и обратная связь от стейкхолдеров | Урок 15Славный Проджект | в ИТ с нуля
ВидеоЗащита проектов — Промышленное программирование — Школа программистов МШПМосковская школа программистов (МШП)
ВидеоДиплом программиста: типичные ошибки и правильный подходАлександр Викторович
ВидеоКак провести убойную презентацию без запинкиИскусство харизмы
ВидеоПрезентация и защита результатов исследовательской работыМАГУ Апатиты

Комментарии

Обсуждение живёт в GitHub Discussions и грузится с чужого домена — поэтому только по нажатию.