『The Creative Programmer』は、プログラマと創造性の関わりについて書かれた書籍です。〇〇プログラマというタイトルの本はたくさんあれど、久々にちょっと心を熱くさせる〇〇プログラマだと思いました。
ソフトウェアエンジニアの裾野が広がり、今ベテランエンジニアからよく聞くような問いが、本書の序文に書いてあります。
なぜ新人は我々のフレームワークやベストプラクティスに追いつくことが多いのに、時には本当に重要なこと、つまりチームへの統合や問題解決を理解できないのか?明らかな技術的習熟度を超えて、本当に優れたプログラマーとは何か?
創造性を高めるための7つの要素
『The Creative Programmer』では、プログラマとして創造性を高めるために、7つの要素を掲げています。
- 技術的知識
- コラボレーションとコミュニケーション
- 制約
- 批判的思考
- 好奇心
- 創造的な心の状態
- 創造的技法
技術的な知識
『達人プログラマ』や『RANGE(レンジ) 知識の「幅」が最強の武器になる』に書いてあるように、専門領域だけを深めるよりも、それ以外のインプットも増やすことの重要性が説かれています。
インプットの手段も書籍に限らず、YouTubeを見たり、読書会に参加したり、Podcastを聴いたり多様化すると良いし、悩みを他人に相談するでも良い、としています。
「知っていること」が創造的なアイデアに向き合うのを潜在的に閉ざしてしまいがち、愚かにみえるアイデアを却下してしまいがち、になるので、知識の多様性はその面でも重要です。
コミュニケーション
創造性を高めるコミュニケーション事例の研究成果が色々紹介されていますが、中でもエコーチェンバー効果は一番注意すべきポイントだと個人的には思いました。SNSなどが顕著ですが、自分の考えを強化する方向にしか働かないプラットフォームでしか活動していないと、どうしてもクリエイティビティが損なわれてしまいがちです。これは「技術的な知識」のところの入力を多様化しよう、ということも解決策になります。真の批判的なフィードバックを常に受け入れるようなチーム活動やコラボレーションができていなくてはなりません。
なお私個人としては、ChatGPTに自分のアイデアを渡して「このアイデアについて考えうる限りの批判的意見を出ししてくれ」と、批判生成マシンとして使っています。
制約
この分野ではお馴染みの横井軍平の「枯れた技術の水平思考」が引用されているのですが、課された制約が水平思考(ラテラルシンキング)を産み、創造的なアイデアを産むと言います。
役に立つ制約は、以下のように分類されます。
- 偶有的制約
- 内在的制約: 選択した要素技術や環境に伴う制約
- 課された制約: ステークホルダーから提示される制約
- 本質的制約
- 自分で課した制約: 設計上のルールなど自分で自由度を律するための制約
※ 偶有的/本質的の分類はアリストテレス由来だと思われます。
「自分で課した制約」はコントロール可能なので、これを使って創造性を意のままに高める、という話ではなく、やはりここでのポイントは「水平思考」のようです。
なお水平思考に関しては、以前渾身のまとめを書きましたので、そちらを参照ください。
まとめ
職業プログラマにとって、クリエイティビティがどれほど必要かは結局本書を読んでもわからないのですが、インプットの幅を広げるのは単純に楽しいし、水平思考も単純に楽しいのです。それでいいじゃないか、そういうプログラマが増えて欲しいという意志を『The Creative Programmer』から勝手に読み取りました。