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

Прекрасная ирония автоматизации заключается в том, что мы часто тратим больше времени на жалобы по поводу повторяющихся задач, чем на их автоматизацию. Но вот в чём дело: выигрыш заключается не только в том, чтобы вернуть те пятнадцать минут сегодня. Речь идёт о том, чтобы вернуть эти пятнадцать минут каждый божий день, пять дней в неделю, пятьдесят недель в году. Это примерно 62,5 часа. Больше, чем полная рабочая неделя. Каждый год.

Добро пожаловать в мир крошечных скриптов автоматизации — самого недооценённого приёма повышения производительности, который действительно работает.

Почему мы игнорируем мелочи (и почему это наша самая большая ошибка)

Существует психологическая особенность, которая мешает большинству людей автоматизировать задачи, не занимающие много времени. Мы думаем: «На это уходит всего пять секунд. Зачем заморачиваться?» Но вот где наша интуиция нас обманывает.

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

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

Позвольте привести пример. У меня был ежедневный чек-лист в текстовом файле. Когда я заканчивал работу, я открывал его, просматривал пункты и отмечал их. Звучит просто, правда? За исключением того, что я постоянно пропускал шаги. Мой мозг видел «просмотреть еженедельные цели» и думал: «Да-да, потом сделаю», — и я переходил к следующему пункту, не сделав этого.

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

Три столпа личной автоматизации

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

Столп 1: частота важнее продолжительности

Задача, которая занимает 30 секунд и выполняется раз в месяц? Не стоит автоматизации. Задача, которая занимает 30 секунд и выполняется каждый рабочий день? Абсолютно стоит автоматизации. Формула проста: частота × время × влияние = ценность автоматизации.

Столп 2: подсказки важнее дисциплины

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

Столп 3: интеграция API — ваша суперсила

Современные веб-сервисы предоставляют API. Большинство разработчиков не осознают, насколько легко связать их вместе и создать мощные рабочие процессы. Несколько строк bash с использованием curl и jq могут сделать то, что заняло бы у вас часы вручную.

Примеры кода: от теории к практике

Скрипт 1: автоматизация ежедневного чек-листа

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

import json
import os
from datetime import datetime
CHECKLIST_FILE = "daily_checklist.json"
PRIORITY_FILE = "top_priority.txt"
def load_checklist():
    if os.path.exists(CHECKLIST_FILE):
        with open(CHECKLIST_FILE, 'r') as f:
            return json.load(f)
    return {
        "Review weekly goals": False,
        "Plan tomorrow's tasks": False,
        "Review Beeminder goals": False,
        "Close distracting programs": False,
        "Set top priority": False
    }
def run_checklist():
    checklist = load_checklist()
    print("\n" + "="*50)
    print("DAILY END-OF-DAY CHECKLIST")
    print("="*50 + "\n")
    for item, completed in checklist.items():
        if completed:
            print(f"✓ {item} (уже сделано)")
            continue
        response = input(f"\n{item}? (y/n/skip): ").lower().strip()
        if response == 'y':
            checklist[item] = True
            print("  ✓ Помечено как выполненное")
        elif response == 'skip':
            continue
        else:
            print("  → Не забудьте сделать это!")
    # Получаем приоритет на завтра
    if checklist["Set top priority"]:
        priority = input("\n🎯 Какой у вас приоритет №1 на завтра? ")
        with open(PRIORITY_FILE, 'w') as f:
            f.write(priority)
        print(f"Приоритет сохранён: {priority}")
    # Сохраняем чек-лист
    with open(CHECKLIST_FILE, 'w') as f:
        json.dump(checklist, f)
    print("\n✓ Чек-лист выполнен! Хорошего вечера.\n")
if __name__ == "__main__":
    run_checklist()

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

Скрипт 2: закрытие отвлекающих программ в конце рабочего дня

Кэл Ньюпорт рекомендует «ритуал отключения», чтобы полностью отключиться от работы. Вот в чём проблема: Slack всё ещё открыт. Электронная почта всё ещё открыта. Ваш мозг никогда не перестаёт работать.

import subprocess
import sys
import time
# Программы для закрытия (примеры для macOS/Linux)
DISTRACTING_APPS = [
    "Slack",
    "Mail",
    "Messages",
    "Discord"
]
# Вкладки/окна браузера для закрытия (потребуются системные инструменты)
DISTRACTING_BROWSER_KEYWORDS = [
    "twitter",
    "facebook",
    "reddit",
    "news"
]
def close_applications():
    """Закрытие отвлекающих приложений"""
    print("🚀 Инициализация последовательности отключения...\n")
    for app in DISTRACTING_APPS:
        try:
            # macOS
            subprocess.run(
                ['osascript', '-e', f'quit app "{app}"'],
                timeout=2
            )
            print(f"✓ Закрыто {app}")
        except:
            # Уже закрыто или не найдено
            pass
    time.sleep(1)
    print("\n✓ Активированы блокировщики отвлекающих факторов!")
    print("🎉 Вы официально закончили работу. Пойдите и сделайте что-нибудь приятное.\n")
if __name__ == "__main__":
    close_applications()

На Windows вы бы использовали планировщик задач. На Linux вы бы использовали pkill. Концепция остаётся той же: ваш ритуал отключения включает в себя фактическое прекращение связи с рабочими приложениями.

Скрипт 3: очистка почтового ящика (ядерный вариант)

Этот скрипт подключается к вашей почте через IMAP и автоматически архивирует старые сообщения с низким приоритетом:

import imaplib
import email
from datetime import datetime, timedelta
IMAP_SERVER = "imap.gmail.com"
EMAIL_ADDRESS = "[email protected]"
PASSWORD = "your-app-password"  # Используйте пароль для приложения!
def cleanup_inbox():
    # Подключение к почте
    mail = imaplib.IMAP4_SSL(IMAP_SERVER)
    mail.login(EMAIL_ADDRESS, PASSWORD)
    # Выбор почтового ящика
    mail.select('INBOX')
    # Поиск писем старше 30 дней из новостных рассылок/уведомлений
    thirty_days_ago = (datetime.now() - timedelta(days=30)).strftime("%d-%b-%Y")
    # Поиск старых писем от определённых отправителей (рассылки и т. д.)
    status, messages = mail.search(
        None,
        f'FROM "newsletter@" BEFORE {thirty_days_ago}'
    )
    if messages:
        email_ids = messages.split()
        print(f"Найдено {len(email_ids)} старых писем из рассылок\n")
        for email_id in email_ids[:50]:  # Ограничение до 50 за запуск
            # Перемещение в архив (ярлык Gmail)
            mail.copy(email_id, '[Gmail]/All Mail')
            mail.store(email_id, '+FLAGS', '\\Deleted')
            print(f"✓ Архивировано письмо {email_id}")
        mail.expunge()
        print(f"\n✓ Очищено {len(email_ids