IT-индустрия обширна. Однажды каждому из нас приходится выбирать, во что вложить своё время: развиваться только в одном направлении или поверхностно изучить множество технологий? Чтобы попытаться найти ответ на этот вопрос, Кевин О’Шонесси обратился к тем, кого считают лучшими в сфере информационных технологий.
Герои
Скотт Аллен
Скотт Аллен — .NET разработчик ПО с 25-летним стажем.
Основатель блога Ode to Code. Технический директор компании Medisolv, разрабатывающей программные продукты для медицинских учреждений.
Работал над самыми разными проектами, начиная от создания программных систем для устройств с 8-битным экраном и заканчивая крупными веб-сайтами. Разрабатывал веб-службы для компаний из списка Fortune 500, занимался прошивками для технологий стартап-проектов.
С 2001 года Скотт сосредоточил своё внимание на серверных и интернет-технологиях, выступал на национальных конференциях, таких как VSLive.
В 2005 году получил сертификат Microsoft MVP, написал несколько книг по веб-разработке, записал множество курсов на Pluralsight.
Марк Зееман
Марк Зееман — программист из Дании.
Занимается функциональным и объектно-ориентированным программированием, разрабатывает ПО.
Автор книги «Dependency Injection in .NET», создатель восьми обучающих курсов на Pluralsight, активный пользователь GitHub и Stack Overflow.
Внёс вклад в разработку известных средств автоматического тестирования, таких как AutoFixture и XUnit.
Джули Лерман
Джули Лерман — программист и преподаватель с более чем 25-летним стажем. Является ведущим экспертом Entity Framework.
Автор трёх книг по Entity Framework, включая «Code First» и «DbContext».
Обладает сертификатами Microsoft MVP, ASPInsider, выступает на конференциях по всему миру. С 2010 года ведёт колонку в журнале MSDN Magazine Data Points. Автор 15 курсов на Pluralsight.
Кайл Симпсон
Кайл Симпсон — заведующий учебным процессом MakerSquare из Техаса. Называет себя «миссионером открытого Интернета». Неравнодушен ко всему, что касается JavaScript.
Написал 8 книг, 6 из которых входят в серию «You Don’t Know JS».
Кайл преподаёт JavaScript. Записи с его уроков выкладываются на Front End Masters.
Активный пользователь GitHub, часто выступает на публике.
Трой Хант
Обладатель сертификата Microsoft Developer Security MVP, ASPInsider. Автор курсов на Pluralsight.
Занимался обеспечением безопасности для веб-сайтов с первых дней появления Интернета.
Запустил сервис «Have I been pwned?», который собирает информацию по массовым взломам и позволяет людям проверить, насколько надежен их пароль.
Автор электронной книги «OWASP Top 10 for .NET Developers» и создатель автоматического анализатора безопасности для вебсайтов, созданных на ASP.NET.
Регулярно обновляет свой блог, частый гость на IT-конференциях.
Орен Эйни (также известный как Ayende Rahien)
Независимый консультант из Израиля. Системный архитектор. Пропагандирует разработку качественного ПО и «zero-friction development», что означает «разработка без несовместимостей».
Орен — основатель Rhino Mocks и Raven DB. Внёс вклад в разработку многих проектов с открытым кодом, включая такие, как Castle Project и NHibernate.
Всемирно известный ведущий конференций No SQL, Exchange, DevTeach и Oredev.
Автор книги «DSLs in Boo» под псевдонимом Ayende Rahien.
Кори Хауз
Основатель Bitnative — сервиса по консультированию, обучению и разработке ПО, расположенному в Канзасе. Автор курсов на Pluralsight, обладает сертификатом Microsoft MVP.
Имеет 15-летний опыт разработки ПО.
Обучает разработчиков по всему миру чистому коду, архитектуре и разработке. Выступает на конференциях.
Вопросы
Каждый из героев ответил на 8 вопросов о секретах успеха в карьере программиста.
Вы предпочитаете изучать то, что требует работа или то, что хотите сами?
Скотт: Главным образом изучаю новое по запросам клиентов. Я 15 лет работаю в компании, поставляющей ПО для медицинских учреждений.
Для хранения информации я по привычке использовал сервера SQL, хоть и слышал о NoSQL и специальных базах данных для документации. Чтобы понять, в чём их преимущество, я начал знакомство с MongoDB. Для меня это было не столь интересно, но всё же я изучал механизм работы и нюансы хранения документов. Я хотел облегчить работу с данными пациентов и с уверенностью внедрить технологию в проекты Medisolv. Чтобы ввести всю медицинскую информацию об одном пациенте, требуется 20-25 отношений в реляционной БД, а в базе документов — один запрос.
Кайл: Мне глубоко интересны все вещи, которыми я занимаюсь. Однако мой интерес направлен скорее на то, как обучить этому других — я изучаю, чтобы затем преподавать. Две стороны одной медали.
Джули: И то, и другое. Я работаю на себя, поэтому могу заниматься тем, чем хочется. Я часто иду сложными путями и впоследствии стараюсь делиться полученным опытом с другими, чтобы облегчить для них путь.
Орен: Совмещаю. С этим мне повезло — большая часть того, чем я занимаюсь по работе, мне интересна.
Трой: Все мы стремимся балансировать в этом вопросе: делать то, что интересно. У меня это не всегда получается. Лично мне трудно справиться с задачами, которые сами по себе не представляют для меня особого интереса. К счастью, сейчас я независимый разработчик и совмещаю хобби с работой.
Кори: Моя профессия требует постоянного обучения. Если я чувствую, что это больше не увлекает меня, то понимаю: время двигаться дальше. Я всегда по максимуму использую свои знания, так что если я изучаю что-то чисто по работе, то пишу об этом в блоге, рассказываю на конференциях, консультирую, составляю курсы на Pluralsight.
Мне очень нравится позиция Чарльза Макса Вуда: «Хотите заработать тысячу долларов прямо сегодня? Тогда консультируйте 6 с половиной часов за 150 долларов в час или... продайте то, что вы уже сделали, но по-другому»
Марк: Это менялось по ходу моей карьеры. Когда я был новичком, то был погружен в то, что требовала текущая работа. Я начал с книги Sam’s Teach Yourself C++ in 21 Days. Было множество проб и ошибок, и даже 100-часовые рабочие недели!
Затем я работал в консалтинге Microsoft, консультировал людей по новым технологиям. Однажды мне довелось побыть в роли эксперта по первой бета-версии WinWF.
Все понимали, что у меня не могло быть многолетнего опыта работы с этой программой. Но я все равно должен был разбираться в ней гораздо лучше, чем клиенты, иначе я не оправдал бы ранг эксперта, которым наделила меня Microsoft. Тогда я научился быстро осваивать новые технологии.
Иногда у меня были считанные недели на изучение новейшей разработки наперегонки с клиентами. Моей единственной форой было то, что они параллельно занимаются другими проектами, а я мог сосредоточиться на одном.
После того, как я ушел оттуда, в моей голове многое изменилось. Хотя я и снова занимаюсь консалтингом, но теперь я стремлюсь только к знаниям, которые полезны и интересны лично мне.
В каком из направлений Вы считаете себя экспертом?
Скотт: Веб-разработка. 90% проектов, над которыми я работал, так или иначе затрагивали веб.
Кайл: Моё знание JS и навыки его преподавания. Однако самым важным моим вкладом в сообщество я считаю свой подход к изучению — более глубокий и осмысленный, чем у большинства разработчиков. Я поднимаю вопросы, о которых не принято говорить, и не боюсь высказывать мнение, отличное от мнения большинства.
Я считаю, что прогресс случается тогда, когда люди перестают молчать и соглашаться со всем подряд, когда люди начинают сомневаться и смотреть на всё с другой точки зрения.
Джули: Back-end разработка и архитектура ПО.
Орен: Благодаря обширным знаниям основ я могу проникнуться любыми новыми технологиями. Заметьте: обширным, но не глубоким.
Для примера: я понимаю, как работает менеджер памяти, но не смог бы исправить в нём баг. Понимаю TCP/IP, но для работы с Wireshark мне бы потребовался мануал.
Но эти начальные знания оказываются крайне полезны, когда нужно изучить какую-либо технологию глубже.
Трой: В индустрии я известен благодаря работе над Azure и в сфере информационной безопасности, но лично я считаю, что моя самая сильная сторона — «соединение» людей с технологиями, и это намного важнее, чем что-либо ещё.
Кори: Мой главный интерес направлен на разработку веб-приложений. Специализируюсь я на front-end’е, хотя и могу назвать себя full-stack разработчиком. Несмотря на всё это, считаю, что моя самая сильная сторона — контекстный анализ. Я верю в чистый код, автоматическое тестирование, разработку сверху-вниз, SOLID-принципы и так далее. Все эти вещи оказываются уместными в подходящих ситуациях. Люди возводят всё в абсолют, эксперты — анализируют ситуацию.
Джефф Этвуд отлично высказался на эту тему: «Быть экспертом означает вникать в проблемы и предлагать решения, основанные на своём опыте, а не просто делиться знаниями».
Как архитектор ПО и IT-консультант, я провожу много времени, задавая клиентам вопросы по проблеме. Я вникаю в ситуацию. На практически любое обращение можно ответить: «Зависит от...».
Марк: Во всех своих проектах я всегда стремился и стремлюсь к качеству и устойчивости кода.
«Любой дурак напишет код, который поймёт машина. Хороший программист пишет код, который поймёт человек», – Мартин Фаулер
Как и любой новичок, в начале своей карьеры я писал абсолютно нечитаемый код. Первая техника, которую я освоил — разработка через тестирование. Далее я научился использовать внедрение зависимостей для разделения задач.
Позднее я обнаружил, что автоматическое тестирование — лишь одна из методик повышения устойчивости кода.
Я много думал о том, как же разделить сложность задачи. Вместо того, чтобы писать тесты, возможно, стоит избавиться от них совсем?
Недавно я рассуждал, как обойтись без таких штук, как goto, null, мутация, наследование и так далее. Это довольно широкая тема для обсуждения.
Я считаю, что при решении задач не нужно полагаться на ORM, DI-контейнеры, CI-сервера, виртуальные машины. Вместо них следует изменить постановку задачи.
Некоторые проблемы можно решить, просто выбрав правильную архитектуру.
Иногда сложных задач не избежать, но есть много способов существенно облегчить их. Как писал Фред Букс в своей книге «The Mythical Man-month»: есть неизбежные сложности, а есть те, которые можно обойти. Моя сильная сторона в предотвращении вторых.
Какими направлениями Вы осознанно никогда не занимались?
Скотт: Иногда моя область знаний страдала из-за того, что я главным образом концентрировался не на разработке, а на технологиях. Область знаний чрезвычайно важна для нас — разработчик, который разграничивает её, более продуктивен и лучше может предсказать изменения в своей сфере. Это отличная методика.
Кайл: Я не изучаю новые фреймворки, методы тестирования и инструменты. У меня нет на них ни времени, ни места в голове.
Сейчас я предпочел как можно тщательнее изучить традиционный JS, а двинусь к новым технологиям лишь тогда, когда почувствую, что достаточно знаю JS. Спустя годы я до сих пор чувствую себя новичком.
Джули: Я стараюсь не углубляться сильно в front-end, но часто приходится. А потом я долгое время не пользуюсь этими инструментами и приходится изучать их заново.
Орен: Я никогда не ладил с пользовательскими интерфейсами. В последние годы я старательно избегал любой работы по front-end’у, то есть разработке пользовательского интерфейса.
Front-end’ом нужно заниматься направленно, а на это у меня просто не хватает времени. Но я согласен с тем, что, если бы знал принципы работы пользовательского интерфейса, мне было бы легче исправлять связанные с ним ошибки.
Трой: Всегда тяжело определиться, какие направления нужно отбросить. Хороший пример из моей жизни — работа с LAMP-стеком. LAMP-стек — набор инструментов для размещения динамических веб-сайтов и веб-приложений: ОС Linux, веб-сервер Apache, СУБД MariaDB или MySQL, язык программирования PHP. Я долгое время полностью посвящал себя работе с LAMP, но сейчас бросил эту затею, пусть это и важная технология. Просто есть много других вещей, которые я должен освоить: Microsoft BITS, *nix, PHP.
Кори: В последние годы я сосредоточился на JS, следил за новейшими технологиями в Front-end’е и стал чувствовать себя увереннее с основными фреймворками и библиотеками. Но я игнорировал интересные новинки касательно NoSQL, взаимодействия между разработчиками (например, Docker), функциональные языки — F# и Haskell.
Сложно намеренно не заниматься такими интересными штуками, но приходится себя ограничивать.
«Различия между успешными людьми и по-настоящему успешными в том, что по-настоящему успешные практически всегда отвечают “нет„», – Уоррен Баффетт
Марк: В настоящее время я избегаю JavaScript. То есть, не занимаюсь Front-end’ом.
Я также избегаю программирования железа, машинного обучения, геймдева. Все эти сферы довольно интересны для меня, но даже если я не затрону их, то всё равно умру счастливым человеком.
Разработка ПО — настолько широкое направление, что и в нём есть вещи, которых я ещё вообще не касался.
Чем Вам хотелось бы заняться в дальнейшем?
Скотт: Создать концепт гибкого многоуровневого облачного хранилища. Я раньше создавал гибкие сайты, но сейчас заинтересован в алгоритмической обработке Больших Данных.
Кайл: Сейчас мой взгляд в области JS направлен на продвинутые асинхронные паттерны, например, React.JS и CSP. В области практики — на реальном применении основ функционального программирования. Я пытаюсь понять, как эффективнее всего изучать функциональное программирование без использования таких понятий, как монада и функтор.
Джули: Недавно я углубилась в Aurelia — это клиент для JS наподобие AngularJS, но я могу резко переключить свой интерес на что-то другое. Господи, сколько же интересных вещей на уме у моих друзей-гиков — NoSQL , Docker, Node. Кто знает, куда дальше меня приведёт мой разум.
Орен: Какое интересное выражение — хотелось бы! Есть вещи, про которые мне бы хотелось узнать побольше, но они не вызывают у меня интереса как такового. Например, сборка — хорошо бы узнать об этом побольше, но это просто неинтересно, и я могу обойтись и без этого.
Но с другой стороны, находить новые алгоритмы и способы делать что-либо — всегда захватывающе. Я слежу за новинками в индустрии и частенько нахожу действительно интересные вещи.
Трой: Подучу Microsoft Power BI — набор средств для аналитики, в том числе и для аналитики логики приложений. По работе требуется.
Кори: Недавно закончил запись курса по React.JS и архитектуре Flux. Есть много реализаций Flux, с которыми я хочу познакомиться поближе. Также заинтересован в Redux.
Марк: Сейчас я развиваюсь в направлении функционального программирования.
Я постоянно стараюсь расширять горизонты своих знаний и на данный момент занимаюсь распределенными отказоустойчивыми системами на Erlang.
Ещё интересно логическое программирование. Современные диалекты LISP просто прекрасны — например, Clojure.
Вы предпочитаете изучать новое или больше практиковаться в уже изученном?
Скотт: Изучать новое.
Веб-разработка сейчас переживает кризис — адаптируется к W3C. Всё направлено на создание хороших API и платформ для работы с клиентами. Back-end и enterprise-разработка угасли. Однако жизнь циклична, и нам остается лишь ждать, пока всё перевернется с ног на голову.
Кайл: Определенно я выберу углубиться в JS — это моя главная цель на протяжении многих лет. Но я считаю, что для разработчика очень полезно чередовать периоды развития вглубь и вширь, чередовать глубокое и направленное обучение с разнонаправленными экспериментами.
Большая часть крутых изобретений появились благодаря тому, что кто-то умный решил выйти из своей зоны комфорта
Джули: И так, и так! Я уделяю очень много внимания вещам, которые нужны мне по работе, но и стараюсь хотя бы быть в курсе о новых и классических технологиях. Это очень важно для разработчика.
Благодаря такому подходу я могу заниматься консалтингом. Даже если не смогу сказать, как сделать что-либо на техническом уровне, я минимум всегда могу предложить идею.
Орен: Я изучаю новые вещи, но таким образом, чтобы наверняка использовать их в своей работе, а не просто выучить и забыть.
Трой: Разработчик должен расширять кругозор и вглубь, и вширь. В IT нельзя топтаться на одном месте — индустрия слишком быстро развивается. Кроме того, чем шире Ваш кругозор, тем больше у Вас возможностей!
Кори: В последнее время я изучаю новое, но эти знания могут очень быстро улетучиться, если не использовать их.
Я придерживаюсь правила Кэти Сиерры: «Изучай то, что необходимо, а не то, что возможно пригодится». Частенько изученное «на всякий случай» так и не находит применения. Так что я предпочитаю концентрироваться на основах, а не на вспомогательных технологиях, которые могут и не понадобиться.
Поэтому последние мои прочитанные книги именно об основах.
Марк: В 2010 я получил работу мечты: лид для Копенгагенского партнера Microsoft по технологии Azure. Мы занимались в основном исследованиями и разработкой, публиковали различные материалы, не особо заморачивались насчёт прибыли.
После нескольких месяцев я осознал, что мне не хватает энтузиазма, чтобы вникнуть во все рутинные детали Azure. Это меня обескуражило, ведь я всегда махом осваивал новые технологии.
Однажды я читал документацию для новой функции и понял: я уже видел подобные программы. Я знаю, как это работает на уровне концепта.
Больше у меня не было никакого желания разбираться в деталях. Я занимался этим столько времени, что все паттерны уже сами собой формировались в моей голове.
Говорят, что дьявол в деталях, но я больше не чувствовал нужды понимать всё с самых низов. Это стало переломным моментом в моем подходе к обучению. С тех пор я предпочитаю развиваться вширь.
Конечно, я не считаю потраченными впустую годы изучения .NET. Фундамент необходим для специалиста.
Насколько важно занять свою нишу?
Скотт: Для IT-консультанта найти свою нишу важно в начале карьеры. Клиентам будет легче найти Вас, так как они будут понимать Вашу специализацию. Но после того, как Вы сделаете себе имя, ниша будет только ограничивать потенциал.
Кайл: Погрузиться с головой в тему, которая тебе интересна, очень важно. А если она ещё и актуальна, можно кучу денег заработать, при этом не сосредотачиваясь на них.
Я считаю, что на Github много хороших проектов получают меньше 10 звезд, и из-за этого просто остаются без внимания. Многие из нас избегают выходить за пределы мейнстрима, боясь навредить своей карьере. Столько потенциальных проектов загублено из-за этого!
Ниша выручает, когда теряешь энтузиазм. Благодаря ей начинаешь видеть реальную важность проекта
Джули: Конечно, ниша — это благо, но она может доставить проблем. У меня 30-летний опыт в вещах намного глубже, чем синтаксис, а мне приходится консультировать людей, как написать запрос на LINQ.
Орен: С одной стороны, за всеми трендами не угонишься — лучше быть экспертом в своей области. С другой, ограничивать себя ещё хуже. Нельзя же быть тем самым человеком, у которого в руках лишь один инструмент?
Трой: Я считаю, выгоднее всего располагать широкими знаниями, но при этом специализироваться в одном направлении. Это направление и есть ниша. Благодаря такому подходу я работаю с широким спектром технологий, при этом будучи тем самым экспертом предметной области, который так часто необходим. Хороший пример — мои курсы на Pluralsight. В них я вложил не только свой глубокий опыт касаемо веб-безопасности, но и широкие познания в смежных технологиях. Благодаря этому курсы получились довольно неплохими.
Кори: Очевидно, знать и уметь всё необходимо, если хочешь создавать полноценные проекты. Но если хочешь разделить нагрузку, следует демонстрировать навыки избирательно. Хорошая новость в том, что нишу можно поменять, если захочется. За эти годы я менял нишу несколько раз.
Марк: Ниша полезна в плане продвижения.
Я считаю, что на деле для решения сложной задачи необходима команда, в которой должны быть как общие, так и узкие специалисты. Навыки каждого из них помогут привести проект к успеху.
Сложно стать известным, будучи общим специалистом. Чтобы успешно продавать себя, нужно иметь нишу
Способность продавать себя — важное умение как для независимых консультантов, как я, так и для сотрудников компании — чтобы получить нужное признание, надо правильно позиционировать себя.
Вообще говоря, ниша может и ограничивать тебя.
Когда я написал книгу про внедрение зависимостей, люди знали меня как эксперта по внедрению зависимостей. Это неплохо, но сейчас, например, я углубился в функциональное программирование и F#, а на мне до сих пор висит тот ярлык.
Подводя итоги, скажу, что иметь нишу важно, но также важно не зацикливаться на ней.
Что заставляет Вас совершенствоваться?
Скотт: Для меня разработка — это искусство. Я всегда с интересом наблюдаю, как другие люди подходят к решению проблемы. А эта эйфория момента «Эврика!»
Кайл: Каждая строчка нашего кода обучает. Я постоянно развиваюсь в том, как лучше передать информацию через свой код. Когда я могу объяснить идею через сам код, я чувствую, что полностью его понимаю.
Код практически невозможно написать настолько же хорошо, насколько хорошо Ваше собственное понимание его идеи, поэтому я стараюсь в этом совершенствоваться — чтобы другие люди могли понимать мой код хотя бы примерно столько же, сколько и я.
Это и делает работу разработчика столь интересной, иначе я бы уже давно потерял энтузиазм.
Джули: Постоянный поток новых идей и технологий. Сложно удержаться от постоянного изучения — всё это так завораживает. Даже не очень новые технологии бывают открытием: когда я узнала о проблемно-ориентированном проектировании, моё восприятие задачи и её решения полностью изменилось. Я думаю, это и подстёгивает меня совершенствоваться.
Орен: Это просто интересно. Мне нравится заниматься разработкой. Для меня весело узнавать новое.
Трой: Во-первых, любопытно узнать, как всё работает. Во-вторых, желание совершенствовать уже созданное. В-третьих, создавать нечто такое, что приносит реальную пользу людям.
Кори: Страсть к изучению. У Вас всегда будет преимущество, если Вы любите учиться.
Марк: Я получаю удовольствие от этого. Мне всегда было ужасно интересно, как работают эти вещи, и я просто изучал и изучал. Мне нравится это чувство, когда ощущаешь, как что-то в твоей голове меняется, так что я всегда в поиске новых знаний.
Кто является источником вдохновения для Вас?
Скотт: Дон Бокс. Он хорош и как оратор, и как автор книг. Его книги — концентрированный смысл. Мне нравится вдруг осознавать, что я где-то скопировал стиль Дона, потому что у него есть некий талант разделять сложное на простое, а затем освещать остальные аспекты технологии, не теряя из виду суть. Я научился у него не только технологиям, но и методу преподавания.
Кайл: Аллен Вирфс-Брок, участник TC-39 и идеолог ES6. Каждый раз, когда я с ним разговариваю, я узнаю даже больше, чем сам сразу могу осознать.
Орен: Майкл Физерс. Он вдохновил меня на Rhino Mocks.
Трой: Не очень оригинально, но Билл Гейтс. Многое из того, что он сделал, откликается во мне. Начиная с того, как он с ранних лет взламывал программы и вылетел из университета, и заканчивая его мгновенным успехом. В последнее время он занимается благотворительной деятельностью.
Кори: Роберт Мартин. Замечательный разработчик, писатель и оратор. Редко в одном человеке сочетается столько талантов. Кроме того, он ещё и отличный парень. Одним из самых ярких моментов в моей карьере была беседа с дядюшкой Робом (его псевдоним) на конференции.
Марк: С недавних пор я подумываю начать кампанию по номинации Роберта Мартина на премию Тьюринга.
Просто неоценима его работа по описанию и систематизации принципов ООП и чистого кода, пропаганда метода разработки через тестирование. Он заслуживает признания, даже если эти идеи принадлежат не только ему. Например, он сделал принцип подстановки Барбары Лисков более доступным для изучения «обычным смертным» программистам.
Я многому научился также у Мартина Фаулера и Кента Бека, но Роберт для меня — герой.
Кевин: Роберт Мартин. До того, как я прочитал о чистом коде и Agile PPP, я считал себя профессионалом, хотя даже не понимал значения этого слова. Благодаря Роберту я круто продвинулся в карьере. Кто знает, возможно, если бы не он, я до сих пор был бы джуниором.
Манифест гибкой разработки программного обеспечения стал переломным моментом в индустрии. Уже упоминали Бека, Фаулера и Физерса. Ещё меня многому научили Дейв Томас, Уорд Каннингем и Алистер Кокберн.
Выводы
Универсального рецепта успеха в сфере IT не существует.
Исследовать вширь или вглубь — решать Вам. Некоторые предпочитают углубиться в один из языков программирования, другие осваивают всё больше новых.
Работать на низком или высоком уровне — решать тоже Вам. Большинство из опрошенных автором разработчиков занимаются разработкой на высоком уровне.
Ниша может как привести к успеху, так и существенно ограничить кругозор. Кто-то концентрирует внимание на одном из направлений, кто-то же, напротив, стремится к более общим знаниям.
Перевод и адаптация: Инна Рафикова, редакция Include
Оригинал материала: OutlierDeveloper
Фотография обложки: Pixabay , CC0