Как не разрушаться от критики и при чём тут эмоциональный интеллект
или "Мне сказали, что я сделал х*рню" — и вот я уже думаю уйти из IT☺️
😨 Представь, что ты набрался храбрости и выложил свой первый код на всеобщий ревью (не знаю где, да это и не важно).
И когда ты получаешь фидбэк по коду:
..внутри происходит не "так'c щас поправим", а "буря в стакане"😔 .
Сердце сжимается, руки опускаются, а в голове начинает звучать хор: "Я тупой", "Я не подхожу", "Я зря вообще сюда полез"…
Знакомо? Это не просто обида.
Это — непонимание работы своего эмоционального интеллекта.
Что такое эмоциональный интеллект?
EQ (Emotional Quotient) — это способность человека:
🟡 осознавать и понимать свои эмоции
🟡 управлять ими
🟡 разбираться в эмоциях других
🟡 реагировать осознанно, а не автоматически
🔴 Это не про "перестать воспринимать и чувствовать". Это чувствовать, правильно реагировать и не разрушаться.
Mayer & Salovey, 1997: Emotional Intelligence Theory
Ты воспринимаешь критику как диагноз
Нас с детства не учили отделять свою работу от себя как от личности.
Поэтому, когда тебе говорят:
"Есть проблемы в коде"
ты слышишь:
"Ты плохой".
"Ты — не настоящий программист".
"Ты всех подвёл".
Но это когнитивное искажение, а не реальность.
Научный термин: "эмоциональное отождествление" — когда человек приравнивает внешнюю оценку к внутренней ценности.
(Lazarus, 1991 — Emotion and Adaptation)
И что в итоге происходит?
❌ Ты боишься делать PR, потому что "вдруг там херня".
❌ Ты злишься на ревьюера, а потом — на себя.
❌ Ты либо начинаешь оправдываться, либо молчишь и варишься внутри.
Всё это съедает мотивацию, уверенность, интерес.
Что делать? Как включить свой Emotional Quotient?
✅ Учись слушать не обижаясь, а расшифровывая.
Комментарий "Плохое решение" расшифровывай как "Это не подходит к текущим требованиям/стандартам. Попробуй по-другому."
Люди в IT часто пишут прямолинейно, потому что пишут, как код — без эмоционального оформления.
Это не атака, это просто способ общения.
✅ Переводи эмоции в факты
Ты читаешь коммент: "Это костыль"
Ты чувствуешь: "Я — тупой"
Остановись и спроси себя: Где тут факт? Что конкретно не так? Что я могу изменить?
Это активная эмоциональная регуляция.
(Gross, 1998 — The Emerging Field of Emotion Regulation)
✅ Проси конструктив, не похвалу
Твой Мозг любит, чтобы тебя гладили.
Но гораздо полезнее — просить:
"А как бы ты сделал?"
"Можно пример?"
"Где можно почитать про это?"
Так ты переключаешься с ревьюера-обидчика — на ревьюера-союзника.
И мозг начинает учиться, стремясь исправить недостаток.
✅ Критика ≠ личная оценка
Ты — не твой pull request.
Тебя нужно и можно уважать, даже если ты влепил 40 строчек ради сортировки по длине строки.
Emotional Quotient — это не про мягкость. Это про силу.
Сильный не тот, кто не чувствует.
А тот, кто умеет видеть эмоции, разбирать их на части и не дает им разрушать себя.
❗️ ВАЖНО ❗️
Пиши в комментах:
Какой фидбэк был самым негативным для тебя больше всего — и как ты с этим справился. Или не справился.
Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность 🤝
😎
#motivation
или "Мне сказали, что я сделал х*рню" — и вот я уже думаю уйти из IT
И когда ты получаешь фидбэк по коду:
"Вот это неочевидное решение"
"Лучше переделать всю архитектуру"
"Так никто не делает"
..внутри происходит не "так'c щас поправим", а "буря в стакане"
Сердце сжимается, руки опускаются, а в голове начинает звучать хор: "Я тупой", "Я не подхожу", "Я зря вообще сюда полез"…
Знакомо? Это не просто обида.
Это — непонимание работы своего эмоционального интеллекта.
Что такое эмоциональный интеллект?
EQ (Emotional Quotient) — это способность человека:
Mayer & Salovey, 1997: Emotional Intelligence Theory
Ты воспринимаешь критику как диагноз
Нас с детства не учили отделять свою работу от себя как от личности.
Поэтому, когда тебе говорят:
"Есть проблемы в коде"
ты слышишь:
"Ты плохой".
"Ты — не настоящий программист".
"Ты всех подвёл".
Но это когнитивное искажение, а не реальность.
Научный термин: "эмоциональное отождествление" — когда человек приравнивает внешнюю оценку к внутренней ценности.
(Lazarus, 1991 — Emotion and Adaptation)
И что в итоге происходит?
Всё это съедает мотивацию, уверенность, интерес.
Что делать? Как включить свой Emotional Quotient?
Комментарий "Плохое решение" расшифровывай как "Это не подходит к текущим требованиям/стандартам. Попробуй по-другому."
Люди в IT часто пишут прямолинейно, потому что пишут, как код — без эмоционального оформления.
Это не атака, это просто способ общения.
Ты читаешь коммент: "Это костыль"
Ты чувствуешь: "Я — тупой"
Остановись и спроси себя: Где тут факт? Что конкретно не так? Что я могу изменить?
Это активная эмоциональная регуляция.
(Gross, 1998 — The Emerging Field of Emotion Regulation)
Твой Мозг любит, чтобы тебя гладили.
Но гораздо полезнее — просить:
"А как бы ты сделал?"
"Можно пример?"
"Где можно почитать про это?"
Так ты переключаешься с ревьюера-обидчика — на ревьюера-союзника.
И мозг начинает учиться, стремясь исправить недостаток.
Ты — не твой pull request.
Тебя нужно и можно уважать, даже если ты влепил 40 строчек ради сортировки по длине строки.
Emotional Quotient — это не про мягкость. Это про силу.
Сильный не тот, кто не чувствует.
А тот, кто умеет видеть эмоции, разбирать их на части и не дает им разрушать себя.
Необходимо и понимать разницу между конструктивным и токсичным фидбеком.
Отличить их на самом деле они очень просто - в токсичном комментарии оценивать начинают не код, а личностные качества человека который его написал.
Крайне советую избегать этого самому, при проведении ревью чьего либо кода и избегать взаимодействия (указав на недопустимость подобного) с таким ревьюером.
В конечном итоге - IT это про интеллект, а не эмоции, избегайте личностного негатива (но прислушивайтесь и безэмоционально оценивайте услышанное, иногда там есть зерно истины).
Кроме того, редко, но встречаются агрессивные разработчики, которые не умея контролировать свои эмоции, крайне негативно реагируют на критическую оценку их кода.
Совет тот же - избегайте таких.
Это не про интеллект.👎
Пиши в комментах:
Какой фидбэк был самым негативным для тебя больше всего — и как ты с этим справился. Или не справился.
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2 1
Предлагаем темы для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
🟢 темы, не выше уровня middle, чтоб был интерес общим.
🟢 Один человек - одна тема.
🟢 Тема должна быть отдельным теоретически-практическим вопросом. Готовый проект - это не тема!
Жду Ваших предложений!👏
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
Жду Ваших предложений!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Выбираем темы для рассмотрения в следующие выходные! 🤨
Anonymous Poll
23%
Mockito
5%
Retrofit
28%
JWT
13%
Nginx
10%
NoSQL BD
21%
GraphQL
👍4
А вы знали, что первый компьютерный "алгоритм сжатия видео" H.120 был создан в 1984 году?
Был разработан COST 211 и опубликован CCITT (сейчас ITU-T) в 1984, обновлен в 1988, включив дополнения сторонних организаций. Он заложил основу для современных форматов, таких как H.264 и H.265.
proof
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Виктор Иванников (1940–2007) — советский и российский ученый, основатель Института системного программирования РАН (ИСП РАН). Внес значительный вклад в развитие компиляторов, операционных систем и анализа программного обеспечения. Его работы по формальным методам верификации программ повлияли на современные подходы к разработке надежного ПО.
Биография
#Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
Wikipedia
Иванников, Виктор Петрович
Ви́ктор Петро́вич Ива́нников (27 февраля 1940, Ступино, Московская область — 27 ноября 2016, Москва) — советский и российский учёный в области вычислительной техники и программирования, академик РАН (с 29 мая 2008 года, член-корреспондент АН СССР с 1984 года).…
👍2
Обзор платформ для разработки на Java
Для написания и запуска Java-программ вам нужна платформа, где вы будете писать код, компилировать его и запускать. Выбор инструмента зависит от вашего уровня подготовки, целей и предпочтений. Ниже представлен обзор доступных вариантов — от простых текстовых редакторов до профессиональных IDE, включая новые российские разработки OpenIDE и GigaIDE, а также Cursor с поддержкой ИИ.
1. Текстовые редакторы (Блокнот, Notepad++, VS Code)
Простые текстовые редакторы — это базовый инструмент для написания кода. Они не требуют сложной настройки, но и не предоставляют продвинутых функций, таких как автодополнение или отладка.
Блокнот (Notepad):
Плюсы: Бесплатный, предустановлен на Windows, минималистичный.
Минусы: Нет подсветки синтаксиса, автодополнения, отладки. Подходит только для простейших программ.
Когда использовать: Для первых шагов, чтобы понять, как работает компиляция (javac) и запуск (java) вручную.
Пример:
Напишите код в HelloWorld.java в Блокноте, сохраните, затем скомпилируйте и запустите через командную строку:
Notepad++:
Плюсы: Бесплатный, легкий, поддерживает подсветку синтаксиса для Java, плагины для автодополнения.
Минусы: Нет встроенной отладки или интеграции с JDK. Требуется ручная компиляция.
Когда использовать: Для небольших программ или если вы хотите минималистичную среду.
Visual Studio Code (VS Code):
Плюсы: Бесплатный, легкий, поддерживает плагины (например, «Java Extension Pack»), автодополнение, отладку и интеграцию с JDK. Популярен среди Java-разработчиков как легкая альтернатива IDE.
Минусы: Требует настройки плагинов для полноценной работы с Java.
Когда использовать: Если вы хотите современный редактор с поддержкой Java, но без громоздкости полноценной IDE.
Настройка:
Установите VS Code с code.visualstudio.com.
Установите расширение «Java Extension Pack» через Marketplace.
Укажите путь к JDK (установленному ранее, например, Java 17).
2. Интегрированные среды разработки (IDE)
IDE — это мощные инструменты, которые объединяют редактор кода, компилятор, отладчик и другие функции. Они идеальны для разработки сложных проектов и обучения, так как автоматизируют многие процессы. Рассмотрим популярные IDE, включая IntelliJ IDEA, OpenIDE, GigaIDE и Cursor.
IntelliJ IDEA:
Плюсы: Лидер среди IDE для Java. Умное автодополнение, мощная отладка, интеграция с фреймворками (Spring, Maven, Gradle), поддержка версий Java (включая 17, 21, 24 LTS). Community Edition бесплатна и подходит для большинства задач.
Минусы: Community Edition ограничена по сравнению с Ultimate (платной). Может быть тяжеловесной для слабых ПК. Не смотря на то, что корни проекта идут из России, доступ ограничен из-за санкций 😡.
Когда использовать: Для любых Java-проектов, от учебных до профессиональных.
Eclipse:
Плюсы: Бесплатный, open-source, поддерживает Java и множество плагинов, подходит для больших проектов.
Минусы: Менее интуитивный интерфейс, чем у IntelliJ IDEA. Требует больше ручной настройки.
Когда использовать: Если вы хотите бесплатную IDE с долгой историей и широкой поддержкой.
NetBeans:
Плюсы: Бесплатный, простой в использовании, хорошая поддержка Java EE и Maven.
Минусы: Менее популярен, чем IntelliJ IDEA или Eclipse, медленнее обновляется.
Когда использовать: Для учебных проектов или если вам нужна простая IDE.
BlueJ:
Плюсы: Создан специально для обучения Java. Простой интерфейс, визуализация объектов.
Минусы: Ограниченные возможности для реальных проектов.
Когда использовать: Для абсолютных новичков, изучающих основы ООП.
#Java #для_новичков #beginner #IDEA's
Для написания и запуска Java-программ вам нужна платформа, где вы будете писать код, компилировать его и запускать. Выбор инструмента зависит от вашего уровня подготовки, целей и предпочтений. Ниже представлен обзор доступных вариантов — от простых текстовых редакторов до профессиональных IDE, включая новые российские разработки OpenIDE и GigaIDE, а также Cursor с поддержкой ИИ.
1. Текстовые редакторы (Блокнот, Notepad++, VS Code)
Простые текстовые редакторы — это базовый инструмент для написания кода. Они не требуют сложной настройки, но и не предоставляют продвинутых функций, таких как автодополнение или отладка.
Блокнот (Notepad):
Плюсы: Бесплатный, предустановлен на Windows, минималистичный.
Минусы: Нет подсветки синтаксиса, автодополнения, отладки. Подходит только для простейших программ.
Когда использовать: Для первых шагов, чтобы понять, как работает компиляция (javac) и запуск (java) вручную.
Пример:
Напишите код в HelloWorld.java в Блокноте, сохраните, затем скомпилируйте и запустите через командную строку:
javac HelloWorld.java
java HelloWorld
Notepad++:
Плюсы: Бесплатный, легкий, поддерживает подсветку синтаксиса для Java, плагины для автодополнения.
Минусы: Нет встроенной отладки или интеграции с JDK. Требуется ручная компиляция.
Когда использовать: Для небольших программ или если вы хотите минималистичную среду.
Visual Studio Code (VS Code):
Плюсы: Бесплатный, легкий, поддерживает плагины (например, «Java Extension Pack»), автодополнение, отладку и интеграцию с JDK. Популярен среди Java-разработчиков как легкая альтернатива IDE.
Минусы: Требует настройки плагинов для полноценной работы с Java.
Когда использовать: Если вы хотите современный редактор с поддержкой Java, но без громоздкости полноценной IDE.
Настройка:
Установите VS Code с code.visualstudio.com.
Установите расширение «Java Extension Pack» через Marketplace.
Укажите путь к JDK (установленному ранее, например, Java 17).
Совет для новичков: Текстовые редакторы подходят для изучения основ, но для реальной разработки лучше использовать IDE, так как они экономят время и упрощают работу.
2. Интегрированные среды разработки (IDE)
IDE — это мощные инструменты, которые объединяют редактор кода, компилятор, отладчик и другие функции. Они идеальны для разработки сложных проектов и обучения, так как автоматизируют многие процессы. Рассмотрим популярные IDE, включая IntelliJ IDEA, OpenIDE, GigaIDE и Cursor.
IntelliJ IDEA:
Плюсы: Лидер среди IDE для Java. Умное автодополнение, мощная отладка, интеграция с фреймворками (Spring, Maven, Gradle), поддержка версий Java (включая 17, 21, 24 LTS). Community Edition бесплатна и подходит для большинства задач.
Минусы: Community Edition ограничена по сравнению с Ultimate (платной). Может быть тяжеловесной для слабых ПК. Не смотря на то, что корни проекта идут из России, доступ ограничен из-за санкций 😡.
Когда использовать: Для любых Java-проектов, от учебных до профессиональных.
Eclipse:
Плюсы: Бесплатный, open-source, поддерживает Java и множество плагинов, подходит для больших проектов.
Минусы: Менее интуитивный интерфейс, чем у IntelliJ IDEA. Требует больше ручной настройки.
Когда использовать: Если вы хотите бесплатную IDE с долгой историей и широкой поддержкой.
NetBeans:
Плюсы: Бесплатный, простой в использовании, хорошая поддержка Java EE и Maven.
Минусы: Менее популярен, чем IntelliJ IDEA или Eclipse, медленнее обновляется.
Когда использовать: Для учебных проектов или если вам нужна простая IDE.
BlueJ:
Плюсы: Создан специально для обучения Java. Простой интерфейс, визуализация объектов.
Минусы: Ограниченные возможности для реальных проектов.
Когда использовать: Для абсолютных новичков, изучающих основы ООП.
#Java #для_новичков #beginner #IDEA's
👍3
OpenIDE:
Плюсы: Российская IDE с открытым исходным кодом, основана на IntelliJ IDEA Community Edition. Поддерживает Java 24, Spring, Docker, Maven, Gradle и интеграцию с российским GitFlic. Не зависит от зарубежных серверов, что исключает риски блокировки. Имеет собственный маркетплейс с более чем 300 плагинами. Работает быстрее оригинальной IntelliJ IDEA за счет удаления телеметрии и проприетарных компонентов. Встроенная поддержка Spring и Docker. Удалена вся телеметрия IntelliJ IDEA.
Минусы: Находится на стадии бета-тестирования. Поддерживает только Java и Kotlin, хотя в планах добавление Go, TypeScript, Rust. Некоторые функции, например работа с базами данных, пока ограничены.
Когда использовать: Для российских разработчиков, которым важна независимость от зарубежных сервисов и открытый код. Подходит для проектов, требующих поддержки Java 24 и Spring.
GigaIDE:
Плюсы: Российская IDE от Сбера, также основана на IntelliJ IDEA Community Edition. Поддерживает Java, Kotlin, Groovy, Scala, Python, JavaScript, TypeScript, SQL. Включает AI-ассистент GigaCode для автодополнения и генерации кода. Интеграция с GitVerse, GitHub, Bitbucket. Доступна в версиях Desktop и Cloud. Поддержка Spring Framework ожидается в профессиональной версии.
Минусы: Код закрыт, процесс разработки менее прозрачен, чем у OpenIDE. Зависимость от одной компании (Сбер) может быть риском. Работа с базами данных ограничена, требуется плагин Database Navigator.
Когда использовать: Для разработчиков, которым нужен привычный интерфейс IntelliJ IDEA с AI-ассистентом и поддержкой множества языков. Подходит для корпоративных проектов в России.
Cursor:
Плюсы: Современная IDE на базе VS Code с мощным AI-ассистентом, который понимает контекст проекта, предлагает сложные конструкции кода и помогает с рефакторингом. Поддерживает более 30 языков, включая Java. Упрощает написание кода для новичков благодаря ИИ.
Минусы: Платная подписка (от $20/месяц с квотами на AI-запросы). Требует настройки для полноценной работы с Java (установка Java Extension Pack). UI может быть менее удобным для профессиональных разработчиков по сравнению с IntelliJ IDEA.
Когда использовать: Для новичков или разработчиков, которые хотят использовать ИИ для ускорения кодирования. Подходит для небольших проектов или экспериментов.
Установка и настройка IntelliJ IDEA
Теперь давайте разберем, как установить и настроить IntelliJ IDEA Community Edition для разработки на Java. Мы будем использовать Java 17 (LTS), но шаги подойдут и для Java 21 или 24.
Шаг 1: Скачивание IntelliJ IDEA
Перейдите на официальный сайт: www.jetbrains.com/idea/download.
Выберите Community Edition (бесплатная версия) для вашей операционной системы:
Windows: .exe.
macOS: .dmg.
Linux: .tar.gz или пакет для дистрибутива.
Нажмите «Download» и сохраните установочный файл.
Шаг 2: Установка IntelliJ IDEA
Для Windows
Запустите скачанный .exe файл.
Следуйте инструкциям мастера установки:
Выберите папку установки (например, C:\Program Files\JetBrains\IntelliJ IDEA Community Edition).
Установите флажки для создания ярлыка на рабочем столе и добавления в PATH (опционально).
Выберите ассоциацию файлов .java с IntelliJ IDEA.
Нажмите «Install» и дождитесь завершения установки.
Запустите IntelliJ IDEA, выбрав «Run IntelliJ IDEA» в конце установки.
Для macOS
Откройте .dmg файл и перетащите IntelliJ IDEA в папку «Программы» (Applications).
Запустите IntelliJ IDEA из папки «Программы» или через Spotlight.
Для Linux (на примере Ubuntu)
Распакуйте .tar.gz:tar -xzf ideaIC-*.tar.gz -C ~/idea
Перейдите в папку bin и запустите IDE:cd ~/idea/idea-IC-*/bin
./idea.sh
Следуйте инструкциям установщика (обычно это GUI-мастер).
#Java #для_новичков #beginner #IDEA's
Плюсы: Российская IDE с открытым исходным кодом, основана на IntelliJ IDEA Community Edition. Поддерживает Java 24, Spring, Docker, Maven, Gradle и интеграцию с российским GitFlic. Не зависит от зарубежных серверов, что исключает риски блокировки. Имеет собственный маркетплейс с более чем 300 плагинами. Работает быстрее оригинальной IntelliJ IDEA за счет удаления телеметрии и проприетарных компонентов. Встроенная поддержка Spring и Docker. Удалена вся телеметрия IntelliJ IDEA.
Минусы: Находится на стадии бета-тестирования. Поддерживает только Java и Kotlin, хотя в планах добавление Go, TypeScript, Rust. Некоторые функции, например работа с базами данных, пока ограничены.
Когда использовать: Для российских разработчиков, которым важна независимость от зарубежных сервисов и открытый код. Подходит для проектов, требующих поддержки Java 24 и Spring.
GigaIDE:
Плюсы: Российская IDE от Сбера, также основана на IntelliJ IDEA Community Edition. Поддерживает Java, Kotlin, Groovy, Scala, Python, JavaScript, TypeScript, SQL. Включает AI-ассистент GigaCode для автодополнения и генерации кода. Интеграция с GitVerse, GitHub, Bitbucket. Доступна в версиях Desktop и Cloud. Поддержка Spring Framework ожидается в профессиональной версии.
Минусы: Код закрыт, процесс разработки менее прозрачен, чем у OpenIDE. Зависимость от одной компании (Сбер) может быть риском. Работа с базами данных ограничена, требуется плагин Database Navigator.
Когда использовать: Для разработчиков, которым нужен привычный интерфейс IntelliJ IDEA с AI-ассистентом и поддержкой множества языков. Подходит для корпоративных проектов в России.
Cursor:
Плюсы: Современная IDE на базе VS Code с мощным AI-ассистентом, который понимает контекст проекта, предлагает сложные конструкции кода и помогает с рефакторингом. Поддерживает более 30 языков, включая Java. Упрощает написание кода для новичков благодаря ИИ.
Минусы: Платная подписка (от $20/месяц с квотами на AI-запросы). Требует настройки для полноценной работы с Java (установка Java Extension Pack). UI может быть менее удобным для профессиональных разработчиков по сравнению с IntelliJ IDEA.
Когда использовать: Для новичков или разработчиков, которые хотят использовать ИИ для ускорения кодирования. Подходит для небольших проектов или экспериментов.
Рекомендация: Для новичков я советую IntelliJ IDEA Community Edition как основной выбор благодаря интуитивному интерфейсу и мощным функциям. OpenIDE и GigaIDE — отличные альтернативы для российских разработчиков, особенно если важна независимость от зарубежных сервисов. Cursor подойдет, если вы хотите попробовать ИИ-поддержку, но требует дополнительных затрат и настройки для Java.
Установка и настройка IntelliJ IDEA
Теперь давайте разберем, как установить и настроить IntelliJ IDEA Community Edition для разработки на Java. Мы будем использовать Java 17 (LTS), но шаги подойдут и для Java 21 или 24.
Шаг 1: Скачивание IntelliJ IDEA
Перейдите на официальный сайт: www.jetbrains.com/idea/download.
Выберите Community Edition (бесплатная версия) для вашей операционной системы:
Windows: .exe.
macOS: .dmg.
Linux: .tar.gz или пакет для дистрибутива.
Нажмите «Download» и сохраните установочный файл.
Шаг 2: Установка IntelliJ IDEA
Для Windows
Запустите скачанный .exe файл.
Следуйте инструкциям мастера установки:
Выберите папку установки (например, C:\Program Files\JetBrains\IntelliJ IDEA Community Edition).
Установите флажки для создания ярлыка на рабочем столе и добавления в PATH (опционально).
Выберите ассоциацию файлов .java с IntelliJ IDEA.
Нажмите «Install» и дождитесь завершения установки.
Запустите IntelliJ IDEA, выбрав «Run IntelliJ IDEA» в конце установки.
Для macOS
Откройте .dmg файл и перетащите IntelliJ IDEA в папку «Программы» (Applications).
Запустите IntelliJ IDEA из папки «Программы» или через Spotlight.
Для Linux (на примере Ubuntu)
Распакуйте .tar.gz:tar -xzf ideaIC-*.tar.gz -C ~/idea
Перейдите в папку bin и запустите IDE:cd ~/idea/idea-IC-*/bin
./idea.sh
Следуйте инструкциям установщика (обычно это GUI-мастер).
#Java #для_новичков #beginner #IDEA's
👍4🔥1
Краткая установка и настройка OpenIDE, GigaIDE и Cursor
OpenIDE
Скачивание:
Перейдите на openide.ru или GitFlic для загрузки.
Выберите версию для Windows, macOS или Linux.
Установка:
Windows: Запустите .exe и следуйте мастеру установки.
macOS: Откройте .dmg и перетащите OpenIDE в «Программы». После установки выполните в терминале:xattr -c /Applications/OpenIDE.app
Linux: Распакуйте .tar.gz и запустите скрипт openide.sh из папки bin.
GigaIDE
Скачивание:
Перейдите на gitverse.ru/features/gigaide. Требуется авторизация через Сбер ID или cloud.ru.
Выберите GigaIDE Desktop для Windows, macOS или Linux.
Установка:
Windows: Запустите .exe и следуйте инструкциям.
macOS: Откройте .dmg и перетащите GigaIDE в «Программы». Выполните:xattr -c /Applications/GIGA\ IDE\ CE\ 2024.1.1.app
Linux: Распакуйте .tar.gz и запустите gigaide.sh из папки bin.
Cursor
Скачивание:
Перейдите на cursor.com и скачайте версию для Windows, macOS или Linux. Требуется регистрация для доступа к AI-функциям.
Установка:
Windows: Запустите .exe и следуйте инструкциям.
macOS: Перетащите .dmg в «Программы».
Linux: Распакуйте .tar.gz и запустите cursor.sh.
Полезные советы для новичков
#Java #для_новичков #beginner #IDEA's
OpenIDE
Скачивание:
Перейдите на openide.ru или GitFlic для загрузки.
Выберите версию для Windows, macOS или Linux.
Установка:
Windows: Запустите .exe и следуйте мастеру установки.
macOS: Откройте .dmg и перетащите OpenIDE в «Программы». После установки выполните в терминале:xattr -c /Applications/OpenIDE.app
Linux: Распакуйте .tar.gz и запустите скрипт openide.sh из папки bin.
GigaIDE
Скачивание:
Перейдите на gitverse.ru/features/gigaide. Требуется авторизация через Сбер ID или cloud.ru.
Выберите GigaIDE Desktop для Windows, macOS или Linux.
Установка:
Windows: Запустите .exe и следуйте инструкциям.
macOS: Откройте .dmg и перетащите GigaIDE в «Программы». Выполните:xattr -c /Applications/GIGA\ IDE\ CE\ 2024.1.1.app
Linux: Распакуйте .tar.gz и запустите gigaide.sh из папки bin.
Cursor
Скачивание:
Перейдите на cursor.com и скачайте версию для Windows, macOS или Linux. Требуется регистрация для доступа к AI-функциям.
Установка:
Windows: Запустите .exe и следуйте инструкциям.
macOS: Перетащите .dmg в «Программы».
Linux: Распакуйте .tar.gz и запустите cursor.sh.
Полезные советы для новичков
Выбор IDE: Начните с IntelliJ IDEA Community для универсальности. Используйте OpenIDE или GigaIDE для работы в российской инфраструктуре. Cursor подойдет для экспериментов с ИИ, но требует затрат.
Изучите горячие клавиши: Например, в IntelliJ IDEA и OpenIDE/GigaIDE: Ctrl+Alt+L (форматирование кода), Alt+Enter (исправление ошибок).
Практикуйтесь: Создайте простые программы, такие как калькулятор, в каждой IDE, чтобы сравнить их.
Ресурсы:
IntelliJ IDEA: www.jetbrains.com/idea/documentation.
OpenIDE: openide.ru.
GigaIDE: gitverse.ru/features/gigaide.
Cursor: cursor.com/docs.
Stack Overflow для решения проблем.
#Java #для_новичков #beginner #IDEA's
👍5
Что выведет код?
#Tasks
import java.util.concurrent.*;
public class Task280725 {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> {
Thread.sleep(1000);
return "Done";
});
System.out.println(future.get(500, TimeUnit.MILLISECONDS));
executor.shutdown();
}
}
#Tasks
🔥2
👍1
Apache Kafka
Видео посвященное изучению Apache Kafka
Что мы рассмотрели:
✅ Что такое Apache Kafka и зачем она нужна.
✅ Максимально подробно рассмотрели настройку docker-compose файла для запуска кластера брокеров.
✅ Рассмотрели настройку приложения для работы с кластером.
✅ Продемонстрировали настройки различных видов продюсеров и консьюмеров в java-приложении, попробовали их в работе.
Ссылка на Youtube
Ссылка на Рутьюб
Ссылка на GitHub
Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
Видео посвященное изучению Apache Kafka
Что мы рассмотрели:
Ссылка на Youtube
Ссылка на Рутьюб
Ссылка на GitHub
Смотрите, ставьте лайки, подписывайтесь на каналы!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
Что такое OutOfMemoryError? 🤓
Ответ:
OutOfMemoryError выбрасывается, когда JVM не может выделить память (например, в куче).
Причины: большие объекты, утечки памяти.
Пример:
List<Object> list = new ArrayList<>();
while (true) list.add(new Object()); // OutOfMemoryError
Для диагностики используют профилировщики (VisualVM) и настройку параметров JVM (-Xmx).
#собеседование
Ответ:
Причины: большие объекты, утечки памяти.
Пример:
List<Object> list = new ArrayList<>();
while (true) list.add(new Object()); // OutOfMemoryError
Для диагностики используют профилировщики (VisualVM) и настройку параметров JVM (-Xmx).
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
А вы знали, что первая, крупнейшая в мире базой данных о кинематографе зародилась в 1990 году?
По состоянию на конец 2024 года, в Internet Movie Database (IMDb, в переводе с англ. — «Интернет-база фильмов») собрана информация о более чем 22 млн кинофильмов, телесериалов и отдельных их серий, а также о 14 млн персоналий, связанных с кино и телевидением, — актёрах, режиссёрах, сценаристах и других.
proof
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Владимир Котельников (1908–2005) — советский ученый, пионер теории связи. Его теорема об отсчетах легла в основу цифровой обработки сигналов, используемой в современных IT-системах, включая сжатие данных и телекоммуникации.
Биография
#Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
mpei.ru
Котельников Владимир Александрович (1908-2005)
👍3
Задачи и жизненный цикл в Gradle
Task API: Task, DefaultTask, @TaskAction
Задачи (tasks) — это основная единица работы в Gradle, представляющая такие действия, как компиляция, тестирование или упаковка. Task API предоставляет инструменты для создания и настройки задач.
Основные компоненты
Task:
Интерфейс org.gradle.api.Task, определяющий базовую функциональность задачи (например, выполнение, зависимости).
Все задачи в Gradle реализуют этот интерфейс.
DefaultTask:
Класс org.gradle.api.DefaultTask, стандартная реализация интерфейса Task.
Используется для создания пользовательских задач.
Пример (Groovy DSL):
@TaskAction:
Аннотация, указывающая метод, который выполняется при запуске задачи.
Пример (Kotlin DSL):
Gradle Lifecycle
Жизненный цикл Gradle состоит из трех фаз: Initialization, Configuration и Execution. Каждая фаза выполняет определенные функции и влияет на производительность и память.
Initialization Phase:
Gradle загружает settings.gradle для определения структуры проекта (корневое имя, подмодули).
Создает объекты Project для корневого проекта и подпроектов.
Устанавливает начальные настройки, такие как репозитории и плагины.
Configuration Phase:
Gradle парсит все файлы build.gradle, создавая модель проекта и граф задач (Directed Acyclic Graph, DAG).
Все скрипты конфигурации выполняются, даже для задач, которые не будут запущены.
Пример: Определение зависимостей, задач и плагинов.
Оптимизация: Используйте флаг --configure-on-demand для конфигурации только необходимых модулей:
Execution Phase:
Gradle выполняет задачи, указанные в командной строке (например, ./gradlew build), в порядке, определенном DAG.
Инкрементальность пропускает задачи, чьи входные/выходные данные не изменились (см. ниже).
Нюансы:
Конфигурация выполняется всегда, что замедляет сборку, особенно для крупных проектов.
Gradle Daemon сохраняет JVM между сборками, ускоряя повторные запуски, но увеличивая базовое потребление памяти (200-300 МБ).
Используйте --no-daemon для одноразовых сборок:
#Java #middle #Gradle #Task #Lifecycle
Task API: Task, DefaultTask, @TaskAction
Задачи (tasks) — это основная единица работы в Gradle, представляющая такие действия, как компиляция, тестирование или упаковка. Task API предоставляет инструменты для создания и настройки задач.
Основные компоненты
Task:
Интерфейс org.gradle.api.Task, определяющий базовую функциональность задачи (например, выполнение, зависимости).
Все задачи в Gradle реализуют этот интерфейс.
DefaultTask:
Класс org.gradle.api.DefaultTask, стандартная реализация интерфейса Task.
Используется для создания пользовательских задач.
Пример (Groovy DSL):
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class CustomTask extends DefaultTask {
@TaskAction
void executeTask() {
println 'Executing custom task'
}
}
tasks.register('customTask', CustomTask)
@TaskAction:
Аннотация, указывающая метод, который выполняется при запуске задачи.
Пример (Kotlin DSL):
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
open class CustomTask : DefaultTask() {
@TaskAction
fun executeTask() {
println("Executing custom task")
}
}
tasks.register<CustomTask>("customTask")
В памяти: Каждая задача представлена как объект в JVM, содержащий метаданные (имя, зависимости, действия). Gradle загружает все задачи в память во время фазы конфигурации, что увеличивает потребление памяти пропорционально их количеству. Плагины, такие как java, добавляют множество задач (например, compileJava, test), увеличивая overhead.
Gradle Lifecycle
Жизненный цикл Gradle состоит из трех фаз: Initialization, Configuration и Execution. Каждая фаза выполняет определенные функции и влияет на производительность и память.
Initialization Phase:
Gradle загружает settings.gradle для определения структуры проекта (корневое имя, подмодули).
Создает объекты Project для корневого проекта и подпроектов.
Устанавливает начальные настройки, такие как репозитории и плагины.
В памяти: Минимальная фаза по потреблению ресурсов, так как загружается только settings.gradle и связанные плагины. Объем памяти зависит от количества модулей (обычно 50-100 МБ).
Configuration Phase:
Gradle парсит все файлы build.gradle, создавая модель проекта и граф задач (Directed Acyclic Graph, DAG).
Все скрипты конфигурации выполняются, даже для задач, которые не будут запущены.
Пример: Определение зависимостей, задач и плагинов.
В памяти: Самая ресурсоемкая фаза, так как Gradle загружает и компилирует все скрипты, плагины и зависимости. Для крупных проектов может потребоваться 500-1000 МБ памяти.
Оптимизация: Используйте флаг --configure-on-demand для конфигурации только необходимых модулей:
./gradlew build --configure-on-demand
Execution Phase:
Gradle выполняет задачи, указанные в командной строке (например, ./gradlew build), в порядке, определенном DAG.
Инкрементальность пропускает задачи, чьи входные/выходные данные не изменились (см. ниже).
В памяти: Зависит от сложности задач. Например, compileJava загружает исходные файлы и зависимости, а test — тестовые классы и фреймворки. Параллельное выполнение (--parallel) увеличивает пиковое потребление памяти.
Нюансы:
Конфигурация выполняется всегда, что замедляет сборку, особенно для крупных проектов.
Gradle Daemon сохраняет JVM между сборками, ускоряя повторные запуски, но увеличивая базовое потребление памяти (200-300 МБ).
Используйте --no-daemon для одноразовых сборок:
./gradlew build --no-daemon
#Java #middle #Gradle #Task #Lifecycle
👍1
Task Graph, зависимости между задачами
Gradle строит Directed Acyclic Graph (DAG) для задач, где узлы — задачи, а ребра — зависимости. Это определяет порядок выполнения.
Зависимости между задачами
dependsOn:
Указывает, что задача зависит от выполнения других задач.
Пример:
mustRunAfter:
Определяет порядок выполнения без строгой зависимости.
Пример:
finalizedBy:
Указывает задачу, которая выполняется после завершения текущей, даже при ошибке.
Пример:
Incremental Build и Up-to-Date Checks
Gradle оптимизирует производительность за счет инкрементальной сборки, пропуская задачи, чьи входные/выходные данные не изменились.
Механизм:
Gradle проверяет хэши входных (исходные файлы, свойства) и выходных данных (скомпилированные классы, JAR).
Если хэши совпадают, задача помечается как up-to-date и пропускается.
Пример вывода:
Пример настройки:
Нюансы:
Неправильная настройка входов/выходов может привести к ненужному выполнению задач.
Используйте --info для анализа, почему задача не была пропущена:
Gradle Inputs/Outputs (Task Inputs/Outputs)
Задачи Gradle имеют входы и выходы, которые определяют, что влияет на выполнение задачи и что она производит.
Inputs:
Файлы, свойства или другие данные, от которых зависит задача.
Пример:
Outputs:
Файлы или директории, создаваемые задачей.
Пример:
Нюансы:
Явно указывайте входы/выходы для кастомных задач, чтобы включить инкрементальность.
Используйте inputs.property для не-файловых входов:
#Java #middle #Gradle #Task #Lifecycle
Gradle строит Directed Acyclic Graph (DAG) для задач, где узлы — задачи, а ребра — зависимости. Это определяет порядок выполнения.
Зависимости между задачами
dependsOn:
Указывает, что задача зависит от выполнения других задач.
Пример:
task compileJava {
doLast { println 'Compiling Java' }
}
task test(dependsOn: compileJava) {
doLast { println 'Running tests' }
}
Gradle выполнит compileJava перед test.
mustRunAfter:
Определяет порядок выполнения без строгой зависимости.
Пример:
task taskA {
doLast { println 'Task A' }
}
task taskB {
mustRunAfter 'taskA'
doLast { println 'Task B' }
}
Если обе задачи выполняются, taskB будет после taskA, но taskB может выполняться отдельно.
finalizedBy:
Указывает задачу, которая выполняется после завершения текущей, даже при ошибке.
Пример:
task build {
doLast { println 'Building' }
}
task cleanUp {
doLast { println 'Cleaning up' }
}
build.finalizedBy cleanUp
В памяти: DAG задач хранится как структура данных в JVM, где каждая задача — объект с метаданными (зависимости, действия). Размер графа пропорционален количеству задач, что может увеличить потребление памяти до нескольких сотен МБ в крупных проектах.
Incremental Build и Up-to-Date Checks
Gradle оптимизирует производительность за счет инкрементальной сборки, пропуская задачи, чьи входные/выходные данные не изменились.
Механизм:
Gradle проверяет хэши входных (исходные файлы, свойства) и выходных данных (скомпилированные классы, JAR).
Если хэши совпадают, задача помечается как up-to-date и пропускается.
Пример вывода:
> Task :compileJava UP-TO-DATE
Пример настройки:
tasks.named('compileJava') {
inputs.files('src/main/java')
outputs.dir('build/classes/java/main')
}
В памяти: Gradle хранит хэши входов/выходов в памяти и в ~/.gradle/caches для сравнения. Это добавляет небольшой overhead (около 10-50 МБ), но значительно ускоряет сборку.
Нюансы:
Неправильная настройка входов/выходов может привести к ненужному выполнению задач.
Используйте --info для анализа, почему задача не была пропущена:
./gradlew build --info
Gradle Inputs/Outputs (Task Inputs/Outputs)
Задачи Gradle имеют входы и выходы, которые определяют, что влияет на выполнение задачи и что она производит.
Inputs:
Файлы, свойства или другие данные, от которых зависит задача.
Пример:
task processFiles {
inputs.files fileTree('src/main/resources')
doLast {
println 'Processing files'
}
}
Outputs:
Файлы или директории, создаваемые задачей.
Пример:
task generateReport {
outputs.file file('build/report.txt')
doLast {
file('build/report.txt').text = 'Report content'
}
}
В памяти: Gradle хранит метаданные входов/выходов в памяти и кэширует хэши в ~/.gradle/caches. Для задач с большим количеством файлов (например, compileJava) это увеличивает потребление памяти, так как Gradle сканирует файловую систему.
Нюансы:
Явно указывайте входы/выходы для кастомных задач, чтобы включить инкрементальность.
Используйте inputs.property для не-файловых входов:
task customTask {
inputs.property 'version', project.version
doLast { println "Version: ${project.version}" }
}
#Java #middle #Gradle #Task #Lifecycle
👍1
Do-first/do-last и ленивость (Provider, Property)
Gradle поддерживает гибкую настройку задач через doFirst и doLast, а также ленивую конфигурацию через Provider и Property.
doFirst и doLast:
doFirst: Добавляет действие в начало выполнения задачи.
doLast: Добавляет действие в конец выполнения задачи.
Пример:
Ленивость (Provider, Property):
Gradle использует ленивую оценку для отсрочки вычислений до фазы выполнения.
Provider: Интерфейс для ленивых значений.def version = providers.provider { project.version }
Property: Для управления свойствами задачи.
Gradle Listeners и хуки
Gradle предоставляет хуки для мониторинга и настройки жизненного цикла и задач.
BuildListener:
Устаревший интерфейс для мониторинга событий сборки.
Пример:
TaskExecutionListener:
Отслеживает выполнение задач.
Пример:
Project.afterEvaluate:
Выполняется после фазы конфигурации.
Пример:
Нюансы:
Используйте хуки с осторожностью, чтобы избежать замедления сборки.
Для сложной логики создавайте плагины вместо хуков.
Gradle Build Cache
Build Cache позволяет кэшировать результаты задач для повторного использования между сборками или машинами.
Настройка:
Как работает:
Gradle кэширует выходные данные задач (например, скомпилированные классы, JAR) в ~/.gradle/caches/build-cache или на удаленном сервере.
При повторной сборке Gradle проверяет хэши входов/выходов и использует кэшированные результаты, если они совпадают.
Пример: Задача compileJava кэширует классы в build/classes.
Использование:
Включите кэш:
Очистка локального кэша:
Нюансы:
Настройте входы/выходы задач точно, чтобы кэш работал корректно.
Build Cache наиболее эффективен для CI/CD, где результаты задач переиспользуются между сборками.
#Java #middle #Gradle #Task #Lifecycle
Gradle поддерживает гибкую настройку задач через doFirst и doLast, а также ленивую конфигурацию через Provider и Property.
doFirst и doLast:
doFirst: Добавляет действие в начало выполнения задачи.
doLast: Добавляет действие в конец выполнения задачи.
Пример:
task example {
doFirst { println 'Starting task' }
doLast { println 'Ending task' }
}
Ленивость (Provider, Property):
Gradle использует ленивую оценку для отсрочки вычислений до фазы выполнения.
Provider: Интерфейс для ленивых значений.def version = providers.provider { project.version }
task printVersion {
doLast {
println "Version: ${version.get()}"
}
}
Property: Для управления свойствами задачи.
task customTask {
def outputFile = objects.property(String)
outputFile.set('build/output.txt')
doLast {
println "Output: ${outputFile.get()}"
}
}
В памяти: doFirst и doLast добавляют действия как объекты в задачу, минимально увеличивая память. Ленивые Provider и Property хранят ссылки на значения, а не сами значения, что оптимизирует память до их вычисления в фазе выполнения.
Gradle Listeners и хуки
Gradle предоставляет хуки для мониторинга и настройки жизненного цикла и задач.
BuildListener:
Устаревший интерфейс для мониторинга событий сборки.
Пример:
gradle.buildFinished {
println 'Build completed'
}
TaskExecutionListener:
Отслеживает выполнение задач.
Пример:
gradle.taskGraph.whenReady {
println 'Task graph is ready'
}
Project.afterEvaluate:
Выполняется после фазы конфигурации.
Пример:
project.afterEvaluate {
println 'Project configured'
}
В памяти: Хуки создают дополнительные объекты-слушатели в памяти, увеличивая overhead. Для крупных проектов с множеством слушателей это может добавить 10-50 МБ памяти.
Нюансы:
Используйте хуки с осторожностью, чтобы избежать замедления сборки.
Для сложной логики создавайте плагины вместо хуков.
Gradle Build Cache
Build Cache позволяет кэшировать результаты задач для повторного использования между сборками или машинами.
Настройка:
buildCache {
local {
enabled = true
}
remote(HttpBuildCache) {
url = 'https://cache.example.com/'
push = true
}
}
Как работает:
Gradle кэширует выходные данные задач (например, скомпилированные классы, JAR) в ~/.gradle/caches/build-cache или на удаленном сервере.
При повторной сборке Gradle проверяет хэши входов/выходов и использует кэшированные результаты, если они совпадают.
Пример: Задача compileJava кэширует классы в build/classes.
Использование:
Включите кэш:
./gradlew build --build-cache
Очистка локального кэша:
rm -rf ~/.gradle/caches/build-cache
В памяти: Build Cache требует хранения хэшей и метаданных в памяти во время выполнения, что добавляет 50-100 МБ overhead. Удаленный кэш увеличивает сетевые операции, но снижает локальные вычисления.
Нюансы:
Настройте входы/выходы задач точно, чтобы кэш работал корректно.
Build Cache наиболее эффективен для CI/CD, где результаты задач переиспользуются между сборками.
#Java #middle #Gradle #Task #Lifecycle
👍1
Что выведет код?
#Tasks
public class Task290725 {
public static void main(String[] args) {
Object lock1 = new Object();
Object lock2 = new Object();
new Thread(() -> {
synchronized(lock1) {
synchronized(lock2) {
System.out.println("Thread 1");
}
}
}).start();
new Thread(() -> {
synchronized(lock1) {
synchronized(lock2) {
System.out.println("Thread 2");
}
}
}).start();
}
}
#Tasks
👍1
Что такое IllegalArgumentException? 🤓
Ответ:
IllegalArgumentException — непроверяемое исключение, выбрасываемое при передаче недопустимых аргументов в метод.
Пример:
void setAge(int age) {
if (age < 0) throw new IllegalArgumentException("Age must be positive");
}
Используется для валидации входных данных.
#собеседование
Ответ:
Пример:
void setAge(int age) {
if (age < 0) throw new IllegalArgumentException("Age must be positive");
}
Используется для валидации входных данных.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM