Путешествие по памяти

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

Путаница заключалась в термине сервер. Мое первое знакомство с этим термином произошло в моей первой компании, когда не было Википедии.

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

-Википедия

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

Для меня сервер был сущностью, которую могли видеть все, но никто не мог видеть ее. Оно могло сделать что угодно.

Самое странное, что у всех была одна и та же версия. Часто говорили о «BizTalk Server», «МТС-сервере» или «Сервере приложений». Каждый раз, когда они использовали эти термины, я представлял себе тяжелое, блестящее устройство, которое выглядело иначе, чем мой персональный компьютер 90-х годов. Я также предполагал, что сервер SAP может быть намного дороже, чем все вместе взятые, потому что учебный модуль SAP стоил в 5 раз больше, чем курс обучения Java, который я прошел бесплатно после 9–6 лет.

Только надменный парень с густыми усами мог войти в серверную

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

Другая моя путаница с термином сервер возникла из-за использования терминологии. Все мои коллеги-эксперты использовали их с похожей семантикой. Примеры: сервер каталогов LDAP будет выполнять аутентификацию по паролю. сервер MTS будет фиксировать или откатывать транзакции.

Их описания были достаточно точными. Но все они описывали симптомы/побочные эффекты функций, которые выполняли эти серверы. Они не были всеобъемлющими определениями, не говоря уже об объяснениях.

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

Тем не менее, они были моими техническими наставниками, и я восхищался ими даже сегодня — за упрощение.

Настоящий сервер, который я написал:

Единственное, что было: я не знал, что написал это.

Это был сервер на основе Java для простого приложения для чата (в стиле Yahoo). Это был кусок дерьма. Но это сработало.

Книга, из которой я ее скопировал, не объясняет более полного значения термина «сервер».

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

Я заставил себя выделить время на чтение.

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

Именно тогда компания по разработке программного обеспечения из списка Fortune 500 взяла у меня интервью для своей команды server.

Моя роль в разработке сервера:

Когда я присоединился к фирме Fortune 500, я был полон энтузиазма. Мы работали над флагманским продуктом CRM. Команда была отличной.

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

  • Это была кодовая база продуктовой компании — и довольно качественная. Степень развязки была очень высокой. Даже если бы я в конечном итоге изменил одну переменную, все усилия по отслеживанию основной причины того стоили.
  • Команда пользовалась чрезвычайно высоким уровнем автономии. За исключением самых смертоносных код-ревью, почти в каждом решении была свобода. График работы был полугибким. Было немного WFH, но никто особо не скучал по нему. Менеджер редко вмешивался в повседневные дела и просто передавал статус по цепочке. Это доверие усилило чувство собственности.

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

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

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

Вскоре наш ненавязчивый менеджер был заменен активным менеджером компании-владельца. Фаворитизм начал подводить черту. Старшие кодеры начали подвергаться преследованиям за свои безобидные преступления (несоблюдение правил с 9 до 5 или WFH без разрешения). Они не ушли, но их производительность сильно пострадала.

Уровень стресса в команде был вполне заметен. Рецензии стали суровыми делами эго. Совместное время чаепития/кофе было разделено на подгруппы. Начали образовываться картели.

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

До сих пор я писал интерфейсный рендеринг на стороне сервера (наряду с бизнес-логикой) на C++. Я разобрался с CRUD. Я подготовил полноценный HTML-ответ. Я довольно наслаждался этим.

Тем не менее, это считалось неэффективным. Задача раздробилась до бессмысленности.

Мне досталась скучная задача разработать элемент управления ActiveX — закрытый и ограниченный по влиянию. Моя голова была похоронена под малоэффективными исправлениями, пакетами обновлений и другой документацией.

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

Я чувствовал, что отстаю от борьбы за всех.

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

Скатертью дорога, сказал я.

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

Примерно через 18 месяцев борьбы я отказался от должности серебряной ложки в пользу штатного фрилансера. Я понятия не имел о своем будущем. Единственным утешением было то, что это позволило мне навсегда остаться в WFH, что значительно повлияло на мои сбережения.

Так что же на самом деле делает сервер?

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

Побежденный, когда я вернулся в 9–5, доброжелательный руководитель группы убедил меня изучить NodeJS. Вот тогда до меня начало доходить: сервер был….

Все.

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

Сервер был мозгом. Но если вы зашли так далеко, чтобы иметь конкретные условия, я вас не разочарую.

Что делает сервер:

  • Аутентификация пользователя (+данные профиля, золотая жила для любого стартапа!)
  • Бизнес-логика. Мясо, которым питаются мозги пользователей и карманы учредителей, например. для банковского веб-сайта, обновление счета с вводом и выводом средств.
  • Кэширование: использование доступной памяти для сокращения циклов ввода-вывода и уменьшения задержки.
  • Безопасность: защита базы данных и самой себя от злоумышленников/неавторизованных пользователей.
  • Сторонняя интеграция. Если этого недостаточно, поговорите с другими API, чтобы выполнить работу.
  • Все, что, по вашему мнению, конечному пользователю не нужно знать

Заметка для себя 😏:

Сервер — это не аппаратное обеспечение! Что еще более важно, на одном вычислительном блоке может работать несколько серверов, часто даже взаимодействующих друг с другом.

Заключение:

Сегодня студенты колледжа, не имеющие компьютерного опыта, могут писать серверы после прохождения курса Udemy. Я поражен их ясностью.

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

Он будет там, но, подобно Богу, он будет всепроникающим и невидимым.

Я уже скучаю по надменным парням с густыми усами.