Добавить в корзинуПозвонить
Найти в Дзене

«Тупые» вопросы, которые на самом деле умные

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

Есть вопросы, которые заставляют новичка в программировании чувствовать себя глупым. Если он задаст их и получит ответ — ответ будет настолько очевидным, что будет непонятно, как вообще можно было такой вопрос задать. Но на самом деле эти вопросы показывают развитое и работающее мышление.

Что за вопросы

Такие вопросы очень хорошо показывают, что человек привык мыслить системно и анализировать, прорабатывать детали. Не хватает ему только знаний. И на самом деле, этих вопросов не будет появляться, только если не будет никаких вопросов. Если человек не думает, а делает как делается.

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

Вот примеры таких вопросов:

Пример 1. Как удалить неправильный пароль?

Ученик делает программу, в которой нужно вводить пароль. Программа получает его и проверяет, если правильный, то даёт человеку какую-то информацию, если нет — не даёт ничего, сообщает, что пароль неверный.

И тут ученик спрашивает: «А как убрать неправильный пароль из памяти?». Ответ на этот вопрос — да никак. Автоматически память освободится от неправильного пароля. И ученик чувствует себя глупо.

Но на самом деле этот вопрос показывает, что ученик руководствуется важным принципом: «Я что-то сделал, значит, я должен это контролировать». Да, в конкретном этом случае не нужно, но вообще очень важно уметь думать о мелочах, потому что компьютер может взять на себя только какую-то часть из них.

Простой ответ не делает вопрос лишним — наоборот, за ним стоит привычка контролировать то, что сделал.

Пример 2. А что, если сделать так?

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

Я так придумал Vector, классическую структуру данных 😁. И переживал, что опозорился перед преподавателем. И зря переживал. Да, возможно, преподаватель и не понял тогда, что к чему, но всё же — да, я не понял объяснений и запутался в них. Но придумать что-то обычно сложнее, чем понять это из чужих объяснений. Да, у меня были осколки с лекций, которые я сложил, но это не отменяет того, что дошёл я до нужного решения сам, как только встретился с проблемой. Многие на моём месте не сделали бы этого и долго ещё не могли бы понять эту тему с дополнительными объяснениями.

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

Пример 3. А можно как-то не писать 4 строчки снова и снова?

Человек изучил циклы, но привык, что в цикле всего одна строчка. А тут сталкивается с ситуацией, где много раз нужно повторить 4 очень похожих строки. И спрашивает, что с этим можно сделать?

А в ответ ему говорят, что те же циклы, просто теперь в теле цикла 4 строки и в пару мест новые переменные засунуть, которые не повторяются. И человек может почувствовать себя глупо, но это тоже зря.

Если человек задал этот вопрос, то у него сработал важный навык — распознавание шаблона задачи. Он понял, что здесь что-то не так, что эту задачу можно решить как-то проще, что-то где-то должно быть. Да, конкретный шаблон решения человек не смог использовать, но он понял, что он должен быть. А понять, что нужен цикл, не смог, потому что циклы недостаточно пока освоил.

Пример 4. А как заполнить пустоту?

Вот есть массив(список, если в Python): [1, 2, 3]. Если я удалю второй элемент, как мне сместить теперь тройку на его место, чтобы не было дыры?

Во многих языках программирования ответ — никак. Автоматически всё сдвигается. Но так далеко не во всех языках программирования! В некоторых иногда нужно именно сдвигать элементы самостоятельно. Поэтому вопрос хороший, просто в ряде случаев об этом заранее позаботились создатели языка программирования.

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

Пример 5. Как остановить функцию?

Человек изучил функции, изучил return. И делает код, в котором куча проверок. Расписывает их... И думает — а что, если сразу останавливать код функции? Делать, чтобы если какое-то условие выполнилось, функция сразу прекращала работать? В циклах для этого есть break. А есть ли такой оператор для функций

И тут этот человек получает ответ, что это делает тот самый оператор return. И вспоминает, что уже это изучал. Чувствует себя глупо, но опять зря. Да, изучал, но не понял, и это не страшно. Зато заметил ситуацию — лишняя работа кода, от которой хорошо бы избавиться.

И в результате этого вопроса узнал, что у оператора return два применения — иногда чтобы вывести из функции информацию в основную программу, а иногда — чтобы просто остановить работу функции.

Пример 6. Как проверить, что строка пустая?

Как проверить, что строка пустая? Во многих языках программирования для этого достаточно проверить, равна ли строка "" — да, две кавычки и между ними ничего. Или проверить количество символов, если равно нулю — то пустая. Когда новичок задаёт такой вопрос и получает такой ответ, он часто начинает переживать, что не додумался сам до такого простого решения.

Но трудности и этот вопрос абсолютно нормальны. Человек чувствует, что для такой важной проверки должна быть какая-то специальная операция, и он прав — в некоторых языках такая операция есть! В Java, C++, C# есть специальные операции. А в некоторых нет, там создатели языка решили, что раз можно соединить несколько простых инструментов, то и хорошо, то больше ничего не надо.

Но есть ли или нет в конкретном языке такая операция, это тут не главное. Главное, что у человека на уровне интуиции есть идея: для важной операции должен быть специальный инструмент. Без этой идеи в голове, хорошо прочувствованной, не стать профессионалом.

Подводим итоги

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

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