ソフトウェア開発における学習曲線を受け入れる by David Bernstein

Beyond Legacy Code の著者、David Bernstein (@ToBeAgile ) さんの記事を翻訳しました。ソフトウェアエンジニアは新しいことを常に学ぶ必要性がある、 それはなぜか、というお話です。

David  さんは DevOpsDays Tokyo 2019 (4/9-10) の 基調講演で来日予定です。

Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software

Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software

 

 

ソフトウェア開発における学習曲線を受け入れる

David Bernstein著 - 2018年6月20日

www.agileconnection.com

要約:ソフトウェア開発の領域では、私たちは常に必要性に迫られ、新しいスキルを習得し続けています。テクノロジーや、それに絡むベストプラクティスは絶え間なく変化してしまいますが、これは業界が急速に進化しているという意味でもあり、むしろよいことです。そしてまた、私たちが常に学習曲線の途中にいること意味します。継続的学習についてのよいマインドセットを持っていれば、ソフトウェアの世界でより遠くまで到達する手助けになるでしょう。

新しいことを学ぶときには、常に学習曲線に直面します。
まず、特定のテーマについて知らなければいけないことの全てを、あらかじめ知っているわけではないことを認めなければなりません。当たり前だと感じるかもしれませんが、人はなにかに熟達すると、しばしば、初心者のマインドセットに立ち戻るのが難しくなります。新しいスキルの習得のために、以前は役にたった古いスキルを放棄しなければならないときは特にそうです。常にもっと学ぶべきことがあり、改善の余地がある。真の達人たちが常に謙虚なのは、それを知っているからです。
きっと100年後の人たちが今の私たちのソフトウェア開発をみたら、おかしいと笑うんじゃないでしょうか。たぶん私たちが昔のまじない師を見るような感じです。もちろん仕事としてはうまくいっていたわけですが、病気の本当の原因はわからず、効果的に治療できたわけではありません。私たちも上手に仕事をこなしていますが、まだソフトウェアの本質を理解できていないのです。ソフトウェアは世界の他のすべてのものと根本的に違うため、それも不思議じゃありません。私たちは未だ、効果的な開発方法を試行錯誤しているのですから。

          *  *  *

新しいプラクティスが効果的かどうかにかかわらず、学習曲線が存在するのが普通です。あるプラクティスの適用が有益かどうかを考えるだけでも、学習曲線のなかで一層の努力が必要になります。プラクティスを取り込んで、いつもやっている活動にできたら、その努力が報われるんだと考えてみましょう。
人は生まれながらに歩く能力を持っているわけではありません。歩き方を学ぶために時間と労力をかけたのです。おそらく覚えていないでしょうけど、何度も転んだに違いありません。でもあなたは挫けませんでした。当初、歩くことはハイハイよりも大変でしたが、あきらめずに努力を続け、現在は常にこの新しいスキルの恩恵を受けている、というわけです。

          *  *  *

どんな人でも学習曲線を通過する必要があり、それが何であれ、進みながらうまくなるのです。ソフトウェア開発でも、常に新しいスキルを習得します。そうせざるを得ないからです。テクノロジーや、それに絡むベストプラクティスは絶え間なく変化してしまいますが、これは業界が急速に進化しているという意味でもあり、むしろよいことです。

このことは、私たちが常に学習曲線の中にいることも意味します。ほとんどの人は、学校から出たとたんに学ぶことをやめてしまいがちですが、ソフトウェア開発の世界では、常に学んでいくものです。私にとってこのことは、ソフトウェア分野の主な魅力の1つです。私は新しいことを学ぶのが大好きで、それに事欠きませんから。

          *  *  *

新しいものを学ぶことに慣れてくると、学ぶ困難が減っていき、より楽しめるようになります。新しいことを学んでいるなら活発な精神でいられますが、筋肉と同じように、脳も使わなければその力は衰えます。年を取ると、ソフトウェアを書くのは外国語を学ぶようなものです。神経活動を刺激し、心をシャープで機敏に保ちます。
しかし、ソフトウェア開発者というものは、仕事としてソフトウェアの生産が期待されているせいで、継続的に学ぶことが難しくなることがあります。その結果、しばしば業務時間外にも勉強しなければなりません。
20年前には、ソフトウェア開発に関する良書はあまり多くはありませんでしたが、現在は違います。開発者が読んで理解すべき、非常に重要な本がたくさんあります。フレームワークや言語に関する本もありますが、開発技法やソフトウェアでの問題解決のアプローチに関する本もあり、プロのソフトウェア開発者にとって、それらを読んでおくことは非常に重要だと思います。

          *  *  *

ソフトウェア開発分野で私の好きな本を一部あげるなら、マーチン・ファウラーのリファクタリングAlan ShallowayとJames R. Trottによるオブジェクト指向設計の第2版、マイケルC.フェザーズのレガシーコード改善ガイド、私自身の本「Beyond Legacy Code:あなたのソフトウェアの人生(そして価値)を広げるための9つのプラクティス」が挙げられます。
これらの書籍は、高品質でメンテナンス可能なコードを作成するための原則を理解するのに役立つ専門的なソフトウェア開発のコアプラクティスに焦点を当てています。残念ながら、ソフトウェア開発の分野で出版される本の大半は初心者向けです。私たちの業界は絶えず学びたいと望む専門家でいっぱいなのですが。

          *  *  *

しかし、本だけでは足りません。本からソフトウェア開発を学ぶことは、本から脳外科手術を学ぼうとするようなものです。理論的な基礎を得ることはできますが、実際に上手になるには、練習しなければなりません。
どんな科目でも達人になれる秘訣があります。初心を忘れず、常に学び、読み、練習しましょう。

 f:id:wayaguchi:20181027162228p:plain

David Bernstein (@ToBeAgile) | Twitter

 

 

本記事のレビューには松元健さん、伊藤宏幸さん、横道稔さんにご協力いただきました。