プログラミング
小さなプログラミングのコツは重要
Small Programming Tricks (will-keleher.com)
要約
この記事では、日々のエンジニアリングの生産性を向上させる、小さくも価値の高い知識の断片について論じています。例えば、ターミナルでの履歴検索の効率化、SQLのSELECT文のFROM句省略、データベースクエリの実行計画分析、正規表現の単語境界、JavaScriptの新しい配列メソッド、Node.jsでのHTTP接続管理、Gitの便利なコマンド、そしてシェルのglobstar機能などが紹介されています。これらの小さなコツは、学習コストが低くても大きな効果をもたらし、日々の作業を効率化するだけでなく、チーム内での知識共有にも役立つと述べられています。
全文翻訳
日々、エンジニアリングの生産性のかなりの部分が、小さな知識の断片から生まれていると思います。
それは、言語機能の存在を知っていること、説明のないTCP遅延がTCP_NO_DELAY設定とNagleアルゴリズムに関連している可能性を知っていること、困難な状況から抜け出すための適切なgitの呪文を知っていること、あるいはsedを使ってファイルを書き換えるトリックを知っていることです。
ある意味では、これは自明のことです。知っていることは何でも、より小さな知識の断片で構成されるでしょう。
もちろん、それらの小さな知識の断片は重要です。
しかし、私は、それほど多くの精神的なインフラを必要としない、特に価値のある知識の断片がいくつかあると考えています。
ディレクトリ内で簡単なサーバーを起動するために python3 -m http.server を使うのにPythonの知識は必要ありませんが、それでも作業をわずかに楽にするかもしれません。
いくつかの例を共有しましょう。
おそらく、Ctrl+Rでターミナルのコマンド履歴を検索できることはご存知でしょうが、fzfをインストールすると、Ctrl+Rでファジー検索ができるように設定できます。
さらに強力な機能が必要な場合は、atuinがシェル履歴を検索可能なSQLiteデータベースに置き換えます。
per-directory-history を使うと、特定のディレクトリで実行されたコマンドの検索と、過去のすべてのコマンドの検索を切り替えることができます。
最後に、保存する履歴の量を設定できます。
stackoverflowの質問。
FROM句なしでSELECTを実行できます。
これは、データベース内の関数の動作をテストしたり、SELECT TRUE <> NULL がどのように機能するかを思い出したりするのに役立ちます。
PostgresSQLとMySQLはどちらもexplain analyzeをサポートしており、最適化しようとしているクエリを実際に実行し、パフォーマンスに関するさらに多くの情報を提供します。
正規表現では、単語境界アサーションである \b を使うと、単語の開始または終了を簡単に見つけることができます。
対数を使用して、関心のあるフィールドの値の分布を把握できます。
metrics.increment("my_metric", { bucket });
最新のJSはArray.flatMap、Object.entries、Promise.withResolversをサポートするようになりました。
NodeJSでは、https.Agentを作成し、それをhttpリクエストに提供することで、外部リソースへの接続を開いたままにすることができます。
fetch(url, {method, agent})
これはレイテンシに劇的な影響を与える可能性があります。
git log -S pattern ("git pickaxe") は、コードベース内の文字列を追加または削除したすべてのコミットを取得できます。
特に古いコードベースでは驚くほど役立ちます!
(git log -G pattern も同様ですが、その行が移動された場合も表示します)
cd - と同様に、git checkout - を使用して以前のHEADをチェックアウトできます。
おそらくfindは必要ないでしょう。
findコマンドの多くは、**/*.md のようなグロブで置き換えることができます。
ほとんどのシェルはこれを標準でサポートしていますが、bashでは shopt -s globstar で有効にする必要があります。
同様に、ほとんどの人はgrep、ack、またはagの代わりにrg (ripgrep) を使用したいと思うでしょう。
zshの高度なオートコンプリート機能はデフォルトで有効になっていません。
if type brew &>/dev/null; then FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}" fi autoload -Uz compinit compinit
これらのことのほとんどは、すでに知っているかもしれません!
あるいは、これらの小さなトリックがまったく役に立たない分野で働いているかもしれません。
この特定のトリックのセットがあなたに役立たなくても、長年にわたって蓄積してきた、あなたの仕事を楽にする独自のトリックの隠し場所を持っていると確信しています。
企業では、さらに多くの知識が、この種の小さくも高レバレッジな塊になると考えています。
$PROBLEM をデバッグするには、$DATA_SOURCE を使用します。
$PERSON は $AREA について多くのことを知っており、行き詰まったら喜んで助けてくれます。
$HARD_THING については、$OVER_HERE に良いドキュメントがあります。
$THING が発生した場合、手動でスケールアウトする必要があります。
サービスのローリング再起動を行うには、$THIS_COMMAND を実行します。
この $UTIL は $THAT_PROBLEM をスクリプト化しやすくします。
以前の会社では、毎日エンジニアリングチームにSlackでトリックを共有していました。技術的なものと会社固有のものの両方で、人々はそれらが非常に役立つと感じました。
9つのトリックを知っていても、その10番目のドキュメントやテクニックが時間を節約してくれるかもしれません!
そして、1日1つのトリックは、人々を知識で圧倒しないための適切な数であり、時折有益な議論を spark させることができました。
あなたの会社のシニアエンジニアであれば、同様のことを考えてみてもよいでしょう。
このテクニックを最初にJulia Evanのブログで見たと思いますが、彼女の文章はしばしばこの投稿の背後にある考えを完璧にカプセル化しています。
「小さな知識の断片は強力で、楽しく、そして親しみやすい!」