С тех пор, как я начал учиться программировать, я считал Javascript не моей лигой. Когда я впервые столкнулся с ним в классе Анджелы Ю в Udemy, я был ошеломлен и почувствовал, что едва справился с модулями Javascript. Как человек, который никогда не испытывал затруднений в предыдущем обучении, я был в ужасе от ощущения, что что-то слишком трудно для меня понять. Каждый раз, когда я добирался до чего-то или решал сложную задачу, любое волнение или гордость тут же затмевались страхом, что продолжать идти означает продолжать сталкиваться со все более и более сложными проблемами, и, возможно, я не смогу идти в ногу со временем. Возможно, я достиг предела возможностей своего мозга. Лучше не тестировать и узнать.

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

Чему я учу своих студентов каждый год, так это важности мышления роста, а не фиксированного мышления.

Я не следовал собственному совету.

Как педагог, я знаю, что обучение не происходит без борьбы. Если все, что вы пытаетесь сделать, дается легко, вы на самом деле не используете свой максимальный потенциал.

Об этом есть отличная статья Джеймса Хэмблина под названием 100 Percent is Overrated. Она точно объясняет, что со мной происходило. В нем он вспоминает лекцию Джо Боулер, профессора математического образования в Стэнфордском университете, где она упомянула о распространенном в нашем обществе ограничивающем убеждении, что есть стена, о которую вы в конечном итоге упрётесь, изучая математику. Эта пресловутая стена, наконец, является точкой, за которой ваш мозг больше не может угнаться. Ссылаясь на этот миф, заключительное заявление Боулера было: Большие новости, стены нет. Если вы боретесь, тренируетесь и продвигаетесь вперед, вы можете научиться чему угодно.

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

«Лучше сделать что-то несовершенно, чем не сделать безупречно ничего».

- Роберт Х. Шуллер

Поэтому я снова начал с первого из двух важных изменений мышления.

С конца апреля по настоящее время я прохожу бесплатную учебную программу по фронтенду от школы Тьюринга в Денвере. Я очень рекомендую это. Я только что закончил уроки Javascript для Модуля 1, и я потрясен, говоря, что теперь я влюблен в Javascript. Я никогда не думал, что это произойдет. Мое фиксированное мышление мешало. Теперь, когда я сталкиваюсь со сложной проблемой в Javascript, я напоминаю себе, что если она трудная, это не значит, что я недостаточно умен, чтобы решить ее. Это просто означает, что я не решил ее еще.

Мое второе изменение мышления произошло случайно. Пока я собирался, я понял, что с Javascript любая проблема — это головоломка. Взгляд на написание программ на Javascript как на решение головоломок очень помог моей решимости и уверенности в том, что я смогу написать программу. Для меня это большое открытие, потому что я люблю головоломки. В свободное время я решаю головоломки Логика, головоломки Зебра, Судоку, Нонограммы, головоломки, Кроссворды, Wordle, и — полное откровение — я играю в компьютерные игры Нэнси Дрю, которые полный головоломок, чтобы разгадать тайны. Я фанат головоломок, и работа над задачами Javascript начала ощущаться как любая другая головоломка, которую я решаю для удовольствия!

Позвольте мне показать вам, что я имею в виду.

В следующих нескольких сообщениях в блоге я расскажу о некоторых из моих любимых задач из уроков Turing’s Javascript Workshop. Идея этих задач состоит в том, чтобы привыкнуть к решению абстрактных логических задач, поскольку они часто являются частью технической части интервью. Решение каждой из этих задач вызывало у меня чувство гордости, волнения и желания поделиться.

Вот первый!

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

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

С этой проблемой я знал, что мне сначала нужно получить доступ к каждой букве слова и иметь возможность перебирать эти буквы и что-то делать с каждой из них! Массивы отлично подходят для циклов. Итак, первым шагом было выяснить, есть ли способ разбить слово на буквы и сохранить их в массиве. Ага! Погуглив, я смог обнаружить метод split(). Затем я сохранил этот массив букв в переменную с именем charArray.

Давайте проверим это.

Идеальный. Теперь у меня был доступ ко всем буквам в массиве. Затем мне нужно было пройти через charArray и во время каждого цикла добавить что-то в новый массив, который я назвал spellArray. Этот массив заклинаний будет возвращен функцией в качестве решения задачи. Перед запуском цикла я определил спелАррай как пустой массив и добавил его в конец функции спелАут в качестве оператора возврата. Затем пришло время добавить цикл for для циклического просмотра массива charArray.

Затем я решил, что должно произойти внутри цикла.

Во-первых, я хотел выполнить оператор if/else, чтобы проверить, какой массив заклинаний хранится в данный момент во время каждой итерации цикла.

Если массив массивов заклинаний был пуст, то в массив заклинаний нужно было добавить первую букву слова. Если он не был пустым, текущий элемент нужно было добавить к последнему элементу в массиве заклинаний, а затем добавить в конец массива заклинаний.

Например, для слова «кофе», если массив массива заклинаний был пуст, нам нужно было добавить к массиву «с». Во всех других итерациях цикла массив заклинаний больше не будет пустым, и будет выполняться оператор else. Таким образом, во второй итерации цикла мы возьмем последний элемент массива заклинаний «с» и добавим к нему текущий элемент «о». Затем добавьте «co» в качестве следующего элемента в массиве заклинаний. Третья итерация снова берет последний элемент в массиве заклинаний, который на этот раз будет «co», и добавляет к нему текущий элемент «f», добавляя «cof» в конец массива заклинаний. И так далее, пока мы прокручиваем charArray и продолжаем добавлять в spellArray! В конце цикла и в конце функции заклинаниеOut() будет возвращено наше решение, заклинаниеArray.

Теперь это должно работать! Давайте проверим это в консоли.

Эврика! Это сработало!

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

А пока, вот, чтобы развивать наши мозги и подталкивать себя!