Как менеджер по разработке программного обеспечения, многие люди в моей команде спрашивали меня: как они могут стать менеджером по разработке программного обеспечения? И даже некоторые люди спрашивали меня: как они могут стать техническим директором?
Стать техническим директором может быть наивысшим уровнем, которого вы можете достичь как инженер-программист. Я имею в виду, что это могут быть более высокие уровни, чем технический директор, например, стать генеральным директором или получить Нобелевскую премию за написание алгоритма ультра-сжатия и достижение мира во всем мире, но пока, допустим, вы просто хотите стать 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. Он научит вас строить прочную, удобную в обслуживании опору.
Спасибо.