Skip to the content.

プログラマが知るべき97のこと

分別ある行動

関数型プログラミングを学ぶことの重要性

ユーザが何をするかを観察する(あなたはユーザではない)

コーディング規約を自動化する

美はシンプルさに宿る

リファクタリングの際に注意すべきこと

共有は慎重に

ボーイスカウト・ルール

他人よりまず自分を疑う

ツールの選択は慎重に

こうした問題を避けるために、まずは

ドメインの言葉を使ったコード

if(portfolioIdsByTraderId.get(trader.getId())
   .containsKey(portfolio.getId())) {...}
if(trader.canView(portfolio)) {...}

後者のが圧倒的にわかりやすい。

まあ、OOP をちゃんとやれてればいいって話。

コードは設計である

私たちは、「コードを書くことは設計をすることである」ということ――機械的な作業などではなく、創造的な仕事なのだということ――を肝に銘じる必要があります。 それをよく考えれば、ソフトウェア開発がなぜ今、危機に陥っているのか、その理由がわかるでしょう。 何より危機に陥っているのは設計です。作る人間の能力を超えるほどの高度な製品、複雑な設計が求められていて、 しかも製品を早く市場に出せという圧力が強いような状況では、設計が不十分なまま製品が作られることがどうしても多くなるのです。

コードレイアウトの重要性

コードレビュー

コードの論理的検証

コメントについてのコメント

コードに書けないことのみをコメントにする

学び続ける姿勢

誰にとっての「利便性」か

すばやくデプロイ、こまめにデプロイ

技術的例外とビジネス例外を明確に区別する

1万時間の訓練

ドメイン特化言語

変更を恐れない

見られて恥ずかしいデータは使わないこと

言語だけでなく文化も学ぶ

死ぬはずのプログラムを無理に生かしておいてはいけない

「魔法」に頼りすぎてはいけない

DRY 原則

そのコードに触れてはならない!

状態だけでなく「ふるまい」もカプセル化する

浮動小数点数は実数ではない

オープンソースプロジェクトで夢を実現する

API 設計の黄金律

API を提供するときは、API 自身のテストだけでなく、必ずその API を利用するコードのユニットテストも書く

API の利用者側がユニットテストをするときに、どういう困りごとが発生するかを事前に予知できる。

超人の神話

XYZ という例外が発生したのですが、何が問題なんでしょうか?

いや、知らねーよという話。

何も言わなくても、相手は「超人」なのだから、私の問題を理解して解決方法を提示してくれるだろう、などという期待は捨てるべき。

そうした「超人」に見えるほど優秀な人たちは、必要な情報が十分に与えられて、初めてその能力を存分に発揮するのだということを忘れないように。

ハードワークは報われない

バグレポートの使い方

余計なコードは決して書かない

最初が肝心

プロセス間通信とアプリケーションの応答時間の関係

無駄な警告を排除する

コマンドラインツールを使う

プログラミング言語は複数習得すべき

IDE を知る

限界を知る

すべきことは常に明確に

大量のデータはデータベースで

いろいろな言葉を学ぶ

見積りとは何か

Hello, World から始めよう

プロジェクト自信にしゃべらせる

「その場しのぎ」が長生きしてしまう

正しい使い方を簡単に、誤った使い方を困難に

見えないものを見えるように

並行処理に有効なメッセージパッシング

これはどうだろう……

未来へのメッセージ

ポリモーフィズムの利用機会を見逃さない

テスト担当者はプログラマの友人

バイナリは常に1つ

真実を語るのはコードのみ

ビルドをおろそかにしない

プリミティブ型よりドメイン固有の型を

ユーザの操作ミスを防止する

プロのプログラマとは?

バージョン管理システムを有効に使う

いったんコンピュータから離れてみる

コードを読む

「人間」を知る

車輪の再発明の効用

シングルトンパターンの誘惑に負けない

パフォーマンスへの道は地雷コードで敷き詰められている

シンプルさは捨てることによって得られる

単一責任原則

「イエス」から始める

面倒でも自動化できることは自動化する

コード分析ツールを利用する

偶然の仕様ではなく本物の仕様のためのテストを書く

テストは夜間と週末に

テストのないソフトウェア開発はありえない

1人より2人

エラーがエラーを相殺してしまう

他者への思いやりを意識したコーディング

UNIX ツールを友にする

正しいアルゴリズムとデータ構造を学ぶ

冗長なログは眠りを妨げる

WET なシステムはボトルネックが見つかりにくい

プログラマとテスターが協力してできること

コードは生涯サポートするつもりで書く

関数の「サイズ」を小さくする

boolean atari(int libertyCount)
    libertyCount < 2

libertyCount が取り得る値は int の範囲と同値であるが、囲碁においては 4 方向のみ判定するため、高々 4 である。

つまり、本来取り得る状態数に比べて、プログラム上で取り得る状態数が大きすぎる。

LibertyCount = {0,1,2,3,4}
boolean atari(LibertyCount libertyCount)
    libertyCount == 1 || libertyCount == 2

のように、ドメイン固有の型を利用することによって、状態数を狭め、あり得ない状態を刈り込むことができる。

コードを見る人のためにテストを書く

良いプログラマになるためには

顧客の言葉はそのまま受け取らない

エラーを無視するな

リンカは魔法のプログラムではない

ペアプログラミングと「フロー」

テストは正確に、具体的に

ステートに注目する

命を吹き込む魔法

ロールプレイングゲーム

ルーチンワークをフローのきっかけに

プログラマが持つべき 3 つのスキル

快適な環境を追求する

見知らぬ人ともうまくやるには

不具合にテストを書いて立ち向かう

育ちのよいコード

No と言えることの大事さ

名前重要

ホームへ戻る