Когда-то ты спорил на форумах о том, что лучше — tabs или spaces, а теперь просто настраиваешь .editorconfig и идешь пить кофе. Этот текст — не про карьеру, не про зарплаты и не про мотивацию. Это про то, как постепенно меняется восприятие кода, ответственности и хаоса, когда годы коммитов превращают энтузиазм в инженерное спокойствие. Здесь не будет морали — только наблюдения, немного иронии и чуть-чуть боли.

Вступление

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

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

Если хочешь — можешь искать себя в этих стадиях. Только без самоиронии будет скучно.


Энтузиаст

Тот самый момент, когда ты впервые запускаешь hello world и чувствуешь, что только что построил Вселенную. Любой код кажется искусством. Любая строчка — откровением. Ты не думаешь о сложности алгоритма, просто радуешься, что что-то заработало.

На этом этапе код пахнет свободой и отсутствием здравого смысла. Я помню, как писал мини-движок на JavaScript без единого понимания событийного цикла. Всё было в одном файле, зато — работало же!

// язык: JavaScript
let users = [];
function addUser(name) {
  users.push(name);
  render();
}

function render() {
  const list = document.getElementById('users');
  list.innerHTML = '';
  users.forEach(u => {
    const li = document.createElement('li');
    li.innerText = u;
    list.appendChild(li);
  });
}

document.getElementById('add').onclick = () => {
  const name = document.getElementById('name').value;
  addUser(name);
};

Через пару недель ты узнаешь, что DOM-операции внутри цикла — это боль. Но тогда ты ещё не знаешь слова «оптимизация». Ты просто кайфуешь от самого факта, что можешь создавать.


Ремесленник

Наступает момент, когда тебе начинают платить за код. Это первый удар по романтике. Теперь ты должен не просто «чтобы работало», а «чтобы не упало на проде».

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

// язык: Go
func processOrder(id int, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Printf("Processing order %d\n", id)
    time.Sleep(time.Second)
}

func main() {
    var wg sync.WaitGroup
    for i := 1; i <= 5; i++ {
        wg.Add(1)
        go processOrder(i, &wg)
    }
    wg.Wait()
    fmt.Println("All orders processed")
}

Тебе кажется, что ты покорил параллелизм, пока не встретишь race conditions и не потратишь два дня, объясняя QA, почему «иногда падает».


Архитектор-прагматик

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

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

# язык: Python
from fastapi import FastAPI, Depends
from pydantic import BaseModel

class Order(BaseModel):
    id: int
    total: float

def get_discount(order: Order) -> float:
    if order.total > 1000:
        return order.total * 0.1
    return 0.0

app = FastAPI()

@app.post("/order")
def create_order(order: Order):
    discount = get_discount(order)
    return {"order_id": order.id, "discount": discount}

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


Наставник

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

Ты уже не оцениваешь человека по стеку. Понимаешь, что главное — мышление. Иногда ловишь себя на мысли, что объяснять стало интереснее, чем писать код.

Но наставник без кодовой практики быстро превращается в лектора. Поэтому ты всё ещё дебажишь, пусть и меньше.


Архитектор-отшельник

Это не стадия гордыни, а стадия тишины. Когда ты больше не хочешь доказывать. Ты проектируешь систему, как садовник — растишь архитектуру, убираешь сорняки, следишь за балансом.

Всё становится проще и одновременно глубже. Каждый новый сервис — это не гордость, а ответственность.

Ты перестаешь гнаться за хайпом, потому что знаешь: настоящий вызов — не придумать, а поддерживать.

// язык: Rust
use std::thread;
use std::sync::{Arc, Mutex};

fn main() {
    let data = Arc::new(Mutex::new(vec![]));
    let mut handles = vec![];

    for i in 0..10 {
        let data = Arc::clone(&data);
        let handle = thread::spawn(move || {
            let mut v = data.lock().unwrap();
            v.push(i);
        });
        handles.push(handle);
    }

    for h in handles {
        h.join().unwrap();
    }

    println!("Final data: {:?}", *data.lock().unwrap());
}

Теперь тебе интересны не языки, а принципы: изоляция, предсказуемость, отказоустойчивость. Всё остальное — детали реализации.


Послесловие

Если на какой-то стадии ты себя узнал — значит, движешься. Нет правильного темпа. У кого-то это занимает годы, у кого-то — десятилетие. Главное, чтобы путь не превратился в конвейер.

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

Комментарии (20)


  1. igorb789
    12.11.2025 11:16

    оч. хор. ;)


  1. vkrasikov
    12.11.2025 11:16

    В заголовке 7 стадий, а в тексте - только 5.


    1. apevzner
      12.11.2025 11:16

      Это деталь реализации :)


    1. monco83
      12.11.2025 11:16

      Ошибки на единицу самые трудноотлавливаемые. Тут их две.


  1. kellas
    12.11.2025 11:16

    Где-то между наставником и отшельником потерялось 2 стадии алкоголизм и депрессия


    1. serge-sb
      12.11.2025 11:16

      Аккуратно предложу поместить их между ремесленником и наставником. И да, плюсую, эти стадии пропущены)


  1. Cheater
    12.11.2025 11:16

    TL;DR разработчик, дошедший до последней стадии просветления, будет писать многопоточный код (разумеется на БЛЕЙЗИНГ ФАСТ языке) с глобальными локами на структуру, который вчистую проиграет по производительности тупому однопоточному коду...


    1. house2008
      12.11.2025 11:16

      Так это как раз и отличается финально зрелого разработчика)

      будет писать многопоточный код (разумеется на БЛЕЙЗИНГ ФАСТ языке) с глобальными локами на структуру, который вчистую проиграет по производительности тупому однопоточному коду...

      Значит он еще не созрел для последней стадии.

      Где-то видел шутку про Java, но не могу найти, сделал примерный аналог той шутки:

      1 год в ИТ

      10 PRINT "HELLO WORLD"
      20 END

      2 года в ИТ

      program Hello(input, output)
       begin
          writeln('Hello World')
       end.

      5 лет в ИТ

      #include
      void main(void)
       {
        char *message[] = {"Hello ", "World"};
         int i;
      
         for(i = 0; i < 2; ++i)
           printf("%s", message[i]);
         printf("\n");
      }

      10 лет в ИТ

      #include <iostream.h>
      #include  <string.h>
       class string
      {
       private:
        int size;
         char *ptr;
       public:
         string() : size(0), ptr(new char('\0')) {}
         string(const string &s) : size(s.size)
        {
         ptr = new char[size + 1];
         strcpy(ptr, s.ptr);
         }
         ~string()
        {
         delete [] ptr;
         }
         friend ostream &operator  <<(ostream &, const string &);
         string &operator=(const char *);
        };
       ostream &operator <<(ostream &stream, const string &s)
       {
         return(stream  << s.ptr);
       }
       string &string::operator=(const char *chrs)
       {
        if (this != &chrs)
         {
          delete [] ptr;
        size = strlen(chrs);
        ptr = new char[size + 1];
           strcpy(ptr, chrs);
        }
         return(*this);
      }
       int main()
       {
         string str;
         str = "Hello World";
         cout  << str  << endl;
         return(0);
       }

      20 лет в ИТ

      10 PRINT "HELLO WORLD"
      20 END


      1. apevzner
        12.11.2025 11:16

        Стадия совершенства:

        $ echo "Hello, world!"
        


  1. olku
    12.11.2025 11:16

    Философ: все тлен, софт-скилы решают.


  1. t0kashi
    12.11.2025 11:16

    Когда-то в прошлом программистами считали всех людей кто умел шевелить мышкой и не пугаться BSOD Win95. Это конечно огорчало настоящих программистов, которые писали код, а не только знали, что "если диск тупит - нужно дефрагментировать его и будет хорошо". Сейчас всё стало еще хуже, вайбкодеры/зерокодеры и даже 1С-программисты, тестировщики, UX-дизайнеры - все считают, что они создатели. Это моё личное мнение, но если человек создает систему, видит архитектуру и живёт своим проектом, то это программист-создатель, а если человек двигается по трекам, избегает дедлайнов, реализует фичи из ТЗ, то какой же это программист? Это кодер да и всё.


    1. StupidityIncarnate
      12.11.2025 11:16

      Это плохо, быть кодером и получать зарплату?


      1. serge-sb
        12.11.2025 11:16

        Вообще не плохо (если не брать в расчёт сферу деятельности. Но это не только для кодеров).


    1. UFO_01
      12.11.2025 11:16

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


  1. MironovPeter
    12.11.2025 11:16

    Это не стадии взросления программиста, т.к. архитектор -отшельник это оксюморон по определению, влажная мечта сеньоров, так и не научившихся коммуникации. Сами стадии сквозят нарциссизмом, т к. исключено обучение и получение опыта от других. "Архитекторы"-отшельники всегда выдают отвратительную архитектуру, не бьющуюся с компромиссами и ограничениями реальности, смотрят со слоновой башни (см. антипаттерн) и плачутся друзьям, что их гений не понимают коллеги. Если хотите узнать, как становятся востребованными архитекторами - стоит почитать матчасть по ремеслу архитектора


    1. Fardeadok
      12.11.2025 11:16

      вы на первой стадии


    1. Pkgc
      12.11.2025 11:16

      Пожму руку, сниму шляпу.


    1. CareDealer
      12.11.2025 11:16

      Согласен, открыл календарь своего архитектора, а там окошко через 3 недели и то вместо его обеда, и это не потому что он отшельничает :))

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


    1. cyberhippie
      12.11.2025 11:16

      Отшельникам некому плакаться, да и посмеяться не с кем, как и искать компромисс и это - благодать!)))


  1. ewolf
    12.11.2025 11:16

    Могу ошибаться, но статья выглядит, как написанная llm: стилистика очень похожа на нее (краткие предложения, односложные утверждения), форматирование, несоответствие числа этапов во введении реальному числу