«Непонятки» в изучении программирования
- понедельник, 30 декабря 2024 г. в 00:00:08
Однажды, в ходе очередной попытки освоить программирование, мне попалась переводная книга, где автор на первых страницах обещал научить программировать даже тех, кто никогда этого не делал. И в качестве примера приводил собственного сына 8 лет, которого он как бы научил тоже.
Воодушевлённый таким началом я бодро взялся за чтение. И вот, где-то на первых страницах, при обсуждении типов данных, автор ничтоже сумняшеся сообщает, что целое число, которое Int, может быть Int16, Int32 и т.д., со всеми вытекающими подробностями.
И в эту минуту я чувствую как начинают шевелиться волосы на моей голове. От шока, что не понимаю, что это такое.
Потом подумал, что он, наверное, это где-то объяснил, а я пропустил. Проверил предыдущие страницы, не нашёл. Может он потом объяснит, бывают же такие преподы, сначала что-то скажет, а потом разберёт. Посмотрел вперёд, не нашёл тоже.
В общем, сильно загрустил. Мечта стать программистом разбилась о стену как хрустальный шар. И далее, по цепочке, знакомые всем мысли о собственной непригодности.
С тех пор, если встречается в книге, что автор научит всех, даже тех, кто “никогда не программировал”, то невольно вздрагиваю, как от легкого удара электрическим током.
И самое смешное, что недавно, на современном курсе по изучению программирования, услышал то же самое. Преподаватель, как только зацепился за тип Int, тут же начал рассуждать все о тех же Int16, Int32 и т.д. Как будто он попадает в разъезженную колею и уже не может из нее выбраться.
К чему я все это говорю? - К тому, что нередко преподаватели программирования не замечают и не осознают, что новички, которые раньше действительно не программировали, реально не понимают ряд вещей, которые людям с опытом кажутся сами собой разумеющимися.
Моя статья написана как отклик на пост By_kosha “Моя боль в JavaScript: когда this и переменные становятся головоломкой” (https://habr.com/ru/articles/867360/).
В комментариях получилось неплохое обсуждение и в результате набралась небольшая коллекция, назовём их, “непоняток”, с которыми сталкиваются начинающие изучать программирование.
И я подумал, что это будет неплохой подсказкой преподавателям. Это как взглянуть на процесс обучения глазами учащихся. Зная эти заторы, можно заранее к ним подготовиться.
В итоге получилась небольшая коллекция “непоняток” в изучении программирования. Приведу их в том порядке, в котором они следуют в исходной публикации, добавив от себя ещё пару вспомнившихся по ассоциации.
Итак, небольшая коллекция того, что бывает непонятно изучающим программирование
Коллекция непоняток в изучении программирования
Одинаковые имена свойств (JavaScript)
Пример от автора вышеупомянутого поста. Цитирую:
“Когда видишь подобный пример:
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
Кажется, что это просто «одно и то же имя равно самому себе». Ты пишешь код, но не до конца понимаешь, чем this.name отличается от name, и зачем здесь нужно this.
Понимание приходит со временем, но на первых порах это превращается в простое следование примеру. В голове остаётся ощущение магии🔮: «Я пишу то же самое, но почему это работает?» И только позже осознаёшь разницу между параметрами функции и свойствами объекта.”
2. Одинаковые имена свойств (Swift)
По ассоциации с этим примером вспомнился и свой собственный временной затор, очень похожий.
struct Person {
let name: String
var Age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
Помогло объяснение на одном из форумов, что компилятор встречается с двумя одинаковыми именами свойств и ему надо их различить. Поэтому self обозначает свойство, принадлежащее объекту. И что названия свойств в параметрах инициализатора могут быть любыми. Одинаковыми их делают просто для удобства, чтобы не надо было каждый раз вспоминать, откуда приходит инициализация.
3. Что такое переменная
Цитирую из комментариев:
“…как-то подрабатывал помощником преподавателя, так ко мне на консультацию пришел однажды чел, взрослый, лет 35, который не понимал, что такое переменная и как она работает.”
Это была большая неожиданность. Казалось бы, это чуть ли не самая простая тема, ан нет, её тоже лучше объяснить.
4. Возвращаемое значение
“… на первых порах … никак не мог въехать в "возвращаемое значение". Хорошо помню как это раздражало в очередном тьюториале - "кто возвращает", "куда" и главное "зачем". Сейчас конечно смешно, но тогда это выглядело не то, что "магия", а какой-то мировой заговор преподавателей, которые твердят одно и то же, но не хотят объяснить толком что это такое”
5. Регистр в процессоре
“У меня так с "регистром" в процессорах было - что значит "именованная ячейка памяти", зачем её именовать и почему просто не дать цифровой адрес, как всем остальным ячейкам памяти?”
6. Рекурсия
“Я помню вначале пути путался с рекурсиями. Тогда для меня они выглядели, как магия.”
7. Массивы в JS с “дырками”
“Меня ментально напрягли массивы в js, особенно массивы с "дырками". Странные на фоне массивов в других языках, где они являются непрерывным куском памяти. Сейчас отношусь к ним философски, но долгое время было не совсем понятно, с чем имею дело”
8. Что такое ”делегат”
На одном из форумов человек с опытом говорил, что не понимает, что такое делегат в Swift.
Заключение
А какие у вас были непонятки?
И как вы с ними справились - сами или кто-то помог? И как?