Ver código fonte

Merge branch 'master' of u23titov/ISRPO into master

ypv 1 semana atrás
pai
commit
d9c3b5a4ab

+ 27 - 0
Лекции/CSharp/Titov2.md

@@ -0,0 +1,27 @@
+# Язык C# и среда .NET
+
+C# (произносится "Си шарп") - это язык программирования с синтаксисом, подобным языку C, разработанный компанией Microsoft и функционирующий в рамках управляемой среды выполнения - общеязыковой исполняющей среды. Архитектурно C# является наследником идей C++ и Java, но с рядом значительных улучшений в области типобезопасности и подходов к программированию. Одним из ключевых нововведений стала глубокая интеграция языка с компонентно-ориентированной моделью разработки, что выражается в наличии таких конструкций, как свойства, события и атрибуты, которые позволяют описывать поведение компонентов декларативно.
+
+Ключевое различие между C# и Java кроется в тесной интеграции языка с платформой .NET. Если Java изначально создавался как платформа для предприятий, то C# развивался как инструмент для всей экосистемы Windows, а после появления базовой платформы .NET (ныне .NET 5+) стал полностью кроссплатформенным решением с открытым исходным кодом. Это позволяет разрабатывать приложения для Windows, Linux, macOS, мобильных устройств и игр на едином наборе технологий. Более того, единая среда выполнения позволяет использовать несколько языков в одном проекте: например, написать логику на C#, а отдельные модули на F#.
+
+С точки зрения синтаксиса, C# предлагает разработчику более широкие возможности, чем классическая Java. Например, здесь присутствуют свойства как языковая конструкция, включающая методы доступа, типы-значения в дополнение к ссылочным типам, а также делегаты - типобезопасные указатели на методы, лежащие в основе событийной модели. Кроме того, C# поддерживает перегрузку операторов, что позволяет определять поведение стандартных операторов для пользовательских типов, и индексаторы, дающие возможность обращаться к объектам как к массивам.
+
+*Таблица 1. Сравнение синтаксических конструкций*
+
+| Конструкция | Назначение | Преимущество |
+| -------- | -------- | -------- |
+| Делегаты | Указатели на методы с проверкой типов | Обработка событий, обратные вызовы |
+| Свойства | Включение полей с логикой доступа | Чистота кода, контроль доступа |
+| LINQ | Встроенные языковые запросы | Единый синтаксис запросов к разным источникам |
+
+
+
+Ключевой особенностью, упрощающей жизнь начинающим, является встроенный язык запросов LINQ. LINQ позволяет писать описательные запросы к коллекциям, базам данных или XML, используя синтаксис, похожий на язык запросов, но встроенный прямо в код C#. Это снижает мыслительную нагрузку при переходе от работы с табличными данными к объектным моделям в коде. Например, фильтрация списка объектов выполняется одной строкой кода вместо целого цикла с условиями, что делает код более читаемым и менее подверженным ошибкам. LINQ работает с любым типом, реализующим интерфейс IEnumerable, что делает его универсальным инструментом.
+
+![](tit1.jpg)
+
+Важно понимать, что LINQ бывает двух видов: LINQ to Objects для работы с коллекциями в памяти и LINQ to Entities для работы с базами данных через технологию Entity Framework. Во втором случае запросы не выполняются в клиентской памяти целиком, а преобразуются в SQL-запросы и выполняются на стороне сервера баз данных. Это позволяет эффективно работать с большими объемами данных, не загружая их полностью в оперативную память. Разработчику не нужно знать тонкости SQL для каждой конкретной базы данных - LINQ предоставляет единый интерфейс.
+
+Современные версии C# (начиная с 8.0 и выше) продолжают развиваться, добавляя новые возможности, такие как ссылочные типы, допускающие null (для борьбы с ошибками нулевых ссылок), асинхронные потоки для работы с последовательностями данных, поступающих асинхронно, и шаблоны свойств для более выразительного сопоставления с образцом. Эти нововведения делают язык еще более безопасным и удобным, позволяя выражать сложные концепции лаконично и понятно.
+
+Таким образом, изучение C# дает понимание не только синтаксиса языка, но и устройства управляемой среды выполнения (сборка мусора, своевременная компиляция, система типов, метаданные и сборки). Это фундаментальные знания, применимые и при работе с Java, что делает C# отличным выбором для погружения в промышленную разработку. Кроме того, знание C# открывает путь к разработке под широкий спектр платформ: от веб-приложений на ASP.NET Core до настольных приложений на Windows Forms и WPF, мобильных приложений на Xamarin/MAUI и игр на движке Unity, который является одним из самых популярных игровых движков в мире.

BIN
Лекции/CSharp/tit1.jpg


+ 28 - 0
Лекции/Java/Titov1.md

@@ -0,0 +1,28 @@
+# Java как платформа и язык программирования
+Java в контексте современной разработки представляет собой не просто язык, а объектно-ориентированную платформу для компилируемого программирования, фундаментальной концепцией которой является выполнение кода внутри виртуальной машины (ВМ). Архитектура Java изначально проектировалась по принципу «написал однажды - запускай где угодно», что обеспечивается трансляцией исходного кода в промежуточное представление (байт-код), интерпретируемое виртуальной машиной независимо от целевой аппаратной архитектуры.
+
+С точки зрения управления памятью, Java предлагает автоматическую сборку ненужных объектов (автоматический сборщик мусора), что освобождает разработчика от необходимости ручного освобождения ресурсов, снижая риск утечек памяти. Современные виртуальные машины используют своевременную компиляцию: наиболее часто выполняемые участки байт-кода преобразуются в машинный код непосредственно во время работы программы, что обеспечивает производительность, близкую к нативным приложениям.
+
+Ключевым аспектом для начинающих является понимание строгой типизации языка. В отличие от динамических языков, Java проверяет соответствие типов на этапе компиляции, что позволяет выявлять значительную часть смысловых ошибок до момента выполнения программы.
+
+![](tit1.jpg)
+
+Базовая платформа Java (Standard Edition) предоставляет богатый набор библиотек, включая работу с коллекциями (наборы контейнеров), вводом-выводом и многопоточностью. Для начинающего разработчика важно усвоить парадигму объектно-ориентированного программирования как основу языка: инкапсуляцию (сокрытие реализации внутри классов), наследование (механизм расширения классов) и полиморфизм (возможность переопределения методов).
+
+Однако платформа не стоит на месте. Современные версии (Java 8 и выше) внедрили лямбда-выражения и потоковый интерфейс, что позволяет применять элементы функционального программирования для более лаконичной обработки данных. Это значительно упрощает написание кода для работы с большими объемами информации по сравнению с последовательными циклами, характерными для ранних версий.
+
+Таблица 1. Сравнение подходов в Java
+
+| Подход | Ключевые элементы | Пример применения |
+| -------- | -------- | -------- |
+| Объектный (классический)     | Классы, наследование, полиморфизм    | Моделирование сущностей предметной области |
+| Функциональный | Лямбда-выражения, потоки | 	Обработка коллекций, цепочки преобразований |
+
+![](tit2.jpg)
+
+Современные версии Java (8 и выше) внедрили лямбда-выражения и потоковый интерфейс, что позволяет применять элементы функционального программирования для более лаконичной обработки данных. Это значительно упрощает написание кода для работы с большими объемами информации по сравнению с последовательными циклами, характерными для ранних версий.
+
+Несмотря на многословие синтаксиса, Java остается господствующим языком в корпоративной среде благодаря своей стабильности, расширяемости и огромной экосистеме инструментов сборки и каркасов приложений (например, Spring), что делает её востребованной для изучения.
+
+
+

BIN
Лекции/Java/tit1.jpg


BIN
Лекции/Java/tit2.jpg


+ 103 - 0
Лекции/Java/titvopros.md

@@ -0,0 +1,103 @@
+## Лекция 1: Java как платформа и язык программирования
+Вопрос 1: Что лежит в основе кроссплатформенности Java?
+A) Компиляция исходного кода в машинный код для каждой платформы отдельно.
+Б) Трансляция кода в байт-код, который выполняется виртуальной машиной Java (JVM). (+)
+B) Интерпретация исходного кода напрямую операционной системой.
+
+Вопрос 2: Какой механизм в Java освобождает разработчика от ручного управления памятью?
+A) Строгая типизация.
+Б) Автоматический сборщик мусора. (+)
+B) Своевременная компиляция (JIT).
+
+Вопрос 3: Что обеспечивает своевременная компиляция (JIT) в современных JVM?
+A) Преобразование байт-кода в машинный код до запуска программы.
+Б) Проверку типов на этапе компиляции.
+B) Преобразование наиболее часто выполняемых участков байт-кода в машинный код во время работы программы. (+)
+
+Вопрос 4: Какая парадигма программирования является основой для языка Java?
+A) Функциональное программирование.
+Б) Объектно-ориентированное программирование. (+)
+B) Процедурное программирование.
+
+Вопрос 5: Какие элементы языка были добавлены в Java 8 и выше для поддержки функционального стиля программирования?
+A) Классы и интерфейсы.
+Б) Лямбда-выражения и потоковый интерфейс (Stream API). (+)
+B) Указатели и работа с памятью.
+
+## Лекция 2: Язык C# и среда .NET
+Вопрос 1: Что является исполняющей средой для программ на C#?
+A) Виртуальная машина Java (JVM).
+Б) Интерпретатор Python.
+B) Общеязыковая исполняющая среда (.NET CLR). (+)
+
+Вопрос 2: Какая ключевая особенность C# позволяет писать описательные запросы к коллекциям, базам данных или XML прямо в коде?
+A) Делегаты.
+Б) LINQ (Language Integrated Query). (+)
+B) Свойства и события.
+
+Вопрос 3: Что такое делегаты в C#?
+A) Специальные классы для работы с файлами.
+Б) Типобезопасные указатели на методы, лежащие в основе событийной модели. (+)
+B) Конструкция для определения блоков кода.
+
+Вопрос 4: Какое преимущество дает использование LINQ to Entities?
+A) Позволяет выполнять запросы быстрее, чем LINQ to Objects.
+Б) Преобразует запросы в SQL и выполняет их на стороне сервера БД, не загружая все данные в память. (+)
+B) Упрощает написание графического интерфейса.
+
+Вопрос 5: Какая из перечисленных платформ НЕ является сферой применения C# и .NET?
+A) Веб-приложения (ASP.NET Core).
+Б) Игры (движок Unity).
+B) Ядро операционной системы Linux. (+)
+
+### Лекция 3: Python как интерпретируемый язык
+Вопрос 1: Какой тип типизации используется в Python?
+A) Статическая.
+Б) Динамическая строгая. (+)
+B) Слабая динамическая.
+
+Вопрос 2: Как в Python выделяются блоки кода?
+A) Фигурными скобками {}.
+Б) Ключевыми словами begin и end.
+B) Отступами (пробелами или табуляцией). (+)
+
+Вопрос 3: В чем заключается особенность библиотек для научных вычислений, таких как NumPy?
+A) Они полностью написаны на Python для лучшей совместимости.
+Б) Они написаны на C/C++ для скорости, но предоставляют удобный Python-интерфейс. (+)
+B) Они требуют обязательной компиляции перед использованием.
+
+Вопрос 4: Какая конструкция Python позволяет лаконично создавать новые списки на основе существующих?
+A) Цикл for.
+B) Списковые включения (list comprehensions). (+)
+B) Функция map().
+
+Вопрос 5: Какая проблема динамической типизации может проявиться в крупных проектах на Python?
+A) Невозможность создать сложную иерархию классов.
+Б) Ошибки несовместимости типов проявляются только во время выполнения. (+)
+B) Сложный синтаксис управления памятью.
+
+## Лекция 4: Вайбкодинг - от эксперимента к индустриальному стандарту
+Вопрос 1: Что представляет собой «вайбкодинг» в понимании 2026 года?
+A) Написание кода с использованием голосового ввода.
+Б) Полноценное взаимодействие с ИИ-агентами, способными выполнять целые рабочие процессы. (+)
+B) Быстрое прототипирование без тестирования.
+
+Вопрос 2: В чем заключается главный архитектурный сдвиг в разработке 2026 года?
+A) Переход от компилируемых языков к интерпретируемым.
+Б) Переход к агентному искусственному интеллекту, работающему с минимальным контролем человека. (+)
+B) Полный отказ от использования облачных технологий.
+
+Вопрос 3: Какой парадокс возникает в связи с ростом производительности благодаря вайбкодингу?
+A) Парадокс производительности Джевонса: рост производительности ведет к созданию большего объема кода и увеличению потребности в его поддержке. (+)
+Б) Парадокс выбора: сложность выбора между разными ИИ-инструментами.
+B) Парадокс стоимости: увеличение скорости разработки ведет к удорожанию проектов.
+
+Вопрос 4: Что эксперты называют главным риском бесконтрольного использования вайбкодинга?
+A) Потерю навыков ручного написания кода у разработчиков.
+Б) Накопление технического долга колоссальных масштабов. (+)
+B) Зависимость от интернет-соединения.
+
+Вопрос 5: Какова роль человека в мультиагентных системах будущего?
+A) Написание большей части кода вручную.
+Б) Выполнение функций продуктового менеджера и архитектора, определяющего общее направление. (+)
+B) Полное отсутствие, так как ИИ заменяет человека во всем.

+ 23 - 0
Лекции/Python/Titov3.md

@@ -0,0 +1,23 @@
+ Python как интерпретируемый язык
+ 
+Python занимает уникальную нишу в спектре языков программирования, являясь эталоном интерпретируемого языка с динамической строгой типизацией. В отличие от компилируемых языков (Java, C#), где код преобразуется в машинный или промежуточный код заранее, Python-программа выполняется непосредственно интерпретатором, построчно разбирающим исходный код. Это накладывает определенные ограничения на производительность, но дает преимущества в скорости разработки и интерактивности: можно выполнять код построчно в командной строке или блокнотах, что особенно ценно для исследовательских задач.
+
+Динамическая типизация означает, что тип переменной определяется в момент присвоения значения и может изменяться в процессе выполнения. Для начинающего разработчика это снижает порог входа: не нужно объявлять сложные иерархии классов до написания логики. Однако это накладывает ответственность за тщательную проверку, так как ошибки несовместимости типов проявятся только во время выполнения, а не на этапе компиляции. Поэтому в крупных проектах на Python часто применяют дополнительную статическую проверку типов с помощью инструментов.
+
+Синтаксис Python построен на концепции правила границ, где блоки кода выделяются не фигурными скобками, а отступами (пробелами или табуляцией). Это принуждает к написанию зрительно чистого и читаемого кода, что критически важно при работе в команде или поддержке крупных проектов. Базовые конструкции включают работу со списками, словарями и кортежами, которые являются встроенными типами и оптимизированы для высокопроизводительной работы. Особого внимания заслуживают списковые включения - лаконичный способ создания новых списков на основе существующих.
+
+![](tit1.jpg)
+
+Популярность Python в научной среде и области обработки данных обусловлена не столько самим языком, сколько его экосистемой. Библиотеки для научных вычислений (NumPy, Pandas), машинного обучения и наглядного представления данных превращают Python в мощный инструмент для исследования данных. Эти библиотеки часто написаны на C/C++ для скорости, но предоставляют Python-интерфейс, что дает разработчику производительность низкоуровневых языков с простотой высокоуровневого синтаксиса. Например, библиотека NumPy реализует многомерные массивы и операции над ними на C, но вызывается из Python как обычные функции.
+
+Таблица 1. Применение Python в зависимости от подхода
+
+| Область | Ключевые библиотеки | Подход |
+| -------- | -------- | -------- |
+| Сетевые приложения  Джанго     | Фласк	Объектный    | процедурный     |
+| Исследование данных	Пандас   | научные библиотеки   | Функциональный, процедурный     |
+| Автоматизация	Скрипты    | системные библиотеки    | Процедурный, командный   |
+
+Благодаря своей универсальности и простоте, Python идеально подходит для первого знакомства с понятиями алгоритмизации, позволяя студенту сосредоточиться на логике решения задачи, не отвлекаясь на сложный синтаксис управления памятью. Кроме того, наличие огромного количества обучающих материалов и активного сообщества делает процесс вхождения в профессию максимально плавным по сравнению с более сложными языками. Механизм управления памятью в Python включает подсчет ссылок и сборщик мусора для обнаружения циклических ссылок, что автоматизирует освобождение ресурсов.
+
+

BIN
Лекции/Python/tit1.jpg


BIN
Лекции/Vibe_Coding/tit1.jpg


BIN
Лекции/Vibe_Coding/tit2.jpg


+ 51 - 0
Лекции/Vibe_Coding/titov4.md

@@ -0,0 +1,51 @@
+# Вайбкодинг - от эксперимента к индустриальному стандарту
+Вайбкодинг перестал быть просто модным термином из социальных сетей и превратился в полноценную инженерную практику, которая в 2026 году становится индустриальным стандартом разработки программного обеспечения. Согласно прогнозам аналитической компании GlobalData, именно в этом году вайбкодинг выходит на мейнстримный уровень, предоставляя разработчикам и даже обычным пользователям принципиально новые инструменты для создания приложений.
+
+#### Что такое вайбкодинг сегодня
+Если в 2025 году под вайбкодингом понимали практику написания кода через диалог с искусственным интеллектом, то сегодня это понятие существенно расширилось. Вайбкодинг - это полноценное взаимодействие с ИИ-агентами, которые не просто генерируют отдельные фрагменты кода, а способны самостоятельно выполнять целые рабочие процессы: писать тесты, отлаживать ошибки, навигировать по сложной кодовой базе и вносить исправления до тех пор, пока не будет достигнут удовлетворительный результат.
+
+Исследования показывают, что разработчики используют искусственный интеллект примерно в 60% своей работы, при этом полностью делегировать удается лишь небольшую часть задач - от 0 до 20%. Это означает, что человек остается ключевым звеном в процессе, но его роль трансформируется: от написания каждой строчки кода к координации ИИ-агентов и принятию стратегических решений.
+
+![](tit2.jpg)
+
+#### Архитектурный сдвиг: агентный ИИ
+Главный тренд 2026 года - переход к агентному искусственному интеллекту, способному работать над достижением цели с минимальным контролем со стороны человека. Современные модели, такие как GPT-5.3-Codex и Claude Opus 4.6, уже умеют генерировать, проверять, тестировать и отлаживать программный код, а также улучшать собственные результаты до того, как итоговая работа будет представлена человеку.
+
+Крупные технологические компании уже внедряют такие подходы. Например, инженеры Anthropic (создатели Claude) в значительной степени полагаются на собственные ИИ-инструменты, а глава Claude Code Борис Черный заявил, что не писал код вручную более двух месяцев.
+
+Таблица 1. Сравнение поколений вайбкодинга
+
+| Поколение | Характеристика | Роль человека |
+| -------- | -------- | -------- |
+| 2024-2025    | ИИ-ассистенты, автодополнение кода     | Написание кода с подсказками     |
+| 2026   | ИИ-агенты, автономные рабочие процессы     | Постановка задач и контроль результатов    |
+| Ближайшее будущее   | Мультиагентные системы    | Архитектурное проектирование     |
+
+#### Парадокс производительности и новый технический долг
+Повышение производительности, обеспечиваемое вайбкодингом, создает неожиданную проблему. Эксперты предупреждают: если вся инженерная организация будет использовать этот подход без стратегической структуры, то сегодняшние достижения в производительности завтра превратятся в технический долг колоссальных масштабов.
+
+Маттиас Штайнер, вице-президент по глобальным бизнес-инновациям Syntax (компания группы SAP), отмечает: «Код в свободном стиле может быть весьма опасен, потому что он разрушает кодовую базу. Если вы хотите создать программное обеспечение корпоративного уровня со сроком службы в годы, вайбкодинга недостаточно».
+
+Действует так называемый парадокс Джевонса: повышение производительности ведет к созданию большего объема программного обеспечения, что, в свою очередь, увеличивает потребность в его поддержке. Общий спрос на инженерные работы и бремя управления, связанное с поддержкой всего этого кода, не снижается, а возрастает.
+
+![](tit1.jpg)
+
+#### Практическое применение в 2026 году
+Вайбкодинг сегодня находит применение в самых разных областях. В архитектуре и проектировании, например, специалисты создают кастомные инструменты для анализа фасадных решений или моделирования солнечного освещения за считанные часы вместо недель традиционной разработки.
+
+В корпоративной среде появляются новые возможности для специалистов без глубокого программистского образования, которые теперь могут создавать бизнес-приложения через естественно-языковые интерфейсы. Популярные платформы для начинающих включают ChatGPT, Claude, Lovable и Zapier Agents, а среди профессиональных разработчиков лидируют Cursor, Bolt и Windsurf.
+
+Таблица 2. Ключевые навыки разработчика в эпоху вайбкодинга
+
+| Навык | Почему важен |
+| -------- | -------- |
+| Промпт-инжиниринг    | Умение точно формулировать задачи для ИИ     |
+| Архитектурное мышление   | Проектирование систем, а не написание строк кода   |
+| Критическая оценка кода   | Выявление ошибок и уязвимостей в сгенерированных решениях    |
+| Управление ИИ-агентами    | Координация работы множества автономных помощников   |
+
+
+Будущее: мультиагентные системы
+Следующий рубеж, который уже просматривается на горизонте 2026 года, - это мультиагентные системы, где множество специализированных ИИ-агентов работают совместно над сложными проектами. В Claude Opus 4.6 уже появилась функция, позволяющая развертывать автономные команды агентов, которые могут одновременно выполнять разные аспекты сложных задач.
+
+Такие системы способны самостоятельно распределять роли: один агент пишет код, второй его тестирует, третий оптимизирует производительность, четвертый проверяет безопасность. Человек в этой схеме выступает как продуктовый менеджер и архитектор, определяющий общее направление и утверждающий результаты.