Хочу сразу предупредить, что речь идет о ребятах, которые раньше никогда не программировали, но по тем или иным причинам хотят научиться. Упор на языки: python, c#, c++, c и прочие.
Краткий вопрос: с чего начать обучение программированию, чтобы у новичка (студента/школьника) оставалось минимум вопросов?
Длинный вопрос:
Предположим, вы – учитель, чья задача научить школьника/студента программированию. С чего можно начать первое занятие? Можно начать рассказывать о системах счисления, архитектуре процессора, компиляции, интерпретации и прочих вещах, но разве они и вправду так нужны новичку, которому надо просто написать змейку?
Я вижу два пути.
Первый – начало изучения программирования через ассемблер. Так человек сразу поймет, что и как работает в компьютере. Ему будет очень легко понять типы данных, функции, структуры и другие абстракции высокоуровневых языков. Думаю, не надо комментировать, чем этот способ плох (в конце концов, ученик просто может потерять интерес из-за сложности и малой скорости обучения).
Второй – начало изучения программирования через огромные абстракции. Например, по справочнику - метаниту. Этот способ плох усваиваем материала. Приведу пример, связанный с типами данных. Сначала человек узнает о базовых типах данных (int, string, bool, char и т.д.), потом узнает, что может сам создавать типы данных, потом, что есть классы, а есть структуры. Классы передаются по ссылке, а структуры копируются. Человек узнает о списках и массивах, которые, почему-то тоже передаются по ссылке и так далее. Этим примером я хотел показать, что уча язык по справочникам, придется очень много запоминать. Сложно будет понять, почему работает та или иная базовая вещь, т.к. нет понимания, как все устроено на более низком уровне.
А теперь, подводя итоги, я задаю вопрос: с чего начать обучение программированию, чтобы у новичка (студента/школьника) оставалось минимум вопросов?
Для начала начать с общего образования опытного пользователя. Чтобы не путали что такое файл, диск, операционная система, биос, консоль, окно.
Байт, килобайт, память, кеш, процессор, шина, интерфейс.
Базовая сеть.
Предположим, вы – учитель, чья задача научить школьника/студента программированию. С чего можно начать первое занятие? Можно начать рассказывать о системах счисления, архитектуре процессора, компиляции, интерпретации и прочих вещах, но разве они и вправду так нужны новичку, которому надо просто написать змейку?
Начинать нужно с того, зачем вообще это нужно ученику, и что у него должно получиться в результате.
А что именно изучать - проще посмотреть как это сделано у других. Например глянь как устроен курс CS50 - это не только лишь программирование, а в целом компьютерные науки.