Найти тему

Базовый инструментарий программиста в 2022 году Ч.1

Оглавление

Доброго времени суток всем кто как-то сюда попал :D

Сегодня захотел обсудить тему что требуется современному программисту, я уже описывал как встать на начальный путь в разработчики и так же описывал разные языки программирования: часть 1 и часть 2 , а сегодня поговорим на тему "а что дальше?", а дальше ад и трэш :D

Если раньше от программиста как правило требовалось минимальное знание в теории(из разряда что такое ООП) и базовое понимание языка программирования, то сегодня тенденции совершенно иные, разобьем на главы для разных сфер в которых я работал либо взаимодействовал лично:

Backend разработчик

Взято из открытых источников Яндекс.Картинки
Взято из открытых источников Яндекс.Картинки

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

Что же требуется современному backend разработчику:

  1. Знания языка программирования - не просто синтаксис как на нем писать, а знать базовые библиотеки этого языка, понимать для чего они и где их использовать, так же понимать какие типы данных у него есть и какой тип и где использовать наиболее выгодно для производительности, безопасности и т.п. ну и базовые алгоритмы которые на самом деле в практике редко встречаются :D
  2. Знание сторонних решении к примеру Framework(фреймворк), современные бэкенд разработчики как правило очень редко что либо пишем без сторонних решении, чтобы не городит велосипеды есть устойчивые и проверенные временем фреймворки для удобства разработки сервисов разного рода сложности(причем разная сложность подразумевает что нужно подбирать фреймворк под задачу, хотя бизнес это редко делает, как правило выбирают 1 основной и все на нем пишут), фреймворк - это жирный(иногда и худой) набор инструментов который облегчает нам писать код, т.е. роутеры(url адреса по которым вы переходите), базовые промежуточные проверки и т.п. тривиальные решения нам даются практически из коробки, только настрой их правильно и базовый каркас для будущего убийцы ВК готов :D
  3. Знание ORM - в большинстве языков программирования необходимость, ORM это некая "Абстракция" над SQL языком, благодаря ORM мы можем не писать жирные SQL запросы, а работать с базой данный как с объектом или структурой(в зависимости от языка программирования), на самом деле этот инструмент очень сильно упрощает работу и ускоряет выход конечного продукта да и в прибавок шанс на допущение ошибок в чистом SQL куда выше чем допустить ошибку в лаконичной ORM, потому их использование массовое, но есть исключения, если будете работать в сфере Golang разработчика то тут ORM не приветствуется, некая "культурная" традиция.
  4. Знание SQL хотя бы на базовом уровне в начале нужно, скорее всего с вас спросят, SQL - это язык запросов в реляционных БД(да, есть не только реляционные, есть еще и документные БД, графовые и кучка других), т.е. именно благодаря этому языку происходить запись/редактирование/чтение в/из базы(у) данных, так что его знания возможно редко вам пригодятся, но скорее всего будут у вас задачи где необходимо будет написать сырой SQL запрос, хоть ORM и удобна, просто и более защищена от ошибок кривых ручек, но оптимизация у ORM не на высоте, да она скорее всего лучше чем у новичка SQL, однако зачастую запросы которые выполняются посредством ORM медлительнее и более прожорливые чем если написать чистым SQL-ом. Да и SQL на самом деле не столь сложный, его проблема в основном в том что он очень многословный.
  5. В дальнейшем вам так-же понадобятся знания и понимание работы с другими сервисами посредством брокеров задач, брокеры задач это довольно увесистая тема, опишу ее пока что вкратце, это то что позволяет выполнять огромное количество действии с данными пользователя(или с сторонними сервисами, неважно) о которых пользователь даже не знает и не как не отражается на его взаимодействии с сервисом, т.е. например вы сидите в Яндекс.Дзене, но в ВК вам кто-то написал(не знаю как у них там реализовано, но наверное через брокер) и не смотря на то что вы не сидите сейчас там вам сплывает уведомление о том что вам написали, как это работает: Пользователь вам пишет -> отправляется сообщение на определенный url адрес(API) -> на стороне бэкенда чтобы не задерживать результат отправки это сообщение отправляет сразу в брокер(хотя может быть и иные инструменты, например grpc или иные, но это пока опустим) в определенный канал/топик допустим "message", а этот канал "вечно" читает другой сервис(или другая часть сервиса) и видит новое сообщение вам, она его забирает из брокера и отправляет в Web Push(уведомление) если все прошло успешно то удаляет это сообщение из брокера(либо проставляет статус "выполнен", в зависимости от брокера и его настроек) надеюсь понятно объяснил :D
  6. Так-же любой крупный ресурс(как ВК, Facebook, Yandex и т.д.) используют "систему" кэширование, что это такое - это некая высокопроизводительная база данных для хранения временных(хотя и не обязательно, но может случится так называемый перегрев, когда кэша становится слишком много) данных, в чем ее суть? В том что бы отдать вам результат вашего запроса как можно быстрее, к примеру "Вася зашел на данный мой блог бэкенд начал проверят есть ли данная страница в кэше, если есть то Вася будет рад т.к. страница откроется почти что моментально(зависит лишь от интернет соединения и не умер ли Кэш сервис) т.к. из кэша данные берутся в мгновение, если же в кэше нет этой страницы, то бэкенд делает запрос в БД, получает мой блог и отдает Васе при этом одновременно записывает в кэш для того чтобы следующие пользователи получили данную страницу как можно быстрее, если же Вася хороший то он поставит лайк и это побудить бэкенд сервиса Яндекса для отправки изменении в базу данных и обновить кэш чтобы данные на странице были актуальны для последующих пользователей", систем кэширования не мало, как правило используют Redis, Aerospike и даже Elasticsearch вполне подходить для такой задачи, хотя Elastic и не система кэширования а сервис для полнотекстового поиска(крутой поиск проще говоря) но работает он достаточно быстро(не сравнится конечно с Redis но для большого текста куда лучше он, ИМХО) и отказоустойчивость у него хороша, тут дело в объеме данных, Redis хранить все данные в Оперативной памяти, потому у кэша не так много места(в зависимости от количество посетителей и насколько крупный кэш нужно хранить), на самом деле есть огромное количество использования кэша, как по мне хранить большой текст лучше в ElasticSearch(либо в иных сервисах, а их не мало, хоть Sphinx) или в аналогичных продуктах, Redis же позволить хранить любые данные, но лучше хранить не особо крупные, например Токены авторизации(для того чтобы сервис знал, авторизованы вы или нет) или главная страница сайта и другие некрупные статичные(неизменяемые) данные, но тут каждый должен сам обжечься и понимать хватить ли ресурсов на быстрый Redis или все таки нет, выбирайте инструменты с умом. ;)
  7. Умение писать тесты, тесты наши все, тесты это "куски" кода которые как бы "эмулируют" действия пользователя и проверяют ваш код на наличие ошибок, если есть ошибка то тесты скажут вам об этом.
  8. Так-же необходимо знать основные паттерны программирования их огромная куча и возможно вы не когда их не будете использовать, точнее будете но сами не понимая этого, почитать их стоит, но основные паттерны как правило у программистов вырабатываются сами собой даже без знания этой теории, однако при трудоустройстве скорее всего про них у вас спросят, так что готовьтесь как к экзамену "заучил, сдал, забыл" :D Хотя знать Фабрику, Одиночка, Итератор, Посредник и Декоратор стоит знать. Это все легко гуглится.

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

#backend #программирование #информационные технологии #разработка #web разработки