Ver Fonte

Merge branch 'master' of u21mosk/ISRPO into master

ypv há 1 ano atrás
pai
commit
e3cfab87e9

+ 40 - 0
Лекции/C++/Что такое C++.md

@@ -0,0 +1,40 @@
+# C++
+C++ — компилируемый, статически типизированный язык программирования общего назначения.
+
+Поддерживает такие парадигмы программирования как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.
+
+C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений. Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ.
+# Объектно-ориентированные особенности
+
+C++ добавляет к C объектно-ориентированные возможности. Он вводит классы, которые обеспечивают три самых важных свойства ООП: инкапсуляцию, наследование и полиморфизм.
+
+Методы класса — это функции, которые смогут применяться к экземплярам класса. Грубо говоря, метод — это функция объявленная внутри класса и предназначенная для работы с его объектами. Методы объявляются в теле класса. Описываться могут там же, но могут и за пределами класса (внутри класса в таком случае достаточно представить прототип метода, а за пределами класса определять метод поставив перед его именем — имя класса и оператор ::). Методы и поля входящие в состав класса называются членами класса. При этом методы часто называют функциями-членами класса.
+
+# Наследование
+
+В C++ при наследовании одного класса от другого наследуется реализация класса, плюс класс-наследник может добавлять свои поля и функции или переопределять функции базового класса. Множественное наследование разрешено.
+
+Конструктор наследника вызывает конструкторы базовых классов, а затем конструкторы нестатических членов-данных, являющихся экземплярами классов. Деструктор работает в обратном порядке.
+
+Наследование бывает публичным, защищённым и закрытым.
+
+# Полиморфизм
+
+Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных.
+
+Преимуществом полиморфизма является то, что он помогает снижать сложность программ, разрешая использование того же интерфейса для задания единого класса действий. Выбор же конкретного действия, в зависимости от ситуации, возлагается на компилятор. Полиморфизм может применяться также и к операторам.
+
+# Инкапсуляция
+
+Основным способом организации информации в C++ являются классы. В отличие от структуры (struct) языка C, которая может состоять только из полей и вложенных типов, класс (class) C++ может состоять из полей, вложенных типов и функций-членов. Инкапсуляция в С++ реализуется через указание уровня доступа к членам класса: они бывают публичными (public), защищёнными (protected) и закрытыми (private). В C++ структуры отличаются от классов тем, что по умолчанию члены и базовые классы у структуры публичные, а у класса — собственные.
+
+ 
+
+# Стандартная библиотека
+
+В языке программирования C++ термин Стандартная Библиотека означает коллекцию классов и функций, написанных на базовом языке. Стандартная Библиотека поддерживает несколько основных контейнеров, функций для работы с этими контейнерами, объектов-функции, основных типов строк и потоков (включая интерактивный и файловый ввод-вывод), поддержку некоторых языковых особенностей, и часто используемые функции для выполнения таких задач, как, например, нахождение квадратного корня числа. Стандартная Библиотека языка C++ также включает в себя спецификации стандарта ISO C90 стандартной библиотеки языка Си. Функциональные особенности Стандартной Библиотеки объявляются внутри пространства имен std.
+# Достоинства и недостатки
+
+С++ — язык, складывающийся эволюционно. Каждый элемент С++ заимствовался из других языков отдельно и независимо от остальных элементов (ничто из предложенного С++ за всю историю его развития не было новшеством в Computer Science), что сделало язык чрезвычайно сложным, со множеством дублирующихся и взаимно противоречивых элементов, блоки которых основаны на разных формальных базах.
+
+Критики С++ не противопоставляют ему какой-либо конкретный язык, а наоборот, утверждают, что для всякого случая применения С++ всегда существует альтернативный инструментарий, позволяющий решить ту же задачу более эффективно и качественно. В свою очередь, сторонники С++ считают некорректным сравнивать различные аспекты С++ с совершенно различными языками, так как общий набор средств и возможностей С++ существенно шире, чем в большинстве языков, с которыми проводится сравнение, и сама по себе широта возможностей, на их взгляд, является веским оправданием несовершенства каждой отдельно взятой возможности. Более того, по их мнению, высокая совместимость с Си является одной из принципиальных черт языка, и потому все недостатки С++ оправданы преимуществами, предоставляемыми этой совместимостью.

+ 40 - 0
Лекции/CSharp/Что такое С#.md

@@ -0,0 +1,40 @@
+# Что такое С#
+С# (произносится как «си шарп») — это объектно-ориентированный язык программирования, разработанный корпорацией Microsoft. C# используется для создания различных приложений, веб-разработки, разработки игр, приложений для мобильных устройств, робототехники, научных расчетов и многих других областей. 
+
+Основой C# является язык C++. Но он включает множество новых конструкций и синтаксических улучшений, которые делают его более простым в использовании и повышают производительность программ.
+# История развития языка
+C# был создан в 1999 году командой разработчиков в составе корпорации Microsoft, во главе которой стоял Андерс Хейлсберг. Основной целью было создание нового языка программирования. Было важно, чтобы язык поддерживал новые технологии, используемые в разработке программного обеспечения на тот момент: компонентная архитектура, управление памятью, объектно-ориентированное программирование. А также был бы доступен для разработки на платформе Microsoft.NET.
+Создавая новый язык программирования, разработчики учитывали как требования к возможностям языка, так и опыт других языков программирования, например С++, Java, Delphi и других.
+
+В августе 2000 года была выпущена первая версия C# и .NET Framework. Успех этих технологий привел к их дальнейшему развитию и применению в различных направлениях разработки ПО, включая веб-разработку, разработку игр, приложений для мобильных устройств, научных расчетов, и многих других областей.
+
+# Кто и для чего используют C#
+C# разрабатывался, чтобы сделать разработку приложений более простой и эффективной при использовании новейших технологий.
+
+Название C# было выбрано за его сходство с музыкальным знаком решетка. Это символизирует поднятие на полтона и отражает цель создания языка — для улучшения программирования на языке C++.
+
+С тех пор, как C# был выпущен, он значительно изменил индустрию программного обеспечения. Сегодня он является одним из самых популярных языков программирования. Он используется для создания широкого спектра приложений в различных областях: от веб-разработки и разработки приложений для мобильных устройств до научных расчетов и игр. 
+
+C# является языком программирования, который используется разработчиками приложений для платформы Microsoft .NET Framework и платформы .NET Core, а также при разработке приложений для операционных систем Windows, Linux и macOS. Язык C# используется многими компаниями для создания корпоративных приложений, в том числе Microsoft, Amazon, Google, Intel.
+
+# Преимущества C#
+C# — распространенный язык программирования, и не просто так. Он имеет следующие преимущества:
+
+** Простота и удобство в использовании. Благодаря своей простой и понятной синтаксису язык C# легок для изучения и позволяет быстро разрабатывать приложения.
+* Мощная и эффективная сборка мусора. C# автоматически освобождает выделенную в памяти для объектов после того, как они не используются.
+* Объектно-ориентированное программирование. Язык C# предоставляет основные конструкции, необходимые для создания объектно-ориентированных приложений.
+* Безопасность. C# предоставляет механизмы для защиты от несанкционированных действий, таких как взлом или сбой в работе приложения.
+* Интеграция с .NET-платформой. C# разработан для совместной работы с .NET-платформой, что позволяет использовать библиотеки и компоненты, созданные на других языках .NET.
+* Поддержка параллельного программирования. Это позволяет создавать многопоточные приложения.
+* Возможности для веб-разработки. C# используется для создания веб-приложений, благодаря различным фреймворкам, таким как ASP.NET.
+* Многие крупные компании используют C# для своих проектов, такие как Microsoft, Amazon, Google, Intel, Facebook и др.
+
+# Недостатки языка
+Недостатки C# не очень значительны, и язык остается одним из самых популярных в мире.
+* Зависимость от платформы — C# выполняется в .NET-среде, поэтому зависит от платформы, которая может быть ограничением для некоторых разработчиков.
+* Ограниченные возможности управления памятью — в отличие от некоторых других языков, таких как С++, C# предоставляет ограниченные возможности управления памятью.
+* Сложность для разработки низкоуровневых приложений — C# не предназначен для разработки низкоуровневых приложений, из-за чего он может быть менее эффективным для некоторых задач.
+* Ограниченная поддержка функционального программирования — в C# недостаточно развита поддержка функционального программирования, в отличие от некоторых других языков, таких как Scala или Haskell.
+* Ограниченная поддержка многопоточности — хотя C# имеет поддержку многопоточности, она не настолько развита как у некоторых других языков, таких как Java или Kotlin.
+* Привязка к платформе Microsoft — поскольку C# был создан корпорацией Microsoft, он наиболее широко используется в операционной среде Windows и в экосистеме Microsoft.
+* Неудобство работы с низкоуровневым оборудованием — в некоторых случаях C# может быть неудобен для работы с низкоуровневым оборудованием, таким как микроконтроллеры.

+ 35 - 0
Лекции/JavaScript/Что такое JavaScript.md

@@ -0,0 +1,35 @@
+# Что такое JavaScript?
+JavaScript – это язык программирования, который используют разработчики для создания интерактивных веб-страниц. Функции JavaScript могут улучшить удобство взаимодействия пользователя с веб-сайтом: от обновления ленты новостей в социальных сетях и до отображения анимации и интерактивных карт. JavaScript является языком программирования при разработки скриптов для выполнения на стороне клиента, что делает его одной из базовых технологий во всемирной сети Интернет. Например, карусель изображения, выпадающее по клику меню и динамично меняющиеся цвета элементов на веб-странице, которые вы видите во время просмотра страниц в Интернете, выполнены при помощи JavaScript.
+
+# Для чего используется JavaScript?
+Исторически веб-страницы были статичными, похожими на страницы в книге. Статическая страница в основном отображала информацию в фиксированном виде и не выполняла всего того, что мы сейчас ожидаем от современного сайта. Язык JavaScript возник как технология на стороне браузера, позволяющая сделать веб-приложения более динамичными. Используя его, браузеры могли реагировать на взаимодействие с пользователем и менять расположение контента на веб-странице.
+
+По мере развития языка, разработчики JavaScript создали библиотеки, фреймворки и практики программирования и начали использовать его за пределами веб-браузеров. Сегодня JavaScript можно использовать для разработки как на стороне клиента, так и на стороне сервера. В следующих подразделах мы приводим некоторые общие примеры использования.
+
+Исторически веб-страницы были статичными, похожими на страницы в книге. Статическая страница в основном отображала информацию в фиксированном виде и не выполняла всего того, что мы сейчас ожидаем от современного сайта. Язык JavaScript возник как технология на стороне браузера, позволяющая сделать веб-приложения более динамичными. Используя его, браузеры могли реагировать на взаимодействие с пользователем и менять расположение контента на веб-странице.
+
+По мере развития языка, разработчики JavaScript создали библиотеки, фреймворки и практики программирования и начали использовать его за пределами веб-браузеров. Сегодня JavaScript можно использовать для разработки как на стороне клиента, так и на стороне сервера. В следующих подразделах мы приводим некоторые общие примеры использования.
+
+ 
+
+# Как работает JavaScript?
+Все языки программирования работают путем перевода английского синтаксиса в машинный код, который затем выполняет операционная система. JavaScript в широком смысле можно отнести к категории скриптовых или интерпретируемых языков. Код JavaScript интерпретируется, то есть непосредственно переводится в код машинного языка движком JavaScript. В других языках программирования компилятор обрабатывает весь код в машинный на отдельном этапе. Таким образом, все скриптовые языки являются языками программирования, но не все языки программирования являются скриптовыми.
+
+# Движок JavaScript
+Движок JavaScript – это компьютерная программа, которая выполняет код JavaScript. Первые движки JavaScript были всего лишь интерпретаторами, но все современные движки используют для повышения производительности JIT-компиляцию или компиляцию во время выполнения.
+
+# JavaScript на стороне клиента
+JavaScript на стороне клиента относится к тому, как JavaScript работает в вашем браузере. В этом случае движок JavaScript находится внутри кода браузера. Все основные веб-браузеры имеют свои собственные встроенные движки JavaScript.
+
+Разработчики веб-приложений пишут код JavaScript с разными функциями, связанными с различными событиями, такими как щелчок мыши или наведение курсора. Эти функции вносят изменения в HTML и CSS.
+# В чем заключаются преимущества языка JavaScript?
+* Простота освоения и использования
+Синтаксис JavaScript сформирован на основе языка программирования Java, его легко изучить, чтобы написать код. Разработчики используют JavaScript почти в каждом сайте и мобильном приложении для создания сценариев на стороне клиента. В последнее десятилетие Node.js также приобрел значительную популярность для кодирования бэкенда. Многие крупные платформы потокового вещания и видео были разработаны на Node.js.
+* Независимость от платформы
+В отличие от других языков программирования, JavaScript можно вставить в любую веб-страницу и использовать со многими другими механизмами и языками веб-разработки. Написав на нем что-либо, вы можете выполнять код JavaScript на любой машине. Таким образом, JavaScript делает разработку приложений независимой от платформы.
+
+* Снижение нагрузки на сервер
+Вы можете использовать JavaScript для снижения нагрузки на сервер и перегрузки сети, потому что он может выполнять логические операции и делать большую часть работы сервера на стороне клиента. Например, рассмотрим процесс заполнения регистрационной формы. JavaScript быстро проверяет, ввели ли вы 10-значный номер для поля мобильного телефона. Если бы эти запросы отправлялись на сервер, ваша страница перезагружалась бы при каждой ошибке, что сделало бы процесс регистрации очень медленным и утомительным.
+
+* Улучшение пользовательского интерфейса
+JavaScript создает веб-сайты, которые делают удобным поиск и обработку сложной информации. Разработчики применяют JavaScript для расширения функциональности и читабельности, а также для повышения эффективности взаимодействия пользователя с сайтом.

+ 39 - 0
Лекции/Unit_тесты/Что такое Unit тесты.md

@@ -0,0 +1,39 @@
+# Что такое unit-тест?
+Для начала, мне стоит дать определение, которого я придерживаюсь, когда говорю о unit-тесте.
+
+Unit-тест ­­- это автоматизированный код, который вызывает исполнение тестируемого модуля, и проверяет один из результатов его работы.
+
+Этот код надежный, читаемый, поддерживаемый. Вместе с тем, что очень важно, этот код не имеет внешних зависимостей, и имеет полный контроль над объектом тестирования. Именно это отличает unit-тесты от интеграционных.
+
+Если рассмотреть свойства unit-теста, то можно прийти к следующему набору качеств, которые такой тест должен иметь:
+* Исполняется автоматически и часто. Для того чтобы это качество было, тесты должны быть интегрированы в процессы CI. * Код приложения часто изменяется, и необходимо контролировать его качество как минимум с этой же частотой. Минимум тесты должны исполняться в момент сборки. 
+*  Лучше расширить список поводов для запуска тестов, и включить в него: ежедневные (ночные) запуски; запуск перед поставкой; запуск перед выгрузкой кода в репозиторий (пушем).
+
+* Легкий во внедрении. Подобный тест должно быть легко (быстро) разработать и добавить к тестовому набору. Если вы видите, что тест разрабатывать долго, то это признак того, что или вы пишете не unit-тест, или вы неправильно выбрали "размеры" объекта тестирования. Да, тестируемые модули могут быть разными по размеру. Это могут быть и отдельные методы, и несколько классов.
+
+* Актуален (релевантен) в любое время. Это значит, что тест не теряет актуальность до тех пор, пока объект тестирования актуален (не подвергся изменениям или не удален). И не должно быть никаких других условий релевантности.
+
+* Легко исполняемый. Каждый участник команды разработки должен иметь возможность запустить тест. Как локально, так и на CI-сервере. Это позволит быть уверенным любому, что он не сломал чужой код.
+
+* Быстрый. Unit-тесты исполняются если не за доли секунды, то за секунды. Это является гарантией того, что они будут исполняться часто. Никому не хочется долго ждать завершения тестов. И, зачастую, продолжительные тесты просто не выгодно запускать, если у нас есть ограничения (к примеру, небольшое количество сборщиков на CI; или нам срочно нужно сделать поставку кода).
+
+* Консистентный. Всегда должен быть один и тот же результат при каждом исполнении теста. Это одно из главных условий стабильности тестов.
+
+* Имеет полный контроль над объектом тестирования (модулем). Это значит, что тест исключает и подменяет "общение" модуля с любыми внешними источниками: БД, файловая система, системное время, различные генераторы и т.д. В противном случае, тест не может быть консистентным.
+
+* Прост в анализе. Для облегчения анализа причин неуспешной проверки, как минимум, тест должен иметь понятную архитектуру, и сообщать какой результат актуальный, а какой ожидаемый.
+
+# Базовые правила разработки unit-тестов
+Начну с самого очевидного – разрабатывайте unit-тесты в специализированном фреймворке. Независимо от языка программирования, который вы используете, возможно найти подходящий xUnit фреймворк, который предоставит возможность:
+
+* Разрабатывать структурированные тесты. Как минимум, у вас будут атрибуты, которые будут помечать методы как "тесты".
+
+* Использовать готовые методы для разных типов проверок. Использование таких методов увеличит читаемость кода и упростит анализ исполненных тестов.
+
+* Формировать тестовые наборы. Вы сможете логически объединять тесты в группы, основываясь на каком-нибудь признаке. Например, относительно функционала.
+
+* Видеть успешность проверок в момент их исполнения.
+
+* Проводить анализ исполненных тестов: сколько тестов исполнилось, сколько не исполнялось, какие результаты проверок, причины провалов, и т.д.
+
+* Разрабатывать параметризованные тесты. А значит драматично уменьшить количество необходимых строк кода при сохранении уровня тестового покрытия.

+ 38 - 0
Лекции/Интернет платформы.md

@@ -0,0 +1,38 @@
+# Интернет платфолрма
+Интернет-платформа — это инструмент для создания и поддержки работоспособности сайта. Иными словами, это комплекс программных компонентов, упрощающих разработку веб-ресурса за счет использования готовых компонентов, а также обеспечивающий его стабильную функциональность. Существует несколько видов веб-платформ, предназначенных для реализации сайтов различного содержания и назначения. 
+# Что такое платформа сайта?
+Написание кода сайта (даже простого одностраничника или лендинга) с нуля сегодня практически не используется. На то есть несколько причин.
+
+- Это сложная и трудоемкая работа. Она требует много времени, а также услуг высококлассных специалистов (программиста, верстальщика и т.д.), которых дефицит на рынке. А красивый, бесперебойно работающий и функциональный сайт нужен сегодня. 
+- Специалисты, осуществляющие техническую поддержку и продвижение веб-ресурса, со временем могут меняться. Если на смену создателю сайта придет другой работник, ему потребуется долгое время, чтобы вникнуть в код предшественника.
+Поэтому более оптимальным является создание сайта на базе определенной платформы — то есть с помощью готовых программных инструментов:
+
+- это ускоряет и упрощает разработку веб-ресурса, потому что фактически представляет собой его сборку из уже разработанных компонентов, шаблонов и т.д., на которые потом накладывается уникальный дизайн, разработанный уже индивидуально для конкретного заказчика;  
+- созданием интернет-платформ занимаются опытные программисты, дизайнеры и иные специалисты, которые регулярно вносят необходимые доработки в код, устраняют ошибки, добавляют новые функции и т.д. Кроме того, при смене специалиста, занимающегося обслуживанием и технической поддержкой сайта, его преемнику не придется изучать код от начала до конца — достаточно знать, на какой платформе он реализован. 
+
+Таким образом, интернет-платформу можно представить как строительную площадку для сайта с фундаментом, основными несущими конструкциями и инженерными системами, над которыми уже достраивается остальная часть здания — кровля, фасад и т.д., то есть непосредственно сам сайт. Более того, такой фундамент и основная постройка будут типовыми. На основе одной и той же платформы можно делать множество различных веб-ресурсов. Как и в архитектуре, такой подход существенно удешевляет создание сайтов. 
+#Какие существуют платформы?
+Есть несколько видов платформ, каждый из которых обладает своими особенностями, функционалом, преимуществами и недостатками. Выбор между ними определяется тем, какой именно сайт вам нужен, насколько широкими планируются его возможности и т.д. 
+
+- Фреймворки. Такие интернет-платформы представляют собой каркас, на который «навешиваются» дополнительные функциональные блоки, интерфейс сайта и т.д. Именно фреймворк можно сравнить с «фундаментом» веб-ресурса, потому что его «стены», «крышу», «фасад» и другие элементы придется «достраивать» (то есть программировать) самостоятельно.
+
+Тем не менее, это гораздо легче, чем писать весь код с нуля, поэтому даже на таких низкоуровневых системах создаются блоги, интернет-магазины, информационные порталы и другие веб-ресурсы. Более того, именно фреймворки лучше всего подходят для реализации крупных проектов или специализированных сервисов. Типичные представители веб-фрейворков — Django на языке Python, Express.js на Java Scipt, ASP.Net (использует специализированные языки Microsoft) и т.д.
+
+- Системы управления контентом (content management system — CMS). Это электронные платформы более высокого уровня, которые предоставляют разработчику весь комплект инструментов для создания и последующей поддержки сайта. В CMS уже есть все основные функциональные модули, необходимые для веб-ресурса того или иного типа. Разработчику остается лишь добавить или, наоборот, убрать их в режиме администратора через удобный визуальный редактор. То есть непосредственно написание кода сводится к минимуму — в основном для добавления нетиповых функций, дополнительных онлайн-форм и т.д. Впрочем, даже их можно добавить с помощью внешних подключаемых плагинов. Наиболее популярные CMS для разработки сайтов — 1С-Bitrix, NetCat, WordPress. 
+
+Самое большое преимущество CMS в том, что поддерживать нормальную работу сайта может не только разработчик, но и сам собственник ресурса. Это особенно полезно при замене сотрудников — без штатного специалиста владелец сможет самостоятельно поддерживать ресурс в рабочем состоянии.
+
+Единственный заметный недостаток CMS состоит в том, что разработчики таких платформ стремятся сделать их универсальными, то есть пригодными для создания сайтов различной сложности, направления и содержания. Из-за этого в них есть множество лишних функций, которые увеличивают потребление ресурсов, замедляют скорость работы сайта. Кроме того, владельцу ресурса приходится отдельно искать и покупать услуги хостинга.
+
+- SaaS-платформы (Software as a Service — ПО как услуга). Владельцы облачных онлайн-платформ предоставляют клиентам на условиях аренды доступ к сервисам, с помощью которых они создают собственный сайт. Преимущественно облачные сервисы используются для разработки простых интернет-ресурсов — блогов, информационных порталов, небольших интернет-магазинов. Основное преимущество платформ в том, что клиент получает весь комплекс услуг, необходимых для создания и технической поддержки сайта — хостинг, CMS, набор функций, дизайн-шаблоны и т.д. То есть можно сразу приступать к работе, для этого не нужно быть программистом. Достаточно просто собрать свой веб-ресурс в визуальном редакторе из готовых модулей, загрузить текст, картинки, видео. Наиболее распространенные конструкторы сайтов — Tilda, WIX, uCoz.
+
+Недостатком таких платформ разработки веб-ресурсов является невозможность использовать свой дизайн (только предложенные в шаблонах) и добавлять дополнительные функции поверх тех, которые предусмотрены выбранной системой. Кроме того, при высокой нагрузке на облачный сервис сайт может начать тормозить или вовсе перестанет временно работать.
+
+# Какую интернет-платформу выбрать?
+При выборе платформы для сайта нужно ориентироваться на следующие критерии.
+
+- Тип сайта. Несмотря на то, что разработчики многих платформ стремятся сделать их максимально универсальными, на 100% это невозможно. Одни веб-системы больше заточены под интернет-магазины, другие — под информационные порталы, третьи — под блоги и т.д. Поэтому нужно сразу определиться с типом будущего сайта, продумать его функциональность и только потом подбирать подходящую платформу.
+- Эксклюзивность сайта. Платформы, предлагающие готовые решения (CMS и конструкторы сайтов), не всегда позволяют учесть специфику будущего веб-ресурса. Если на нем планируется реализовать какие-то необычные пользовательские механики, эксклюзивный дизайн, уникальные функции, лучше подобрать подходящий веб-фреймворк. Если же планируется открыть простой интернет-магазин или блог, достаточно возможностей CMS и конструктора сайта.
+- Бюджет. Создание и техническая поддержка сайта требуют денег и времени. И здесь веб-фреймворки, безусловно, проигрывают, потому что веб-ресурс на их основе будет стоить дорого. Наиболее финансово выгодны конструкторы сайтов — вам не придется нанимать специалиста, веб-ресурс можно «собрать» самому. Где-то между ними и фреймворками по затратам находятся CMS. Они тоже предлагают готовые решения, но для работы с ними все же потребуются услуги штатного сотрудника или аутсорсингового разработчика. 
+
+В любом случае, интернет-платформа — это оптимальный способ создать работающий, функциональный веб-ресурс. Она серьезно облегчает и ускоряет процесс разработки, уменьшает финансовые, временные, трудовые затраты. Необходимо только хорошо изучить особенности, возможности и ограничения конкретных платформ, чтобы правильно выбрать подходящую для конкретного сайта.

+ 36 - 0
Лекции/Что такое Code Review.md

@@ -0,0 +1,36 @@
+# Что такое Code Review
+Code Review - это процесс проверки и анализа кода задачи разработчиком перед ее релизом. CR (Code Review) выполняется не тем человеком, который делал задачу, а другими членами команды. Результатом CR является обратная связь по выполненной задаче: необходимость внести правки, либо готовность задачи к последующему тестированию и релизу.
+
+# Зачем нужен Code Review
+Code Review может являться частью процесса выполнения задачи (частью workflow). Может показаться, что ревьювить должен только тимлид или старший разработчик, но хорошей практикой является если в процессе ревью задач участвуют все разработчики. Таким образом можно не только распределить нагрузку от ревью, но и составить у команды более широкое представление о выполняемых задачах. Также это помогает делиться best practices внутри команды.
+
+# Положительные эффекты в команде от Code Review:
+
+* понижает bus factor: больше людей в команде в курсе выполняемой задачи, в случае необходимости внесения изменений в задачу как минимум два человека смогут это сделать. Задача больше не завязана на одного разработчика.
+
+* помогает найти и выявить баги и недоработки на этапе разработки задачи: так как задача сразу проверяется как минимум двумя разработчиками, это повышает вероятность нахождения упущенных кейсов, которые без код ревью могли бы попасть на бой.
+
+* повышается читаемость и качество кода и как следствие - его поддержка в будущем: код понятен не только одному человеку, а нескольким участниками команды, это упрощает и ускоряет разработку в будущем.
+
+* обучаемость сотрудников: разные реализации и подходы к решению задач могут заимствоваться участниками команды друг у друга во время код ревью
+
+* развитие и поддержание здоровой культуры в команде: участники команды учатся друг у друга и учатся давать качественную обратную связь, повышается взаимодействие внутри команды.
+
+# Минусы:
+
+* при разработке задачи на реализацию тратится чуть больше времени
+
+* в задаче задействованы как минимум два разработчика (тот, кто делал задачу и тот, кто ее ревьювил)
+* Когда не нужно проводить код-ревью?
+Системная практика оценки кода внутри команды — не всегда полезное с точки зрения затраты ресурсов решение. Оно отнимает время и у автора, и у проверяющего, а еще требует глубокого погружения в процессы и сил на коммуникацию.
+
+# Причины, чтобы отказаться от код-ревью в конкретном случае:
+
+* нет человека, который обладает экспертизой в области специфики задачи;
+* изменения слишком незначительны и не требуют проверки.
+# Причины, чтобы отказаться от постоянной практики код-ревью:
+
+* у всех разработчиков одинаковый уровень знаний, навыков и уровень погружения в контекст;
+* приняты другие практики проверки кода — например, парное программирование;
+% постоянные конфликты из-за код-ревью в команде;
+практика уже показала свою неэффективность.