u21deev преди 1 година
родител
ревизия
bd7e049daf
променени са 3 файла, в които са добавени 168 реда и са изтрити 0 реда
  1. 67 0
      Лекции/Bug.md
  2. 62 0
      Лекции/Fibonachi.md
  3. 39 0
      Лекции/HTTP.md

+ 67 - 0
Лекции/Bug.md

@@ -0,0 +1,67 @@
+# Баг
+Баг (bug) – это ошибка в коде или в работе программы. Разработчики описывают этим сленговым словом ситуацию, когда что-то работает неправильно, выдает неверный или непредсказуемый результат.
+
+Не любую ошибку можно назвать багом. Этот термин обычно применяют, когда код работает, но некорректно. При этом программа запускается и даже что-то делает, в отличие от, например, синтаксической ошибки, из-за которой код попросту не запустится.
+
+Программу с багами называют забагованной. А отладку кода – дебаггингом, то есть избавлением от багов.
+
+Слово bug в переводе с английского означает «жук». Оно пришло в программирование из сленга инженеров, которые называли багами ошибки при работе электронных схем. А в 1947 году создательница первого компилятора Грейс Хоппер обнаружила в компьютере Mark II бабочку, закоротившую контакты. В журнале происшествий написали: «Первый случай, когда был найден настоящий баг». Так термин закрепился в компьютерной сфере.
+# Где встречаются баги
+- В разработке и тестировании. Разработчики регулярно сталкиваются с багами: современные программные продукты – сложные, а в языках программирования много неочевидных вещей. Поэтому столкнуться с багами легко. Чаще всего они становятся следствием неверного употребления команд, неправильно реализованных алгоритмов или ошибок в дизайне программы. Часть багов находят еще при разработке, другие – на этапе тестирования или даже после выпуска продукта.
+
+- В готовом программном обеспечении. Даже уже выпущенные программы часто бывают не лишены багов. Некоторые из них очень известные, возникают у многих, даже имеют собственные имена. Есть и уникальные ошибки, которые встречаются однократно. Часто баги зависят от внешних параметров: например, в одной версии операционной системы программа работает корректно, а в другой – нет.
+
+- В играх. Отдельной категорией можно назвать баги в видеоиграх: ситуации, когда игровые сцены или персонажи работают не как надо. Примеров множество: двери, которые не могут открыться, внезапные вылеты игры при достижении определенного момента, персонажи, застрявшие в текстурах или зависшие на одном месте. Даже некоторые игры, которые считаются культовыми, на этапе выхода были очень забагованными.
+
+- На сайтах. Современные сайты такие гибкие и функциональные благодаря скриптам, написанным на языках программирования. В браузере работает JavaScript, на сервере языки могут быть разными: PHP, Python, Ruby и другие. Баг может возникнуть и на стороне сервера, и в клиентской части сайта – иногда его замечают только после выпуска в продакшн. Есть даже понятие bug bounty: вознаграждение, которое компания выплачивает пользователю, нашедшему критичный баг в информационной безопасности.
+
+# Кто сталкивается с багами
+В широком смысле встретить баг может любой человек, который пользуется компьютером или смартфоном. Ведь и в готовом ПО ошибки не исключены. В более узком – баги находят разработчики, они же занимаются их исправлением.
+
+Если команда разработки пропустила ошибку, ее ищут на следующем этапе – тестировании. Тестировщики пытаются неочевидными способами воспользоваться программой, чтобы отыскать скрытые ошибки. Найденные баги описываются в специальном отчете – он называется баг-репорт. Отчет тестировщики отправляют разработчикам, чтобы те исправили ошибки.
+# Из-за чего возникают баги
+Мы выяснили, что такое баг. Теперь поговорим о причинах, из-за которых они появляются.
+
+- Первая и наиболее распространенная причина – ошибка разработчика. В IT-среде есть шутка: «Кто же победит: человек, венец природы… или крохотная забытая скобочка?». Маленькие недочеты могут быть очень критичными. Если поставить плюс вместо минуса в простейшем математическом вычислении, то получится совершенно другой результат.
+- Иногда причиной багов становится незнание. Например, разработчик был не в курсе специфического поведения какой-нибудь конструкции в языке, поэтому воспользовался ею не совсем корректно.
+- Часто баги возникают, если в команде программистов нет слаженности. Один не понимает, что написал другой, правит код по своему усмотрению и получает некорректное поведение программы.
+- Наконец, дизайн программы и архитектурные ошибки тоже могут быть причиной багов. Использование неоптимальных алгоритмов, ведущих к сбоям, неверный выбор инструментов – все это может привести к забагованности.
+
+# Ворнинги, вылеты, исключения: чем отличаются от багов
+Ошибки бывают разными, и это не только баги. Вот с чем еще может столкнуться программист.
+
+- Предупреждение. Это не совсем ошибка. Это скорее сообщение о риске некорректной работы. Не все предупреждения действительно указывают на что-то опасное. Например, линтеры – программы для написания чистого кода – выдают предупреждения, если человек пишет в «неправильном» стиле. На сленге предупреждения называют ворнингами от английского warning.
+
+- Исключение. Exception, или исключение, – это встроенный механизм защиты от ошибок в языках программирования. Программа выдает сообщение, что что-то пошло не так. Условия для исключений пишут сами программисты. Например, ставят защиту на ввод: если пользователь введет строку вместо числа, выбросится исключение.
+
+- Преимущество этого механизма в том, что он помогает обрабатывать проблемные ситуации еще до их появления и не допускать появления багов. Разработчик пишет, как должна вести себя программа, если столкнется с исключением. К примеру, в случае со строкой вместо числа можно прописать, чтобы программа сообщила пользователю об ошибке и попросила ввести данные в корректной форме.
+
+- Вылет. Так называют ситуацию, когда программа экстренно завершает работу из-за ошибки. Вылет может сопровождаться сообщением о сбое. Причины разные: начиная от ошибок в коде и заканчивая недостаточной мощностью компьютера, который не справляется с «тяжелой» программой.
+
+- Синтаксическая ошибка. Самый простой вариант: разработчик допустил опечатку в синтаксисе и неправильно написал какую-то конструкцию, поэтому программа не собралась. Запись оказалась неизвестна компилятору или интерпретатору. В таком случае среда программирования говорит разработчику о синтаксической ошибке и указывает, где ее искать.
+
+# Какими бывают баги
+Разработчики классифицируют баги по нескольким категориям. Некоторые – скорее шуточные, другие обсуждаются всерьез. А у некоторых распространенных багов даже есть свои названия.
+
+- Опечатка – простейший вариант. Разработчик случайно пишет не то, и вся программа работает неправильно.
+- Бесконечный цикл – ситуация, когда условие для выхода из цикла никогда не наступает, и программа виснет.
+- Переполнение буфера – явление, когда программе перестает хватать памяти, и она начинает пользоваться памятью за пределами выделенного ей количества.
+- Состояние гонки – баг многопоточных приложений, когда несколько потоков одновременно обращаются к одному и тому же элементу и как бы «соревнуются» за доступ. Результат непредсказуем.
+- Количественный баг – ошибка при работе с большим количеством действий, когда при многократных повторениях появляются баги. Например, большое количество данных распределяется неравномерно.
+- Демонстрационный эффект – явление, когда программа работала нормально на этапе написания, но сломалась при демонстрации. Зачастую возникает из-за недостаточного тестирования и невнимательности: разработчик не учел какой-то сценарий.
+
+# Баги – это очень плохо?
+Баги бывают забавными, не приносящими серьезного вреда. Некоторые из них, особенно игровые, порождают мемы и шутки. Но бывают и очень опасные баги, чреватые потерей денег или даже риском для жизни.
+
+Например, баг в медицинском оборудовании может привести к трагедии. Баг в коде сайта – к утечке огромного бюджета: так было, когда блокчейн-компания Compound случайно отправила своим пользователям почти 90 миллионов долларов. А самый дорогой баг в истории – арифметическое переполнение в программной начинке ракеты-носителя «Арион-5», из-за которого ракета взорвалась в полете.
+
+Конечно, критичность багов зависит от сферы. Если отрасль разработки связана с большими финансами или жизненно важным оборудованием, проверка качества кода в этой отрасли очень жесткая. Ведь цена ошибки очень велика.
+
+# Как избежать багов
+Мы уже выяснили, что критичные баги несут опасность. Поэтому разработчики стараются не допускать их в готовом продукте:
+
+- отлаживают программу еще на этапе создания. Хороший разработчик еще при написании кода учитывает возможные нештатные ситуации в его работе, проверяет его и пишет исключения;
+- тестируют для любых ситуаций, в том числе нетривиальных. В свою очередь тестировщики находят неочевидные ситуации, в которых программа может сломаться, и сообщают о них;
+- проводят юнит-тестирование для каждого компонента. Это отдельное тестирование разных частей кода – юнитов. Оно помогает понять, корректно ли работают эти компоненты – это более глубокий уровень. Ведь ошибка в одном компоненте может вызвать баги во всей программе.
+
+Для начинающего разработчика главное – внимательность, потому что частая причина багов – опечатки. А они вероятнее, если человек еще не привык писать код. Скрупулезность и внимание к деталям помогут если не избежать багов, то серьезно сократить их количество и быстро исправить те, что остались.

+ 62 - 0
Лекции/Fibonachi.md

@@ -0,0 +1,62 @@
+# Числа Фибоначчи
+Числа Фибоначчи (строка Фибоначчи) — числовая последовательность, первые два числа которой являются 0 и 1, а каждое последующее за ними число является суммой двух предыдущих. Представляет собой частный пример линейной рекуррентной последовательности (рекурсии).
+
+Эту последовательность впервые описал итальянский математик Леонардо Пизанский в его работе «Жизнь абака» в 1202 году. Закономерность, описываемая числами Фибоначчи, приобрела популярность в эпоху Возрождения и особенно Нового времени, где повлияла на самые разные стороны жизни — от фундаментальной и прикладной математики до искусства и архитектуры.
+# Описание чисел Фибоначчи
+Сам Леонардо Пизанский (Фибоначчи — его прозвище) предложил знаменитую последовательность в виде «задачи о кроликах», где описал кроличью популяцию со следующими условиями:
+
+- В начале 1 месяца появляется первая пара кроликов (самец и самка).
+- Со 2 месяца кролики начинают ежемесячно производить новую пару.
+- Кролики бессмертны.
+
+Задача состояла в том, чтобы рассчитать, сколько кроликов в популяции будет через год. Математически ее решение описывается формулой:
+
+Fn = Fn–2 + Fn–1, где F0=0, F1=1, а n — больше или равно 2 и является целым числом.
+
+Рассчитанная по этой формуле последовательность выглядит так:
+
+0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, … .
+
+Сам Фибоначчи рассматривал эту последовательность просто как одно из математических упражнений среди прочих задач, указанных в его книге «Жизнь абака». Пример с кроликами был идеальной моделью, в которой кролики размножались строго каждый месяц, производили только двух крольчат разного пола и при этом сами не умирали. Однако некоторые современные исследователи называют ее первой в истории популяционной моделью.
+
+Сама последовательность была известна еще с древних времен — в частности, она использовалась в древнеиндийском стихосложении, в том или ином виде ее знали древнегреческие и арабские математики. Заслуга именно Фибоначчи была в том, что он популяризировал ее в западноевропейской математике, а также ввел в европейскую науку позиционную систему счисления (известную народам Востока), которая имела краеугольное значение в последующем развитии математических наук.
+
+Визуальным воплощением этой последовательности является золотая спираль. Она представляет собой дуги окружностей, вписанных в квадраты, размеры которых соотносятся друг с другом как числа в строке Фибоначчи. В основе этой фигуры лежит золотое сечение — идеальная пропорция, равная 0,61803. Золотая спираль стала одним из распространенных принципов математического пропорционирования, который широко используется в искусстве, архитектуре, начиная с эпохи Возрождения и по сегодняшний день.
+
+# Применение рядов Фибоначчи в информатике и программировании
+Последовательность Фибоначчи — один из классических примеров рекурсии в математике. Рекурсией называется функция, определяющая свое значение через обращение к самой себе. Рекурсивные алгоритмы используются в программировании для упрощения вычислений. Умение обращаться с ними является одним из базовых навыков программиста. Поэтому расчет числа Фибоначчи (достаточно простой рекуррентной функции) часто является тестовым заданием, которое дается соискателю на вакансию программиста для проверки его навыков или применяется в обучении будущих кодеров.
+
+Например, так выглядит рекурсивный поиск чисел Фибоначчи на языке Python:
+
+- def fibonacci(n):
+if n in (1, 2):
+return 1
+return fibonacci(n — 1) + fibonacci(n — 2)
+print (fibonacci(10))
+
+Проблема рекурсивного нахождения чисел Фибоначчи в том, что после определенного предела процесс сильно замедляется. Причина — в самой природе рекурсии: основанная на ней программа постоянно обращается сама к себе. Если число n (номер искомого элемента ряда) большое, обычный компьютер просто не справится или процесс займет слишком много времени.
+
+Поэтому для нахождения чисел Фибоначчи применяются и другие способы — например, обычный цикл (язык Python):
+
+- fib1 = fib2 = 1
+n = input («Номер элемента ряда Фибоначчи: «)
+n = int(n) — 2
+while n > 0:
+fib1, fib2 = fib2, fib1 + fib2
+n -= 1
+print («Значение этого элемента: «, fib2)
+
+# Последовательность Фибоначчи и генерация псевдослучайных чисел
+Случайными называются числа, полученные в результате случайного события. Простейший пример — подбрасывание монетки или игральной кости. Такие числовые последовательности широко используются в современной науке, например для описания различных природных, социальных, экономических и других процессов с влиянием большого количества различных факторов, делающих результаты трудно- или непредсказуемыми.
+
+Проблема в том, что получить настоящие случайные числа очень сложно. Классические примеры с монеткой, игральными костями и колодой карт дают лишь небольшие величины, чего недостаточно для современной науки и технологий. Теоретически случайные числа можно получить из космического излучения или радиации, из дробового шума в электрических цепях. Однако на практике использовать такие источники невыгодно по следующим причинам:
+
+Их установка и настройка требуют слишком много времени и труда.
+Генерация случайных чисел с их помощью происходит медленно.
+Воспроизвести ранее полученные результаты на данном уровне развития технологий невозможно.
+Практическим решением проблемы получения случайных чисел стали псевдослучайные числа, то есть такие, которые обладают некоторыми их свойствами, но генерируются по заранее заданному алгоритму. Для их получения используются специальные вычислительные программы — генераторы псевдослучайных чисел. Особенность их работы заключается в том, что через определенный период времени генерируемые последовательности начинают повторяться. В некоторых областях информатики, таких как криптография (шифрование), это имеет критическое значение. Поэтому еще в 50-х годах XX века был предложен способ генерации псевдослучайных чисел на основе строки Фибоначчи (метод Фибоначчи с запаздыванием), который позволил повысить степень случайности в числовых последовательностях. Он успешно используется сегодня не только в криптографии, но и в имитационном моделировании различных естественных, социальных, экономических процессов, например:
+
+- В кристаллографии с их помощью можно приблизительно моделировать рост кристаллов.
+- В биологии и биоинформатике с помощью чисел Фибоначчи описываются такие процессы и объекты, как расположение листьев и лепестков у растений, семян в сосновых шишках, ячеек в плодах ананаса.
+- Некоторые природные процессы, такие как флуктуации в турбулентных потоках или вихревые процессы в атмосфере, можно приблизительно описать числами Фибоначчи.
+

+ 39 - 0
Лекции/HTTP.md

@@ -0,0 +1,39 @@
+HTTP – это протокол передачи информации в интернете, который расшифровывается как «протокол передачи гипертекста» (HyperText Transfer Protocol). Например, браузер отправляет единичный запрос на сервер, который в свою очередь обрабатывает его, формирует ответ и делится с браузером этим ответом – ресурсами в виде данных.
+
+# Для чего нужен HTTP
+Благодаря взаимодействию клиента (локального компьютера с браузером) и сервера (высокопроизводительного специального компьютера) в сети можно передавать данные. Изначально HTTP использовался только для гипертекстовых документов, но сейчас он может передавать любую информацию. Гипертекстовые документы также могут содержать гиперcсылки, при нажатии на которые формируется новый http-запрос, в ответе на который может содержаться другой гипертекстовый документ. Таким образом мы перемещаемся по страницам в интернете.
+
+# Как он работает
+HTTP-запрос состоит из трех элементов:
+
+- стартовой строки, которая задает параметры запроса или ответа,
+- заголовка, который описывает сведения о передаче и другую служебную информацию.
+- тело (его не всегда можно встретить в структуре). Обычно в нем как раз лежат передаваемые данные. От заголовка тело отделяется пустой строкой.
+
+Важнейшим элементом структуры запроса является стартовая строка. Благодаря ей сервер понимает, что от него хотят. Вот как она устроена:
+
+Метод + URL + HTTP/Версия
+
+Метод (иногда его называют HTTP-глаголом) – описывает, какое именно действие нужно совершить со страницей. Можно придумать самые разные, но стандартных методов девять: GET, HEAD, POST, PUT, DELETE,CONNECT, OPTIONS, TRACE, PATCH. Их функциональность раскрывается в названии, они позволяют получить данные (GET), отправить данные на сервер (POST), удалить (DELETE) или заменить часть (PATCH).
+
+Чаще всего используют GET и POST, они нужны для чтения и отправки данных на сервер. Например вы зашли в соцсеть, увидели пост и решили оставить комментарий. Или зашли в интернет-магазин, решили что-то купить и оставили данные карты.
+
+URL (Uniform Resource Locator) – единообразный идентификатор ресурса, идентифицирует ресурс и определяет его точное местоположение. Именно с помощью URL записаны ссылки в интернете.
+
+В отличие от него URN не ведет к конкретному адресу, а просто определяет ресурс во множестве терминов. Потенциально это удобно, чтобы не перегружать интернет устаревшими или пропавшими ссылками.
+
+Версия показывает, какую версию протокола нужно использовать в ответе сервера.
+HTTP-ответ строится примерно по тому же принципу, что и запрос:
+HTTP/Версия + Код состояния + Пояснение
+Версия совпадает с версией в запросе.
+
+Код состояния показывает статус запроса. Это трехзначное число, благодаря которому можно узнать, получен ли запрос, обработан ли он, какие ошибки есть. Например, одна из самых известных ошибок – 404 – сообщает о том, что сервер не нашел ресурс по адресу. Возможно, в запросе опечатка, ошибка или он не соответствует протоколу.
+
+В пояснении стоит краткое описание ответа, например, к той же ошибке 404 может добавляться Not Found, что и раскрывает суть статуса запроса.
+
+# Чем отличаются HTTP и HTTPS
+HTTPS – это расширение протокола HTTP, которое обеспечивает защиту передаваемых данных. Для сайта это важный параметр, так как шифрование позволяет ему обезопасить информацию, которую туда вводят люди (пароли, реквизиты кредитных карт), от хакерских атак. HTTP-протокол передает данные в открытую, поэтому их легко перехватить.
+
+HTTPS защищен SSL-сертификатом. Благодаря ему уязвимые данные шифруются сначала на клиенте (браузере, например) в результате чего они становятся похожи на случайный набор символов и только потом отправляются на сервер. Каждый раз при HTTP-запросе шифр меняется, поэтому успеть подобрать ключ и украсть данные довольно трудно.
+
+Сейчас защищенное соединение есть у большинства сайтов, причем многие браузеры по умолчанию уже работают только с https. Это легко проверить: в адресной строке браузера обычно стоит замок или она помечена зеленым цветом. Это показывает, что сайт подлинный и у него есть SSL-сертификат.