Book PDF
Book PDF
Book PDF
Содержание
Вступление
О книге
Предисловие
Часть I - Фронтенд
Программирование?
Веб-разработка?
HTML
Веб-страницы - как их видим мы, пользователи
Атрибуты HTML
Добавляем уникальный стиль (CSS)
Свойства CSS
Больше примеров. Настраиваем стиль шрифта
Уточняем cелекторы
Принцип DRY. Каскадный принцип CSS
Работа с тенями
Финальный код
HTML, CSS и Интерактивность
Вступление
Файлы кода JavaScript
Первая JavaScript-подпрограмма
Привязка подпрограмм к событиям
Привязка JavaScript-кода к HTML-коду
Стандарты JavaScript
Объекты и их свойства
Методы объектов
Вызов метода
Именованные объекты
_ 4
Создание объектов-функций
Именование объектов
Обработчики событий
Резюме
Определение переменных
Оператор "if"
Оператор логического "и" ("&&")
Тестирование
Исправление "лишних пробелов"
Введение в Разработку ПО
Яков Крамаренко
Эта книга - ранний доступ к курсу "Введение в Разработку Программного
Обеспечения". Она дает введение в программирование на примерах разработки веб-
приложений используя HTML, CSS и JavaScript. Книга должна быть по силам любому
от детей до их родителей, с единственным предусловием - быть уверенным
пользователем компьютера. Она должна помочь попробовать на вкус разработку
небольшого но реального продукта и определиться с желаемой ролью в ИТ -
разработчика, тестировщика, либо, возможно, кого то еще;)
Предисловие
В 2015 году я начал обучать на платных "офлайн" и онлайн ИТ-курсах (по
программированию, автоматизации тестирования, и т.д.). Я заметил несколько вещей.
Во-первых, основная часть курсов на рынке, особенно бесплатных, — были чересчур
техническими и сложными для студентов которые начинают свой путь в ИТ с самого
начала. Во-вторых, им обычно сложно определиться какое направление в ИТ избрать -
менеджмент, бизнес-анализ, дизайн, разработка, тестирование, и т.д. В то время я
начал подумывать о том, чтобы создать курс который даст введение в полный процесс
разработки программного обеспечения и будет по силам почти для любого от детей до
их родителей, c единственным предусловием - быть уверенным пользователем
компьютера.
Идея была в том, чтобы создать курс с помощью которого студент сможет построить
реальное приложение с нуля. Где каждый урок будет представлять один из этапов в
полном цикле процесса разработки программного обеспечения. Как определяет
википедия, Разработка Програмного Обеспечения —
Я начал работу над этим курсом в 2016 году. Следующие занятия должны были в него
войти:
Процесс
Бизнес-Анализ
Дизайн
Разработка веб-клиента (Фронтенд)
Разработка веб-сервера (Бекенд)
Автоматизация Тестирования
Тестирование
Развертывание Приложения ("Deployment")
_ 7
Bitcoin - 1EyDGuW64YkJbZ8FW1yAkz6iLP8c6tCjn
Ether - 0x7f2cAa79D1f1966d3CDd8295f8aF6028D66de00e
_ 9
Программирование?
"Программирование" - слово, которое должно быть нам всем знакомо. Мы все
используем бытовую технику, которую программируем для выполнения необходимых
действий в нужном порядке. Например, мы создаем программу стирки для стиральной
машины: задаем время, интенсивность, дополнительное полоскание и т.д. Такие
действия являются простейшими формами алгоритмов, и мы уже можем гордо
назвать себя "программистами". Даже наших детей мы "программируем", когда
воспитываем их.
Как мы используем разные языки для общения с людьми из разных стран, разные
подмножества языков – жаргоны – для общения на определенные темы типа
юрисприденции, медицины, экономики. Как используем разные языки команд
бытовой технике, мобильным устройствам... – так и программисты использют разные
языки программирования и их "подмножества" – библиотеки – для общения с
компьютером с целью его "программирования" на выполнение нужных нам задач и
алгоритмов.
_ 10
Веб-разработка?
Возможно, тебе известно, как работать со стандартной программой. Обычно, имея ее
установочный файл, мы устанавливаем ее на свой компьютер, открываем и
пользуемся. Что же такое веб-сайт? Это такая специальная программа не требующая
установки - достаточно просто "открыть" или как говорят "загрузить" ее в Браузере
используя ее "адрес". Она может быть открыта одновременно многими
пользователями на разных компьютерах и браузерах. Например, тысячи людей могут
одновременно использовать сайт Facebook. Он может предоставлять пользователям
одну и ту же или различную информацию в зависимости от контекста, позволяя
пользователям взаимодействовать как с сайтом, так и с другими пользователями,
использующими его. Веб-сайт может состоять из одной или нескольких "веб-
страниц", каждая из которых имеет свой "адрес". Эта программа, которую различные
пользователи могут загружать через браузер, называется веб-клиентом, и, на самом
деле, есть только частью "веб-сайта". Но есть и другая часть "веб-сайта", которую мы
не видим, но которая служит его "мозгом", который контролирует одновременную
работу всех загруженных пользователем веб-клиентов, отправляет им по запросу
нужную информацию, сохраняет свои данные и позволяет им взаимодействовать друг
с другом. Этот "мозг" называется веб-сервером.
_ 11
HTML
Веб-страницы - как их видим мы, пользователи
Для того, чтобы начать разрабатывать собственные веб-приложения, мы должны на
базовом уровне понимать, как реализованы "веб-страницы".
Веб-приложение TodoMVC
_ 13
Тебе наверное уже стало понятно, что веб-страница, которую мы загрузили раньше,
связана с планированием задач. Так и есть - это уже полноценно реализованный
менеджер задач, который позволяет нам создавать задачи, редактировать или удалять
их, отмечать задачи как выполненные, фильтровать их или очищать. Фактически, мы
получаем полноценную программу в браузере, а не просто веб-страницу с
информацией и без возможности динамически изменять ее здесь и сейчас.
<html>
<head>
<title>Todos</title>
</head>
<body>
<input></input>
<ul>
<li>watch lesson</li>
<li>do homework</li>
</ul>
</body>
</html>
head - играет роль "паспорта" нашей веб-страницы. В том смысле что содержит набор
данных описывающих страницу. В настоящее время у него есть только одна
"полочка" - название нашей веб-страницы - <title>Todos</title> .
<li>watch lesson</li>
<li>do homework</li>
вложены в одну большую коробку - <ul> ... </ul> , которая содержит список задач.
Как видим, "коробка" может содержать один только текст - например, элемент списка
<li>watch lesson</li> .
Как видишь, все, что делает HTML - это управляет размещением информации о
нашем веб-сайте во вложенных "ящиках" с целью организовать ее и отобразить
нужную структуру страницы.
Давай теперь посмотрим, как веб-страница с кодом будет выглядеть в браузере. Для
этого сохраним этот код в файле с расширением html - index.html - и откроем его
в браузере:
_ 17
Вот и все.
Возможно, ты думаешь - почему именно index ? Пусть это будет одним из твоих
домашних заданий - раскрой этот секрет самостоятельно ... Google в помощь ;)
_ 18
Редакторы Кода
Прежде чем продолжить, давай выясним что такое редактор кода.
Любой код, на самом деле, это просто текст, который можно редактировать в
обычном текстовом редакторе. Но в коде есть своя специфика по сравнению с
обычным текстом. И точно так же, как текстовые редакторы имеют дополнительные
функции, например, грамматические подсказки, линейки и т. д., так и редакторы,
специализированные для редактирования кода, имеют свои специальные функции,
помогающие при работе с кодом.
Вот так выглядит код index.html, открытый в одном из таких редакторов кода - Atom:
Как видишь, сразу читать такой код стало легче из-за особой подсветки синтаксиса.
Теперь в глазах все не так расплывается из-за "простого текста", смешанного с
"тегами элементов".
_ 19
Cmd-shift-p для Mac или ctrl-shift-p для Windows откроет диалог "Command Palette", в
котором мы можем найти и выполнить любую фичу (от "feature" - определенная часть
функционала) редактора:
Command Palette
_ 20
Отлично, похоже, что "Settings View: Install Packages And Themes" - это как раз то
место, где мы можем проверить, какие пакеты мы можем установить для "Atom":
_ 21
Settings>Install
Теперь перейдем к "Search packages" и поищем "browser live view" ("живой просмотр
браузера"):
_ 22
Информация о browser-plus
И теперь, если сохранить любое новое изменение в файле (через cmd+s на Mac или
сtrl+s в Windows), изменения сразу будут отображены в эмуляторе браузера.
Давай, например, добавим еще одну задачу в список. Здесь мы можем познакомиться
с еще одной особенностью "Atom" - автозаполнением. Давай начнем добавлять новый
элемент li , просто введя символы l и i (без символов тегов - < и > ):
_ 28
Редактор сам добавит символы открывающего тега ( < и > ), а также автоматически
добавит закрывающий тег.
Теперь, добавив текст в новую задачу и нажав cmd+s на Mac или ctrl+s в Windows
(сохранение изменений), мы увидим, что они будут отображены и в эмуляторе
браузера:
HTML Атрибуты
Не для всех знакомых нам элементов веб-страниц существуют свои специфические
теги.
<html>
<head>
<title>Todos</title>
</head>
<body>
<input />
<ul>
<li>watch lesson</li>
<li>do homework</li>
</ul>
</body>
</html>
Просто для примера, давай теперь добавим "чекбоксы" ("checkboxes") для каждой
задачи, чтобы дать возможность их завершить или отметить как "сделанные":
<html>
<head>
<title>Todos</title>
</head>
<body>
<input />
<ul>
<li><input />watch lesson</li>
<li><input />do homework</li>
</ul>
</body>
</html>
Но как теперь указать, что новодобавленные элементы input для задач должны быть
чекбоксами?
атрибута type который актуальный именно для элемента input . В нашем случае
атрибут type позволяет нам точно обозначить элемент input именно как чекбокс:
<html>
<head>
<title>Todos</title>
</head>
<body>
<input />
<ul>
<li><input type="checkbox" />watch lesson</li>
<li><input type="checkbox" />do homework</li>
</ul>
</body>
</html>
Только для лучшей структурности, чтобы более точно выделить каждую часть
функциональности задачи - давай поместим текст наших задач в свои собственные
элементы играющие роль "этикеток", "меток" или "надписей" для задач - элементы
label :
<html>
<head>
<title>Todos</title>
</head>
<body>
<input/>
<ul>
_ 34
<li>
<input type="checkbox" />
<label>watch lesson</label>
</li>
<li>
<input type="checkbox" />
<label>do homework</label>
</li>
</ul>
</body>
</html>
Элементы label
Как тебе идея добавить текст подсказки для пользователя в текстовое поле?
Вот как мы можем это сделать, используя атрибут value элемента input :
<html>
<head>
<title>Todos</title>
_ 35
</head>
<body>
<input value="to do ... ?" />
<ul>
<li>
<input type="checkbox" />
<label>watch lesson</label>
</li>
<li>
<input type="checkbox" />
<label>do homework</label>
</li>
</ul>
</body>
</html>
Есть простой способ это исправить. Оказывается, есть еще один атрибут -
placeholder , который используется как "подсказка для пользователя", и не мешает
вводу нового текста:
<html>
<head>
<title>Todos</title>
</head>
<body>
<input placeholder="what needs to be done?" />
<ul>
<li>
<input type="checkbox" />
<label>watch lesson</label>
</li>
<li>
<input type="checkbox" />
<label>do homework</label>
</li>
</ul>
</body>
</html>
<html>
<head>
<title>Todos</title>
</head>
<body>
<input placeholder="what needs to be done?" />
by
<input />
<ul>
<li>
<input type="checkbox" />
<label>watch lesson</label>
</li>
<li>
<input type="checkbox" />
<label>do homework</label>
</li>
</ul>
</body>
</html>
_ 38
Как отличить два текстовых поля в таком случае? Неплохо было бы использовать
поиск вида - "найдите элемент input с атрибутом placeholder со значением 'What
needs to be done'".
И надо заметить, что в будущем наша веб-страница может стать более сложной и,
вероятно, будут добавлены новые элементы input . Все это усложнит поиск нужного
элемента нашим дополнительным кодом для "добавления задачи, нажав Enter ".
Подводя итог, поскольку мы можем иметь элементы одного и того же типа (т. е. с
одним и тем же тегом), но для разных целей, - нам нужен четкий способ маркировки
элементов для того, чтоб их различать.
<html>
<head>
<title>Todos</title>
</head>
<body>
<input id="new-todo" placeholder="what needs to be done?" />
by
<input id="assignee" />
<ul id="todo-list">
<li>
<input class="toggle" type="checkbox" />
<label>watch lesson</label>
</li>
<li>
<input class="toggle" type="checkbox" />
<label>do homework</label>
</li>
</ul>
</body>
</html>
Теперь у нас всегда есть четкий способ отличить одно текстовое поле от другого. И
даже "сделать выборку" группы чекбоксов, соответствующих классу "toggle". Это
может быть полезно, чтобы придать им специфический уникальный стиль.
<html>
<head>
<title>Todos</title>
</head>
<body>
<input id="new-todo" placeholder="what needs to be done?" />
by
<input id="assignee" />
<ul id="todo-list">
<li>
<input class="toggle" type="checkbox" />
<label>watch lesson</label>
</li>
<li>
<input class="toggle" type="checkbox" />
<label>do homework</label>
</li>
</ul>
</body>
</html>
Стиль по умолчанию
Перед тем, как написать стили для нашего веб-приложения, давай упростим наш код
HTML – до той структуры, которая необходима для реализации функционала только
"добавления задач". Это еще и облегчит понимание всего процесса.
<html>
<head>
<title>Todos</title>
</head>
<body>
<input id="new-todo" placeholder="what needs to be done?" />
<ul id="todo-list">
<li>watch lesson</li>
<li>do homework</li>
</ul>
</body>
</html>
_ 42
Для удобства давай закроем левую панель со структурой проекта ("cmnd+\" для Mac
или "ctrl+\" для Windows) и переместим открытую новую вкладку в отдельную
секцию в редакторе кода с помощью элемента контекстного меню "splitting the
window down":
_ 44
закроем "дубликат":
Мы еще не написали ни одного "правила стиля", но давай сразу подключим наш файл
"css" к html-странице, чтобы встроенный в редактор браузер мог сразу их "применять"
по ходу написания и сохранения нового кода.
<html>
<head>
<title>Todos</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<input id="new-todo" placeholder="what needs to be done?" />
<ul id="todo-list">
<li>watch lesson</li>
<li>do homework</li>
</ul>
</body>
</html>
Правила CSS
Ну что ж, давай "украшать" наш сайт :)
[id = "new-todo"] {
width: 100%;
}
_ 46
[id = "new-todo"] {
width: 100%;
}
_ 47
[id = "new-todo"] {
width: 100%;
}
[id = "new-todo"] {
width: 100%;
}
CSS-селекторы
Правило начинается с селектора, и он определяет выборку элементов, к которым
будет применено это правило:
[id="new-todo"] {
width: 100%;
}
[id="new-todo"] {
width: 100%;
}
[id="new-todo"] {
width: 100%;
}
Более того, оказывается, что люди так часто ищут элементы по атрибуту id , что в
CSS предусмотрели сокращенный синтаксис:
вместо
[id="new-todo"] {
width: 100%;
}
#new-todo {
width: 100%;
}
_ 49
Свойства CSS
Давай продолжим разбирать синтаксис CSS-правил...
#new-todo {
width: 100%;
}
#new-todo {
width: 100%;
}
#new-todo {
width: 100%;
}
имя свойства
#new-todo {
width: 100%;
}
двоеточие
#new-todo {
width: 100%;
}
_ 50
значение
#new-todo {
width: 100%;
}
точка с запятой
#new-todo {
width: 100%;
}
#new-todo {
width: 100%;
font-size: 24px;
}
#new-todo {
width: 100%;
font-size: 24px;
font-style: italic;