IT и инвестиции | Алексей Солонков
589 subscribers
39 photos
3 videos
45 links
Канал о том, как достичь успеха, вооружившись современными знаниями в ИТ
Download Telegram
Почему программисту нужна база?

Разработчик — это человек, который умеет программировать в целом, независимо от языка, платформы и технологий. Зная общие принципы, можно освоить любой язык. И в обратную сторону: если вы знаете язык, знакомство с общей базой прокачает ваш профессиональный уровень.

Уже писал, какие знания входят в понятие базы. Сегодня расскажу о них подробнее.

Структуры и алгоритмы обработки данных
Знакомство со структурами и алгоритмами необходимо, чтобы написать работающий код, который не будет решать 5-секундную задачу за 15 минут.

Знание структур данных поможет эффективно обрабатывать входящий поток данных и грамотно преобразовывать их. А знакомство с алгоритмами позволяет осмысленно декомпозировать задачу и выявлять нужную последовательность действий.
Что не менее важно, владея инструментами анализа алгоритмов, вы сможете отследить, какой участок кода тормозит работу программы. Почему, например, O(n^2) хуже, чем O(n*log(n)), и как можно преобразовывать неэффективное решение.

Паттерны проектирования
Паттерны — это типовые подходы к решению задач в программировании. Знание этих подходов сильно ускоряет написание кода.

Кроме того, оно прокачивает способность анализировать код: вы не разбиваете программу на строки, а видите её в виде крупных смысловых блоков, которыми можно оперировать по своему усмотрению.

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

Насколько глубоко надо знать базу?
Как минимум, с ней надо ознакомиться.
Её не надо специально учить наизусть. Если что-то забыли — можно загуглить.

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

Поэтому главный совет при освоении базы — применяйте знания на практике: решайте задачи, старайтесь пересказать новую информацию своими словами, пишите простые программы, чтобы проверить себя на практике. Так вы сформируете скелет своего профессионализма, на который впоследствии, можно наращивать мясо из тонкостей, деталей и специфики.
👍22🔥5👏2
Ты не станешь программистом: почему так трудно сменить профессию и уйти в IT?

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

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

Недостаток мотивации
95% людей не обладают должной внутренней самодисциплиной. Из-за этого многие бросают занятия в середине пути. Даже если уже потратили на них своё время и деньги.
Я тоже могу отнести себя к этим 95%. Поэтому, когда я в очередной раз собрался пойти в зал — нанял тренера.
Это пример внешней мотивации, которую можно использовать в любом деле. Не хватает силы воли? Придумайте для себя систему принуждения, которая будет давить на вас извне.

Отсутствие плана и привычки
Смена профессии — сложная задача, которая пугает своей объёмностью. Если чувствуете, что саботируете её, вам помогут два приема.
Первый — начать прямо сейчас. Хоть чуть-чуть, но сейчас. Так вы убедите себя в том, что это посильно.
Второй — разбейте всю работу на маленькие шаги: составьте подробный план на бумаге и придумайте систему поощрения за конечный результат и промежуточные успехи. Мысленно пройдите все этапы намеченного плана, прежде чем приступать к нему в реальности. Мы тяжело идём в неизвестное. А то, что нам уже знакомо, хотя бы в воображении — принимаем без сопротивления.
Говорят, что привычка формируется 21 день. Я не соглашусь. Чтобы привычка стала вашей натурой — потребуется минимум год. До этого придётся заставлять себя заниматься усилием воли.

Горечь неудач
Неудачи снижают нашу уверенность в себе. Если это была серия неудач, то самооценка падает ниже плинтуса. Самым рациональным было бы продолжать двигаться дальше. Но мы все живем эмоциями. Если нет эмоционального подкрепления, то двигаться дальше можно только по инерции.
Я советую в такие моменты хвалить себя за положительные качества и достижения. А лучше — выписывать их в ежедневник. Это очень поможет вновь нащупать почву под ногами.
Безусловно, очень помогают единомышленники, которые поддержат в минуту кризиса. Особенно те, кто уже прошел этот путь и смотрит на эти невзгоды как на временные трудности.

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

Этот пост — сокращённая версия моей статьи на Хабре. Полный вариант текста ищите здесь: https://habr.com/ru/articles/768932/

Думаю, что многие из вас могут привести еще больше причин, которые приводят к неудачам при построении карьеры. Если вам есть чем поделиться — обязательно напишите об этом в комментариях!
🔥1510👍4👏1
«Идеальный программист» Роберта Мартина: стоит читать?
«Идеальный программист. Как стать профессионалом разработки ПО» — книга, которая подводит черту под всем жизненным опытом автора.
Кто не в курсе, Роберт Мартин — автор фундаментального труда «Чистый код. Создание, анализ и рефакторинг», американский публицист и программист с 50-летним стажем.
В книге «Идеальный программист» он прямо и без прикрас рассказывает о типичных болях любого программиста, и тех принципах, которые делают его профессионалом.

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

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

Как читать книгу?
С долей критики. Рассуждения Мартина — серьёзный разговор на важные темы. Это не безусловные истины, а пища для размышлений. То, что ложится на душу — принимать и использовать. Что не нравится — анализировать и критиковать.

А как вы относитесь к Роберту Мартину? Читали его книги? Делитесь впечатлениями.
👍12🔥3👏3
У меня есть свой Youtube-канал.

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

Если тема актуальна - смотрите видео и подписывайтесь на канал. Скоро там будет ещё больше интересных роликов про внутрянку IT.
👍8🔥3👏2
Что такое структурное программирование?

Эта методология предполагает последовательный рациональный подход к конструированию программ. Она появилась в 70х годах как попытка систематизировать процесс разработки. В основу лёг научный аппарат математической логики и теории доказательств.

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

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

2. Отказ от оператора безусловного перехода
Директивный оператор goto нарушает логику последовательного выполнения программы и может стать причиной серьёзных ошибок. Лучше отказаться от него в пользу простых структур выбора и управления итерациями if/then/else и do/while.

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

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

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

Будет интересно узнать ваше мнение, насколько формальная строгость и чистота важны для хорошего кода. Пишите в комментариях, какие принципы структурного программирования вы применяете на практике. Как относитесь в этой методологии?
👍7🔥53👎1😁1
Soft-skills: так ли они важны?
Да, конечно!
Умение контролировать свою работу, корректно разруливать рабочие проблемы, не подводить других и вежливо отстаивать свою позицию — вот что определяют профессионала, больше, чем технические навыки. Почему?
Хард-скиллы можно подтянуть на курсах или по книжкам, а вот софт-скилам нигде не учат, но от их наличия у сотрудника зависит качество работы всей команды.
По своему опыту скажу: мидла от джуна отличают не технические знания, а именно прокачанные софт-скилы.
Какие из них наиболее важны в IT?

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

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

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

Последовательность
По-другому можно назвать это умением выполнять обещания. Откажитесь от слов-паразитов: «подумаю», «попробуем», «может быть». Не уверен — не обещай. Обещал — выполняй.

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

Есть много материалов по деловому этикету, психологии и коучингу, которые в той или иной степени развивают софт-скилы. Но если резюмировать их, то большинство софт-скилов — это умение проявлять уважение к чужому труду и заботиться об окружающих. Суть всех советов — не вести себя высокомерно, быть открытым людям и уметь аргументированно отстаивать свою позицию.
Согласны с этим?
👍19🔥83🤡1
Как устроена мода на языки программирования?

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

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

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

В зависимости от того, что мы понимаем под модой, мы получим разные списки востребованных языков:
• самые востребованные языки у работодателей,
• самые популярные языки в сообществе разработчиков,
• языки, которые чаще других встречается в поисковых запросах.

Конечно, эти рейтинги будут в чём-то совпадать, но прямой корреляции между ними нет.

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

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

На мой взгляд, к рейтингам стоит относиться критически.

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

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

А что на ваш взгляд будет наиболее востребовано в ближайшие годы? Какой язык программирования посоветовали бы новичку для изучения?
👍8🔥4👏1😁1
Ты ведь станешь программистом? Правильные установки, которые помогли мне стать разработчиком

Эти установки помогли мне, когда я строил карьеру в IT. Уверен, они пригодятся и вам.

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

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

Фокусируйся на процессе, а не на цели. Научись наслаждаться процессом познания и созидания. Помни, что жизнь так же не имеет цели — это процесс.

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

Правильные установки — только первый шаг к успеху. За ними должны последовать правильные действия. Какие именно — я рассказываю в статье, которая вышла на VC и Хабре. Если тема интересна — переходите и читайте.

И делитесь в комментариях, какие установки помогают вам по жизни?
🔥10👍31
Стоит ли доверять моде на языки программирования?

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

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

Но не всё так однозначно: не всегда популярный язык = востребованность и высокая зарплата. Почему?

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

Кроме востребованности языка важно оценивать другие факторы:

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

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

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

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

Согласны с этим?

Ориентировались на рейтинги популярных языков, когда выбирали свою специализацию?
🔥16👍3👏3
Эти рекомендации я хотел бы дать самому себе в начале карьеры.
Наверняка они сохранили бы мне нервы и, возможно, ускорили профессиональный рост.
Если советы кажутся вам очевидными — так и есть. Большинство рабочих лайфхаков устроены довольно просто. Но от этого не теряют своей эффективности.

Критически оцени задачу прежде, чем приступать к её выполнению
Будь занудой, когда получаешь рабочее задание. Уточняй все детали и ограничения: сроки, с кем согласовывать, в каком виде сдавать работу.
Если условия позволяют, согласовывай промежуточный вариант решения с тем, кто будет принимать итоговую работу.
Так тебе не придётся переделывать работу по несколько раз.

Пиши понятный код
Эта привычка пригодится и на больших проектах и при индивидуальной работе. Она помогает максимально быстро разобраться в коде и тратить меньше времени на его отладку.
• максимально декомпозируй код: он станет более прозрачным и контролируемым;
• используй понятные имена переменных и функций: во многих компаниях есть готовые соглашения об именах и стандарты оформления кода. Если нет — вырабатывай свои или копируй чужие из открытых источников;
• оставляй комментарии к сложным и неочевидным решениям.

Позаботься об удобной рабочей среде
У каждого разработчика есть свой набор инструментов, чтобы писать, запускать и тестировать код. Как минимум это: среда разработки (IDE), средства локального развертывания (Docker Desktop, Minikube и т.д.), набор полезных скриптов.
Выбирай их осознанно и научись использовать все возможности этих инструментов. Так ты автоматизируешь рутинные задачи и сэкономишь уйму времени.

Главное — не язык, который ты знаешь, а объем задач, который способен решить
Подбирай учебные и рабочие проекты таким образом, чтобы расширять список и сложность своих задач. На них ты сможешь максимально быстро расти в профессии.

Единственно правильного пути не существует
Не пытайся сравнивать себя с другими: ты всегда будешь кому-то проигрывать. Лучше сфокусируйся на своих достижениях и тех шагах, которые помогут тебе стать круче.

Полагаю, что каждый опытный IT-джедай может дополнить этот список жизненной мудрости. Если ты — один из них, делись в комментариях, какой годный совет мог бы дать программисту-новичку.
👍13🔥8👏1
Человек-тульский пряник: идеальный кандидат в IT, какой он?
У эйчаров есть такое понятие: «портрет идеального кандидата». Это список качеств, которые напрямую не связаны с профессиональными компетенциями человека, но помогают ему хорошо адаптироваться в компании и стать эффективным специалистом.
Список таких качеств мало меняется не только от должности к должности, но даже от компании к компании. Правила игры у всех плюс-минус одни и те же.
За эти качества кандидату могут простить многое: и недостаток опыта, и не совсем подходящие компетенции. У меня самого так было. Видел, что человек сырой, но инициативный — и брал его. Каждый раз такой кандидат быстро нагонял недостающий опыт и вырастал в хорошего спеца.

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

1. Инициативность
Это показатель того, что человек любит выбранное дело и будет работать на совесть, а не из страха наказания.
Как проявляется на собеседовании?
• Широкий кругозор: человек знает больше, чем требует его специализация. Ему интересно разбираться в профессии и вникать в тонкости.
• У него есть проекты «для души»: например, учебные или экспериментальные работы, о которых он с увлечением рассказывает.
• Он сам активно задаёт вопросы про будущую работу и устройство процессов в компании.

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

3. Ориентация на интересы бизнеса
Она проявляется через неформальный подход к работе. Когда сотрудник не пытается сделать и забыть, а старается принести кому-то пользу.
Как проявляется на собеседовании?
• Человек задаёт дополнительные вопросы к тестовому заданию, чтобы лучше понять задачу и выявить её ограничения.
• Когда описывает предыдущий опыт, может объяснить, какую проблему решала его работа и как повлияла на конечный результат.

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

Это мой список качеств «идеального кандидата». Пока что он меня не подводил. Не важно, искал я работу сам или нанимал кого-то.
Подозреваю, что он неполный. Знаете другие важные качества идеального кандидата? Пишите о них в комментариях. А также делитесь, какие качества помогли вам устроиться на хорошую работу.
🔥8👍43👏1
В чём отличие джуна от синьора?
Для начала определимся, для чего вообще задают такой вопрос. Так мы сможем сформулировать информативный ответ.

Чтобы оценить себя внутри компании
Общих стандартов для отделения джунов от мидлов или сеньоров нет. Нет и смысла искать ответ в интернете. Об этом надо спрашивать своего тимлида или технического директора. Только его мнение будет иметь для вас смысл и ценность.
А что делать, если не согласен с тимлидом? Например, начальство только ругает и не замечает достижений?
Искать людей со стороны, которые могли бы дать независимую оценку: идти на собеседования или к карьерному консультанту. Но даже если правда за вами, и руководство вас действительно не ценит, проще уволиться, чем кого-то переубедить.

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

Чтобы составить свой трек развития
Вот здесь начинается содержательный разговор, который может дать конкретную пользу: понимание, к какой точке стоит стремиться и в какую сторону прикладывать усилия.
Для меня сеньор — это сочетание 4 ключевых факторов:
1. Время: не всякий программист с пятилетним опытом — сеньор. Но всякий сеньор должен иметь не меньше 5 лет работы за плечами. Нужно время, чтобы сформировать и автоматизировать навыки разработки.
2. Сложность и разнообразие проектов, в которых участвовал разработчик. Сеньору важно знать и применять на практике разнообразные алгоритмы и паттерны проектирования. На однотипных задачах можно стать опытным спецом в конкретной задаче. Но вырасти в того, кто принимает решения по архитектуре проекта, не получится.
3. На каких стадиях специалист подключился к работе: MVP, продакшен, сопровождение. Сеньор — тот, кто может провести проект через все стадии самостоятельно.
4. Уровень личного влияния на проект. Джун согласует свои решения с другими специалистами. Сеньор может принимать решения за себя и свою команду.

Как вырасти в сеньора?
Пробовать новое: искать интересные проекты,
подключаться к разным стадиям разработки, изучать и внедрять новые приёмы. И дать себе время. Время на рост, время на обучение, время на то, чтобы развиваться.

Согласны с этим?
Пишите в комментариях, как вы определяете, кто такой сеньор, и как им стать.
👍15🔥6👎1👏1🤡1
Сложность управления разработкой на крупных проектах растёт экспоненциально. Она становится серьёзной проблемой и требует нестандартных подходов в организации труда.
Традиционное объединение программистов по специализации вызывает взрывной рост бюрократизации и усложнение согласования любых решений.
Один из способов справиться с проблемой — использование потоковых команд.

Что это такое?
Потоковые команды предполагают объединение специалистов вокруг сквозных задач. Группы могут быть междисциплинарными и привлекать разработчиков с разной квалификацией. Всё зависит от поставленной цели.
Главные плюсы такого подхода — это мобильность и ориентация на интересы бизнеса. Дополнительный бонус — развитие компетенций участников команды за счёт знакомства со смежными направлениями.

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

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

Что стоит продумать заранее
Кто имеет право вносить изменения в код?
Есть два подхода к этому вопросу:
Сильное владение. Оно предполагает, что такое право есть только у команды, которая занимается разработкой кода. Это гарантирует его целостность и безопасность. Но может быть неудобным, если важна скорость.
Коллективное владение. Каждая команда может вносить изменения в общий код по мере необходимости. В данном случае требуется тщательная координация, чтобы команды не мешали друг другу.

Интересна эта тема? Переходите на мою подробную статью. Там я описал признаки, отличающие потоковую команду от традиционной. А также, какую роль играют технические средства в организации автономных рабочих групп.
👍71🔥1👏1
Как я открыл своё дело

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

Начнём с того, что мой бизнес возник стихийно. Он стал продолжением работы на фрилансе: один из проектов для европейского заказчика перерос в длительное сотрудничество. Было это в 2018 году. Наверно, с того момента и можно отсчитывать мой путь предпринимателя.

4 года фирма спокойно развивалась. Штат рос. Работы хватало всем.

Но самое интересное было впереди.

По понятным причинам после февраля 2022 года нам пришлось переориентироваться на отечественный рынок.

С чем мы столкнулись?

Наша специфика — это высоконагруженные системы. Малому и среднему бизнесу в России они не нужны.

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

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

У меня была команда профессионалов, уникальная экспертиза, умение и желание работать. Но этого оказалось мало.

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

Стресс от того, что я не мог планировать будущее фирмы на 4 месяца меня вымотал. Через 1,5 года, я понял, что полностью выгорел и занимаюсь не тем.

Не было такого момента, когда я сказал: «Стоп», — и распустил команду. Просто довёл до конца проекты, выполнил свои финансовые обязательства и не стал искать новых заказчиков. Сейчас могу сказать, что Solonkov.team официально завершила работу.

Жалею ли я об этом периоде жизни?

Нет. Он научил меня многому, что я не получил бы в найме.

Думаю, чтобы описать, что именно, нужен отдельный пост. Так что продолжению быть. Ждите вторую часть )
🔥20👍7
Что ещё, кроме денег, дал мне опыт предпринимательства?

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

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

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

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

Управление приоритетами
Это, наверное, самый сложный для меня урок. Долгое время я старался реагировать на все возможности, которые предоставляли обстоятельства.
Когда окончательно выгорел, понял: иногда нужно говорить «нет», чтобы не терять фокус на своих целях.

Навык признавать ошибки
Для тех, кто не любит ошибаться, бизнес не подходит. Здесь ты будешь делать это часто, по-крупному и в мелочах.
Я убеждён, что количество попыток уменьшает вероятность неудач. Чем больше разнообразных гипотез я отработаю, тем выше у меня шансы добиться успеха.

Я благодарен себе за то, что однажды решился открыть свою фирму. Бизнес сформировал меня как личность и профессионала.
А как вы относитесь к работе на себя?
👍11🔥4👏1
Стоит прочитать: Адитья Бхаргава «Грокаем алгоритмы»

Я уже рекомендовал эту книгу в списке базовой литературы для разработчика. Сегодня расскажу почему.

Те, кто только начинает изучать алгоритмы, часто совершают одну и ту же ошибку. Берутся сразу за фундаментальные академические труды и быстро теряют интерес к теме из-за сложного и сухого изложения. Так во всяком случае было у меня, когда я в первый раз открыл «Искусство программирования» Кнута.
Чтобы не застревать в начале обучения, в него надо «вкатываться» постепенно: от простого к сложному. И книга «Грокаем алгоритмы» идеально подходит для первого знакомства с темой.

В книге — 11 глав. Каждая содержит описание определёного типа алгоритмов. Для каждого типа есть иллюстрации, объясняющие на пальцах общий принцип работы, и примеры его реализации в коде. Примеры написаны на Питоне, но их легко понять, зная базовый синтаксис любого другого языка программирования.

«Грокаем алгоритмы» читается легко и не пугает сложными формулами. Но после неё основательные труды по алгоритмам заходят гораздо проще.

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

Освоили «Грокаем алгоритмы» и готовы двигаться дальше?
Стоит прочитать:

• Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн «Алгоритмы. Построение и анализ»,
• Н. Вирт «Алгоритмы и структуры данных»,
• Д. Кнут «Искусство программирования».

Наработать практику:
визуализация алгоритмов и структур данных
VisuAlgo
базы заданий
InterviewBit
LeetCode
CodeWars

Знаете другие хорошие ресурсы по алгоритмам? Делитесь в комментариях.
Что помогло вам изучить эту тему?
👍15🔥4
Почему не стоит бояться менять профессию?
Я не буду советовать смену профессии каждому, кто просто устал от своей работы. Сам в своё время переходил из сисадминов в программисты. Понимаю, как это трудно, особенно если уже есть финансовые обязательства и устоявшийся быт.
Такое решение должно учитывать все риски и последствия. Но есть 4 деструктивных страха, которые точно не стоит брать в расчёт.
Ко мне иногда обращаются люди, которые хотят перейти в IT из других профессий. Обычно у них присутствует как минимум один из них. И вот, что я им говорю:

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

Я не в том возрасте
Совру, если скажу, что дискриминации по возрасту нет. Многие руководители с опаской смотрят на кандидата, если он начинает свою карьеру после 30. Но это не повод отказываться от своей мечты, а причина тщательнее продумать самопрезентацию. В ней вы должны отработать возражения, связанные с возрастом.
Ещё одно решение — начинать свою карьеру на фрилансе. Здесь ваш возраст никого не волнует.

Страшно не найти работу

Если не получается совмещать старую работу и поиск новой, можно рассмотреть возможность фриланса или стажировки.
А чтобы в новой профессии не потерять в деньгах в начале пути, лучше заранее накопить финансовую «подушку». Она поможет продержаться, пока вы не начнёте нормально зарабатывать.

Что скажут люди?
Строить свою жизнь так, чтобы оправдать чьи-то ожидания — заранее проигрышная позиция: так невозможно стать счастливым. Настоящая зрелость начинается тогда, когда выбираешь заботу о себе, даже если кому-то это кажется нелепым.

Делитесь в комментариях, меняли когда-нибудь профессию? Какие страхи были у вас в тот момент, и как вы с ними справились?
👍10🔥4👏1
Про ЗОЖ и карьеру

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

Не зная причин, я пытался работать со следствиями.
Качественно изменить ситуацию я смог только тогда, когда перестал заниматься самолечением и обратился к врачу.
То, о чём я сейчас напишу, не реклама и не призыв всем повторять за мной. Но лично мне помог интегративный врач-нутрициолог, Анна Павлова. Она выяснила, каких именно микроэлементов мне не хватает, и рассказала, как их компенсировать.
С помощью питания и комплекса витаминов мы уже убрали проблему утомляемости. Без усилий ушёл лишний вес: организм компенсировал недостаток нужных веществ, и желание переедать исчезло.
Сейчас занимаемся моей спиной. Источник проблем с позвоночником был в том, что не хватало аминокислот для восстановления хрящевой ткани. В моём случае из-за повреждения межпозвонковых дисков нагрузка в зале не только не помогала, но и могла стать причиной ещё больших проблем.
Поставил задачу на будущее — укрепить иммунитет и вылечить аллергию.

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

Согласны?
Пишите в комментариях, пользовались ли вы услугами наставников. Считаете ли эту практику эффективной?
👍8🔥3
Как подготовиться к собеседованию в IT
Каждое собеседование в IT уникально.
Понять по описанию вакансии, что ждёт на живой встрече, невозможно. Но можно спрогнозировать тип проверки, исходя из разновидности фирмы.

Крупные корпорации

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

Аутсорсинговое агентство
Тип проверки: поиск алмаза в бурной реке.
Здесь нужны те, кого можно продать быстро и дорого. А для этого кандидат должен хорошо владеть стеком востребованных технологий в своей сфере.
На собеседовании могут для порядка спросить пару алгоритмических задач, но основное внимание уделят знанию фреймворков и библиотек.
Что повторять? Документацию языка, фреймворков и методы библиотек.

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

Мотивационный вывод в конце
Если вы не подошли какой-то конкретной компании — это не показатель вашей некомпетентности. Это просто не ваш тип. Наверняка где-то есть команда, для которой именно вы будете идеальным кандидатом.
👍1110👏1
Почему сложно изучать новое?

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


Что с этим делать?

Просто смириться и не стараться запомнить всё разом: прочитать, посмотреть, несколько раз повторить, опять посмотреть и попрактиковаться.
И при этом дробить большой материал на маленькие части.


Какие ошибки лучше не допускать?

Зубрёжка
Механическое запоминание даёт краткосрочный результат, т. к. не формирует ассоциативных связей в памяти.

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

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


Что может быть сложнее, чем учить новую информацию?

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

Научить другого
Не обязательно быть гуру в теме. Как только что-то поняли — поделитесь этим знанием с миром. Это помогает лучше запомнить материал и даёт положительное подкрепление: чувствуешь, что делаешь что-то важное и нужное для другого.

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


А вы любите учиться? Делитесь в комментариях, что вам даёт мотивацию изучать новое?
7👍3🔥2
Как это работает? Алгоритм быстрой сортировки

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

Алгоритм быстрой сортировки или алгоритм Хоара — один из самых эффективных способов распределить данные в порядке убывания или возрастания.

Как он устроен?
1. Все значения сравниваются с опорным элементом из массива. Как его выбрать — расскажу ниже.
2. Значения меньше опорного попадают в первый подмассив, значения больше либо равные — во второй.
3. Для первого и второго подмассивов назначается новый опорный элемент и алгоритм сортировки повторяется в каждом из них.
4. Алгоритм заканчивает работу, когда в каждом из подмассивов останется только один элемент.
На иллюстрации видно, как работает быстрая сортировка. Синяя линия обозначает высоту опорного элемента. Серый фон — зону, где сейчас работает алгоритм.

Проблемы

Легко заметить, что в основе алгоритма лежит рекурсия. При большом количестве шагов она потребует много памяти. Поэтому при использовании сортировки важно оптимизировать количество операций. Как?
Благодаря выбору опорного элемента.
В идеальной ситуации опорный элемент должен разделить данные в массиве на два равных блока. Так в каждом из них не будет возникать длинных цепочек рекурсии. При самом негативном сценарии в одном из блоков окажется один элемент, а в другом — все остальные. Этот шаг не повысит упорядоченности данных, но создаст дополнительный шаг рекурсии. Такое случается, если опорный элемент принимает самое большое или самое маленькое значение в выборке.
Грамотный выбор опорного элемента может сильно повлиять на эффективность алгоритма. В общем случае есть 3 пути выбора:
• крайний элемент в массиве,
• элемент из середины,
• медианный по значению элемент.

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

А вы используете быструю сортировку? Делитесь опытом в комментариях.
👍13🔥1