TGTGInsightаналитика telegramLIVE / telegram public index
← 🚀 Андрей Артищев
🚀 Андрей Артищев avatar

TGINSIGHT POST

Post #4135

@startupandtech

🚀 Андрей Артищев

Просмотры30Количество просмотров
Опубликован4 мар.04.03.2025, 17:54
Содержимое поста

Содержимое

Недавно помогал ребенку подготовиться к контрольной по программированию (школьному предмету; они учат C#). Главной темой были связные списки и работа с ними, что в данном случае было работой с классами типа Node<T>, с методами Get/SetValue(), Get/SetNext(). Я увидел, что с одной стороны ребенок вроде и понимает, что такое связный список, зачем может быть нужен, что с ним делать; но конкретные задачи из старых контрольных, что им выдали, решает с трудом или вообще не. В принципе понимает, что хочет сделать, но в код это переводится с трудом, без уверенности и с постоянными ошибками. Подумав немного, я решил не разбирать пока эти старые контрольные и их решения, а подтянуть основы. Сидя рядом, просил ребенка писать код НА БУМАГЕ, решающий очень простые задачи одну за другой. Немедленно обсуждали написанное, ошибки в нем, исправляли их и шли дальше. Задачи такие (во всех случаях предполагаем переменную list типа Node<int>, указывающую на первый элемент списка, возможно равную null, если список пустой): - проверить, пустой ли список - проверить, есть ли в списке минимум 3 элемента - проверить, есть ли в списке ровно 3 элемента - проверить, верно ли, что второй элемент списока равен 4 (не забывать проверки существования элементов) - если третий элемент списка существует, изменить его значение на 12 - если есть минимум 2 элемента, удалить второй - распечатать все элементы списка - проверить, есть ли в списке элемент со значением 5 - если есть хотя бы один элемент, вставить новый элемент с значением 10 на второе место в списке - удалить все элементы, равные 5, предполагая, что первый не такой - то же самое, но без предположения, что первый не такой - найти все элементы в списке, равные 2, и для каждого такого, если следующий тоже 2, а предыдущий не 2, удалить этот следующий - найти элемент со значением 13, и если после него есть следующий, поменять их местами - найти минимальный элемент - вставить элемент на правильное место в отсортированном списке Мне кажется, это время, проведенное вместе за интенсивной проработкой основ, не было потрачено зря, и помогло укоренить правильные абстракции в голове. После того, как все эти задачи решаются без сложностей, без ошибок и практически без рассуждений, можно переходить к задачам типа "поменять порядок на обратный" или "найти и удалить все дубликаты в списке с помощью двух вложенных циклов". Не надо с них *начинать*, если основы не делаются быстро, правильно и без сомнений. А это произойдет, когда ментальные образы станут ясными и четкими и будут правильно отражать происходящее на удобном уровне абстракции. Начинающий программист часто не понимает, насколько важны эти ясность и четкость. В таком случае задача наставника - понять это и показать на живых примерах, как и почему они важны.