Каждый уважающий себя разработчик должен знать ↑
Книги ↑
Это — книги «на все времена». Лучшие в своем роде и важные для программистов любых направлений.
-
Жизнь:
-
Архитектура компьютера:
-
Программирование:
-
Операционные системы:
-
Люди:
Английский язык ↑
Зачем - большинство лучших курсов, справочных и учебных материалов доступно именно на английском языке. Если возникают трудности, то со знанием английского языка выше шансы найти ответ во всемирной паутине. Также если хотите работать в крутой престижной кампании, то без английского никак.
- Полезные ресурсы:
- Duolingo
- Lingualeo
- Babadum
- Anki и карточки 4000 Essential English Words (all books) [en-en] M4R4M
- Techrocks очень много статей переведенных с английского
- English e-Reader адаптированные книги на английском
- British council очень много полезной и структурированной информации для изучения
- Jazz chants тренировка темпа и скорости речи, чтобы звучать более естественно
- Engoo Daily news статьи на английском с разбивкой по уровням
- YouGlish поиск произношения слова или короткой фразы в Youtube
Архитектура компьютера ↑
Цель - познакомиться с концептуальной структурой вычислительных машин.
- [✅] Книга:
Linux, командная строка Bash ↑
Цель - понять как работают операционные системы. Научиться базовому администрированию.
- Ресурсы:
- Курс: Bash: Основы командной строки (Hexlet)
- Статья: Искусство командной строки (статья)
- Книга: Операционная система UNIX (Андрей Робачевский, Сергей Немнюгин, Ольга Стесик)
- Книга: Руководство администратора Linux (Эви Немет, Гарт Снайдер, Трент Р. Хейн)
- Книга: Advanced Programming in the UNIX Environment (Richard Stevens)
Структуры данных ↑
Структуры данных — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Данные можно представить по-разному. В зависимости от того, что это за данные и что вы собираетесь с ними делать, одно представление подойдёт лучше других.
Рекомендуется ознакомиться с алгоритмами хотя бы на базововм уровне. Так как структуры данных реализованы с помощью алгоритмов, алгоритмы - с помощью структур данных.
-
Понимание:
- [✅] Списки
- [✅] Хеш-таблица
- [✅] Стек
- [✅] Очередь
- [✅] Граф
- [✅] Связный список
- [✅] Деревья
- [✅] Двоичное дерево поиска
-
Статьи:
-
Книги:
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 разработчика ↑
Алгоритмы ↑
-
Познакомиться с алгоритмами:
- Сортировки
- Поиска в строке
- Обхода и поиска в структурах данных
- На графах
-
Статьи:
-
Книги:
-
Ресурсы:
- HackerRank
- [✅] Codewars
- [✅] LeetCode
Серверные языки программирования ↑
Цель - освоить несколько серверных языков программирования.
Нельзя останавливаться на одном языке, так как у вас может появиться 'JAVA головного мозга' - неспособность думать за пределами своего языка программирования.
Лозунг: нужно программировать не на языке программирования, а используя его.
-
Примеры серверных языков:
- PHP
- Python
- Ruby
- Node.js
-
Статьи:
Паттерны программирования ↑
-
Познакомиться cо слелующими типами паттернов:
- Порождающие шаблоны проектирования
- Структурные шаблоны проектирования
- Поведенческие шаблоны проектирования
-
Статьи:
-
Видео:
-
Книга:
Принципы программирования ↑
-
Познакомиться с принципами:
- [✅] DRY
- [✅] KISS
- YAGNI
- [✅] SOLID
-
Статья:
Регулярные выражения ↑
-
Усвоить понятия:
- Квантификация
- Жадность
- Группировка
-
Статьи:
SQL ↑
-
Усвоить понятия:
- DDL, DML, DQL
- Создание и удаление базы данных, таблицы
- Добавление, обновление и удаление записи
- Схема (SCHEMA)
- Представления (VIEWS)
- WHERE
- LIMIT, OFFSET
- ORDER BY
- GROUP BY
- JOIN
- Подзапросы
-
Статьи:
-
Курсы:
Проектирование баз данных ↑
-
Усвоить понятия:
- Нормализация
- Денормализация
- Связи
-
Статьи:
Фреймворки ↑
Для разных языков программирования существуют разные фреймворки, не нужно изучать всё сразу, необходимо взять несколько фреймворков за основу.
-
PHP фреймворки:
-
Python фреймворки:
-
Ruby фреймворки:
-
Node.js фреймворки:
-
Статьи:
Пакетный менеджер ↑
-
Список пакетных менеджеров:
-
Статьи:
Устройство веб-серверов и способы взаимодействия ↑
-
Усвоить понятия:
- [✅] 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
- 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
-
Статьи: