Как стать автором
Обновить

Переехать ближе к работе или сэкономить: что выбрать IT-джуну?

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров2.1K

Об авторе

Приветствую вас! Меня зовут Эрик, и я хочу поделиться своим личным опытом и знаниями. Я практикующий дата-сайентист, имеющий успешный опыт участия и судейства в чемпионатах по прогнозированию, а также аналитик-исследователь, которому нравится искать, находить и делиться.

Эта статья основана на ситуации, с которой я столкнулся лично. Моё мнение может не совпадать с чьим-то мнением, но я постараюсь донести свою точку зрения и помочь вам лучше понять и решать аналогичные задачи. Предлагаю начать.

Введение

Представьте себе начинающего junior-специалиста в IT-сфере в городе миллионнике. Он только что закончил обучение и нашёл свою первую работу. Заработная плата таких специалистов может сильно варьироваться в зависимости от компании и региона: кто-то получает 50 000 руб, кто-то 80 000 руб, а кто-то даже 110 000 руб в месяц. Каждому из этих новичков предстоит решить важный вопрос: стоит ли снимать квартиру поближе к работе или тратить время и деньги на дорогу, живя в более дешевом районе? Стоит отметить, что никому из них не предложили удаленный формат работы.

Давайте разберем три сценария:

  1. Первому джуну не повезло – его компания платит всего 50 000 руб в месяц и не оплачивает дополнительные рабочие часы.

  2. Второму повезло больше – он зарабатывает 80 000 руб в месяц, а его дополнительные рабочие часы оплачиваются по стандартной ставке.

  3. А вот третьему совсем повезло – он получает 110 000 руб в месяц, и за каждый дополнительный час ему платят в два раза больше обычной ставки.

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

Вводные данные

Для всех сценариев у нас есть следующие условия:

1. Джуны снимают квартиру на окраине за 15 000 руб, дорога до работы занимает 2 часа для каждого рабочего дня, а расходы на транспорт составляют 5000 руб в месяц.

2. Джуны могут переехать в квартиру за 35 000 руб рядом с работой, тогда дорога до работы составит 0 часов в день, а расходы на транспорт 0 руб.

3. В месяце 22 рабочий день и 176 рабочих часов.

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

Расчет чистого дохода и эффективной стоимости часа

Junior 1 (50 000 руб, без доп. часов)

Без переезда:

  • Расходы на транспорт и аренда: 5000 + 15000 = 20 000 руб

  • Время на работу с дорогой: 176 + 22*2 = 220 ч

  • Чистый доход: 50 000 - 20 000 = 30 000 руб

  • Эффективная стоимость часа: 30 000 / 220 = 136 руб/ч

С переездом:

  • Расходы на аренду: 35 000 руб

  • Время на работу: 176 ч

  • Чистый доход: 50 000 - 35 000 = 15 000 руб

  •  Эффективная стоимость часа: 15 000 / 176 = 85 руб/ч

Junior 2 (80 000 руб, доп. часы по ставке х1)

Без переезда:

  • Расходы на транспорт и аренда: 5000 + 15000 = 20 000 руб

  • Время на работу с дорогой: 176 + 22 * 2 = 220 ч

  • Чистый доход: 80 000 - 20 000 = 60 000 руб

  • Эффективная стоимость часа: 60 000 / 220 = 273 руб/ч

С переездом:

  • Расходы на аренду: 35 000 руб

  • Время на работу: 176 ч

  • Чистый доход: 80 000 - 35 000 = 45 000 руб

  • Эффективная стоимость часа: 45 000 / 176 = 256 руб/ч

С переездом и дополнительными рабочими часами:

  • Ставка дополнительного рабочего часа: 80 000 / 176 = 455 руб/ч

  • Чистый доход с дополнительными часами: 45 000 + 455 * 22 * 2 = 65 020 руб

  •  Эффективная стоимость часа: 65 020 / 220 = 296 руб/ч

Juinior 3 (110 000 руб, доп. часы по ставке х2)

Без переезда:

  • Расходы на транспорт и аренда: 5000 + 15000 = 20 000 руб

  • Время на работу с дорогой: 176 + 22 * 2 = 220 ч

  • Чистый доход: 110 000 - 20 000 = 90 000 руб

  • Эффективная стоимость часа: 90 000 / 220 = 409 руб/ч

С переездом:

  • Расходы на аренду: 35 000 руб

  • Время на работу: 176 ч

  • Чистый доход: 110 000 - 35 000 = 75 000 руб

  • Эффективная стоимость часа: 75 000 / 176 = 426 руб/ч

С переездом и дополнительными рабочими часами:

  • Ставка дополнительного рабочего часа: 2 * 110 000 / 176 = 1250 руб/ч

  • Чистый доход с дополнительными часами: 75 000 + 1250 * 22 * 2 = 130 000 руб

  • Эффективная стоимость часа: 130 000 / 220 = 591 руб/ч

Таблица

В таблице представлены данные для трех junior-специалистов для трёх сценариев: без переезда, с переездом и с переездом при наличии отработанных дополнительных часов.

Таблица 1. Чистый доход и эффективная стоимость часа для различных сценариев переезда и уровня зарплаты
Таблица 1. Чистый доход и эффективная стоимость часа для различных сценариев переезда и уровня зарплаты
Шаблон таблицы

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

График зависимости дохода от отработанных часов

Построим график зависимости чистого дохода от отработанных часов (включая время на дорогу).

Код визуализации
import matplotlib.pyplot as plt
import numpy as np

# Данные для расчета
salaries = [50000, 80000, 110000]
hours_regular = 176
hours_total = 220
expenses_transport = 5000
expenses_rent_1 = 15000
expenses_rent_2 = 35000
expenses_combined = expenses_transport + expenses_rent_1

# Генерируем точки для оси X (отработанные часы)
hours = np.linspace(0, hours_total, num=hours_total + 1)
hours_regular_x = np.linspace(0, hours_regular, num=hours_regular + 1)
hours_overtime_x = np.linspace(hours_regular, hours_total, num=hours_total - hours_regular + 1)

# Функция для расчета дохода по часам
def calculate_income(salary, expenses, overtime_rate=0, total_hours=hours_total, regular_hours=hours_regular):
    hourly_rate = salary / regular_hours
    income = [-expenses]
    for h in range(1, total_hours + 1):
        if h <= regular_hours:
            income.append(income[-1] + hourly_rate)
        else:
            income.append(income[-1] + overtime_rate)
    return income

def calculate_income_no_rent(salary, expenses, total_hours=hours_total):
    hourly_rate = salary / total_hours
    income = [-expenses]
    for h in range(1, total_hours + 1):
        income.append(income[-1] + hourly_rate)
    return income

# Расчет дохода для каждого сценария
income_no_rent_1 = calculate_income_no_rent(salaries[0], expenses_combined)
income_with_rent_1 = calculate_income(salaries[0], expenses_rent_2)

income_no_rent_2 = calculate_income_no_rent(salaries[1], expenses_combined)
income_with_rent_2 = calculate_income(salaries[1], expenses_rent_2, salaries[1] / hours_regular)

income_no_rent_3 = calculate_income_no_rent(salaries[2], expenses_combined)
income_with_rent_3 = calculate_income(salaries[2], expenses_rent_2, 2 * salaries[2] / hours_regular)

# Графики дохода
plt.figure(figsize=(14, 10))

plt.plot(hours, income_no_rent_1, label='Junior 1 без переезда', linestyle='-', color='blue')
plt.plot(hours_regular_x, income_with_rent_1[:hours_regular+1], label='Junior 1 с переездом', linestyle='-', color='orange')
plt.plot(hours_overtime_x, income_with_rent_1[hours_regular:], linestyle='--', color='orange')

plt.plot(hours, income_no_rent_2, label='Junior 2 без переезда', linestyle='-', color='green')
plt.plot(hours_regular_x, income_with_rent_2[:hours_regular+1], label='Junior 2 с переездом', linestyle='-', color='red')
plt.plot(hours_overtime_x, income_with_rent_2[hours_regular:], linestyle='--', color='red')

plt.plot(hours, income_no_rent_3, label='Junior 3 без переезда', linestyle='-', color='purple')
plt.plot(hours_regular_x, income_with_rent_3[:hours_regular+1], label='Junior 3 с переездом', linestyle='-', color='brown')
plt.plot(hours_overtime_x, income_with_rent_3[hours_regular:], linestyle='--', color='brown')

# Линии отсечки
plt.axhline(y=-expenses_combined, color='gray', linestyle='--')
plt.axhline(y=-expenses_rent_2, color='gray', linestyle='--')
plt.axhline(y=0, color='black', linestyle='-', linewidth=0.5)

# Настройки графика
plt.xlabel('Отработанные часы (включая время на дорогу)')
plt.ylabel('Чистый доход (руб)')
plt.title('Зависимость дохода от отработанных часов')
plt.legend()
plt.grid(True)

# Увеличение количества тиков на осях
plt.xticks(np.arange(0, hours_total + 1, step=10))
plt.yticks(np.arange(-expenses_combined, max(income_with_rent_3) + 10000, step=10000))

# Подписи линий отсечки
plt.text(hours_total, -expenses_combined, f'Аренда 1 и транспорт (-{expenses_combined})', verticalalignment='bottom', horizontalalignment='right', color='gray')
plt.text(hours_total, -expenses_rent_2, f'Аренда 2 (-{expenses_rent_2})', verticalalignment='bottom', horizontalalignment='right', color='gray')

# Выделение точек
highlight_points = {
    'Junior 1 без переезда': (220, income_no_rent_1[220], 'blue'),
    'Junior 1 с переездом': (176, income_with_rent_1[176], 'orange'),
    'Junior 2 без переезда': (220, income_no_rent_2[220], 'green'),
    'Junior 2 с переездом': (176, income_with_rent_2[176], 'red'),
    'Junior 3 без переезда': (220, income_no_rent_3[220], 'purple'),
    'Junior 3 с переездом': (176, income_with_rent_3[176], 'brown')
}

for label, (x, y, color) in highlight_points.items():
    plt.plot(x, y, 'o', markersize=10, color=color)
    plt.axvline(x=x, color='gray', linestyle='--')

plt.legend()
plt.show()

График 1. Зависимость чистого дохода от отработанных часов (включая время на дорогу)
График 1. Зависимость чистого дохода от отработанных часов (включая время на дорогу)
Пояснения

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

График зависимости эффективной стоимости часа от отработанных часов

Построим график зависимости эффективной стоимости рабочих часов от отработанных часов (включая время на дорогу).

Код визуализации
# Расчет эффективной стоимости часа для каждого сценария
def calculate_effective_rate(income):
    effective_rate = []
    for h in range(len(income)):
        if income[h] <= 0:
            effective_rate.append(0)
        else:
            effective_rate.append(income[h] / h)
    return effective_rate

effective_rate_no_rent_1 = calculate_effective_rate(income_no_rent_1)
effective_rate_with_rent_1 = calculate_effective_rate(income_with_rent_1)

effective_rate_no_rent_2 = calculate_effective_rate(income_no_rent_2)
effective_rate_with_rent_2 = calculate_effective_rate(income_with_rent_2)

effective_rate_no_rent_3 = calculate_effective_rate(income_no_rent_3)
effective_rate_with_rent_3 = calculate_effective_rate(income_with_rent_3)

# Построение графика эффективной стоимости часа
plt.figure(figsize=(21, 15))

# Графики эффективной стоимости часа
plt.plot(hours, effective_rate_no_rent_1, label='Junior 1 без переезда', linestyle='-', color='blue')
plt.plot(hours_regular_x, effective_rate_with_rent_1[:hours_regular+1], label='Junior 1 с переездом', linestyle='-', color='orange')
plt.plot(hours_overtime_x, effective_rate_with_rent_1[hours_regular:], linestyle='--', color='orange')

plt.plot(hours, effective_rate_no_rent_2, label='Junior 2 без переезда', linestyle='-', color='green')
plt.plot(hours_regular_x, effective_rate_with_rent_2[:hours_regular+1], label='Junior 2 с переездом', linestyle='-', color='red')
plt.plot(hours_overtime_x, effective_rate_with_rent_2[hours_regular:], linestyle='--', color='red')

plt.plot(hours, effective_rate_no_rent_3, label='Junior 3 без переезда', linestyle='-', color='purple')
plt.plot(hours_regular_x, effective_rate_with_rent_3[:hours_regular+1], label='Junior 3 с переездом', linestyle='-', color='brown')
plt.plot(hours_overtime_x, effective_rate_with_rent_3[hours_regular:], linestyle='--', color='brown')

# Линии отсечки
plt.axhline(y=0, color='black', linestyle='-', linewidth=0.5)

# Настройки графика
plt.xlabel('Отработанные часы (включая время на дорогу)')
plt.ylabel('Эффективная стоимость часа (руб/ч)')
plt.title('Зависимость эффективной стоимости часа от отработанных часов')
plt.legend()
plt.grid(True)

# Увеличение количества тиков на осях
plt.xticks(np.arange(0, hours_total + 1, step=10))
plt.yticks(np.arange(0, max(effective_rate_with_rent_3) + 50, step=50))

# Выделение точек и добавление бесцветных вертикальных линий
highlight_points_effective = {
    'Junior 1 без переезда': (220, effective_rate_no_rent_1[220], 'blue'),
    'Junior 1 с переездом': (176, effective_rate_with_rent_1[176], 'orange'),
    'Junior 2 без переезда': (220, effective_rate_no_rent_2[220], 'green'),
    'Junior 2 с переездом': (176, effective_rate_with_rent_2[176], 'red'),
    'Junior 3 без переезда': (220, effective_rate_no_rent_3[220], 'purple'),
    'Junior 3 с перееездом': (176, effective_rate_with_rent_3[176], 'brown')
}

for label, (x, y, color) in highlight_points_effective.items():
    plt.plot(x, y, 'o', markersize=10, color=color)
    plt.axvline(x=x, color='gray', linestyle='--')

plt.legend()
plt.show()

График 1. Зависимость эффективной стоимости часов от отработанных часов (включая время на дорогу)
График 1. Зависимость эффективной стоимости часов от отработанных часов (включая время на дорогу)
Пояснения

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

Вывод по каждому специалисту

1. Junior 1 (50 000 руб, без доп. часов)

  • Без переезда: чистый доход 30 000 руб, эффективная стоимость часа 136 руб/ч.

  • С переездом: чистый доход 15 000 руб, эффективная стоимость часа 85 руб/ч.

Для Junior 1 переезд невыгоден, так как чистый доход и эффективная стоимость часа значительно ниже, чем до его переезда.

2. Junior 2 (80 000 руб, доп. часы по ставке х1):

  • Без переезда: чистый доход 60 000 руб, эффективная стоимость часа 273 руб/ч.

  •  С переездом: чистый доход 45 000 руб, эффективная стоимость часа 256 руб/ч.

  • С переездом и дополнительными рабочими часами: чистый доход 65 020 руб, эффективная стоимость часа 296 руб/ч.

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

3. Junior 2 (110 000 руб, доп. часы по ставке х2):

  • Без переезда: чистый доход 90 000 руб, эффективная стоимость часа 409 руб/ч.

  • С переездом: чистый доход 75 000 руб, эффективная стоимость часа 426 руб/ч.

  • С переездом и дополнительными рабочими часами: чистый доход 130 000 руб, эффективная стоимость часа 591 руб/ч.

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

Заключение

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

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

Ссылки на дополнительные материалы:

  1. Шаблон excel-таблицы: Github репозиторий

Источники:

  1. 5 Ways Your Commute Affects Your Health — Keck Medicine of USC

  2. Lengthy Commutes Take a Mental Toll — Association for Psychological Science

  3. Why Your Long Commute is Bad for Your Health — Patient.info

  4. Commuting: "The Stress That Doesn't Pay" — Psychology Today

Теги:
Хабы:
Всего голосов 6: ↑4 и ↓2+2
Комментарии15

Публикации

Работа

Python разработчик
134 вакансии
Data Scientist
83 вакансии

Ближайшие события