Как найти возможности и максимизировать прибыль

В 1920 году среднее количество лет, которое люди тратили на формальное образование в США, составляло 8,5 лет. Это число увеличилось на 62% в 2020 году до 13,8 лет. Однако за те же 100 лет ожидаемая продолжительность жизни населения США увеличилась всего на 41%. Если учеба — это страдание, то, к сожалению, увеличение продолжительности нашей жизни не соответствует инфляции знаний.

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

На сегодняшний день существует более 100 фреймворков JavaScript, и каждый год создается несколько новых. Если изучение одной из них займет в среднем неделю, мы навсегда застрянем в режиме обучения. Когда мы сможем быть готовы к реальной работе?

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

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

1. Превратите пассивное обучение в создание фантазий

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

Сначала поймите целевую проблему, а затем спросите: учитывая мои текущие знания в предметной области, как бы я выработал решение?

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

Возьмем в качестве примера tRPC:

💡 Проблема, которую необходимо решить
Вызовы API должны ощущаться как обычные вызовы методов при разработке веб-приложений с помощью TypeScript.

Я: Хорошо, а как насчет анализа серверной части? подпрограммы во время сборки и создание клиентского кода для обработки сетевых запросов?

Создатель: Генерация кода замедляет итерационный цикл разработчика. Так как в новых фреймворках внешний и внутренний код часто находятся в одном и том же проекте; должен быть шанс «обмануть» через обмен типами между ними.

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

⏳ …

Я: Я думаю, что это должно работать для части набора текста на стороне клиента, поэтому автозаполнение и т. д. будут отлично работать в IDE. Для реализации среды выполнения, поскольку нет генерации кода, возможно, использование Proxy может быть чистым решением?

Создатель: Да, я тоже решил это сделать.

Я : Круто, клиентские нужды решены. Как насчет рендеринга на стороне сервера? Нужно ли нести сетевые расходы?

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

2. Никогда не пропускайте основы при работе с новым доменом

Я видел людей, пытающихся изучить React.js, не имея четкого представления о JavaScript. Это просто против физики. Сегодня разработка программного обеспечения представляет собой обширную область, содержащую множество глубоких разрозненных хранилищ. При входе в новый бункер заманчиво начать с современных инструментов, предназначенных для повышения эффективности разработки, без необходимого охвата основ.

Проблема в том, что то, что лежит на поверхности (новые инструменты, фреймворки, паттерны), больше похоже на моду — они меняются от сезона к сезону. Единственные постоянные вещи — это фундаментальные «примитивы» в домене. Для фронтенд-разработки это обычный HTML/CSS/Javascript. Для разработки баз данных это SQL. Для машинного обучения это линейная алгебра/исчисление/статистика.

Я понимаю, что сегодня никто не создает пользовательский интерфейс с ванильным Javascript; все меньше и меньше людей пишут чистый SQL в своем бэкенд-коде; модели можно обучить с помощью нескольких строк кода. Но понимание этих примитивов позволяет легко адаптироваться ко всему, что меняется на поверхности. Без этого все выглядит хаотично и трудно понять.

3. Одна трудная проблема из реальной жизни стоит 1000 уроков

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

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

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

4. Возможности в разных средах: большие и маленькие

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

Большие организации неизбежно бюрократичны, независимо от того, какая у них культура. Они предлагают привлекательные льготы — например, обучающие курсы (часто довольно дорогие), наставничество, организованное HR, модели систематического карьерного роста и т. д. К сожалению, я почти не нашел ничего из этого полезным. Что действительно помогло, так это то, что при наличии устоявшейся бизнес-модели и большого денежного потока компании могли позволить себе роскошь «инженерного совершенства». Как разработчик, вы можете потратить много времени на итерацию своего проекта с коллегами или супервайзером, на тщательную проверку кода, достаточное количество документации, строгое отслеживание покрытия тестами и рефакторинг кода до того, как он станет слишком уродливым. Такое непрерывное обучение на рабочем месте вырабатывает у вас привычку тщательно думать, прежде чем действовать, и всегда создавать качественный дизайн и код.

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

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

5. Какой вид наставничества действительно работает?

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

Хорошее наставничество, скорее всего, должно обладать некоторыми из следующих качеств:

  • Наставник работает в области, тесно связанной с вашей. Это не позволяет вашим разговорам плавать на абстрактном высоком уровне, тратя время на вас обоих.
  • Вы можете наблюдать, как он/она работает.Люди критикуют Джека Уэлча за то, что в его книгах так много идей, а некоторые из них противоречивы. Чтобы учиться у него, вы должны наблюдать за тем, что он на самом деле делает. Джек не собирался сбивать людей с толку; просто человеческие мысли изменчивы, а их творчество является более верным отражением его истинного таланта.
  • Вы можете подробно обсудить с ним/ней конкретные проблемы — хотя цель наставничества не в решении конкретных проблем, вы только получаете возможность увидеть, как ход их мыслей отличается от вашего и получить настоящие искры, которые вы хотите от наставничества, когда у вас есть хорошо сфокусированный и ощутимый разговор

6. Используйте дополнительные возможности для расширения своих знаний

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

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

  • Впервые я изучил Python, когда возникла необходимость внедрить специальный поисковый робот для проекта. Позже он превратился в активно поддерживаемую платформу.
  • Я изучил Clojure, чтобы реализовать плагин для Metabase (инструмент, который моя бывшая компания использовала для создания бизнес-панелей). Я, вероятно, никогда больше не буду использовать этот язык в будущем, но изучение функционального программирования было забавным и поучительным.
  • Я построил свою первую модель машинного обучения, пытаясь выявить аномалии в операционных показателях, генерируемых нашим продуктом SaaS.

Тем не менее, трудно найти такую ​​возможность? Рассмотрите возможность создания или участия в проекте OSS!

7. Участие в бизнес-стороне развивает ваше техническое видение

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

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

  • Тонкая бизнес-логика.
  • Бесконечные настройки в требованиях.
  • Казалось бы, случайные шаги, которые делает ваш генеральный директор.

Хороший архитектор, помимо того, что способен управлять техническими направлениями продукта, также хорош в реализации прагматичных решений для бизнеса и всегда готов к будущему продукта. Откуда такое «видение»? Активно участвуя в бизнес-мероприятиях: проверяя отзывы пользователей, встречаясь с клиентами, анализируя бизнес-результаты, решая проблемы отделов продаж/маркетинга и т. д.

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

Вы должны любить то, что делаете

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

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

Какой бы профессией вы, наконец, ни овладели, получайте удовольствие от обучения на протяжении всей жизни!

Want to Connect?

I'm the creator of ZenStack, a toolkit that supercharges
Prisma ORM with a powerful access control layer and
unleashes its full potential for full-stack development.
Our goal is to let you save time writing boilerplate code
and focus on building what matters - the user experience.