«Я не понимаю JavaScript. Ничего не выходит написать с нуля. Мои мысли словно улетучиваются когда я создаю новый JavaScript-файл. Наверное я не умею думать как программист».
Звучит знакомо? Ты не одинок, друг мой. Многие новички которые пытаются освоить JavaScript в качестве первого языка программирования сталкиваются с такими же проблемами.
Черт, но даже опытные разработчики, которые программируют на других языках, сталкиваются с похожими трудностями когда дело доходит до JavaScript. Только вместо: “Я не могу думать как программист”, они говорят: “Я не могу думать на JavaScript”.
Покончим с этим. Давайте сегодня будет день когда вы научитесь думать как программист.
Содержание:
Вы уже умеете думать как программист
Доводилось ли вам проходить простые уроки по JavaScript на Free Code Camp, Code Academy или Code Wars? Если да, то вы уже можете думать как программист.
Настоящей причиной, по которой ваши мысли превращаются в перекати-поле при создании нового JavaScript-файла, скорей всего является боязнь написать код который не будет работать. Вы просто боитесь столкнуться с ошибками, или вовсе не знаете с чего начать.
Преодолеть этот внутренний барьер помогут следующие четыре шага:
- Разбейте проблему на составляющие
- Найдите решения для небольших задач
- Соберите решения в единое целое
- Проведите рефакторинг и улучшения
Шаг 1: Разбейте проблему на составляющие
Как поместить слона в холодильник?
Вот что ответят большинство людей:
- Открыть холодильник
- Поместить в него слона
- Закрыть холодильник
Задача решена.

Бедный слон. В холодильнике он выглядит таким грустным 🙁
Такой ответ является лучшим примером того, почему вы останавливаетесь, глядя на пустой JavaScript-файлом. В нем пропущены важные шаги.
Если вы подумаете логически об этой задаче, вы заметите проблемы которые остались без ответа:
- О каком холодильнике мы говорим?
- О каком слоне мы говорим?
- Если слон слишком большой чтобы поместить его в холодильник, что вы будете делать?
- Где вы будете искать слона в первую очередь?
- Как вы доставите слона к вашему холодильнику?
Кода вы программируете, вы должны отвечать на каждый вопрос который приходит вам в голову. Вот почему первым шагом является разбивка проблемы на более мелкие ее части.
Шаг 2: Найдите решения для небольших задач
Вторым шагом является поиск решений для каждой небольшой задачи. На этом шаге важны подробности.
- Какой холодильник? — тот что стоит в вашей кухне.
- Какой слон? — африканский слон.
- Что если слон слишком большой? — возьмите уменьшающий пистолет (?) чтобы уменьшить слона (?).
- Где вы найдете слона? — В Африке.
- Как вы перевезете слона? — Положите уменьшенного слона в сумку, затем летите домой на самолете.
Иногда потребуется копнуть глубже чтобы решить задачу. В примерах ниже мы подробнее разберем ответ 3 и 4.
- Где вы возьмете уменьшающий пистолет? — Одолжите у сумашедшего ученого по соседству.
- Где в Африке искать слона? — В Национальном парке слонов Эддо, в ЮАР.
Когда вы получите ответы на все, даже самые незначительные, вопросы, вам останется объединить их, и задача будет решена.
Шаг 3: Соберите решения в единое целое
Итак. Чтобы поместить слона в холодильник, вероятно вы выполните следующие действия:
- Возьмете уменьшающий пистолет у сумасшедшего ученого по соседству
- Полетите в Южную Африку
- Посетите Национальный парк слонов Эддо
- Найдете в парке слона
- Выстрелите в слона с уменьшающего пистолета
- Положите уменьшенного слона в свою сумку
- Отправитесь в аэропорт
- Полетите в свою страну
- Пойдете к себе домой
- Засунете слона в свой холодильник
Задача решена.
Хорошо звучит на словах, но скорей всего вы не станете ловить слонов и засовывать их в холодильники при помощи JavaScript. Давайте рассмотрим реальный пример.
Давайте рассмотрим настоящий пример
Предположим, вы хотите создать кнопку, которая при клике вызывает показ бокового меню (сайдбар).
Шаг первый — разбить на элементы
Чтобы создать этот компонент, вы должны в первую очередь разбить его на небольшие части. Вот несколько вопросов, на которые следует ответить:
- Какова разметка у кнопки?
- Как кнопка должна выглядеть?
- Что произойдет, если нажать на кнопку один раз?
- Что произойдет, если повторно нажать на кнопку?
- Что произойдет, если нажать на кнопку третий раз?
- Какова разметка у боковой панели?
- Как выглядит боковая панель, когда она отображается?
- Как выглядит боковая панель, когда она скрыта?
- Как появляется боковая панель?
- Как боковая панель исчезает?
- Должна ли боковая панель появляться при загрузке страницы?
Второй шаг — найти решения на поставленные вопросы
Для поиска решений, вы должны знать для какой среды создается данный компонент. В нашем случае вам нужно знать на достаточном уровне HTML, CSS и JavaScript.
Не беспокойтесь, если не знаете ответа ни на один из поставленных вопросов. Если они поставлены правильно, то вы сможете легко найти ответы на них в Google, потратив на каждый не больше 5 минут.
Давайте ответим на каждый из вопросов:
Какова разметка у кнопки?
Кнопка размечена тегом с классом
.button
.
Click me
Как кнопка должна выглядеть?
Для стилизации кнопки нужно использовать следующие стили:
.btn {
display: inline-block;
font-size: 2em;
padding: 0.75em 1em;
background-color: #1ce;
color: #fff;
text-transform: uppercase;
text-decoration: none;
}
Что произойдет, если нажать на кнопку один раз? Два раза? Три?
При нажатии на кнопку, боковая панель должна появится, а при повторном нажатии исчезнуть. Если нажать кнопку третий раз, боковая панель снова появится.
Какова разметка у боковой панели?
Боковая панель размечена тегом Как выглядит боковая панель, когда она отображается? Боковая панель должна быть пристыкована к правой стороне окна браузера и зафиксирована на одном месте, чтобы пользователь всегда ее видел. Ширина сайдбара должна быть 300 пикселей. Ответив на этот вопрос, ваш CSS код будет выглядеть приблизительно так: Как выглядит боковая панель, когда она скрыта? Боковая панель должна быть смещена на 300px вправо, это значит, что она окажется за пределами видимой области. Думать как программист, значит постоянно задавать вопросы, даже во время решения текущей маленькой задачи. Поэтому, у вас в голове должны возникнуть другие два вопроса: Как узнать, боковая панель отображается или скрыта? Если боковая панель имеет класс Как создать скрытую боковую панель? Мы используем свойство Как появляется боковая панель? Боковая панель не должна появляться внезапно. Она должна выдвигаться с правой стороны, где она была скрыта из виду. Если вы хорошо разбираетесь в CSS, то вы можете использовать свойство Как боковая панель исчезает? Она должна исчезнуть так же как и появилась — плавным смещением в противоположную сторону. Для этого вам не нужно писать какой либо дополнительный CSS-код. Должна ли боковая панель появляться при загрузке страницы? Нет. Мы должны добавить класс Теперь, мы ответили почти на все вопросы, за исключением одного — что произойдет если нажать на кнопку один раз? Два раза? Три? Наш ответ выше был слишком расплывчатым. Мы знаем, что боковая панель должна появиться, когда вы нажмете на кнопку, но как? Также, боковая панель должен исчезнуть, когда вы нажмете на кнопку еще раз, но как? Поэтому мы должны ответить на этот вопрос более подробно. Но сначала, давайте выясним, откуда мы знаем, что кнопка была нажата? Как узнать, что кнопка была нажата? Если вы знаете JavaScript, вы можете использовать метод Но перед тем как отследить клик по кнопке, нам нужно найти эту самую кнопку в разметке. Для этого используем метод Что произойдет, если нажать на кнопку один раз? Когда кнопка нажата один раз, мы должны убрать класс Что произойдет, если нажать на кнопку второй раз? Когда кнопка снова нажата, мы должны вернуть класс К сожалению, Собрав все части одной большой задачи, вы получите именно то, что планировали создать. Но и последний этап является не менее важным — это проведение рефакторинга и улучшения кода. Вам не обязательно приступать к нему прямо сейчас. Лишь со временем, получив достаточно опыта и приложив должных усилия практикуясь в написании кода, вы сможете понять когда можно улучшить его. Поэтому, когда вы закончили с предыдущими тремя шагами, сделайте паузу и поработайте над чем-то другим. Когда вы лучше освоите JavaScript и вернетесь к данной работе, то сможете заметить, что упустили несколько деталей. В приведенном выше примере можно поставить дополнительные вопросы: Что до третьего пункта… Немного погуглив, вы можете обнаружить, что в JavaScript (JS) существует метод Думать как программист довольно просто. Главное что вам нужно знать, это как разбить задачу на более мелкие. Когда же вы разобьете задачу на части, приступайте к поиску решений к каждой из них и реализуйте их в коде. В процессе написания программы, у вас могут возникнуть и другие вопросы, которые раньше не пришли вам в голову. Дайте ответы и на них. Иногда, некоторые уже решенные проблемы будут логически объединяться в одно целое, и когда будут готовы решения всех мелких задач, то вы получите решение основной задачи. И последнее. Когда поставленная задача решена, это вовсе не означает, что работа над компонентом закончена, вы всегда должны стараться найти способы улучшить его. Думать как программист — это еще и умение провести грамотный рефакторинг. Тем не менее, необходимость в улучшениях сразу может быть неочевидна, но поверьте, почти всегда код можно улучшить. Например, что-то убрать лишнее, реализовать функцию иначе, сделать код более понятным. Просто сделайте перерыв. Поработайте над чем-нибудь другим, прогуляйтесь, а когда вы вернетесь к своему готовому коду, то сможете задать еще более интересные вопросы и приступить к поиску ответов на них. Оригинал: How to think like a programmer.sidebar {
position: fixed;
top: 0;
bottom: 0;
right: 0;
width: 300px;
background-color: #333;
}
.sidebar ul {
margin: 0;
padding: 0;
}
.sidebar li {
list-style: none;
}
.sidebar li + li {
border-top: 1px solid white;
}
.sidebar a {
display: block;
padding: 1em 1.5em;
color: #fff;
text-decoration: none;
}
.is-hidden
, то она не должен отображаться. В противном случае, она должна быть видна.transform
(это одно из лучших свойств для анимации), со значением translateX
, для смещения боковой панели на 300 пикселей вправо. В итоге получим следующие стили:.sidebar.is-hidden {
transform: translateX(300px);
}
transition
. Если нет, то вы легко найдете решение используя поиск Google..sidebar {
/* other properties */
transition: transform 0.3s ease-out;
}
is-hidden
в разметку боковой панели, чтобы она оставалась скрытой до нажатия на кнопку.addEventListener
, который отслеживает события, вместе с необходимым нам событием click
. Если вы не знаете JS, то вам снова прийдется гуглить.querySelector
.const button = document.querySelector('.btn')
button.addEventListener('click', function() {
console.log('button is clicked!')
})
is-hidden
, чтобы боковая панель появилась. Чтобы удалить класс в JavaScript, используем метод Element.classList.remove
. Но как и в случае с кнопкой, для начала мы должны выбрать боковую панель с помощью метода querySelector
.const button = document.querySelector('.btn')
const sidebar = document.querySelector('.sidebar')
button.addEventListener('click', function() {
sidebar.classList.remove('is-hidden')
})
is-hidden
боковой панели, и она снова исчезнет.addEventListener
не может отслеживать сколько раз была нажата кнопка. Лучшим выходом будет сделать проверку на наличие класса is-hidden
в боковой панели. Если он есть, то убираем его. Если его нет, то добавляем.const button = document.querySelector('.btn')
const sidebar = document.querySelector('.sidebar')
button.addEventListener('click', function() {
if (sidebar.classList.contains('is-hidden')) {
sidebar.classList.remove('is-hidden')
} else {
sidebar.classList.add('is-hidden')
}
})
Шаг 4: Рефакторинг и улучшение
toggle
, который удаляет класс, если он присутствует. И наоборот, если класс отсутствует, метод toggle
добавляет его:const button = document.querySelector('.btn')
const sidebar = document.querySelector('.sidebar')
button.addEventListener('click', function() {
sidebar.classList.toggle('is-hidden')
})
Подведем итоги