Семь лет работы разработчиком: какие уроки я извлёк +25



Время летит, правда?

Моя карьера началась в 2012 году, с первой стажировки по C++. Честно говоря, я понятия не имел, что делаю (на самом деле, ничего не изменилось). Однако я извлёк несколько уроков.

Отказ от ответственности: в этом сообщении не будет никакого кода.

Вопрос: Какой самый важный язык в программировании?


Это английский. Или испанский, китайский, польский. Любой, какой вы используете для общения с коллегами.

Разговаривать с людьми гораздо важнее, чем с машинами


Программирование — командный вид спорта. Редко встречается блестящий продукт, созданный с нуля одним человеком (CodeSandbox — отличный пример, хотя Айвз в последнее время нанял пару сотрудников), но в подавляющем большинстве случаев нужна команда.

Навыки общения способны спасти или похоронить проект. Не волнуйтесь, проблема не только у вас, даже НАСА страдает из-за этого.

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

Нужно глубоко понять, что вы разрабатываете и почему


Большинство людей становится счастливее, когда у них появляется цель. Это относится и к работе.

Ваша цель как разработчика — не переводить JIRA на JavaScript, Trello на C# и т. д. Ваша цель — решать проблемы.

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

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

Если код-ревью вызывает стресс, то оно ужасно, ужасно неправильно организовано


О, боже. Проверка кода.

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

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

Хорошо, но что мне делать, когда эта функция полностью сломана?

Встать. Связаться с этим человеком, поговорить лично. Поговорите с ним, узнайте, почему он реализовал код таким образом.

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

Что-нибудь ОБЯЗАТЕЛЬНО пойдёт не так, будьте готовы


Согласно Википедии:

Закон Мерфи — это пословица или эпиграмма, которая обычно гласит: «Всё, что может пойти не так, пойдёт не так».

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

Если создаёте форму входа в систему — предположите, что люди скопируют и вставят в поле пароля текст целой книги.

Если создаёте окно WYSIWYG, предположите, что кто-то попытается его сломать, и, вероятно, сможет сделать это.

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

Если вы готовите демонстрацию перед аудиторией — убедитесь, что демо работает онлайн, офлайн, вверх ногами и под водой.

Не бойтесь сказать «Я не знаю»


Самая приятная привилегия титула «сеньор» на бейдже — наконец-то, возможность ответить:

Не знаю, никогда не пробовал. Я посмотрю и перезвоню вам.

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

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

Учитесь на публике


Как только вы переходите от «Я не знаю» к «Хорошо, это было интересно» — поделитесь с кем-то. Напишите в блог, запишите видео, поговорите на мероприятии по обмену знаниями или просто… скажите кому-нибудь. Если думаете, что-то всем очевидно, это не так. Даже лучшим профессионалам есть чему поучиться у новичков, и наоборот.

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

Как сказал кто-то чертовски умный:

Когда учит один, учатся двое.

А вы какие уроки извлекли как разработчик?

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (14):

  1. PahomU
    /#20154468 / +1

    «Преподавание — невероятно эффективный способ убедиться, что вы действительно понимаете предмет, о котором идёт речь.» — К тому же это ещё и способ закрепления знаний и опыта и их переосмысление. В России есть бесплатные курсы компьютерной грамотности для пенсионеров, куда всегда требуются волонтёры. Если у вас бывает свободное время и вы не очень бедны — вам полезно будет улучшить карму, устроившись туда. Небольшое отступление от учебного плана (таковые есть — волонтёрил) вам простят. Как и удаление с курсов слишком распальцованных бабушек убеждённых что им всегда все всё бесплатно должны и замена их на нормальных. Можно ещё вести блог, писать статьи и давать советы на форумах. Это тоже плюс к карме.

    • zompin
      /#20155500 / +1

      Несколько лет назад попросил знакомого быть наставником. Отказался, мотивировал тем что не хочет растить конкурента. Честно говоря я даже рад, что он им не стал.

  2. makdoc
    /#20154590 / +1

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

    • yudinetz
      /#20154860

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

      • Mikluho
        /#20156274 / +1

        На всех не хватит великих задач, но и тем великим есть-пить, да более простые вещи автоматизировать надо, а для этого должны решаться менее великие задачи. А чтобы они эффективное решались и становились тормозом развития великих — в этих задачах тоже надо куму-то разбираться.

      • JustDont
        /#20156462 / +1

        ПО для SpaceX — это тоже перебрасывание данных. Вообще всё ПО это вот это самое.
        От того, что вы перебрасываете данные конкретно из базы в веб-морду — это не становится менее «программированием». Ну разве что допуски у вас не такие, как у SpaceX, но и не обязательно более тривиальные. Если у вас очень дорогие данные или очень дорогая веб-морда (как например у Amazon) — допуски у вас будут ого-го какие маленькие.

  3. PahomU
    /#20154850 / +1

    Неразумно ВО ВСЁМ РАЗБИРАТЬСЯ. Есть операции, которые приходится белать не чаще чем раз в несколько лет. Зачем ради них забивать голову лишней информацией? Проще найти специалиста и заплатить ему. Надо иметь общее представление обо всём. И конкретно и хорошо знать и уметь то что тебе надо делать часто. А то что делается редко — зря потраченное время на изучение.

  4. Mikluho
    /#20156258

    Учиться, учиться и ещё раз учиться, как завещал товарищ Ленин :)
    Вот главный вывод более 20 лет карьеры.

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

  5. Estee
    /#20156472

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

    • JustDont
      /#20156524

      На самом деле разговаривать с людьми важно потому, что почти никто не умеет читать и писать.

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

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

  6. xState_level80
    /#20158494 / -2

    Завтра сегодня будет вчера.

  7. Fedorkov
    /#20158602

    Отталкиваться нужно от проблемы. Технологии вторичны.

    Для меня это — второй важнейший урок, который я усвоил, работая программистом. Первым когда-то стала сентенция Макконнелла:

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

  8. Terras
    /#20158950 / +5

    1) Никогда не работать в свое время, выходные. Практика показывает, что срочные задачи, нифига не срочные. Гореть, что-то делать — а потом наблюдать, как задача выезжает из-за проблем согласования, маркетинга, продаж через 2-3 месяца — это норма.

    2) Enterprise разработка — это стабильная высокая зп, командировки в США/Европу за счет компании, страховка для тебя и семьи, квартальные премии и хорошее железо. Ноют про Enterprise обычно разработчики с 10+ лет опыта, под 35+ лет возрастом. Они ноют не потому, что Enterprise плохо, а потому что они просто от этого всего устали (сидя 10 лет на другом стеке, в другой сфере, они ныли бы также).

    3) Многие разработчики дают советы, опираясь на свое текущее положение и профессиональную деформацию. Например, разработчик может говорить, что Scala — отличный выбор, и это будет так, ведь имея опыт 10 лет на Java, на Scala он будет получать больше. Новичок же с голой базой просто не найдет работу на Scala.

    4) Разработка — это тяжело и стрессово. Именно поэтому, так много разработчиков уходит с работы, и начинает вести какие-то курсы программирования, обучающие курсы и прочую около-айти хрень. Они на этом зарабатывают часто меньше, чем разработкой, но это гораздо проще (не напряжней).

    5) Если какая-то компания пиарится на том, какие они молодежные, модные и перспективные, значит, либо с тебя будут доить по черной, либо они будут платить ниже рынка. Чаще всего платят больше всего в каких-то «скучных компаниях, на обычных задачах». И да, язык и технология, вообще не имеет значение.

    6) Тебя могут уволить, даже если ты хороший программист. Чаще всего это происходит из-за депрессии, которая рубит твою продуктивность. Причины: плохая женщины рядом и некачественный виски (скотч лучше вообще не пить).

    7) Если владелец компании занимается непосредственно руководством, и он внезапно ударился в путешествия, велоспорт, лыжи, парашютный спорт и прочее — меняй работаю, это признак того, что он сгорел и начнет использовать принципы «эффективного менеджмента» и «трахать тебе мозг». Лучше не будет.

    8) Можно обойтись без мака, но не без удобного кресла.

    • Mikluho
      /#20160008

      Очень поддерживаю!
      Но позволю чуть дополнить :)

      1. Работать в «своё» время можно. Но надо чётко понимать, что это должно того стоить. Этого должно быть мало и оно должно быть компенсировано. Премия, отгулы, возможность сделать что-то новое и интересное…

      2. Иногда энтерпрайз — это ещё и устаревшее и закостеневшее всё :(, хотя часто поддаётся изменениям. Тут просто надо посмотреть до трудоустройства. В нынешних условиях энтерпрайз часто склонен к непрерывным изменениям при наличии хорошей стабильности. А ноют, на мой взгляд, чаще молодые, потому что боятся оков.

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

      4. Так и да! Но если программирование действительно любишь, то можно не уходить совсем, а добавить в свою жизнь достаточно количество «реальной» жизни. То есть нужно увлечение, наполняющее эмоционально и/или физически. Многие выбирают спорт.

      5. У молодых и модных часто ещё и неизвестно, взлетит ли. И даже если зарплата и правда будет больше, чем в скучных компаниях, то, наверняка не будет других бонусов, куда кроме дмс входит ещё уверенность в завтрашнем дне. Хотя опыта можно поднабраться в новых технологиях, порой :)

      8. И даже одного кресла мало. Молодость организму не вернуть (медицина пока не осилила), а потому надо ввести в привычку здоровый образ жизни. Не обязательно не пить, не курить и всё время сидеть на диете. Нет, надо найти способ не сильно портить здоровье, но и чтобы не париться об этом. Таки снова регулярный спорт, менее вредные перекусы и т.д. Привычка быть здоровым — бесценна.