Magnolia Tech

いつもコードのことばかり考えている人のために。

プログラミングのプラクティスへの向き合い方

結局これ

『良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方』は、駆け出しからマネージャ、経営層までコードに関わる人、コードからの恩恵を得る人、みんなが読むと良い一冊ではないでしょうか

面白かったので土曜日の午後に一気に読み切ってしまった。今年は、ソフトウェアやシステムに関する技術書が豊作な年ですね。10年後でも十分に通用する本ばかり出版されていますね。

本書『良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方』もそんな1冊です。

仮に、この本を駆け出しエンジニアの時に買っても、その後のキャリア......シニアエンジニア、マネージャー、人事や経営と、色々な立場の時に「使える本」になります。それは、この本が技術を理解するだけでなく、「エンジニアの価値観を理解するための本」と言ってもいいからでしょう。


  • 駆け出しの人は、「良いコード」と、「悪いコード」の区別の仕方、というより、そもそもそういう区別があること自体を理解するのに読むと良いです
  • 駆け出しを過ぎたくらいの、目的のコードがとりあえず書けるようになった人は、自分の中の成功パターン以外にも色々なプラクティスを網羅的に学ぶのに読むと良いです
  • ソフトウェア開発を指導する立場の人は、良いコードと、悪いコードの区別を教える際の語彙や概念を、オレオレ理論ではなく汎用的なプラクティスとして伝えるための教材として読むと良いです
  • 人事や、組織をマネジメントする層の人は、ソフトウェアを取り巻くエンジニアが何を重要視していて、そしてそれはなぜなのか?という価値観と、その背景をを理解するために読むと良いです
  • ソフトウェアの出来映えや、開発スピードがビジネスに大きく直結する組織の経営層は、コードにはさまざまな書き方が有って、それがビジネスのスピードに影響するを理解するために読むと良いです

ソフトウェアのプラクティス、全部一人でやっていれば導入するのもしないのも一人の判断でできるけど、組織で、事業としてやっている場合はそうはいかず、いくつかの階層に別れてきます。

それぞれの層がお互いにコミュニケーションを取るためには共通の理解・語彙が必要で、この本にはそのために必要なことがたくさん詰まっている、詰まり過ぎている。

とはいえ、実際のプロジェクトでは、そのレイヤーにおける責任を持つ人が適切な判断をして、意思決定をしないといけないです。で、その時に、そこに悪気が有る人は居ないし、みんなそれぞれがやるべきだと思っていることを一生懸命やっているはずなんですけど、上手く行かない時がある。

で、そこに無いのは、共通の語彙であり、立場が異なる/階層が異なる人同士のコミュニケーションだったりします。

そんな時に、真ん中にこの本が有ると、少し世界は分かり合えるのかもって思いました。

この本で触れられている実態を表していない命名、複雑すぎる条件分岐、重複するコード...どれも現実のコードに出てくるけど、誰も悪いコードを書きたいと思って書いている人は居ないはずなんです。目の前の課題を解決するために一生懸命やっているはずなんです。でも、悪いコードが誕生してしまう、放置されてしまう、それが後世の人を苦しめてしまう。

駆け出し以外の人は、「なぜそれが起きてしまうのだろう」という視点で読むと良いと思いますし、それを考えなければ結局変わらないですよね。闇雲にこの本を渡して、「さぁ、ここに書かれているのは悪いコードの例だから、そんなコードは書いてはいけません」なんていう”指示”を経営層や、マネージャーが言い出しても、何も良くならなくて、「なぜ?」をちゃんと考えていかないといけないし、そこにある別の価値観の存在を理解しないといけないんです。


で、ようやく本書の内容に触れると......とにかく第1章がめちゃめちゃ良い。

扱っているのが、「命名」、「条件分岐」、「データクラス」の三つのテーマ、順番で簡潔に悪いコードの例を示していて、まず最初が命名の問題を扱っているのが良くて、それは命名の不味さは誰に説明してもその問題が分かり易いけど、条件分岐や、データクラスは、コードの構造の問題は概念的な話なので少し考えないと納得感につながりづらいから。

命名は「実際のコードと照らし合わせて明らかにおかしい」と言いづらいので、まず命名の話が来ているのが具体的で入り易い。

で、次に複雑すぎる条件分岐の問題が出てくる...たぶん、プロダクションコードで経験する様々な「困る」のうち、この2つでかなりの割合を占めていると思われるので、その実感と合っているし、その背景としてデータクラスのような「構造の不味さ」が有ったりする。コードを読み始めて、命名のおかしさに気づき、構造のおかしさに戸惑った次に来るのは、データクラスのような「そもそもの構造、ソフトウェアアーキテクチャ設計」に起因していたりするから、この3つ、この順番で説明しているのが凄く納得感がある。そりゃほかのも大事だけど、この3つ、この順番に意味がある。


非常に内容が多岐に渡るので、個人的には読む順番としては第1章→第2章→第10章→第6章あたりをみっちり読み込むといいかなと感じました。すぐに改善できるところと、チームとして、組織としてどう変えていくのか、コンセンサスを得なければ進められないところが有ると思うので(チームで一人だけ勝手にオレオレルールを持ち込んではいけないので)、手をつけ易いかなと。

という訳で全編、学びしかない良書なので、とにかくいますぐ本屋に買いにいきましょう。

それに、なんか最近こんなに技術書がバーンと話題になることも少ないし、みんな本屋行って、積まれているところを見て、買うといいじゃないですか、お祭り感有って。


今年の技術書の豊作っぷりはすごいですね。どれも10年は内容が持つ、お買い得な本だな、という印象です。

blog.magnolia.tech

blog.magnolia.tech

blog.magnolia.tech

良い技術書は、書いてある内容をそのまま理解して実践する以上に、共通の語彙として同じ価値観/目線で会話をするために利用するものなので、1回読んで終わり、じゃないんですよね。

合意や、承認のために文書に何を書くか、何を書かないか

ほかに、「前提になっていない”前提条件”を書かない」「PowerPointで書くなら、スライドごとに伝えたいことはヘッドメッセージでまとめる」「図や表は情報量が増えがちなので、目線をどう動かしてほしいか、見てほしいキーワードが読んでもらえるような位置にあるか、埋もれていないか」「無意味に色をたくさん使い過ぎない」とかテクニック的なところは挙げていくとキリが無いんだけど、結局のところは上の二つに収斂していく気がする。

自分で一度書いてみた後に、「相手はこれを読んでそんな大事なことを決めたり、必要な人に働きかけてくれますか?」ってもう一回問いかけてみると良いと思います。

『システム運用アンチパターン ――エンジニアがDevOpsで解決する組織・自動化・コミュニケーション』は、誰が読み、実践すべきことが書かれているのか、その「誰」を考えながら読んでほしい1冊だった

いやー刺さりまくる名言のオンパレードみたいな1冊『システム運用アンチパターン 』。

この本で最初に出てくる具体的な事例が「パターナリスト症候群」という内容なんですけど、これまでの技術書にありがちな「作業品質向上や、効率化のため」というより、組織のアジリティを下げてしまう「重い承認プロセス」を排除するために自動化しましょう、と言っているところが良い。

なので、そもそも「承認プロセス」というのは何を軽減しようとして定義されているものか、という言語化がされていて、その要素の代替としての自動化をしましょう、という流れが素晴らしい。

第2章の内容を、組織として納得させられたら、価格分の元はとったも同然です。

ただ、興味深かったのは、それだけ「重い承認プロセス」は良くないと言っている反面、”こういったシステムは監査役がとても気に入ります”という記述が有って、監査という仕組みは必要である、という前提で書かれている点ですね。監査に耐えられるようにするためには記録のための重いプロセスが必要になってくるけど、本書では「Jiraみたいなツールでプロセスのログを取ろう!」とさらっと流されていたので、そこは受け入れるしかないっていう文化なんだなと理解しました。


引き続き、7章「空の道具箱」では、自動化には文化が必要であること、11章「命じられた文化」ではどうやって組織文化を作っていくかが語らられる。この11章を読んでどう現状を理解するか、どういう行動をするか、という所に本書の価値が有るんじゃないかっていうくらい大事なことが詰まった章。

本書のサブタイトルには「エンジニアがDevOpsで解決する組織・自動化・コミュニケーション」と書かれているが、経営層やマネジメント層の理解や、支援無しには絶対に上手くいかないことばかりであって、結局この本を「エンジニアだけが」読んで理解して共感しても意味が無くて、「組織をどうしたいの?組織からどんな価値を出していきたいの?」を考えるべき立場の人が読んで実際に行動しないと意味ないなーって。


あと、冒頭の2章の話に戻ると、重い承認プロセスを作りたい人と思って作っている人は居ないと思うけど、結局「説明責任」を誰が誰に果たすべきか?というところに尽きると思うですよね。

そして、方法論を受験勉強みたいに形式的に理解して、教科書通りに対応しようとしすぎると、こんな悲劇が起きるんだよなぁって。

www.itmedia.co.jp


具体的な方法論については、これまでいろいろなところで語られきた話の集大成といった趣なので、必ずしも本書で初めて知ることばかりではないし、別にその通りにやることが必ずしも正しい訳じゃないけど、どうやって発想や、文化を変えていくか?その考えるきっかけであり、会話をするための語彙を獲得するために読むのが良いと思いました。

「誰が、読むか」「誰と、読むか」ですね。

Anker 521 Charger USB PD 40W ホワイト

USB PD対応の充電器は、複数ポートタイプだと、一つだけ刺した時と、二つ以上刺した時で給電される容量が変わってしまうのでちょっと分かりづらいと思っていて、ポート一つのものが迷わず、間違えないので、分かりやすいと思っています。

で、この「Anker 521 Charger USB PD 40W」は、一つ指すと40W、二つ刺すとそれぞれ20Wの給電になるタイプ。HomePod miniを二つを同時に充電するために購入(HomePod miniは20Wが必要)。

プラグが折りたたみ式ではないことからも分かる通り、挿しっぱなしにしておいてスマホ2台とかを同時に充電する用ですね。

パッケージが無駄に凝っているのも、このシリーズの特徴です。

同じくらいの容量の、スマホ2台とか、HomePod mini2台とかを充電する用にはいいですね

Anker PowerLine III Flow

f:id:magnoliak:20220418011227j:plain

外出時の電源ケーブル用に、「Anker PowerLine III Flow」を購入した。

シリコン素材のケーブル表面は、触り心地がいいけど...果たしてUSBケーブルにこの触り心地が必要なのかはよく分からない。

ケーブル自体が微妙に太いので、箱から出した時点で写真のように、なんか雑な感じで巻かれているところがこれまでのモデルとちょっと違うところかもしれない。シリコン素材、かつ太さがあるからまとまらないんだろうけど、変に絡まったりもしないし、滑りもいいので、さっと伸ばせるところがいいところ。

「問題の解決に必要なのは、問題の詳細」「問題への意思決定に必要なのは、問題の構造」だったりしませんか

意思決定する人が必ずしも「問題の詳細や、細かな経緯」が知りたいのではなく、「問題が及ぼす影響と投下すべきリソース」だったりしませんか。

自分が言おうとしていることと、相手が知りたいことがズレていたりしませんか。