• Stars
    star
    191
  • Rank 196,846 (Top 4 %)
  • Language
  • Created over 5 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

My notes about programming and everything related

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

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

Оглавление

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

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

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

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

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

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

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

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

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

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

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

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

Общая теория

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

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

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

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

Типы данных

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

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

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

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

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

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

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

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

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

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

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