Notes icon indicating copy to clipboard operation
Notes copied to clipboard

My notes about programming and everything related

Заметки программиста

Мои конспекты обо всём, что связано с информационными технологиями (англ. information technology, IT), программированием и смежными ему областями.

Оглавление

  • Почему я решил всё это написать
  • Как подготовиться к собеседованию по этим заметкам
  • Общая теория
    • Дискретная математика
    • Информация и данные
    • Типы данных
    • Структуры данных и алгоритмы
    • Модели данных и базы данных
    • Программирование
    • Тестирование
    • Архитектурные стили и архитектурные паттерны
    • Паттерны проектирования и принципы проектирования
  • Технологии, библиотеки, фреймворки и языки программирования
    • CSS
    • Docker
    • Elasticsearch
    • Git
    • JavaScript
    • Сравнение Flux, Redux, Vuex и Mobx

Почему я решил всё это написать

Поскольку я всей душой за Open Source, я хочу в открытом доступе поделиться с вами всеми моими познаниями, моим опытом, моим виденьем всего, с чем мне доводилось сталкиваться за последние годы работы, что можно было написать словами и о чём мне хотелось писать. К данным заметкам я стараюсь подходить с практической точки зрения, поскольку большая часть материалов была подготолена на основании теоритических и практических вопросов, которые мне доводилось встречать как на собеседованиях, так и при непосредственной работе на проектах.

Человеческая память - это самое ненадёжное хранилище информации.

Никогда не знаешь, что и когда оттуда пропадёт. Ни в чём нельзя быть уверенным, если дело касается воспоминаний. Как бы ты хорошо не разобрал какой-то материал, твоя уверенность в своих знаниях касательно него тает спустя несколько лет без практики, без перечитывания, возвращения к материалу.

Самая лучшая память находится на кончике карандаша

То, что нам покорилось однажды, обычно намного проще и быстрее можно наверстать по сравнению с тем, сколько времени и сил мы затрачиваем на это при первом знакомстве.

Даже если порой кажется, что мы забыли что-то безвозвратно, одно слабое упоминание, один мимолётный триггер может помочь восстановить почти достоверную картину.

Итак, изначальная цель данного проекта - это сохранение моих мыслей, сравнений, умозаключений в моменты наивысшего подъёма в какой-либо областикаком-либо домене), когда и основательнее всего подошёл к разбору материалов. Это позволяет в любой момент времени (через неделю, месяц или даже через 5 лет) практически мгновенно найти решение проблемы, которую я уже решал, или ответ на вопрос, на который мне уже доводилось отвечать (себе или кому-либо ещё). Ускоряет этот процесс ещё и то, что материал однороден (ведь всё написано одни человеком и на одном языке) и имеет структуру, оптимальную для повторения.

В какой-то момент я осознал, что этот мысли и опыт можно запечатлить таким образом, чтобы их могли перенять и другие. С тех пор я всегда стараюсь придерживаться такой формы повествования: пишу не для себя - стараюсь писать доступно для всех.

Как подготовиться к собеседованию по этим заметкам

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

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

Общая теория

Дискретная математика

«Дискретная математика занимается изучением дискретных (конечных) математических структур - таких структур, количество элементов которых конечно, а значит эти элементы можно пересчитать, перечислить. Из-за ограниченности ресурсов компьютера на нём можно реализовывать (рассматривать) только дискретные структуры. Именно эти структуры легли в основу компьютера, стали фундаментом при его создании».

  • Введение
  • Теория множеств
  • Теория мультимножеств
  • Теория графов
  • Математическая логика
  • Комбинаторика

Информация и данные

«Всё, что мы видим и слышим каждый день, несёт в себе какую-то информацию. По сути говоря, вся наша жизнь связана с получением, обработкой и передачей информации. Данные - это цифровая оболочка информации, последовательность нулей и единиц. Представить информацию как данные означает дать возможность компьютеру обрабатывать её. Данные могут быть представлены текстом, изображением, видео, аудио и другими способами».

  • Оглавление
  • Информация и данные
  • Кодирование информации
  • Метаданные

Типы данных

«Типом данных называют множество допустимых значений и совокупность операций над этими значениями. Типы данных позволяют разбить разнородную информацию на несколько заданных типов (строковый, числовой, логический, дата и другие типы). К каждому типу может применяться лишь ограниченное множество операций (например, разность чисел, конкатенация строк и так далее)».

  • О типе данных
  • Классификация типов данных
  • Логический тип
  • Строковый тип
  • Символьный тип
  • Целочисленный тип
  • Число с плавающей точкой
  • Ссылка
  • Указатель

Структуры данных и алгоритмы

  • Структуры данных

Модели данных и базы данных

  • Общие понятия баз данных
  • Реляционная модель данных
  • Масштабирование баз данных

Программирование

Характеристики языков программирования

«Не было бы смысла в таком количестве языков программирования, если бы они хотя бы немного не отличались друг от друга. И дело не только в синтаксисе - критериев сравнения (характеристик) с годами выработалось очень много. Не существует идеального языка программирования (этакой "серебрянной пули"), превосходно подходящего под каждый проект. Наоборот, язык должен выбираться в соответствии с техническими требованиями проекта. И где один язык прекрасно вписывается, реализуя все свои преимущества, другой проявляет себя как нельзя хуже из-за своих "узких мест", ограничений. В данном разделе мы детально рассмотрим каждый из критериев сравнения, чтобы вы могли научиться описанию и сравнению языков программирования, а также принятию решения о том, какой язык подходит больше именно под нужды вашего текущего проекта».

  • О характеристиках языков программирования
  • Типизация
  • Компилируемость и интерпретируемость
  • Потоки, однопоточность и многопоточность
  • Синхронность и асинхронность
  • Кроссплатформенность и нативность
  • Поддержка парадигм программирования

Тестирование

«Тестированием называют процесс испытания некоторого продукта с целью проверки соответствия готовой реализации продукта первоначальным требованиям заказчика. Качественное тестирование очень важно для приложения. Хороший тестировщик продумывает все возможные и невозможные исходы и проверяет каждый из них. Без такого тестирования невозможно гарантировать корректность работы прилолжения, а значит оно может сломаться в любом месте и в любой момент времени». Здесь мы рассмотрим подходы к тестированию, основные понятия и инстументы, используемые при тестировании приложений.

  • Зачем тестировать приложение
  • Тестирование и его разновидности
  • Подходы к написанию тестов
  • Тестовые объекты
  • Паттерны тестирования

Архитектурные стили и архитектурные паттерны

Паттерны проектирования и принципы проектирования

Технологии, библиотеки, фреймворки и языки программирования

  • CSS
  • Docker
  • Elasticsearch
  • Git
  • JavaScript
  • Сравнение Flux, Redux, Vuex и Mobx