«Непонятки» в изучении программирования

от автора

Однажды, в ходе очередной попытки освоить программирование, мне попалась переводная книга, где автор на первых страницах обещал научить программировать даже тех, кто никогда этого не делал. И в качестве примера приводил собственного сына 8 лет, которого он как бы научил тоже.

Воодушевлённый таким началом я бодро взялся за чтение. И вот, где-то на первых страницах, при обсуждении типов данных, автор ничтоже сумняшеся сообщает, что целое число, которое Int, может быть Int16, Int32 и т.д., со всеми вытекающими подробностями.

И в эту минуту я чувствую как начинают шевелиться волосы на моей голове. От шока, что не понимаю, что это такое.

Потом подумал, что он, наверное, это где-то объяснил, а я пропустил. Проверил предыдущие страницы, не нашёл. Может он потом объяснит, бывают же такие преподы, сначала что-то скажет, а потом разберёт. Посмотрел вперёд, не нашёл тоже.

В общем, сильно загрустил. Мечта стать программистом разбилась о стену как хрустальный шар. И далее, по цепочке, знакомые всем мысли о собственной непригодности.

С тех пор, если встречается в книге, что автор научит всех, даже тех, кто “никогда не программировал”, то невольно вздрагиваю, как от легкого удара электрическим током.

И самое смешное, что недавно, на современном курсе по изучению программирования, услышал то же самое. Преподаватель, как только зацепился за тип Int, тут же начал рассуждать все о тех же Int16, Int32 и т.д. Как будто он попадает в разъезженную колею и уже не может из нее выбраться.

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

Моя статья написана как отклик на пост By_kosha “Моя боль в JavaScript: когда this и переменные становятся головоломкой” (https://habr.com/ru/articles/867360/).

В комментариях получилось неплохое обсуждение и в результате набралась небольшая коллекция, назовём их, “непоняток”, с которыми сталкиваются начинающие изучать программирование.

И я подумал, что это будет неплохой подсказкой преподавателям. Это как взглянуть на процесс обучения глазами учащихся. Зная эти заторы, можно заранее к ним подготовиться.

В итоге получилась небольшая коллекция “непоняток” в изучении программирования. Приведу их в том порядке, в котором они следуют в исходной публикации, добавив от себя ещё пару вспомнившихся по ассоциации.

Итак, небольшая коллекция того, что бывает непонятно изучающим программирование

Коллекция непоняток в изучении программирования

  1. Одинаковые имена свойств (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.

Заключение

А какие у вас были непонятки?

И как вы с ними справились — сами или кто‑то помог? И как?


ссылка на оригинал статьи https://habr.com/ru/articles/870576/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *