Java for Beginner
710 subscribers
624 photos
172 videos
12 files
984 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
ℹ️ Кто родился в этот день

Зиновий Львович Рабинович (род. 1 августа 1918) — советский учёный (кибернетик), профессор; один из двух авторов первой в СССР электронной вычислительной машины с программой, хранимой в памяти.

Анатолий Игоревич Тихоцкий (род. 1 августа 1949, г. Березники Пермской обл.) — советский и российский учёный в области технической кибернетики и теории информации; руководил созданием автоматизированной интеллектуальной системы обучения программированию и занимался разработкой методов искусственного интеллекта и цифровой обработки сигналов.

Боривой Ж. Лазич (серб. Боривој Ж. Лазић; род. 1 августа 1939 Помияча) — югославский учёный в области информатики, профессор; известен как разработчик компьютеров и автор учебников по вычислительной технике.

Марко Бёррис (род. 1 августа 1968 года) — немецкий IT-предприниматель, основатель компании Star Division; под его руководством был разработан офисный пакет StarOffice (ставший основой OpenOffice).

#Biography #Birth_Date
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Первая программа на Java

Запустите IntelliJ IDEA:
Windows: Найдите ярлык IntelliJ IDEA на рабочем столе или в меню «Пуск» и дважды кликните.
macOS: Откройте приложение из папки «Программы» или через Spotlight (Cmd + Пробел, введите «IntelliJ IDEA»).
Linux: Запустите через команду ./
idea.sh из папки bin (например, ~/idea/idea-IC-*/bin/) или найдите в меню приложений.
При первом запуске примите лицензионное соглашение и выберите тему (светлую или темную). Для новичков стандартные настройки подойдут.


Создайте новый проект:

На главном экране выберите File → New → Project.
В появившемся окне:
Выберите Java в левой панели.
Убедитесь, что в поле Project SDK указана версия JDK (например, 17). Если JDK не настроена, нажмите «New» и укажите путь к папке JDK (например, C:\Program Files\Java\jdk-17 на Windows или /Library/Java/JavaVirtualMachines/jdk-17 на macOS).
Оставьте остальные настройки по умолчанию и нажмите «Next».

Дайте проекту имя, например, MyFirstJavaProject, и выберите папку для сохранения.
Нажмите «Create».



Создание класса

В Java всё основано на классах. Класс — это шаблон, который описывает данные и поведение объектов. Давайте создадим наш первый класс.

Создайте класс:
В дереве проекта (слева) найдите папку src.
Щелкните правой кнопкой мыши на src → New → Java Class.
Введите имя класса, например, HelloWorld. Убедитесь, что выбран тип «Class».
Нажмите «OK».


IntelliJ IDEA создаст файл HelloWorld.java с базовой структурой:
public class HelloWorld {
}


Добавьте метод main:
Внутри класса добавьте метод main, который является точкой входа в программу:
public class HelloWorld {
public static void main(String[] args) {
// Здесь будет код
}
}

Можно быстро добавить набрав psvm и нажав tab


Структура класса

Класс в Java — это основная единица программы.

Рассмотрим структуру класса HelloWorld:
public class HelloWorld {
// Поля (переменные класса)
// Конструкторы
// Методы
public static void main(String[] args) {
// Код программы
}
}


Заголовок класса:
public — модификатор доступа, означает, что класс доступен из любого другого кода.
class — ключевое слово, обозначающее создание класса.
HelloWorld — имя класса, должно совпадать с именем файла (
HelloWorld.java).

Тело класса:

Внутри фигурных скобок {} размещаются поля, конструкторы и методы.
В нашем примере мы добавили метод main.



Обзор метода main

Метод main — это точка входа в Java-программу. Когда вы запускаете программу, JVM ищет именно этот метод, чтобы начать выполнение.


Сигнатура метода main:
public static void main(String[] args)


Разберем каждый элемент:
public: Метод доступен из любого кода.
static: Метод принадлежит классу, а не объекту, поэтому его можно вызвать без создания экземпляра класса.
void: Метод ничего не возвращает.
main: Имя метода, которое JVM ищет для запуска программы.
String[] args: Массив строк, содержащий аргументы командной строки, переданные при запуске программы. Например, если вы запускаете java HelloWorld test, args[0] будет равно "test".


Пример использования args:
public class HelloWorld {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("Аргумент: " + args[0]);
} else {
System.out.println("Аргументы не переданы");
}
}
}


Совет для новичков: На начальном этапе вы можете игнорировать args, но позже они пригодятся для передачи параметров в программу.


Написание и запуск "Hello, World!" через IDE

Добавьте код в класс:
Откройте файл HelloWorld.java и добавьте вывод сообщения:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}


Запустите программу в IntelliJ IDEA:
Щелкните правой кнопкой мыши на файле HelloWorld.java в дереве проекта.
Выберите Run 'HelloWorld.main()'.


Внизу в консоли IntelliJ IDEA вы увидите вывод:
Hello, World!


#Java #для_новичков #beginner #First_Programm #Scanner #System_out_println
👍1
Что делает System.out.println?:
System — класс из стандартной библиотеки Java.
out — статическое поле типа PrintStream, отвечающее за вывод в консоль.
println — метод, который выводит строку и добавляет перенос строки (\n).



Ввод и вывод данных

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


Вывод данных


Java предоставляет несколько способов вывода данных в консоль:
System.out.println: Выводит строку с переносом строки.
System.out.println("Hello, World!"); // Вывод: Hello, World!
System.out.print: Выводит строку без переноса строки.
System.out.print("Hello, ");
System.out.print("World!"); // Вывод: Hello, World!

System.out.printf: Форматированный вывод, аналогичный printf в C. Использует спецификаторы формата, такие как %s (строка), %d (целое число), %f (число с плавающей точкой).

String name = "Алексей";
int age = 30;
System.out.printf("Имя: %s, Возраст: %d%n", name, age);
// Вывод: Имя: Алексей, Возраст: 30
%n — перенос строки, платформонезависимый.
Другие спецификаторы: %b (булево), %c (символ), %.2f (два знака после запятой для чисел с плавающей точкой).


Ввод данных с помощью класса Scanner

Класс Scanner из пакета java.util позволяет считывать данные из консоли (или других источников).

Пример программы с вводом:
Создайте файл Greeting.java:
import java.util.Scanner;

public class Greeting {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Введите ваше имя:");
String name = scanner.nextLine();
System.out.printf("Привет, %s!%n", name);
scanner.close();
}
}


Запуск через IDE:
Щелкните правой кнопкой мыши на Greeting.java → Run 'Greeting.main()'.
В консоли IntelliJ IDEA введите имя (например, Алексей) и нажмите Enter.


Ожидаемый вывод:
Введите ваше имя:
Алексей
Привет, Алексей!


Запуск через терминал:

Перейдите в папку с файлом:
cd путь/к/папке/MyFirstJavaProject/src


Скомпилируйте:

javac Greeting.java


Запустите:
java Greeting


Введите имя и получите тот же вывод.


Работа с Scanner

Импорт: import java.util.Scanner; необходим для использования класса.

Создание объекта:
Scanner scanner = new Scanner(System.in); подключает Scanner к консоли.


Методы Scanner:
nextLine(): Считывает строку до нажатия Enter.
next(): Считывает одно слово (до пробела).
nextInt(): Считывает целое число.
nextDouble(): Считывает число с плавающей точкой.


Закрытие: Всегда закрывайте Scanner с помощью scanner.close() после использования, чтобы избежать утечек ресурсов.

Пример с числами:
Scanner scanner = new Scanner(System.in);
System.out.println("Введите возраст:");
int age = scanner.nextInt();
System.out.printf("Ваш возраст: %d%n", age);
scanner.close();


Обработка ошибок ввода

Если пользователь введет некорректные данные (например, буквы вместо числа для nextInt), программа выбросит исключение InputMismatchException.

Для безопасности добавьте обработку:
Scanner scanner = new Scanner(System.in);
System.out.println("Введите возраст:");
try {
int age = scanner.nextInt();
System.out.printf("Ваш возраст: %d%n", age);
} catch (java.util.InputMismatchException e) {
System.out.println("Ошибка: введите целое число!");
}
scanner.close();



Практические советы для новичков

Проверяйте имена файлов: Имя файла должно совпадать с именем класса (HelloWorld.java для класса HelloWorld).
Используйте IDE для обучения: IntelliJ IDEA подсвечивает ошибки и предлагает исправления (Alt+Enter). Это ускоряет изучение.


Экспериментируйте с вводом/выводом:
Попробуйте написать программу, которая запрашивает у пользователя два числа и выводит их сумму.
Используйте System.out.printf для форматированного вывода с разными типами данных.


Кодировка в терминале (Windows):
Если русские символы отображаются некорректно, используйте:
javac -encoding UTF-8 Greeting.java
java -Dfile.encoding=UTF-8 Greeting


#Java #для_новичков #beginner #First_Programm #Scanner #System_out_println
👍1
Что выведет код?

import java.util.concurrent.CountDownLatch;

public class Task010825 {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(1);

new Thread(() -> {
latch.countDown();
latch.countDown();
}).start();

latch.await();
System.out.println("Completed");
}
}


#Tasks
👍1
Карточка для запоминания int 😎

#memory_card
👍2🔥1
Продолжаем выбирать темы для разбора и голосовать за рассмотрение предложенных! 🤓

Голосуем за тему к рассмотрению в эти выходные!

Предлагаем новую тему!
(можете предложить что-то из того, что предлагали на прошлой и позапрошлых неделях и что проиграло в голосовании!)

Не стесняемся! ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Что такое Condition в Java? 🤓

Ответ:

Condition (используется с Lock) предоставляет аналог wait() и notify() для более гибкой синхронизации.

Пример:
ReentrantLock lock = new ReentrantLock();
Condition condition = lock.newCondition();
lock.lock();
try {
condition.await(); // Ждет сигнала
} finally {
lock.unlock();
}

Позволяет создавать несколько условий для одного Lock.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
ℹ️ Кто родился в этот день

Сергей Михайлович Белоусов (род. 2 августа 1971 года, Ленинград, СССР) - российский (по рождению) IT-предприниматель и изобретатель, основатель международных IT-компаний Acronis, Parallels и других, имеет свыше 350 патентов, внёсший вклад в развитие технологий виртуализации и защиты данных.

Джон Мэ́ттью Влиси́дис (Влисси́дес) (англ. John Matthew Vlissides; 2 августа 1961, Вашингтон, округ Колумбия, США — 24 ноября 2005, Уэстчестер, Нью-Йорк, США) - американский учёный и инженер в области компьютерных наук, наиболее известен как один из авторов классической книги по паттернам проектирования “Design Patterns: Elements of Reusable Object-Oriented Software” («Приёмы объектно-ориентированного проектирования»). Его вклад заключался в развитии методов проектирования ПО и популяризации архитектурных шаблонов (Gang of Four).

#Biography #Birth_Date
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
После проведенного голосования, с выбрана тема - JWT (JSON Web Token)

Ну читаем'с ниже статейку

Ранее мы рассматривали эту тему, но сейчас более развернуто.

Если нужно рассмотреть эту тему более подробно - пишите в комментах, буду готовить 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
Обзор JSON Web Tokens (JWT) в Java

JSON Web Tokens (JWT) — это стандарт для создания компактных, самодостаточных токенов, используемых для безопасной передачи информации между сторонами в виде JSON-объекта. JWT широко применяется для аутентификации и авторизации в веб-приложениях, особенно в REST API. В Java экосистема библиотек, таких как jjwt и java-jwt, предоставляет мощные инструменты для работы с JWT.


Структура JWT

JWT состоит из трех основных частей, разделенных точками (.):
Header — содержит метаданные о токене, такие как тип (typ: JWT) и алгоритм подписи (например, alg: HS256 или RS256).
Payload — содержит полезные данные (claims), такие как идентификатор пользователя (sub), время выпуска (iat), срок действия (exp) и кастомные данные.
Signature — подпись, созданная с использованием секретного ключа или пары ключей (для асимметричных алгоритмов), для проверки целостности и подлинности токена.


Каждая часть кодируется в Base64Url и объединяется в строку вида: Header.Payload.Signature.


Пример JWT:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


Использование JWT в Java

Наиболее популярная библиотека для работы с JWT в Java — это io.jsonwebtoken:jjwt. Она поддерживает создание, парсинг и валидацию токенов с использованием различных алгоритмов подписи.

Установка зависимости

Добавьте зависимость в pom.xml для Maven:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.12.6</version>
</dependency>


Создание JWT

Пример создания JWT с использованием HMAC-SHA256:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;

public class JwtExample {
public static String createJwt(String subject, long ttlMillis) {
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256); // Генерация ключа
return Jwts.builder()
.setSubject(subject)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + ttlMillis))
.signWith(key)
.compact();
}
}


Парсинг и валидация JWT


Пример проверки и извлечения данных из токена:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

public class JwtExample {
public static Claims parseJwt(String jwt, String secret) {
Key key = Keys.hmacShaKeyFor(secret.getBytes());
return Jwts.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(jwt)
.getBody();
}
}



Управление памятью и производительность

1. Размер токена и влияние на память

JWT компактны, но их размер зависит от содержимого payload и используемого алгоритма.

Например:
HMAC-SHA256 (симметричный) создает токены меньшего размера, так как используется один ключ.
RSA/ECDSA (асимметричные алгоритмы) увеличивают размер подписи, что может быть заметно при большом количестве токенов.
Payload с большим количеством claims (например, сложные JSON-объекты) увеличивает объем токена, что влияет на объем передаваемых данных и потребление памяти.


Рекомендации:
Минимизируйте количество claims в payload. Храните только необходимые данные, такие как sub, iat, exp.
Используйте сжатие (например, JWS Compression с DEF в jjwt) для уменьшения размера токена, если это допустимо.



#Java #middle #on_request #Jwt
👍2
2. Кэширование ключей

Создание и парсинг ключей (особенно для асимметричных алгоритмов, таких как RSA) — дорогостоящая операция с точки зрения CPU и памяти.

Например:
Генерация RSA-ключей требует значительных вычислительных ресурсов.
Повторное декодирование Base64-строк для ключей при каждом запросе увеличивает нагрузку.


Рекомендации:
Кэшируйте ключи в памяти (например, в ConcurrentHashMap или с использованием Spring Cache).
Используйте пул ключей для многопоточных приложений, чтобы избежать создания новых экземпляров Key для каждого запроса.


Пример кэширования ключа:

private static final Key SIGNING_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);

public static String createJwt(String subject, long ttlMillis) {
return Jwts.builder()
.setSubject(subject)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + ttlMillis))
.signWith(SIGNING_KEY)
.compact();
}


3. Многопоточность

Библиотека jjwt потокобезопасна, но неправильное управление ключами или токенами может привести к проблемам.


Например:
Неправильное использование ThreadLocal для хранения временных ключей может привести к утечкам памяти.
Частое создание JwtParser без повторного использования увеличивает потребление ресурсов.


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


Пример потокобезопасного парсера:
private static final JwtParser JWT_PARSER = Jwts.parserBuilder()
.setSigningKey(Keys.hmacShaKeyFor("secret".getBytes()))
.build();

public static Claims parseJwt(String jwt) {
return JWT_PARSER.parseClaimsJws(jwt).getBody();
}



Нюансы безопасности

1. Выбор алгоритма подписи
HMAC-SHA (HS256, HS384, HS512): Быстрее, но требует безопасного хранения секретного ключа на всех серверах. Утечка ключа компрометирует всю систему.
RSA/ECDSA: Медленнее, но безопаснее, так как публичный ключ используется для проверки, а приватный хранится только на сервере, выдающем токены.
None-алгоритм: Никогда не используйте alg: none, так как это позволяет подделывать токены без подписи.


Рекомендации:
Для микросервисов с централизованным управлением ключами предпочтительнее RSA/ECDSA.

Используйте jjwt с настройкой require("alg"), чтобы предотвратить атаки с изменением алгоритма:
Jwts.parserBuilder()
.require("alg", "RS256")
.setSigningKey(publicKey)
.build();


2. Срок действия токена
Короткий срок действия (exp) снижает риск использования украденных токенов, но увеличивает нагрузку на сервер из-за частого обновления токенов (refresh tokens).

Рекомендации:
Устанавливайте exp в пределах 15-60 минут для access-токенов.
Используйте refresh-токены с более длинным сроком действия и строгим контролем (например, храните их в базе данных с возможностью отзыва).


3. Уязвимости
JWT Header Injection: Атакующий может изменить заголовок, чтобы подменить алгоритм (например, с RS256 на HS256). Всегда проверяйте алгоритм при парсинге.
Weak Keys: Слабые или предсказуемые ключи для HMAC-SHA делают токены уязвимыми для brute-force атак.
Payload Tampering: Если токен не подписан или подпись не проверяется, злоумышленник может изменить payload.


Рекомендации:
Используйте ключи достаточной длины (например, 256 бит для HS256).
Проверяйте подпись токена на каждом запросе.
Включайте jti (JWT ID) для отслеживания и отзыва токенов.



#Java #middle #on_request #Jwt
👍2
Оптимизация и масштабирование

1. Хранение и ротация ключей

Для HMAC-SHA ключи должны безопасно храниться (например, в Vault или AWS KMS).
Для RSA/ECDSA используйте ротацию ключей с поддержкой JWK (JSON Web Key) для автоматического обновления публичных ключей.


2. Масштабирование в микросервисах
Централизуйте выдачу токенов через отдельный сервис (например, Auth Service).
Используйте JWK для распространения публичных ключей между сервисами.


3. Кэширование токенов
Кэшируйте проверенные токены в Redis или другом in-memory хранилище, чтобы снизить нагрузку на парсинг и валидацию.
Используйте TTL кэша, соответствующий exp токена.


4. Логирование и мониторинг
Логируйте попытки использования невалидных или истекших токенов для анализа атак.
Мониторьте время парсинга и валидации токенов, чтобы выявить узкие места.



Пример интеграции с Spring Security

JWT часто используется в связке с Spring Security для защиты REST API.

Пример конфигурации:

import io.jsonwebtoken.Jwts;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/public").permitAll()
.anyRequest().authenticated()
.and()
.addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
}

public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
String header = request.getHeader("Authorization");
if (header != null && header.startsWith("Bearer ")) {
String token = header.substring(7);
try {
Claims claims = Jwts.parserBuilder()
.setSigningKey(Keys.hmacShaKeyFor("secret".getBytes()))
.build()
.parseClaimsJws(token)
.getBody();
String username = claims.getSubject();
if (username != null) {
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(
username, null, Collections.emptyList());
SecurityContextHolder.getContext().setAuthentication(auth);
}
} catch (Exception e) {
SecurityContextHolder.clearContext();
}
}
chain.doFilter(request, response);
}
}


#Java #middle #on_request #Jwt
👍2
ℹ️ Кто родился в этот день

Вячеслав Васильевич Петров (3 августа 1940, г. Лиски, Воронежская область, РСФСР, СССР).
Советский учёный в области информационных технологий и оптоэлектронных систем хранения информации, академик НАН Украины, директор Института проблем регистрации информации НАН Украины. Разработал основы оптических запоминающих устройств большой ёмкости и участвовал в координации национальных программ информатизации.

Эдвард Делано Лазовска (Edward Delano Lazowska) – родился 3 августа 1950 года.
Американский учёный в области информатики, профессор Вашингтонского университета, внёс значительный вклад в теорию и практику высокопроизводительных вычислений и систем связи. Соавтор фундаментального учебника по анализу производительности компьютерных систем и участник разработки методов эффективного управления ресурсами в многопроцессорных и сетевых средах.

Дханурджей «DJ» Патил (Dhanurjay Patil) – родился 3 августа 1974 года.
Американский математик и специалист по компьютерным наукам, с 2015 по 2017 год первый Chief Data Scientist США (советник Белого дома по наукам о данных). Известен как один из пионеров «науки о данных» (data science), разрабатывал методики анализа больших данных для государственной политики и коммерческих проектов.

#Biography #Birth_Date
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Сломай свой хаос 😵‍💫

Ты начал работать на удалёнке.
Никто не говорит тебе, когда начинать.
Хочешь — работай днём, хочешь — ночью. Важен только результат.

Звучит как мечта, да?


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


"Можно быть умным, талантливым, даже иметь опыт.
Но без умения строить свой день и держать ритм — в долгую ты не вытянешь."



🤫 Самообучение смертельно опасно, если заниматься этим беспорядочно

Курсы, видео, статьи, pet-проекты.
Сотни вкладок, 5 начатых репозиториев, ни одного завершённого.
Кажется, что ты в процессе… но на самом деле ты в болоте.

В психологии это состояние называют cognitive overload — когнитивная перегрузка.
(Sweller, J., Ayres, P., & Kalyuga, S. (2011). Cognitive Load Theory)

Ты берёшь на себя больше информации, чем способен обработать, и эффективность падает до нуля.


В IT это смертельно. Технологии бегут вперёд, а ты всё ещё бродишь по курсу «Java для начинающих» третий месяц без прогресса.



😞 Почему хаос убивает продуктивность

Нет границ
Удалёнка или самообучение = никто не скажет «стоп». В итоге либо работаешь до трёх ночи, либо растягиваешь одну задачу на весь день.

Потеря приоритетов
Вместо реальных задач ковыряешь шрифты в IDE, читаешь про новый фреймворк "на всякий случай". Это называется procrastination through busyness — прокрастинация через псевдозанятость.
(Pychyl, T. A., & Sirois, F. M. (2013). Procrastination, emotion regulation, and well-being)

Отсутствие ритма
Мозг — не хаотичная машина. Ему нужны циклы активности и отдыха (circadian rhythm). Без них ты превращаешься в сонного, раздражённого, медленного кодера.


‼️ Что же делать ‼️

😑 Разбивай путь на малые шаги. Строй планы, декомпозируй их на малые таски и стремись их выполнить.
И четко придерживайся плана. Чем точнее ты выполнишь задачу, уложившись в отведенное время, тем проще будет следующая.
Декомпозиция и обязательность - тоже навыки. Их тоже можно прокачать. Не пренебрегай ими.



🤨 Стань себе начальником. Заставь себя. Выстрели в свою лень.
Ставь задачи в календарь с точным временем.
Не что-то в голове, на уровне идей, а конкретика: в 19:00–20:30 — пишу код для pet-проекта.

И это время не двигается. Совсем.


😏 Одна задача = один фокус. Концентрация прокачивается. Строй вокруг себя условия, чтобы она не сбивалась.
Single-tasking — продуктивность падает, если переключаться между задачами.
Закрываешь IDE, чтобы на секундочку проверить почту - потерял 20–30% концентрации.
Делай одно дело за раз.



😐 Убери "проблему первого шага".
Хочешь учиться?

Сделай так, чтобы:
IDE уже была открыта
Курс уже загружен
Репозиторий уже клонирован

Это называется reducing activation energy — чем меньше действий до старта, тем выше шанс, что ты реально начнёшь.
(Oettingen, G., & Gollwitzer, P. M. (2010). Strategies of setting and implementing goals: Mental contrasting and implementation intentions. In Social Psychological Foundations of Clinical Psychology)


🤔 Почему это важно для айтишника

В офисе тебя могут спасать менеджеры, график, коллеги, которые напоминают о дедлайнах.
На удалёнке или при самообучении у тебя есть только Ты.

И если ты сам себе не начальник — значит, ты сам себе враг.

Самоорганизация — это не про мотивацию, а про систему. Мотивация придет позже.
Система = привычки, которые работают даже в дни, когда ты не хочешь работать.


Если не начнёшь ломать хаос сегодня — завтра он сломает тебя.

Поэтому, запланируй ответить мне в комментариях, что ты думаешь об это статье! Прокачай навык 😉


Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность 🤝

😎

#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥21