Coding With Intention
Как написать четкий и простой в обслуживании код
Сегодня разработчикам на выбор доступны сотни языков программирования, что обеспечивает невероятную гибкость в разработке и реализации программного обеспечения.
Существует огромное количество синтаксисов, начиная от кода низкого уровня для raw power, до более удобочитаемого человеком для более легкой разработки. Обычно существует компромисс, когда дело доходит до выбора правильного инструмента для работы, и в каждом языке есть безграничные способы подхода к решению проблемы. В то время как некоторые языки сильно типизированы и требуют определенных определений таких вещей, как типы возвращаемых переменных и функций, другие более динамичны и снисходительны по своей природе.
Независимо от типа системы, реализуемой на выбранном языке, код, написанный явным образом, часто легче анализировать, читать и отлаживать.
What is explicit programming?
Что такое явное программирование:
Явное программирование-это процесс создания исходного кода, в котором все входы, выходы, операции и исключения явно определены с использованием лучших возможностей, доступных в текущем языке и среде.
Этот подход дает некоторые преимущества перед его противоположностью, неявным программированием, в котором смысл всего “подразумевается” и оставляется компилятору или интерпретатору, другим разработчикам или чему-либо еще, чтобы определить предполагаемую работу каждого раздела программы, часто в почти реальном времени.
Хотя неявное программирование обеспечивает некоторую гибкость, позволяя разработчику выражать намерение многими различными способами с меньшими ограничениями, есть основные преимущества явного программирования:
- Компьютер, на котором запущено приложение, будет иметь лучшее представление о том, чего вы пытаетесь достичь. Например, определение переменной заранее, с правильно связанным типом, позволяет машине, которая работает или интерпретирует ваш код, выделять память, настраивать сборщик мусора и делать другие интересные вещи, полезные для вашей программы.
- Другие люди, такие как тестировщики и разработчики, которые читают ваш код в будущем, также будут иметь лучшее представление о том, что программа должна делать и как она должна работать. Как и в случае выше, следующий человек, который будет работать над программой, может ясно видеть тип и контекст каждой переменной. При чтении десятков тысяч строк кода (или более) для поддержания какого-то огромного проекта эти мелкие детали имеют огромное значение.
Это большое преимущество, по сравнению с необходимостью выяснять, что означает каждая переменная и почему, и что делать, когда типы не выстраиваются и требуется принуждение типа.
Сначала может показаться, что экономия времени на инициализации переменных в языках , которые не требуют этого, не нужна. Однако учтите, что в этих случаях этот человек экономит одну или две секунды усилий и заставляет всех и все компенсировать это позже, догадываясь, что означает код и надеясь, что он не потерпит неудачу, когда произойдет какое — то исключение или когда кто-то в конечном итоге изменит его-вводя новые ошибки, которые теперь имеют дополнительные затраты на отладку и рефакторинг. Реальная экономия времени-это небольшие первоначальные инвестиции в несколько секунд здесь и там, чтобы изучить программное обеспечение и связанные с ним инструменты, документацию и другие системы.
Determine your options
Определите параметры: Функции, доступные разработчику для создания четко определенного и простого для чтения кода, будут сильно отличаться в зависимости от среды, от грубых сценариев оболочки и поэлементной архитектуры до чрезвычайно мощных средств отладки в реальном времени, доступных в Visual Studio Code и других современных редакторах.
В программировании система типов — это набор правил, которые назначают свойство type различным частям компьютерной программы. Это фактически определяет, в какой степени разработчик может или не может проиллюстрировать точную предполагаемую работу каждой части программы. Из различных правил в системе типов наиболее важными являются следующие:
- Безопасность типов: степень, в которой язык предотвращает ошибки типа
- Выражение типа: подразумеваются ли типы или явно определены
Сведения о системах типов, используемых в некоторых распространенных языках, см. в этой статье: сравнение языков программирования по типу system .
Define as much as possible
Определите как можно больше: Если у вас есть выбор между двумя вариантами, один из которых экономит вам несколько секунд сейчас, но означает снижение производительности и дополнительное время отладки для кого-то позже, не ленитесь. Добавьте дополнительные три секунды и спасите кого-то, возможно, даже себя-придется потратить время и усилия позже, выясняя, как что-то должно было работать и почему оно внезапно сломалось.
Что-то легко прочитать и понять в тот момент, когда вы пишете это, конечно, так как в вашем туннельном видении вы пишете этот фрагмент кода, который идеально вписывается в вашу собственную память и имеет для вас смысл.
Умножьте это на тысячи компонентов, каждый из которых связан различными способами в зависимости от того, кто его построил или когда, а затем представьте себя пробирающимся через это через год или около того, пытаясь исправить какую-то случайную ошибку в 11-м часе перед основным выпуском. Тогда становится более ясно, почему важно определить, как должна работать программа, и оставить как можно меньше возможностей для интерпретации.
Build things that make sense
Создавай вещи, которые имеют смысл: Определение предполагаемого поведения кода способом, очевидным как для машин, так и для людей, является простым процессом:
- Задумайтесь над тем, что вы собираетесь сделать и почему, прежде чем приступать к ее реализации. Потратьте некоторое время на доске, или с ручкой и блокнотом, и убедитесь, что ваши идеи имеют смысл и проходят логические тесты слева и справа, внутри и снаружи. Если вы не сделаете это сейчас, все остальные сделают это за вас на этом пути, что не будет весело для вас.
- Определите параметры: то, что вы делаете, включая переменные, которые вам нужны, какие они типы, как их назвать, какие виды абстракций или других функций использовать и так далее. Если ваша команда или проект использует тестовую разработку, это подходящее время, чтобы нацарапать их в тестовых наборах, которые позже можно отшлифовать в набор тестов приложения.
- Для проектов, связанных с реляционными базами данных, убедитесь, что соблюдаются стандартные правила именования, определения типов, нормализации, индексирования и другие рекомендации по проектированию баз данных. Размещайте сложные операции с данными в хорошо именованных функциях базы данных и легко используйте их в исходном коде приложения. Сделайте то же самое с представлениями SQL, чтобы избежать необходимости перчить приложение массовыми избыточными запросами.
- Используйте функции абстракции, доступные в вашем языке, чтобы, по крайней мере, создать слои разъединения между основной частью вашей бизнес-логики и лежащими в основе гайками и болтами вашего приложения. Избегайте ситуаций, например, когда главная точка входа для API находится буквально в одном шаге от прямого вызова базы данных (или хуже, в том же блоке кода). Это кажется тривиальным, но опять же, через сотни основных компонентов API, рефакторить что-то, что вы скопировали 275 раз вместо того, чтобы абстрагироваться однажды, становится огромным кошмаром, которого можно было легко избежать.
- Практикуйтесь в написании самодокументированного кода: называйте вещи так, чтобы они соответствовали языковым передовым практикам и давали ключ будущим читателям о том, что они означают. Например, старайтесь избегать случайных или загадочных имен для переменных, функций или чего-либо еще, вместо того, чтобы гарантировать, что каждое имя дает очевидные подсказки о том, что оно представляет, и, что более важно, почему.
- Откройте для себя все основные недостатки, связанные с языком, используемым при разработке каждой части вашего приложения, и разумно используйте эту информацию для создания полезных классов и методов для себя и/или выберите надежную структуру, которая обеспечивает предсказуемое поведение, занимаясь этими вопросами. Хорошим примером этого является таблица сравнения типов для PHP, которая иллюстрирует некоторые нестандартное поведение, или различные доступные платформы, которые могут помочь смягчить эти проблемы . Другой пример-TypeScript язык, который был представлен в 2012 году как более структурированный набор JavaScript с функциями OOP, заимствованными из C# и Java.
Conclusion
Вывод: Есть много способов решения проблемы. Найдите языки и инструменты, которые работают для вас и позволяют создавать то, что вы хотите в меру своих возможностей, а затем освоить функции, доступные в этой среде. Это позволяет создавать программное обеспечение, которое по-прежнему будет работать отлично и будет легко работать с годами или даже десятилетиями позже.
Хороший дизайн вечен. Он не заботится о промышленности buzzwords, тенденциях, новых технологиях, или о чем-нибудь еще, если на то пошло. Вещи, которые хорошо работают и выглядят великолепно всегда будут существовать, поэтому современные дизайнеры используют очень старые концепции, такие как золотое сечение, которое художники, такие как да Винчи, широко использовали с большим успехом из-за его широкого распространения в природе.
Определите, что вы хотите сделать и как вы хотите, чтобы это работало, а затем приступите к его построению таким образом, чтобы у читателя не осталось абсолютно никаких догадок. Является ли этот читатель машиной, на которой работает ваша программа, или другим программистом, который должен работать над ней месяцы или годы.
Ваши клиенты, партнеры и, возможно, ваше будущее “ я “ поблагодарят вас за это.
Translated: medium
Help us with your claps :)