はじめに
当記事では達人プログラマー第二版の38.偶発的プログラミングについて解説をする
筆者は背景の知識の理解が不足したまま勢いだけでコードを書く傾向がある
そのために業務の理解が不足し仕事をうまく進められない状況が発生した
その際にこの偶発的プログラミングを読むようにアドバイスをいただいた
そこでその内容の理解と解説を行い、偶発的プログラミングを避けられるようになることを狙いとする
本記事は以下の書籍を元に作成されている
所感以外は本書の抜粋または要約となる
偶発的プログラミングとは何か?
幸運と行き当たりばったりの成功に頼るようなプログラミング
誤った結論を前提として行動し誤った結末に陥る
それを避けるためには?
・もし何らかの機能を呼び出す場合には、ドキュメント化されている振る舞いのみを前提とするようにする
そして、何らかの理由でそれができないのであれば、仮定をドキュメント化しておく
・常に何をやっているのかを意識する
・新人プログラマーに対して、コードの詳細を説明できるか?できない場合偶発的プログラミングに頼っている可能性が高い
・目隠しでコーディングしてはいけない。完全に理解していないアプリケーションを作成しようとしたり、なじみのない技法を使おうとするのは、偶発的なプログラミングに通じる近道。上手く実行できてい成る理由を説明できないのであれば、おかしな動作をする理由も説明できないはず
・まずプランから進めるようにする
・信頼のおけるものごとだけを前提とする。偶然や仮定に依存してはいけない
・仮定をドキュメント化する
・単にコードをテストするのではなく、あなたの置いた仮定もテストする。推量は抜きにして、実際に試してみる。
・作業に優先順位をつける。そして重要な部分に時間をかける。もし基礎やインフラが正しくないのであれば、本質的でない部分は何の意味も持ちません。
・過去のしがらみにとらわれてはいけない。既存のコードによって未来のコードが影響されないようにしてください。陳腐化したコードがあれば、それが全部であっても置き換える。
所感
正直こういったやり方は時間がかかるので敬遠する傾向があった
時間が取られ、それによって得られる成果は小さいものに感じていた
社会はより速くより良い物を求めているのでそれに合わせて多少出来栄えに問題があっても速くリリースすることが求められていると感じていた
また思考に時間がかかることは一般的に推奨されることでないと感じていた
より優秀な周りや成果が上がらない自分の境遇により焦りがあり焦りのため精密な思考よりも短絡的な成果を欲していた
考えることは大変で頭が混乱してしまうのはフラストレーションが溜まる
またわからない部分を質問するのはフラストレーションになりがちである
相手の時間を奪っているという感覚があるためなるべく避けたいのと理解できないとイラつかれる経験があるため聞くのことがやや苦手である
そういったコミュニケーションの問題から自己判断を下しがちだしその点をすり合わせるのも苦手な傾向がある
逆に聞きすぎて鬱陶しがられた経験もあるためその辺りのコミュニケーションもまた苦手である
ただそういったやり方に問題が発覚した以上修正の必要性は大きいと感じている
今日明日ですぐに修正できるものではないだろうし、思考するトレーニングや適切な質問の仕方も必要になってくると考えられる
少しずつ良くなるために偶発的プログラミングを避けられるように努力をしたい