Самые эффективные инструменты разработчика, которые я встречал за свою карьеру

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

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

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

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



Король композиция | труба или трубопровод

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

Например, команда find передается по конвейеру wc -l, и вы получаете: find . | wc -l счет количества файлов. Канал означает, что выходные данные одной команды становятся входными данными другой. Короче говоря, это трубопровод.

Вот некоторые другие полезные операторы в этом контексте:

1. | & будет отображать стандартную ошибку

2. ›выведет в файл.

3. ‹будет читать из файла.

4. xargs преобразует стандартный вывод в аргументы следующей команды.

Итак, когда я делаю это lsof -i :3307 | xargs kill -9, вы можете понять (при условии, что вы знаете lsof и kill), что я пытаюсь убить процесс, который занимает порт 3037. Вы также понимаете, что kill принимает аргумент, а не поток, просто глядя на клеевых частях (| и xargs).

Лучше всего отметить, что эти операторы составляют или объединяются в цепочку. Они были созданы с учетом этого, поэтому вы можете перейти оттуда к более сложным командам и скриптам. Для меня это в двух словах unix, ваш интерфейс становится языком программирования.

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

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

jq - обрабатывать JSON

когда я вызываю xkcd API с помощью curl, я делаю это

curl -X GET https://xkcd.com/614/info.0.json

и выход плохой. Действительно плохо.

когда я передаю ту же команду в jq, это выглядит так

curl -X GET https://xkcd.com/614/info.0.json | jq .

Эти различия результатов показаны в сущности, но это также имитирует опыт в терминале. Я могу протестировать свой API и получить удовольствие от чтения. Я могу переупорядочивать, изменять и форматировать выходные данные json (файловые или сетевые), которые трудно читать. Поскольку json является распространенным носителем информации, этот инструмент делает его удобочитаемым.

Докерская революция

Docker, который сегодня является строительным блоком практически любой современной облачной системы, просто великолепен. Это космический корабль по сравнению с JQ и | которые чрезвычайно легкие.

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

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

Вы можете делать больше помимо файла докеров вашего приложения; вы можете начать использовать мышление докеров в своей повседневной работе. Это когда вещи щелкают. Вот несколько примеров:

1. Запустите докер для новых продуктов, которые вы хотите протестировать: машина БД, pub-sub, этот сумасшедший фрагмент кода.

2. Решите проблемы среды python с помощью docker, смонтировав папку dev как том, а зависимости уже установлены с помощью pip.

3. Введите внешние зависимости для ваших микросервисов с помощью docker-compose перед запуском тестов.

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

Да, по сравнению с инструментами здесь, которые в основном представляют собой молотки и отвертки, докер сильно отличается и может быть более сопоставим с роботизированным краном. Хотя использование включает тот же интерфейс (терминал), результаты потрясающие.

Статический однострочный http-сервер

python -m SimpleHTTP Server 8000Маленький и полезный. Это запустит статический веб-сервер, который обслуживает файлы из вашего рабочего каталога. Это на расстоянии одной строчки. Python предустановлен в большинстве систем Linux / Mac. Для Python версии 3 используйте python -m http.server 8000.

Запомните один и придерживайтесь его.

Обработка текста и поиск

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

grep - cat [file-name]| grep [search-term] cat выведет файл на экран, а grep отфильтрует строки, содержащие выражение.

хвост: tail -f [log-file]У меня есть приложение, выдающее логи. Я хочу видеть во время выполнения, что он печатает, и меня не волнует его история. tail напечатает конец файла, чтобы дать некоторый контекст, параметр -f позволит вам продолжать прослушивать поток журнала во время работы приложения.

head: head [file-name] Когда сервер загружается много раз, он выдаст некоторую информацию о своей загрузке. Когда я просматриваю файл журнала, я получаю огромную свалку всего, что произошло за это время. Head позволяет заглянуть в начало файла.

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

Некоторые полезные упоминания, которые я не использую:

VIM: хотя мой репозиторий dotfiles на github мог бы сказать иначе, я все еще не пошел по пути ViM. Меня не продают, но я вижу в этом силу. Это хорошая точка для начала.

летучая мышь: недавнее открытие, кошка, но с подсветкой синтаксиса, номерами строк, git diff.

Удаленная отладка

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

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

Ответ - удаленная отладка.

В своей повседневной работе я использую node --inspect-brk для отладки узла в моем браузере. Да, меня иногда смеют люди, отлаживающие в своих редакторах / IDE, но возможность настроить удаленную отладку - это суперсила.

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

Вы можете продолжить и открыть порт отладки в запросе на отдых, а докер по умолчанию предоставит его вашему безопасному серверу перехода. Вы даже можете объединить подсети в цепочку с помощью ssh, чтобы преодолеть границы сети. Если вы знаете IP-адрес и имеете доступ, вы сможете отладить его.

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

Я призываю вас научиться удаленной отладке в каждой эхо-системе и делать это с осторожностью.

Это все, что у меня есть на данный момент

Есть много вещей, которые мне не удалось здесь осветить, например, wget / curl, htop и другие. Я пока не хочу опьянеть вас силой

Теперь твоя очередь. Назовите некоторые из инструментов, которые изменили вашу жизнь и дали вам суперспособности разработчиков, в комментариях ниже, чтобы поразить всех (следует читать: я хочу знать их все). Я хочу знать, что ты думаешь.

Об авторе

Привет, я Дорон. Я пишу код с 14 лет и занимаюсь этим профессионально уже 10 лет. Я отец Авигейл, которая наслаждается своим первым взглядом на море. Это потрясающий первый опыт. В свободное время я ползаю по случайной сети и играю в ролевые игры.

Учить больше