1 ポイント 投稿者 GN⁺ 2024-09-28 | 1件のコメント | WhatsAppで共有

コンピュータのためのコードを書くのは難しいが、人間のためのコードを書くのはさらに難しい

  • コンピュータ向けのコードを書くことは、それ自体ですでに難しい。大きなビジネス目標を小さな論理命令へと分解しなければならないため。
  • しかし、人間向けのコードを書くのはさらに難しい。これはコンピュータサイエンスと心理学が結びついた作業である。
  • Richard Feynman の言葉を借りれば、もし電子が感情を持っていたら物理学がどれほど難しくなるか想像してみてほしい。これは人間向けのプログラミングを説明するのにふさわしい。

始めること自体が製品である

  • ユーザーのフィードバックを聞くことは重要だが、ほとんどのフィードバックは製品を頻繁に使うパワーユーザーから来る。
  • 生存バイアスが存在する。使い始めなかったユーザーのフィードバックはほとんど聞こえてこない。
  • コンシューマー製品は長い時間をかけてオンボーディングのプロセスを最適化してきた。開発ツールも同様であるべきだ。
  • オンボーディングのプロセスを製品の一部と見なし、設定を最小限にして、ユーザーが数分以内に製品を使えるようにすべきである。

人は「中核概念」ではなく例から学ぶ

  • 人はパターンマッチングに優れている。一方でコンピュータは厳密な論理に従う。
  • 多くの開発ツールのドキュメントは、コンピュータプログラムのように書かれている。これは人間には適していない。
  • 例を通じて学ぶほうがより効果的である。例はユーザーがツールを理解する助けになる。

成功の罠に落とし込む

  • プログラミングの基本モードはエラー修正である。ユーザーはほとんどの時間をエラー修正に費やす。
  • エラーを成功へ導くことが重要である。
  • エラーを機会として活用し、ユーザーを正しい道筋へ案内しなければならない。例外処理にコードスニペットを含め、警告メッセージを通じて助けを提供すべきである。

概念的な過負荷を避ける

  • 新しい概念を理解しなければならないことは摩擦を生む。
  • 2〜3個の概念なら問題ないが、8個の新しい概念を学ぶのは負担が大きい。
  • 少ない概念で強力な機能を提供するフレームワークが理想的である。たとえば React は、いくつかのシンプルな概念だけで強力な機能を提供している。

概念的ダック原則

  • 新しい概念を導入するときは、ユーザーにとって親しみのある用語を使うことが重要である。
  • たとえば、新しい値を評価するものを「関数」と呼ぶのがよい。そうすることで、ユーザーは既存のメンタルモデルを活用できる。

プログラマビリティ

  • ユーザーはコードベースの中で創造的な作業を行うことになる。
  • フレームワークのほぼすべてが「プログラマブル」であるべきだ。
  • CLI ではなくコードから直接呼び出せるようにし、設定を SDK や API に置き換えるべきである。

魔法、デフォルト、シンタックスシュガーには慎重であるべき

  • デフォルトや魔法のような機能は慎重に導入すべきである。
  • デフォルトが 97% 以上、魔法が 99% 以上のケースで適用されないなら、導入は避けるべきである。
  • コーディングはゴルフではない。コードを最小限に書くことを目標にせず、可読性を重視すべきである。

人間のためのコードを書くのは難しい

  • ほとんどのものはイミュータブルであるべきだ。
  • 「スキャフォールディング」(コード生成)は避けるべきである。
  • フィードバックループは極めて高速にすべきである。
  • ユーザーが簡単に対処できるよう、廃棄の手順を用意すべきである。
  • ドキュメントや例では、コードスニペットに対する自動テストを使うべきである。

GN⁺ のまとめ

  • この記事は、人間のためのコードを書く難しさと、その解決策を扱っている。
  • ユーザーフレンドリーな開発ツールを作ることが重要であり、それはオンボーディングのプロセスから始まる。
  • 例を通じて学ぶことは効果的であり、エラーを成功へ導くことが鍵である。
  • 新しい概念を導入するときは、ユーザーにとって親しみのある用語を使い、プログラマビリティを考慮すべきである。
  • デフォルトや魔法のような機能は慎重に導入し、可読性を重視すべきである。

1件のコメント

 
GN⁺ 2024-09-28
Hacker Newsの意見
  • 人はそれぞれ異なる方法で学ぶ

    • 中核となる概念を先に理解してから例を見ることを好む
    • 多くのチュートリアルはレゴの組み立てのように手取り足取り教える方式である
    • どのように、そしてなぜ意思決定するのかを知りたい
    • 新しいライブラリやフレームワークに取り組むときは、最初に紹介文を読み、"Getting started" のコードサンプルは飛ばす
    • 上級セクションには概念に関する議論がより多くあるため、まずそこを探る
  • 文章力と共感力が重要である

    • コードを書くこととアプリケーションを書くことは違う
    • 外向き志向の開発者はアーキテクチャとドキュメント化により気を配る
    • シンプルさが重要である
    • アプリケーションを書くことはエッセイを書くことに似ている
    • フレームワークは開発者の整理能力を損なう
  • 誰もが例から学ぶわけではない

    • 一般から具体へと学ぶ人もいる
    • こうした人々はK12教育で疎外される
  • コードは人間のために書かれる

    • 問題を包括的に理解し、利害関係者と協力し、効率的なアルゴリズムを考案することが重要である
    • コードを書くこと自体は難しくない
  • Code Completeからの引用

    • "プログラミングの小さな部分はコンピュータが読めるようにプログラムを書くことであり、大きな部分はほかの人間が読めるように書くことである"
  • コードを書くことは人間のためのものだ

    • コンピュータには機械命令で十分である
    • コードは人間の考えを形式化する方法である
  • IDEの発展に関する意見

    • 基本的なintellisenseは改善されたが、コーディングの概念は大きく変わっていない
    • 新しいツールやライブラリへのアクセスが容易になった
    • コーディング作業をコンピュータに任せ、創作に集中したい
    • 言語の細かな詳細を自動処理するツールが必要である
    • 複数のメソッドを同時に画面に表示したい
    • データ変換を自動で処理したい
  • ブログ記事の紹介

    • "Move Fast & Document Things" というブログ記事を書いた
    • コードを書く文化を共有している
  • プログラミングの学習方法に関する意見

    • 小さなプログラムを書きながら学ぶ
    • 基礎知識が不足していたため、より良いソフトウェア開発の仕事に応募できなかった
    • 基本を常に学ぶことが重要である
  • 例と中核概念の重要性

    • 例と中核概念のどちらも重要である
    • よく定義され、文書化された中核概念が必要である
    • "Getting Started" ガイドには例を含めるべきである