job4j.ru - Практика. Ревью. Результат.
770 subscribers
75 photos
186 links
О жизни в IT:
- Языки: Go, Rust, Java, Kotlin
- Технологии: PostgreSQL, Kafka
- Инфраструктура: Docker, Kubernetes
- Soft Skills: общение, интервью, карьера
Download Telegram
Скуфикация. Пошаговый план для программиста. Сарказм.

Что такое скуфикация?

Скуфикация — это процесс, при котором человек теряет интерес и мотивацию к своей работе, превращаясь в скучного и пассивного специалиста, выполняющего задачи механически, без энтузиазма и стремления к развитию. Причины скуфикации могут включать:

Монотонность и отсутствие вызовов в работе.

Недостаток новых знаний и профессионального развития.

Перегорание из-за чрезмерных нагрузок.

Отсутствие личной вовлеченности в проекты.

Изоляция от профессионального сообщества и коллег.
👍3❤1👎1
## 💭 Скуфикация. Пошаговый план для программиста. Сарказм.

### 🙄 Что такое скуфикация?
Скуфикация — это процесс, при котором человек теряет интерес и мотивацию к своей работе, превращаясь в скучного и пассивного специалиста, выполняющего задачи механически, без энтузиазма и стремления к развитию. Причины скуфикации могут включать:

- 🔁 Монотонность и отсутствие вызовов в работе.
- 📚 Недостаток новых знаний и профессионального развития.
- 🔥 Перегорание из-за чрезмерных нагрузок.
- 💷 Отсутствие личной вовлеченности в проекты.
- 🚶‍♂️ Изоляция от профессионального сообщества и коллег.

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

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

- 📰 Подписывайтесь на новостные ресурсы и блоги в IT-сфере (и делайте вид, что понимаете, о чём они).
- 🚀 Участвуйте в хакатонах и конференциях (не забудьте взять с собой кофе и запасной мозг).
- 📚 Пробуйте себя в новых языках программирования и технологиях (ведь зачем учить один язык хорошо, когда можно знать десять плохо?).

Это помогает не только держать себя в курсе событий, но и находить свежие идеи для реализации в текущих проектах, которые потом никто не примет в продакшен.

### 🏠 2. Баланс между работой и личной жизнью
Перегорание — одна из главных причин, по которой программисты теряют интерес к своей работе. Чтобы этого избежать:

- ⏳ Установите четкие границы между работой и отдыхом (и игнорируйте сообщения босса после 23:00).
- 💃 Занимайтесь хобби вне программирования: спортом, искусством, путешествиями (чтобы потом всем рассказывать, как у вас нет на это времени).
- 🍔 Поддерживайте здоровый режим сна и питания (да, пицца считается здоровой, если добавить салат).

Сбалансированная жизнь помогает не только чувствовать себя лучше, но и оставаться продуктивным и креативным на работе (по крайней мере, до обеда).

### 🌟 3. Работайте над проектами, которые вам интересны
Интересные и значимые проекты — залог мотивации и желания развиваться. Если ваша работа превращается в рутину:

- 📊 Обсудите с руководством возможность участвовать в новых задачах или проектах (желательно, таких, которые ещё не обсуждались на десятке совещаний).
- 😼 Найдите способы внести свою креативность в текущие задачи (например, замените все комментарии на шутки про котиков).
- 🎡 Пробуйте работать над собственными проектами в свободное время (потому что ваше свободное время явно не для отдыха).

### 🚗 4. Не бойтесь менять рабочее окружение
Если вам кажется, что ваше место работы не способствует вашему развитию или делает вас скуфом:

- 🔍 Изучите рынок труда, чтобы понять, какие возможности есть за пределами текущей компании (и обнаружьте, что везде пишут одно и то же).
- 💸 Рассмотрите возможность фриланса или перехода в другую компанию, которая больше соответствует вашим интересам (а может, и вашей мечте о работе в пижаме).
- 💬 Поговорите с коллегами и ментором, чтобы понять, что можно изменить в текущей работе (и узнайте, что всё и так идеально).

### 👥 5. Общайтесь с сообществом
Изоляция — один из факторов, способствующих тому, что программист становится скуфом. Общение с коллегами и участие в профессиональных сообществах помогает поддерживать мотивацию и получать новый взгляд на вещи:

- 🗨 Участвуйте в обсуждениях на профессиональных форумах и в чатах (и не забывайте оставлять комментарии “+1”).
- 🌐 Ищите сообщества по интересам, будь то open-source проекты или группы, обсуждающие последние тренды (где все притворяются, что это невероятно интересно).
- 💡 Делитесь своими знаниями, обучая других и выступая с докладами (даже если на ваши доклады приходит только кот).
👍5👎1
### 📚 Заключение
Стать скуфом легко, если упустить из виду баланс между профессиональной жизнью и личными потребностями. Постоянное развитие, поддержка баланса и участие в значимых проектах — это ключевые шаги, чтобы оставаться мотивированным и продолжать свой путь как успешный программист. Следуйте этим рекомендациям (или хотя бы делайте вид, что следуете), и ваша карьера будет не только успешной, но и наполненной смыслом и удовольствием (или хотя бы мемами).

📸 А как вы проводите свои выходные? Делитесь фото и историями в комментариях! ☀️

#программирование #мотивация #балансжизни #выходные #ITюмор
👍3👎1
Статический анализ кода в Kotlin | Detekt

⚡️ Как подключить и настроить Detekt в вашем Kotlin-проекте с использованием Kotlin DSL

✅ Detekt — это статический анализатор кода, который помогает находить ошибки, стилистические проблемы и потенциальные анти-паттерны в ваших проектах на Kotlin.

Шаги по подключению:
1. Добавьте плагин в build.gradle.kts:
   plugins {
kotlin("jvm") version "1.8.0"
id("io.gitlab.arturbosch.detekt") version "1.23.0"
}


2. Создайте конфиг: Выполните ./gradlew detektGenerateConfig для создания detekt.yml.

3. Настройте Detekt в `build.gradle.kts`:
   detekt {
toolVersion = "1.23.0"
config = files("$projectDir/detekt.yml")
buildUponDefaultConfig = true
}


4. Запуск Detekt: Анализ проводится командой:
   ./gradlew detekt


Полезно:
- Настройте detekt.yml для своих стилевых преференций.
- Включите Detekt в CI/CD, чтобы поддерживать качество кода.

Больше информации о Kotlin в нашем курсе на платформе job4j.ru!
Напоминаю о вебинаре в эту субботу «Проведение IT-собеседований: взгляд изнутри», который состоится 9 ноября 2024 года в 19:00 по московскому времени.

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

Формат вебинара – перекрёстные вопросы, что позволит каждому спикеру задать вопросы друг другу и поделиться своим уникальным подходом. Присоединяйтесь, чтобы узнать, как проходит отбор кандидатов изнутри и что важно для успешного прохождения IT-собеседования.
❤5
Приглашаю на вебинар по теме: Эффективный нетворкинг для IT-специалистов

Время проведения: 23 ноября 2024 в 19:00

Участие бесплатное. Чтобы принять участие, пишите мне в Telegram @parsentev

Приглашенный гость: Stanislav Kondratev

---

1. Введение в тему и цели вебинара (5-10 минут)

- Обзор, что такое нетворкинг и почему он важен для IT.
- Цели вебинара: показать, как построить полезные профессиональные связи, создать персональный бренд, найти возможности для сотрудничества и повышения квалификации.

2. Основы нетворкинга в IT: где искать связи? (10 минут)

- Платформы и мероприятия для нетворкинга:
- Профессиональные соцсети (LinkedIn, Twitter).
- Конференции и митапы.
- Вебинары, хакатоны, DevOps-чаты, технические форумы.
- Советы по выбору мероприятий и каналов для эффективного общения.

3. Создание профессионального образа (15 минут)

- Как создать профиль, который привлекает внимание (LinkedIn, GitHub).
- Оптимизация профиля: ключевые навыки, проекты, репутация.
- Советы по поддержке активного портфолио проектов на GitHub и личного блога.

4. Как начать общение и завязать контакт (10 минут)

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

5. Поддержка и развитие контактов (10 минут)

- Как поддерживать связь с новыми знакомыми:
- Рекомендации по частоте взаимодействий.
- Общение без навязывания: поддержка на LinkedIn, обмен полезными материалами, поздравления.
- Создание взаимовыгодных связей, обмен опытом, участие в проектах и комьюнити.

6. Практический блок: примеры успешного нетворкинга (10-15 минут)

- Истории успешных IT-специалистов, которые нашли работу, партнёрства или менторов через нетворкинг.
- Разбор кейсов: как они нашли подход к своим контактам, какие шаги предпринимали.

7. Ответы на вопросы участников и общая дискуссия (10-15 минут)

- Вопросы участников о том, как применять принципы нетворкинга на практике.
- Общая дискуссия, обмен личным опытом и рекомендациями.

8. Заключение и ресурсы для дальнейшего изучения (5 минут)

- Основные выводы и практические советы.
- Полезные ресурсы для развития нетворкинга: книги, статьи, онлайн-курсы.
- Поддержка участников после вебинара (группы в соцсетях, рассылки, материалы для скачивания).
🥰1
Код-ревью
    @Override
public Optional<Ticket> create(IsSeatTakenDto isSeatTakenDto,
Ticket ticket, HttpSession session) {
if (isSeatTaken(isSeatTakenDto)) {
return Optional.empty();
}
try (var connection = sql2o.open()) {
var sql = "INSERT INTO " +
"tickets(session_id, row_number, place_number, user_id)" +
" VALUES (:sessionId, :rowNumber, :placeNumber, :userId)";
var query = connection.createQuery(sql, true)
.addParameter("sessionId", ticket.getSessionId())
.addParameter("rowNumber", ticket.getRowNumber())
.addParameter("placeNumber", ticket.getPlaceNumber())
.addParameter("userId", session.getAttribute("id"));
int generatedId = query.executeUpdate().getKey(Integer.class);
ticket.setId(generatedId);
}
return Optional.of(ticket);
}

Что думаете? Пиши ответы в комментарии.
Продолжаем тренироваться. Перепишите код через Stream API.

    @Override
public List<UserDTO> getPostsByUserId(List<Integer> userIds) {
Map<Integer, UserDTO> userMap = new HashMap<>();

postRepository.findByUserIdIn(userIds).forEach(post -> {
int userId = post.getUser().getId();
userMap.computeIfAbsent(userId, id ->
new UserDTO(userId, post.getUser().getFullName(), new ArrayList<>()
)).getPosts().add(post);
});

return new ArrayList<>(userMap.values());
}
Добавили статистику по прогрессу в разделе вопросы на интервью.

👍Пробуйте https://job4j.ru/profile/interview/16
🔔 Уже сегодня в 19:00 обсуждаем стратегию и тактику поведения на собеседовании!
💼 Разберём топ-100 вопросов и ответов.
Присоединяйтесь, чтобы подготовиться и уверенно пройти интервью!
🔥8
Потренируемся?
Метод падает с OutOfMemoryError
    fun notifyByTaskUpdate(task: Task) {
scope.launch {
val template = """
Обновлено описание урока ${task.name} [#${task.number}]
https://job4j.ru/profile/exercise/${task.topicId}/task-view/${task.id}"
""".trimIndent()
userRepository
.findAllByActiveAndPayments()
.filter { messengerRepository.isUserNotificationOn(it.id) }
.forEach {
bot?.send(it.id, template)
}
}
}

Что вызывает ошибку? Как поправить?
Обновление платформы
Добавили сложность вопросов к собеседованиям.
5 уровней: Entry, Junior, Middle, Senior, Expert.
👍 Тренируй вопросы в соответствии со своим уровнем!
➡️ https://job4j.ru/profile/interview/28
🔥7👍4
Ребята, вебинар на сегодня переноситься на завтра. В 19 00 так же.
✨ Сегодня, 17 ноября 2024 года, в 19:00 состоится вебинар на тему:
«Первые рабочие месяцы на новом месте»

💬 Приглашённый гость:
Антон Кунах — эксперт с более чем 6-летним опытом работы в IT. В его профессиональном портфолио: Тинькофф, Яндекс, СберТех и T1 Consulting.

💡 Что обсудим:
🔹 Подготовка к собеседованию, успешное прохождение этапов и работа с отказами.
🔹 Как распознать «красные флаги» компании, куда не стоит идти.

📋 Основные темы вебинара:
✅ Адаптация в новом коллективе: как привыкнуть к команде и сразу стать полезным.
✅ От ожиданий к реальности: что делать, если проект не оправдал надежд.
✅ Этапы успешного онбординга: от знакомства с процессами до быстрого перехода к задачам.
✅ Освоение технологического стека: как быстро адаптироваться к новым инструментам и технологиям (Java, Spring, Kafka, Docker и др.).
✅ Роль тимлида в адаптации: как поддерживать и развивать команду в условиях изменений.

👥 Для кого:
Для тех, кто готовится к переходу на новую работу, меняет сферу или хочет улучшить навыки адаптации в IT.

💰 Стоимость участия: 500 рублей.
📩 Для регистрации пишите в личные сообщения [@parsentev](https://t.me/parsentev).

Не упустите шанс разобраться в ключевых аспектах первых рабочих месяцев! 🚀
👍4
💼 На золотом крыльце сидели: ПМ, аналитик и программист...
Почему важно правильно позиционировать себя на IT-рынке?

Недавно провел собеседование, где кандидат уверенно начинал как разработчик, а в середине вдруг заявил, что больше аналитик и ПМ. 🤔
В итоге это стало его ключевой ошибкой.

👉 Как не запутаться в ролях и не потерять фокус на карьере? Разбираю ошибки и делюсь советами.

🎥 Смотри видео на YouTube: https://youtu.be/eR6goNmx3ig

📚 Хочешь стать программистом? Начни с курса по Java: https://job4j.ru/

#Собеседование #Разработчик #Java #ITКарьера #Job4j
👍3
Когда ты полностью полагаешься на IDEA ))
import org.jvnet.hk2.annotations.Service;
import org.springframework.beans.factory.BeanNameAware;
import ru.job4j.content.Content;

@Service
public class BotCommandHandler implements BeanNameAware {
private String beanName;
😁4
✨ Друзья! ✨

Только что заметил, что забыл открыть доступ к разделу «Корутины», а также к проекту и контрольным вопросам по Kotlin.

🔥 Сейчас все добавлено! 🔥
👍4🔥2
💡 Как наладить полезные связи и ускорить карьерный рост? 💡

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

🚀 Уже в субботу, 23 ноября, в 19:00 мы проведем новый вебинар, где подробно разберем:
✅ Как завязывать полезные знакомства.
✅ Какие инструменты помогают в нетворкинге.
✅ Как превращать связи в новые карьерные возможности.

🎟 Вход свободный!
📌 Присоединяйтесь по ссылке: https://t.me/+m-R1k8jptX0yNzMy
🔥 История успеха: как я нашла путь в разработку

Все началось с полного выгорания на работе ручным тестировщиком. Я устала от бессмысленности своей работы и решилась на рискованный шаг — уволиться без нового места. Без поддержки моего молодого человека, в том числе финансовой, вряд ли бы что-то получилось.

📌 Путь был нелегким:
- Интенсивные занятия на курсе и постоянное самообучение.
- Провалы на собеседованиях, разочарование и борьба с собой.
- Депрессия, страх лайвкодинга и пробел в опыте работы.

⚡️ Что помогло:
- Знания с курса, дополнительные материалы и советы HR по резюме.
- Использование инструментов вроде ChatGPT и StackOverflow.
- Готовность брать на себя задачи, даже если казалось, что шансов мало.

💡 Результат:
Меня взяли программистом-тестировщиком, и я наконец начала заниматься тем, что действительно люблю. Сначала это были модульные тесты, а сейчас — полноценная разработка. Более того, меня впервые повысили внутри компании!

Теперь я горжусь своей работой и чувствую, что все усилия были не напрасны.

---

✨ Рекомендации на основе этой истории

1. Не бойтесь менять свою жизнь
Если работа вызывает выгорание, рассмотрите смену сферы деятельности.

2. Поддержка близких важна
Открыто говорите с родными о своих планах, их помощь — ваш ресурс.

3. Учитесь постоянно
Курсы, самообучение и практика дают необходимые навыки.

4. Работайте над резюме
Уберите пробелы, акцентируйте внимание на своих сильных сторонах.

5. Учитесь на ошибках
Провалы на собеседованиях — это опыт, который делает вас сильнее.

6. Практикуйте стрессовые ситуации
Тренируйте решение задач под давлением, чтобы не бояться лайвкодинга.

7. Используйте доступные инструменты
ChatGPT, StackOverflow и другие ресурсы помогают решать задачи быстрее.

8. Идите к цели через смежные направления
Если не получается сразу попасть в разработку, попробуйте автотестирование.

9. Работайте над устойчивостью
Здоровая психика и уверенность в себе — ключ к успеху.

10. Не занижайте планку
Верьте в себя и помните, что трудности — временные.

---

💬 Поделитесь своей историей: как вы преодолевали трудности на пути к своей мечте?
🔥8👍6
### Вопрос на собеседовании 💼

Как правильно переопределить `equals` в следующей структуре?

class TreeNode {
private int value;
private TreeNode left;
private TreeNode right;

public TreeNode(int value) {
this.value = value;
}

public int getValue() {
return value;
}

public TreeNode setValue(int value) {
this.value = value;
return this;
}

public TreeNode getLeft() {
return left;
}

public TreeNode setLeft(TreeNode left) {
this.left = left;
return this;
}

public TreeNode getRight() {
return right;
}

public TreeNode setRight(TreeNode right) {
this.right = right;
return this;
}

@Override
public boolean equals(Object o) {
// TODO - implement this
return false;
}
}


### Ответ ✅

Переопределение equals должно учитывать:

1. Тип объекта, чтобы предотвратить ClassCastException.
2. Поля, которые нужно сравнивать, включая вложенные узлы.
3. Защиту от циклических ссылок.

Корректная реализация может выглядеть так:

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TreeNode treeNode = (TreeNode) o;
return value == treeNode.value &&
(left == null ? treeNode.left == null : left.equals(treeNode.left)) &&
(right == null ? treeNode.right == null : right.equals(treeNode.right));
}


Объяснение:
- Сравниваем текущий объект с переданным (this == o).
- Проверяем, что объект не null и принадлежит тому же классу (getClass()).
- Сравниваем value, а также рекурсивно проверяем левый и правый узлы, учитывая возможное их отсутствие (null).

---

Больше вопросов с собеседований на платформе: [Job4j](https://job4j.ru/profile/interview) 🚀
👍9
### 🧩 Тренды в программировании: от ООП к проектированию компонентов

Когда мы начинали изучать программирование, многие из нас уделяли огромное внимание объектно-ориентированному программированию (ООП). Это была основа: инкапсуляция, наследование, полиморфизм. 8 лет назад я посвятил большую часть своего курса именно этим темам, чтобы научить студентов создавать грамотный дизайн.

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

🤔 Почему так происходит?
1. Фреймворки решают многое за нас. Spring, Hibernate, Kubernetes и другие инструменты закрывают базовые задачи, что снижает необходимость проектировать сложные библиотеки с нуля.
2. Рост популярности микросервисов. Архитектура систем теперь основывается на взаимодействии автономных компонентов, а не на детальной проработке низкоуровневого дизайна.
3. Функциональное программирование. С появлением новых возможностей Java, Kotlin и других языков многие задачи решаются проще через функции, потоки и реактивные подходы.

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

🎯 Что важно сегодня:
Современный разработчик должен уметь не только писать код, но и:
- проектировать систему на уровне крупных компонентов;
- понимать, как связаны микросервисы и фреймворки;
- работать с CI/CD, DevOps и облачными решениями.

### 💡 А что вы думаете?
- Нужны ли сегодня глубокие знания ООП?
- Или лучше сразу фокусироваться на практических решениях и фреймворках?

Напишите свое мнение в комментариях👇

#программирование #тренды #ООП #архитектура #фреймворки #Java #Spring
👍4