Вообще технология обучения "программированию" глубоко ошибочна.
Всеобщее увлечение "программированием" любым энтузиастом с
паяльником и микроконтроллером с программатором на столе породило
толпы "претендентов" на "специалистов" по микроконтроллерам (МК). Я
сам прошёл такой же путь, но работал напрямую на производство с
весьма жесткими требованиями к конечному результату по надёжности.
Вообще, по моему опыту, разработка начинается с разработки ТЗ и
алгоритма работы конечного устройства с МК. Это самый психологически сложный этап работы - зачем нужны какие-то бумаги, "раскрывающие" секреты работы программиста? Отсутствие такого "бумажного" этапа разработки приводит в конечном итоге заказчика к убеждению невероятной "сложности" разрабатываемой программы и, следовательно, её дороговизны. "Программист" в данном случае получает свой "гонорар" по максимальному "тарифу", но ... теряет доверие заказчика. Это не просто рассуждения, а конкретные результаты моей работы с несколькими "программистами" с уровнем "всё в одном".
В учебниках по дискретной математике это описано максимально подробно и понятно, но ... подавляющее большинство студентов и "программистов" даже не подозревают о существовании таких методик. Это им практически не нужно ... и так сойдёт.