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

Итак ... как же развить мышление эффективности?

Быть неудовлетворенным

Верно. Путь к оптимизации Nirvana начинается с неудовлетворенности.

Не верьте мне на слово; Вот что известный математик и отец теории информации Клод Шеннон сказал о силе неудовлетворенности:

Тогда есть идея неудовлетворенности. Под этим я не имею в виду пессимистическое недовольство мира - нам не нравится то, как обстоят дела - я имею в виду конструктивное недовольство. Идею можно выразить словами: Это нормально, но я думаю, что все можно было бы сделать лучше. Я думаю, что есть более изящный способ сделать это. Думаю, все можно немного улучшить . Другими словами, постоянно возникает легкое раздражение, когда что-то не так; и я думаю, что неудовлетворенность в наши дни - ключевая движущая сила хороших ученых.
- Клод Шеннон

Так как же превратить бесполезное повседневное раздражение в конструктивную неудовлетворенность? Простой. Используйте алгоритм эффективности.

Используйте алгоритм эффективности

Что такое алгоритм эффективности? Это революционный процесс, разработанный известным специалистом по документации для разработчиков и отцом теории эффективности А. Г. Смитом (читайте: это то, что я только что придумал):

  1. Есть решение твоего раздражения
  2. Кто-то, вероятно, уже создал это решение
  3. Если да, используйте его (и опирайтесь на это)
  4. Если нет, создайте его

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

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

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

Сделайте анализ затрат и выгод

Но стоили ли в конце концов этих двух часов, потраченных на возню с формулами и сценариями VBA, всех этих хлопот? Это очень правильный вопрос, и ответ таков: это зависит от того, сколько раз в день вы выполняете автоматизируемую задачу. Вот соответствующий XKCD:

Согласно грубому, но полезному графику XKCD, потратить целый день на выполнение задачи на одну секунду быстрее - это потраченное время не зря, если задача выполняется пятьдесят раз в день (или больше) в течение пяти лет. Вот математика:

Сохраненное время (1 * 50 * 365 * 5 = 9 1250 секунд) Затраченное время (86 400 секунд)

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

Хорошо, хватит теории. Давайте перейдем к деталям.

Держите терминал под рукой

Многие задачи можно выполнять быстрее через интерфейс командной строки, поэтому используйте его как можно чаще. Я обнаружил, что с большей вероятностью выберу командную строку, если использую эмулятор терминала, который выводит элегантный, выделенный синтаксисом текст и легко доступен с помощью сочетаний клавиш (я предпочитаю ctrol + `)

Чтобы изучить некоторые популярные варианты, выполните поиск «Эмуляторы терминалов [YourOS]» с помощью предпочитаемой вами поисковой системы. Некоторые интересные особенности, на которые стоит обратить внимание:

  • Выпадающий список стиля Quake
  • Разделение окна
  • Прозрачность фона

Используйте сценарии запуска

Когда вы открываете PowerShell или эмулятор терминала (например, cmder, Gnome Terminal или iTerm2), специальные скрипты запускаются автоматически, чтобы настроить все за вас. Эти сценарии известны как сценарии запуска оболочки, и они могут значительно облегчить жизнь.

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

Мы не будем вдаваться в подробности; однако, если вас интересует более глубокий дайвер, вот несколько ресурсов из интернета:

Где их найти

Вот расположение по умолчанию для наиболее часто используемых сценариев запуска для каждой из основных операционных систем:

Linux: ~/.bashrc
OSX:   ~/.bash_profile
Win: ~/Documents/WindowsPowerShell/Microsoft.PowerShell_profile.ps1

Откройте файл в вашем любимом редакторе текстового кода, чтобы добавить примеры, приведенные ниже.

Псевдонимы

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

Ниже приведены псевдонимы bash, без которых я не выхожу из дома. Обратите внимание, как первые два ускоряют редактирование самого ~ / .bashrc (если вы работаете в OSX и используете оболочку для входа в систему по умолчанию, используйте ~ / .bash_profile вместо ~ / .bashrc):

################################
# ALIASES
################################
# Open bashrc in VS Code (swap with your preferred editor)
alias bashrc='code ~/.bashrc'
# Tell the shell to reload bashrc (do this after edits)
alias rfrc='source ~/.bashrc'
# Update all git repos in current dir, recursively
alias gituar="ls | xargs -P10 -I{} git -C {} pull"
# CAUTION: delete all local branches in git repo
alias gitda="git branch | grep -v 'master' | xargs git branch -D"

Функции

Функции могут выполнять несколько команд в нескольких строках и принимать аргументы; в остальном они очень похожи на псевдонимы. Вот некоторые из них, которые я иногда нахожу полезными (надеюсь, они вдохновят вас):

################################
# Functions
################################
# List file names and recent commit in a git repo:
function ls-repo {
    git ls-tree -r --name-only HEAD | while read filename; do
        echo "$(git log -1 --format="%as,%an,%s," -- $filename) $filename"
    done
}

Некоторые советы профессионалам:

  • Никогда не используйте команды из Интернета (или любого ненадежного источника), которые вам непонятны.
  • Управляйте версиями измененной копии вашего сценария запуска (удалите конфиденциальную информацию, такую ​​как ключи API) и разместите на GitHub или GitLab для легкой передачи между машинами.

Заключение

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

  1. Есть решение твоего раздражения
  2. Кто-то, вероятно, уже создал это решение
  3. Если да, используйте его (и опирайтесь на это)
  4. Если нет, создайте его

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