sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

ソフトウェア開発のマニフェストを読んでみよう

f:id:shikaku_sh:20220303140544p:plain:w200

ベタープログラマを読んでいて、ソフトウェア開発のためのマニフェストがあることを知りました。(37章 多くのマニフェスト

より良いコードを書こうと思っているコーダーが、どういったマニフェストを宣言しているのか、いくつか読んだものをまとめたいと思います。

マニフェストとは、個人や団体が方針や意図を知らしめるための文書や演説。

アジャイルマニフェスト

日本語訳が形式ばった感じだったので、自分が読むと以下のように思いました。

雑訳した例

私たちは、ソフトウェア開発のより良い方法を、実際に行ったり他人を助けたりする中で、その方法を明らかにしてきました。開発を通じて、私たちは次のことを大切にします:

  • Individuals and interactions over processes and tools
    プロセスやツールよりも、個々人の意思疎通
  • Working software over comprehensive documentation
    包括的なドキュメントよりも、実用的なソフトウェア
  • Customer collaboration over contract negotiation
    契約よりも、顧客とのコラボレーション(協調)
  • Responding to change over following a plan
    計画よりも、変化への対応

この項目はどれも価値を持ちますが、太字の項目はより大切です。

クラフトマンシップマニフェスト

このマニフェストは、アジャイル開発が実践を重要視するあまり、開発者が優れたコードを書く責任感を低下させているのではないか、というところから生じたマニフェストらしいです。

残念ながら日本語に対応していませんが読んでみたところ、たぶんこんな感じではないかと思います。

雑訳した例

Raising the bar. (水準を引き上げる)

ソフトウェアのクラフトマン(職人)を目指す私たちは、ソフトウェアの開発、他人が技術を学ぶことを助けることで、プロフェッショナルなソフトウェア開発の水準を引き上げています。

開発を通じて、私たちは次のことを大切にします:

  • Not only working software, but also well-crafted software
    動作するソフトウェアというだけではなく、良くできたソフトウェアであることも大切
  • Not only responding to change, but also steadily adding value
    変化に対応することだけではなく、しっかりとした付加価値があることも大切
  • Not only individuals and interactions, but also a community of professionals
    個々人の意思疎通だけではなく、プロフェッショナルなコミュニティであることも大切
  • Not only customer collaboration, but also productive partnerships
    顧客とのコラボレーション(協調)だけではなく、生産的なパートナーシップ(協調)も大切

つまり、左項目を追及すると、右項目が欠かせないことだとわかりました。

リファクタリングマニフェスト

リファクタリングに関するマニュフェストも Bas Vodde, Lasse Koskela の書いたものがあります。

見ての通り、パッションを意識したような内容です。

雑訳した例

  1. 製品を長持ちさせよう!
    リファクタリングとは、製品を長持ちさせる機会を作ることです。(コードを)捨てないで、縫合しよう。コードを終わらせないで、改善します。リファクタリングは、無駄なコストではありません。(プログラムの)変化を拒んでいる不必要に複雑になったコードへの対策(改善)です。
  2. デザインはリファクタリングしやすいようにシンプルにすべき
    Product designers: あなたの製品を簡単に変更できるように作ります。クリーンに理解しやすいコードを書きます。
    Consumers: 継続的にリファクタリングされている製品を買うか、なぜ開発者がリファクタリングしていないのかを明らかにします。しつこく、口やかましくなって。
  3. リファクタリングはリライトではない
    書き直し(リライト)することは、壊れたもの (bit) を捨てることです。これは、私たちが話をしているリファクタリングではありません。
  4. 切り捨てないものは、より強くなる
    コードをリファクタリングするたびに、コードにポテンシャル、歴史(履歴)、精神、そして、美しさが加えられます。
  5. リファクタリングとは、想像的な挑戦
    リファクタリングは、想像力を働かせます。新しい技術(ツール、素材等)を使うことで、可能性を先導します。(デッドエンドではなくて)
  6. リファクタリングはファッションを生き残る(流行に左右されない)
    リファクタリングは、スタイリング(デザインの様式)や流行と関係ありません。リファクタリングされたコードに期限はありません。
  7. リファクタリングとは、発見すること
    オブジェクトをリファクタリングすると、どのように動作するのか、驚くようなことを学ぶことができます。(または、うまくいかないか)
  8. 悪いときでもリファクタリングすること
    もし、あなたがこのマニフェストが不景気なときは例外と思っているなら、それは違います。これは努力の問題ではなくて、メンタリティの問題です。
  9. リファクタリングとは、独立性のこと
    レガシーコードの奴隷にならず、レガシーコードのマスターになりましょう。もし、コードが壊れているなら、リファクタリングをしてより良い状態にしましょう。もし、あなたがマスタになれたら、他人にも力を与えてください。
  10. あなたは何でもリファクタリングすることができる。まったくのゴミでも
    しかし、完全なゴミのリファクタリングは避けることをおススメします。リファクタリングは、コードがゴミになるのを防ぐものだから。

コードの書き直しを止めましょう。リファクタリングを始めましょう。

感想

マニフェストやポリシーは、個人的に NOT(~してはいけません)のようなものは、あまり好きじゃないです。Let's(~しよう)のほうが好きです。気持ちよく受け取れるというか。

ベタープログラマ自体は、技術書というよりは啓蒙するような内容です。良い習慣・考え方を知ろう! みたいなものなので、これで新しいコーディングテクニックが身につくわけじゃないと思います。

NOT(~してはいけません)のようなものを考えるときは、「誓約」と「制約」と考えたりもします。(HUNTERxHUNTER)いずれにしても、いままで以上の力をパフォーマンスとして発揮し、発揮したパフォーマンスを正しいベクトルに出力することで、より良いプログラマになろう、というものだと思います。

参考