HN 日本語サマリー

← 一覧へ戻る
プログラミング

小さなプログラミングのコツは重要

Small Programming Tricks (will-keleher.com)

605 pointsby signa11266 コメント

要約

この記事では、日々のエンジニアリングの生産性を向上させる、小さくも価値の高い知識の断片について論じています。例えば、ターミナルでの履歴検索の効率化、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がどのように機能するかを思い出したりするのに役立ちます。1

  • PostgreSQLとMySQLはどちらもexplain analyzeをサポートしており、これは最適化しようとしているクエリを実際に実行し、そのパフォーマンスに関するさらに多くの情報を提供します。

  • 正規表現では、単語境界アサーションであるにより、単語の開始または終了を簡単に見つけることができます。

  • メトリクスにログ(対数)を使用して、関心のあるフィールドの値の分布を把握できます:

    const bucket = Math.floor(Math.log10(userInGroupCount))
    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;
        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のトリックを知っていたとしても、その10番目のドキュメントやテクニックが時間を節約してくれるかもしれません!そして、1日1つのトリックは、人々を知識で圧倒しない適切な数であり、時折有益な議論を sparkさせることもありました。あなたの会社のシニアエンジニアであれば、同様のことをすることを検討してもよいでしょう。

  1. このテクニックはJulia Evanのブログで初めて見たと思いますが、彼女の執筆はしばしばこの投稿の背後にある考えを完璧に要約していると思います:「小さな知識の断片は強力で、楽しく、親しみやすいです!」↩︎