Знай свою IDE

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

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

IDE (integrated development environment) существуют очень долгое время - первые продукты такого рода появились почти полвека назад. Современные IDE выполняют огромное количество функций - от подсветки кода и предупреждений об ошибках, до выполнения развертывания на кластер облачных систем и управления базами данных (да и еще много чего, наверное - о чем ни подумаешь - это уже поставляется в виде плагина к Eclipse).

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

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

Из-за этих факторов в последнее время резко возросла популярность программистской аскезы - намеренный отказ от сложных и ресурсоемких современных графических IDE и переход к более легким и гибким инструментам, таким, как Vim или Emacs, а то и вовсе отказ от любых дополнительных средств в пользу простых текстовых редакторов. В этом есть определенный смысл и романтика, однако я не разделяю подобного подхода. Моя задача, как разработчика - делать больший value в фиксированные сроки, и в этом мне помогают современные IDE, делающие за меня немалую часть скучной рутины. Они всячески упрощают мою работу, давая полезную информацию в процессе работы, за которой мне в ином случае пришлось бы долго лезть.

Однако разговор немного о другом.

Обычное использование IDE

Многие используют IDE как редактор кода с подсветкой синтаксиса и удобными переходами по структуре проекта. Для многих также является полезной функция предупреждения об ошибках. Встроенный в большинство современных IDE терминал также очень удобен при разработке серверных приложений, запускаемых из командной строки. Более упорные пользуются встроенным (или загружаемым) отладчиком и оболочкой для системы контроля версий. Однако, инструменты, которые мы используем каждый день, могут гораздо большее.

Опыт коллег по цеху

На основании моих наблюдений (и опыт знакомых касательно других стран это подтверждает) европейские и американские коллеги знают используемые ими IDE на более глубоком уровне, чем многие из нас. Я не знаю, с чем это связано, возможно этому обучают в университетах, а возможно это просто следствие более скрупулезного отношения к рабочему инструментарию. Факт в том, что люди, с которыми я общался, работают с теми же инструментами значительно продуктивнее. Это произвело на меня впечатление.

Основа высокой продуктивности - глубокое знание функционала инструмента, в частности - горячих клавиш. Также помогает знание возможностей самого редактора, быстрого редактирования кода, множественное редактирование, переименования переменных по всему файлу/проекту и рефакторинга.

Как использовать инструменты эффективнее

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

Горячие клавиши

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

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

Работа с текстом

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

Работа с кодом

Обычно IDE содержат в себе (из коробки или подключаемый в виде плагинов) функционал по работе с конкретным синтаксисом языка программирования и проектами в соответствующем стеке технологий. Обычно, это очень полезные операции - подсветка синтаксиса, авто дополнение кода, подсказки по полям структур и сигнатурам методов, а также их автозаполнение. Для скриптовых языков часто есть возможность отобразить вывод выполнение строки прямо рядом с кодом. Часто в режиме реального времени показываются уведомления от различных линтеров и прочих анализаторов кода на предмет синтаксических или логических ошибок.

Все эти мелочи значительно упрощают написание кода и повышают его качество. Я читал код более опытного коллеги по проекту, который пишет в Vim без использования линтеров. И на каждом втором-третьем ревью PR я был вынужден писать комментарии по определенным типам ошибок/недоработок (не стилистическим, само собой), от которых меня предохраняют несколько анализаторов кода различного толка. Я делегирую машине задачу, сложную для меня, но простую для компьютера, чтобы заняться тем, что действительно важно.

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

Стоит изучить, какие возможности по работе с вашим ЯП предоставляет IDE, настроить что-то, если необходимо, и полноценно пользоваться этими возможностями, стараясь максимально автоматизировать процесс написания кода.

Сниппеты

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

Это очень полезная функция. Разные языки программирования отличаются разным количеством boilerplate кода, какие-то более, а какие-то менее многословны, выразительность синтаксиса также разнится. Однако в любом языке есть структуры, которые повторяются из раза в раз.

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

Более того, определите собственные сниппеты для того кода, который пишете чаще всего, и экономьте еще больше времени и внимания.

Основные фичи IDE

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

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

Плагины

Во многих IDE дополнительные функции добавляются путем установки плагинов. Изучите самые популярные плагины для того стека технологий, который вы используете. Это может быть плагин, позволяющий просматривать определенные форматы данных (Markdown, Swagger и т.п.), подсветка и советы в конфигурационных файлах (Docker, Kubernetes, CI пайплайны и другие конфиги), автоматизация некоторых процессов (например, запуска тестов), обертки для подключения к базам данных, добавление информации из Git Lens прямо в код, и другие инструменты, автоматизирующие и упрощающие многие действия, либо интегрирующие необходимый разработчику функционал в IDE.

Интеграция

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

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

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

Не поленитесь, и поищите, что из того, чем вы занимаетесь на постоянной основе кроме написания кода, может предоставить вам ваша IDE.

Обратная сторона автоматизации

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

Часто, используя тот или иной плагин или встроенный инструмент, человек не всегда полностью понимает, а что же именно происходит “под капотом”. Из-за этого зачастую разработчик может испытывать сложности, если те же действия нужно будет выполнить в другой среде или вовсе без средств автоматизации - например, на удаленном сервере через SSH. Также, иногда новички выполняют действия, смысл и назначение которых не полностью осознают. Это может привести к возникновению карго-культа в проекте, что рано или поздно негативно скажется на качестве и сроках разработки.

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

Подводя итоги

Как я упоминал в начале статьи, общаясь в профессиональных сообществах, я встречал популярное мнения о том, что IDE вредят пониманию разработчиком выполняемых им процессов, и вплоть до того, что “нельзя стать профессионалом, не программируя в низкоуровневых редакторах вроде Emax или Vim”. Конечно, это фарс и дедовщина, но смысла эти высказывания не лишены. Используя широкие возможности среды разработки для упрощения ежедневной рутины, не забывайте о том, что именно вы упрощаете и автоматизируете. Не давайте себе попасть в ловушку непонимания того, что за магия творится между вами и вашим кодом.

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

comments