Создание чрезвычайно прочных, надежных и быстрых приложений

Вступление

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

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

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

Концепция 1. Простое - лучше

Несколько лет назад в индустрии программного обеспечения существовала безумная практика, когда разработчикам платили за строку кода, или, как правило, за тысячу строк кода, эффективно наказывая лучших программистов, которые могут выполнить в 1 тыс. Строк кода то, что обычно требует 10 тыс. до 15к и более. Вся суть языков программирования высокого уровня состоит в том, чтобы уменьшить объем информации, необходимой для компьютерных инструкций, и облегчить их чтение и поддержку. Суть в том, что чем проще программа, тем легче с ней работать и тем быстрее она будет работать.

Концепция 2: эффективное использование ресурсов

Разработчики, выросшие до 2000-х годов, будут помнить времена, когда у компьютеров было очень мало вычислительной мощности, оперативной памяти или других ресурсов, и каждый байт считался. Мой первый компьютер, например, имел 64 КБ ОЗУ, второй - 640 КБ, а третий - 4 МБ. Вам действительно нужно понять, что вы делаете, когда работаете с 4 мегабайтами оперативной памяти.

Сегодня компьютеры обычно поставляются с 8 ГБ ОЗУ или более, в дополнение к мощным процессорам и графическим процессорам, а также многочисленным периферийным устройствам, каждое из которых имеет свои собственные специфические функции, встроенные для максимальной производительности. Жалко тратить эту производительность, открывая что-то вроде нескольких вкладок с веб-сайтами, которые разряжают аккумулятор вашего ноутбука и требуют бесконечно долго реагировать на действия пользователя.

Например, большие интерфейсные веб-фреймворки изначально создавались для решения основных проблем кроссбраузерной производительности и надежности, существовавших в начале 2010-х годов, до широкого распространения стандартов CSS3, ES5 и других. Многие из этих проблем уже давно исправлены, и все же разработчикам часто трудно выбрать сложную интерфейсную веб-среду для создания относительно простого приложения, которое было бы быстрее и проще встраивать в необработанный HTML, CSS и JavaScript / TypeScript. Бывают случаи, когда фреймворк, безусловно, полезен, но это абсолютно не требование, и в некоторых случаях может быть полезно создать собственный фреймворк с нуля (я делал это несколько раз с TypeScript для ультра- требовательные приложения, каждое из которых пользуется большим успехом). Просмотрите список причин, по которым требуется фреймворк, и я, вероятно, смогу показать вам более крупное и сложное приложение, которое не требовало его, но при этом работает безупречно и без проблем.

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

Концепция 3: Подумайте о компонентах и ​​проводах

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

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

Таким же образом постарайтесь понять, как работает ваша программа и почему. Шутка про «Это не работает, и я не знаю почему, о, смотри, это работает, и я до сих пор не знаю почему» забавна в мемах, но в профессиональной разработке программного обеспечения это означает, что кто-то просто не понимает инструменты они используют правильно. Чтобы создать отличное программное обеспечение, вам нужно точно понимать, как оно работает, вплоть до каждой конструкции цикла, вызова API, используемой функции SDK, используемого протокола и всех других аспектов программы или, по крайней мере, иметь очень хорошее представление о том, как это работает и знать, куда обращаться, если вам нужна надежная информация, которой можно доверять.

Подумайте об аппаратном обеспечении. Кнопки расположены в ряд на этой панели, которая содержит 100% собственной обработки ввода и рендеринга, а также передает сообщения другим компонентам и от них по мере необходимости. Думайте о языковых функциях как о машинах и используйте их, чтобы избавиться от ненужного объема кода и получить максимальную отдачу от того, что вы создаете. Реализуйте базовую логику API как можно ближе к БД или даже в самой БД, используя представления и языки расширений (PostgreSQL очень хорош в этом). Используйте архитектуру микросервисов, которая предназначена для организации больших компьютерных систем в небольшие управляемые компоненты, которые можно подключать, отключать и менять местами по мере необходимости (точно так же, как оборудование).

Заключение

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

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

Спасибо за чтение и удачи в следующем проекте!

~ 8_bit_hacker