Каждый уважающий себя разработчик должен знать ↑
Книги ↑
Это — книги «на все времена». Лучшие в своем роде и важные для программистов любых направлений.
-
Жизнь:
-
Архитектура компьютера:
-
Программирование:
-
Операционные системы:
-
Люди:
Английский язык ↑
Цель - развить навык свободного чтения на английском языке.
Зачем - большинство лучших курсов, справочных и учебных материалов доступно именно на английском языке. Если возникают трудности, то со знанием английского языка выше шансы найти ответ во всемирной паутине. Также если хотите работать в крутой престижной кампании, то без английского никак.
- Ресурсы (Не обязательно выбирать все ресурсы, выберите или найдите то, что вам больше нравится):
Архитектура компьютера ↑
Цель - познакомиться с концептуальной структурой вычислительных машин.
Linux, командная строка Bash ↑
Цель - понять как работают операционные системы. Научиться базовому администрированию.
- Ресурсы:
- Курс: Bash: Основы командной строки (Hexlet)
- Статья: Искусство командной строки (статья)
- Статья: Руководство по установке Debian GNU/Linux
- Книга: Операционная система UNIX (Андрей Робачевский, Сергей Немнюгин, Ольга Стесик)
- Книга: Руководство администратора Linux (Эви Немет, Гарт Снайдер, Трент Р. Хейн)
Структуры данных ↑
Структуры данных — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Данные можно представить по-разному. В зависимости от того, что это за данные и что вы собираетесь с ними делать, одно представление подойдёт лучше других.
Рекомендуется ознакомиться с алгоритмами хотя бы на базововм уровне. Так как структуры данных реализованы с помощью алгоритмов, алгоритмы - с помощью структур данных.
-
Понимание:
- Списки
- Хеш-таблица
- Стек
- Очередь
- Граф
- Связный список
- Деревья
- Двоичное дерево поиска
-
Статьи:
-
Книги:
HTML & CSS ↑
-
Усвоить понятия:
- Верстка
- HTML 5
- Разметка
- Семантика
- Cтили
- Cелекторы
- Анимация
-
Документации, курсы:
Объектно-ориентированное программирование ↑
-
Усвоить понятия:
- Класс
- Объект
- Абстракция данных
- Инкапсуляция
- Наследование
- Полиморфизм
-
Книга:
Функциональное программирование ↑
-
Усвоить понятия:
- Абстракция данных
- Функция высшего порядка
- Чистые функции
- Рекурсия
- Замыкания
- Неизменяемый объект
-
Статьи:
-
Книга:
Системы управления версиями ↑
-
Усвоить понятия:
- Ветвления
- Слияние
- Конфликты и их разрешение
- Версии проекта, теги
- Базовые принципы разработки ПО в VCS
- Ежедневный цикл работы
-
Курс:
-
Книга:
Протокол HTTP ↑
Цель - понять, как браузер взаимодействует с веб-сервером.
-
Усвоить понятия:
- User-agent
- DNS
- Отличия HTTP 2.0 от версий 1.x
- Тело HTTP-запроса
- Передача данных
- Отправка форм
- Transfer-Encoding
- Перенаправления
- Базовая аутентификация
- Cookies
-
Статьи:
-
Курс:
Тестирование ↑
-
Виды тестов:
- Блочное тестирование (модульное, unit testing)
- Интеграционное тестирование
- Системное тестирование
-
Изучить методологии:
- Разработка через тестирование (TDD)
- разработка, основанная на функционировании (BDD)
-
Статьи:
Безопасность сайтов ↑
-
Уязвимости:
- SQL-инъекция
- Межсайтовый скриптинг или XSS
- Демонстрация ошибок пользователю
- Доступность данных о характеристиках системы пользователю
- Инъекция через загрузку файлов
- E-mail-инъекция
- Кража сессии
-
Книга:
-
Статья:
Тайм-менеджмент ↑
Тайм-менеджмент - технология организации времени и повышения эффективности его использования.
Методы:
- Метод «Помидора»
- Метод Парето
- Метод «Альп»
- Матрица Эйзенхауэра
Можно использовать один или несколько методов или разработать свой метод. Главное, чтобы он был удобен и реально приносил пользу.
- Статьи:
Карта развития Back-end разработчика ↑
Алгоритмы ↑
-
Познакомиться с алгоритмами:
- Сортировки
- Поиска в строке
- Обхода и поиска в структурах данных
- На графах
-
Статьи:
-
Книга:
Серверные языки программирования ↑
Цель - освоить несколько серверных языков программирования.
Нельзя останавливаться на одном языке, так как у вас может появиться 'JAVA головного мозга' - неспособность думать за пределами своего языка программирования.
Лозунг: нужно программировать не на языке программирования, а используя его.
-
Примеры серверных языков:
- PHP
- Python
- Ruby
-
Статьи:
Паттерны программирования ↑
-
Познакомиться cо слелующими типами паттернов:
- Порождающие шаблоны проектирования
- Структурные шаблоны проектирования
- Поведенческие шаблоны проектирования
-
Статьи:
-
Видео:
-
Книга:
Принципы программирования ↑
-
Познакомиться с принципами:
- DRY
- KISS
- YAGNI
- SOLID
-
Статья:
Регулярные выражения ↑
-
Усвоить понятия:
- Квантификация
- Жадность
- Группировка
-
Статьи:
SQL ↑
-
Усвоить понятия:
- DDL, DML, DQL
- Создание и удаление базы данных, таблицы
- Добавление, обновление и удаление записи
- Схема (SCHEMA)
- Представления (VIEWS)
- WHERE
- LIMIT, OFFSET
- ORDER BY
- GROUP BY
- JOIN
- Подзапросы
-
Статьи:
-
Курсы:
Проектирование баз данных ↑
-
Усвоить понятия:
- Нормализация
- Денормализация
- Связи
-
Статьи:
Фреймворки ↑
Для разных языков программирования существуют разные фреймворки, не нужно изучать всё сразу, необходимо взять несколько фреймворков за основу.
-
PHP фреймворки:
-
Python фреймворки:
-
Ruby фреймворки:
-
Статьи:
Пакетный менеджер ↑
-
Список пакетных менеджеров:
-
Статьи:
Устройство веб-серверов и способы взаимодействия ↑
-
Усвоить понятия:
- HTTP
- NGINX
- APACHE
- Треды
- Worker
- CGI
- FastCGI
- event Loop
-
Статьи:
Развертывание проектов ↑
-
Усвоить понятия:
- Деплой
- Миграции
- Релизы
- Еnvironment
- Непрерывная интеграция (CI)
-
Статьи:
- Версионная миграция структуры базы данных: основные подходы (habrahabr)
- Нумерация версий ПО для новичков и не только (habrahabr)
- Automated git deployments from Bitbucket
- How to use Vagrant for local web development
- Vagrant для малышей, или как на Windows легко получить настроенный сервер для разработки веб-приложений
Карта развития Front-end разработчика ↑
JavaScript ↑
-
Познакомиться с такими понятиями как:
- Переменные
- Типы данных
- Функции
- Рекурсия
- Замыкания
- Область видимости
- Объекты
- События
- DOM
-
Документации, книги:
Адаптивный/отзывчивый веб-дизайн ↑
-
Усвоить понятия:
- Адаптивный веб-дизайн
- Отзывчивый веб-дизайн
- Media queries
- Mobile first
- Graceful degradation
- RESS
-
Статьи:
JavaScript библиотеки ↑
Цель - познакомиться с наиболее популярными библиотеками JavaScript. Знать где и когда их применять.
Список библиотек:
- jQuery
- ReactJS
- Underscore - набор полезных функций
- Modernizr - обнаруживает HTML5 и CSS3 функции в браузере пользователя
- Babel - компилятор для написания JavaScript следующего поколения
- Three - 3D
- WOW - анимация при прокрутки страницы
- Moment - Работа с датой и временем
- Mocha - написание тестов
Список наиболее популярных библиотек есть на Javascripting
Препроцессоры CSS ↑
-
Усвоить понятия:
- Переменные
- Миксины
- Функции
- Импорт
- Минификация
-
Список препроцессоров CSS:
-
Статьи:
Сборщик проектов ↑
Сборщик проектов — небольшое приложение, которое используется для автоматизации скучных и рутинных задач, которые приходится постоянно выполнять в процессе разработки проекта. Такие задачи включают в себя, к примеру, запуск модульных тестов, конкатенацию файлов, минификацию, препроцессинг CSS.
-
Сборщики проектов:
-
Статьи:
Пакетный менеджер ↑
-
Список пакетных менеджеров:
-
Статьи:
CSS фреймворки ↑
-
Список фреймворков:
-
Статьи:
JavaScript фреймворки ↑
Существуют разные фреймворки, не нужно изучать всё сразу, необходимо взять несколько фреймворков за основу.
Список фреймворков:
Одностраничное приложение ↑
Одностраничное приложение или SPA (single page application) - сайт или веб-приложение, использующий единственный HTML-документ как оболочку для всех веб-страниц и организующий взаимодействие с пользователем через динамически подгружаемые HTML, CSS, JavaScript, обычно посредством AJAX.
-
Изучить:
- JavaScript фреймворки
- Роутинг
- Шаблонизатор
- API, например REST
- AJAX
-
Статьи: