⚠️ Обращайте внимание на даты.
Этот блог больше не ведётся с 17 января 2023, и на тот момент с написания этой страницы (05.10.2015) прошло 7 лет.
Я довольно часто занимаюсь т. н. “менторством”. Просто так, мне весело. Но довольно часто начинаю замечать, что часть моих ответы на вопросы подчиняются определённому алгоритму. После некоторого анализа я выяснил вот что.
- Ко мне обычно обращаются за решением конкретной задачи. И обычно оказывается, что задача вопрошающему не по зубам. Тогда я выясняю, где именно загвоздка и даю задачу именно на эту загвоздку.
- Иногда этот алгоритм заходит в рекурсию – загвоздка оказывается не по зубам, тогда находится загвоздка в загвоздке и разбирается, пока не найден ответ.
- Когда загвоздка разрешается, можно вернуться к предыдущей задаче, если таковая существует.
Ничего не напоминает?
Стек вызовов
Когда вы вызываете функцию (почти в любом языке), внутри система сохранит “откуда вызвали”: какие локальные переменные там были, флаги процессора (если применимо), аргументы. Когда функция завершается, достаёт последнюю сохранённую запись и возвращает данные из неё (локальные переменные, флаги) на соответствующие места, после чего передаёт управление на место вызова, записав в условленное место возвращённое значение.
Т. е. с “местом сохранения” производятся две операции: “сохранить” и “загрузить”, причём при загрузке достаётся (и убирается оттуда) запись, которая была сохранена последней. “The Last to get In is the First to get Out”, LIFO. Это стек.
Аналогия
Более крупные программы строятся из более мелких функций. Они либо вырабатывают результат сами, либо обращаются к другим функциям.
Вызовом функции здесь является поиск более мелкой проблемы, а возвратом из функции – разрешение проблемы. Вот пример такого взаимодействия:
- Как создать первое приложение на Rails?
- Как установить свежий Ruby?
- Как установить RVM?
- Как запустить Linux в Windows?
- Где найти VirtualBox?
- Где скачать дистрибутив?
- Как открыть терминал?
- Как запустить Linux в Windows?
- Как установить RVM?
- В чём редактировать код на Ruby?
- Утилиты
rails
нет. Где её найти?- Что такое
gem
?
- Что такое
- Как установить свежий Ruby?
В чём-то напоминает оглавление книги, только каждая отдельная запись/глава является задачей.
Это можно реализовать в виде асимметричного чатика 1-на-1, ментор и ученик. Ученик, по большей части, отвечает на вопросы в чатике, посматривая на текущее состояние “стека задач”, а ментор управляет этим стеком: добавляет при необходимости более мелкие задачи, и возвращается к предыдущей, если текущая решилась.
В самом чате при этом много оформления не нужно, а вот в описаниях задач неплохо бы подогнать хотя бы комплект форматирования, представленный в этом блоге: Markdown, подсветка синтаксиса, TeX-подобные формулки.
Может, однажды у меня даже дойдут руки это сделать. Под это, на вид, подходят NodeJS и Clojure, на серверной части оба умеют асинхронно работать с вебсокетами, и в браузерах тоже можно оба запустить.