技術デューデリジェンスはコード品質のコンテストではありません。それにもかかわらず、これから受ける側のチームは、たいてい見当違いのところに時間を注ぎ込みます。会社を買おうとしている人間で、あなたの設計した抽象化に点数をつけたい人はひとりもいません。買い手が知りたいのは、このシステムを保有し続けるのにいくらかかるのか、そして資金が動いたあとにどれほどひどいことが起こりうるのか、その二点だけです。 この捉え直しが大事なのは、最初に直すべきものが変わるからです。見た目は汚いけれども動いていて、チームが中身を理解していて、安全に手を入れられるコードは、軽微な指摘で終わります。逆に、洗練されてはいるがひとりの人間しか理解していないコードは重大な...
プログラミングチュートリアル
実践的なプログラミングチュートリアル。Python、C++、JavaScript などで明快な例とベストプラクティスを解説。設計、テスト、性能も学べます。
データベース性能の改善作業は、たいてい誰かが「もっと大きなインスタンスにしよう」と言い出すところから始まり、そしてたいていは、ページを開くたびにひとつのクエリが400万行を順次スキャンしていた、という発見で終わります。制約はもともとハードウェアではありませんでした。制約は実行計画のほうにあったのです。 この筋書きは十分に繰り返し起きるので、既定の仮説としてはっきり言葉にしておく価値があります。アプリケーションが遅く、そのうえデータベースが忙しいのなら、原因はほぼ必ず、ごく少数の特定のクエリであって、処理能力全体の不足ではありません。そしてサーバーを大きくする対処は、テーブルがふたたび育つのに必要な時間のぶんだけ、問題を覆い隠してくれ...
ソフトウェアテスト戦略は、たいていカバレッジという数字で語られます。しかしカバレッジは、この分野全体のなかで最も情報量の少ない数字です。カバレッジ九十パーセントのコードベースであっても、最もよく使われる経路でバグを本番に送り出すことがあります。カバレッジが測っているのは、テスト実行中にどの行が実行されたかであって、その行について意味のある検証が行われたかどうかではないからです。 自分たちのテストスイートを信頼しているチームは、パーセンテージが最も高いチームではありません。本当に壊れているときにテストが落ち、それ以外のときは静かにしているチームです。そしてこの性質は、お金で買うのがはるかに難しいことが分かっています。 どんなテストにつ...
フィンテックのソフトウェア開発は、誰が資金を保有する認可を持っているのかと誰かが問うその瞬間まで、ごく普通のソフトウェア開発とまったく同じように見積もられ、同じように日程が組まれます。その問いが出た時点で、案件は工学の課題であることをやめ、工学の要素を含んだ規制の課題に変わります。そして頭の中に描いていた日程は、そのままでは達成できないものになります。 技術が難所になることはめったにありません。資金を動かすこと自体はすでに解かれた問題で、成熟した事業者があり、仕様が文書化されたインターフェースがあり、初日から触れるテスト環境も用意されています。フィンテックの構築を長引かせるのは、認可上の立場と、監査に対して証跡を示す義務と、アーキテ...
MVPのソフトウェア開発が失敗するのは、実装のさなかではなく、スコープを決める会議の席です。誰かが「実用最小限の製品」と口にすると全員がうなずき、そのあとに届く機能一覧には、ユーザーアカウント、管理画面、課金、通知、ダッシュボード、そしてモバイルアプリまで並んでいます。それは実用最小限の製品ではありません。それはもう完成した製品であり、頭のなかに思い浮かべた数字の三倍の時間がかかります。 害をもたらしている言葉は「実用」、つまり viable の部分です。多くのチームはこれを「誰にでも売れるだけの出来ばえ」と読みますが、本来の意味は「これを欲しがる人がいるかどうかを知るのに、ぎりぎり足りる程度」です。 もっとも費用を節約できるスコー...
エンドポイントの本数からカスタムAPI開発の費用を見積もろうとすると、たいてい三倍ほど外します。エンドポイントそのものは、この仕事のなかでいちばん安い部分だからです。すでに自社が持っているデータを読み書きするだけの十数本であれば、力量のあるバックエンド開発者にとっては二週間ほどの作業にすぎません。 お金がかかるのは、その十数本を「よその会社が自社の事業を載せてもよい」と判断できるものへ変えていく、周辺のすべてです。セキュリティレビューに耐える認証、あとから方針を変える余地を残すバージョニング、誰も問い合わせを送ってこなくて済む水準のドキュメント、そしてどの顧客がいま困っているのかを教えてくれる運用の仕組み。「APIがあります」と「よ...
COBOL 近代化サービスの調達は、ほかのどんなソフトウェア発注とも似ていません。対象のシステムは三十年から四十年にわたって動き続けており、いま在籍している人間のなかに全体を把握している者はおらず、しくじったときの代償はスプリントの遅れではなく規制報告の失敗という単位で測られます。そのうえ、机の上に並んだ提案書はどれも同じ結果を約束しながら、価格だけが桁違いにばらついています。 本稿では、まともな契約に実際には何が含まれるのか、ベンダーの型はどこが違うのか、そして証拠に立った入札と楽観に立った入札を分ける質問はどれかを整理します。読み手として想定しているのは、その決定をあとから自分の言葉で説明しなければならない立場の人です。 見るべ...
C++開発者を採用しようという判断は、たいてい具体的な問題を伴って訪れます。何かを速くしなければならない、ハードウェアの上で動かさなければならない、あるいはネイティブのインターフェースしか提供していないライブラリと連携しなければならない、といった事情です。そこから始まる採用活動は、往々にしてC++を単一の技能として扱います。そしてこの前提こそが、期待外れに終わる結果の大半を生み出しています。 C++は一つの職種ではありません。優れたゲームエンジンのプログラマーが組み込みファームウェアではまるで生産的でないことは現実にありますし、低遅延の取引システムの専門家が、生涯グラフィカルなアプリケーションを出荷したことがない場合もあります。三人...
外部APIとの連携は、商用ソフトウェアの中でもっとも安定して過小評価される作業です。ドキュメントは明快に読め、ベンダーはクライアントライブラリを公開しており、誰かが「二週間です」と言います。その六週間後、チームはまだ、すでに返金済みの注文に対してWebhookが二度届いたときに何が起きるべきかを議論しています。 この差は能力の問題ではありません。連携の面白い部分が、リクエストとレスポンスであったためしがない、というだけのことです。本当の中身は、相手のシステムがドキュメントに一度も書かれていない振る舞いをしたときに起きることのすべてです。そして相手は必ずそう振る舞います。相手は生きた製品であり、自分たちのロードマップを持ち、あなたのリ...
Qt開発者の採用を検討する企業は、たいていブラウザではなく機械の上で動くものを作っています。計器パネル、診断ツール、ほかの誰も対応してくれないハードウェアの制御アプリケーションといった具合です。候補者の母集団はウェブ市場のごく一部にすぎず、使われる語彙も異なり、採用でよく使われる近道は通用しません。「C++」という条件だけで絞り込むリクルーターは、QMLを一行も書いたことのない人を連れてきます。 本稿では、有能なQtエンジニアが実際に何を知っているのか、2026年にこの職がいくらかかるのか、重要なスキルをどう試すのか、そしてコードを一行も書く前に決着させておくべきライセンスの問題を扱います。最後の点こそ、高くつく失敗が起こりやすいと...