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

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

Это заставляет меня думать о UFC (Ultimate Fighting Championship), компании, которая продвигает смешанные единоборства, включая, помимо прочего: бокс, кикбоксинг, джиу-джитсу, самбо, муай-тай, карате. , Тхэквондо и дзюдо.

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

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

Какие компоненты? Итак, наступил 2021 год, и на данный момент у нас есть 6 основных столпов:

1. Серверная часть

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

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

Если вы Front-End разработчик с фоном JavaScript; вы наверняка захотите попробовать Typescript с Node.js.

Если вы инженер DevOps с определенным опытом работы в облаке, проверьте эту диаграмму взаимосвязанных технологий, она даст вам представление о том, какие облачные сервисы связаны с какими языками (например, Azure тесно связана с C #):

Если у вас нет опыта, я слышал, что PHP легко выучить. Но C #, Java и Python входят в тройку лидеров по популярности и имеют очень хорошую поддержку, документацию и ответы StackOverflow практически на любую проблему, с которой вы можете столкнуться.

Но если вы хотите быть практичным, логичным языком будет TypeScript. С помощью этого языка вы убьете 2 зайцев одним выстрелом (Back-End и Front-End), потому что он также поможет вам изучить JavaScript.

2. Интерфейс

Это простой, основные варианты - JavaScript, HTML 5 и CSS. Даже не пытайтесь исследовать XAML или другие веб-сборки.

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

Мы видим, что jQuery является самым популярным, но с годами уступает место React и Angular. Поэтому я не рекомендую вам изучать JQuery, потому что большинство компаний отходят от этой структуры.

React принадлежит Facebook, а Angular принадлежит Google. Преимущество React в том, что у него есть мобильная версия под названием React Native, которая позволяет разрабатывать приложения для Android и iOS с использованием React Framework.

Поскольку React более популярен и имеет мобильную версию (которая, кстати, также создает веб-версию; да, 1 код, 3 сборки: веб, android, ios), я голосую за React.

3. DB

В этой области у нас есть 2 основных типа современных баз данных на выбор: реляционные и нереляционные, также известные как SQL или NoSQL (для их языков запросов).

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

Вам не нужно идти только в одном направлении (SQL или NoSQL), вы можете сделать и то, и другое; помните, что NoSQL не заменяет SQL, а дополняет его ... и наоборот.

Если вы не уверены, какую БД вам следует использовать, ответы на эти вопросы помогут вам принять правильное решение:

  • Какие данные будут храниться в базе данных?
    Вы храните файлы журналов или учетные записи пользователей?
  • Насколько сложны данные, которые будут храниться?
    Можно ли их легко нормализовать?
  • Насколько единообразны данные?
    Следуют ли ваши данные примерно по одной и той же схеме или они несопоставимы или сильно вложены?
  • Как часто его нужно будет читать или писать?
    Имеет ли ваше приложение много возможностей для чтения или записи, или и то, и другое?
  • Есть ли экологические или коммерческие соображения?
    Есть ли у нас существующие соглашения с поставщиками? Нужна ли мне поддержка поставщика?

Источник: https://betterprogramming.pub/db-101-databases-for-developers-f7dc29f46f2c

А теперь давайте посмотрим, что больше всего интересует разработчиков:

Redis может функционировать как база данных NoSQL, кеш и брокер сообщений. Кэш - классическая функция Redis. По сути, Redis находится перед дисковой базой данных и сохраняет запросы и результаты; приложение сначала проверяет кеш Redis на наличие сохраненных результатов и запрашивает в базе данных на диске результаты, которых в данный момент нет в кеше. Учитывая скорость отклика Redis менее миллисекунды, это обычно большой выигрыш для производительности приложения.

Поскольку Redis был первым вариантом для Cache, большинство разработчиков думали, что было бы лучше просто использовать Redis в качестве базы данных вместо интеграции другого поставщика базы данных. И вдруг он стал очень популярным.

Как ни странно, Stack Overflow уже много лет использует Redis и Elasticsearch в своем технологическом стеке, с первых дней существования компании. MongoDB остается технологией баз данных, которую разработчики хотят изучать больше всего.

Логичное предложение здесь - изучить Redis в области NoSQL. И я также рекомендую вам изучить базу данных SQL; Я согласен с изображением выше, что PostgreSQL - хороший вариант, поэтому я начну с этих двух.

4. Dev-Ops

Dev-Ops - это слияние двух слов: разработка и эксплуатация. Мы рассказываем о разработке в предыдущих темах. Итак, теперь давайте определимся, о каких Операциях мы говорим.

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

Есть много вариантов, которые предлагают вам более 200 услуг. Самыми популярными (именно в этом порядке) сейчас являются:

Я не предпочитаю ни одну из этих платформ. В этом случае вам следует проверить рисунок Коррелированные технологии - Как технологии связаны в разделе Back-End этой статьи, чтобы увидеть, какие из них имеют больше смысла для вас; то есть, если вы являетесь внутренним разработчиком .Net (C #), будет лучше (но не обязательно) изучить Azure.

Стоит отметить, что IBM добилась значительного прогресса в гонке квантовых вычислений, установив первый квантовый компьютер в США. Представьте, если бы они каким-то образом выяснили, как использовать квантовые компьютеры для своих серверов, и вы могли бы использовать их квантовую мощность для размещения своих систем.

С другой стороны, Docker и Kubernetes очень эффективно работают с микросервисами, и многие крупнейшие компании на рынке (у Netflix более 200 микросервисов) реализовали этот подход. Вот почему Docker и Kubernetes находятся на пике популярности. Итак, я настоятельно рекомендую вам узнать о них. Все 4 этих облака поддерживают их.

Dev-Ops - это большая тема, каждое облако обслуживает более 200 сервисов. Одна из тех служб, о которых очень важно упомянуть, - это конвейеры CI-CD. Я рекомендую вам сначала узнать о конвейере CI-CD, который уже интегрирован с выбранной вами облачной службой. И тогда всегда полезно рассмотреть другие варианты, такие как:

5. Нейрокомпьютеры

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

Думаю, в будущем наша цель - позволить компьютерам делать всю человеческую работу, чтобы мы могли делать все, что захотим, не беспокоясь о человеческих потребностях. Компьютеры будут нашими автономными поставщиками; колония муравьев с единственной «целью»: снабжать людей всем (пищей, домом, любовью, развлечениями, здоровьем и т. д.).

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

И для этого люди создают множество областей под зонтиком нейрокомпьютеров:

  • Искусственный интеллект.
  • Бизнес-аналитика.
  • Компьютерное зрение.
  • Глубокое обучение.
  • Интернет вещей
  • Машинное обучение.
  • Обработка естественного языка.
  • Нейроморфные вычисления.
  • Распознавание образов.
  • Рекомендательные двигатели.
  • Робототехника.

Из того, что я видел, некоторые области легче интегрировать, если вы уже выполняете определенную роль:

  • Back-End - машинное обучение, глубокое обучение, рекомендательные движки.
  • Front-End.- Компьютерное зрение, Распознавание образов,
  • DBA.- Business Intelligence, Data Mining.
  • DevOps.- Робототехника, Интернет вещей.
  • Тестирование - RPA’s (Robotic Process Automation), A / B Testing.

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

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

6. Тестирование

Есть много видов тестирования:

Программное решение не будет полностью готовым, если мы не протестируем его должным образом. Всегда помните принцип: «Не проверено - сломано».

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

Будет парадоксально, что программисты не подумали о написании кода для программного выполнения этих тестов; это автоматизация тестирования. В Интернете есть множество инструментов, которые помогут вам выполнить некоторые тесты, такие как Google Page Speed ​​Test. И есть несколько настраиваемых инструментов тестирования, также известных как запись и воспроизведение. И некоторые другие с более настраиваемыми входами, которые также не требуют кода, например Jmeter.

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

А что насчет системного дизайна?

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

Дизайн - это не столп как таковой. Это как план, композиция, структура или форма, которую вы придаете столпу, который вы строите.

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

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

Заключение

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

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

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

Если вам понравилась эта статья, вам понравится эта статья о (C) Lean Code. Он научит вас строить прочную, удобную в обслуживании опору.

Спасибо.