「Software craftsmanship: Professionalism, Pragmatism, Pride」を読んだ(1)

まえおき

 日本に住んで1n年ほど過ぎているが、日本語で技術書を読むとあまり集中力が持たず(小説は問題ないので、技術書を日本語で読む習慣ができてないだけだとは思うけど)、母国語で読みたいと思っていた。最初は電子ブックリーダーを買おうかと思ったが、多用途で使えそうなタブレットを買うことを決め、どのモデルを買うか2か月ほど悩んだ。そして、ストレスフルだったある日、AmazonのFire10を衝動買いした。そして、狙ったかのように購入2日後にタイムセールで5000円割イベントが開始された…。

 届いたタブレットで初めて読んだ本が「The Software Craftsman: Professionalism, Pragmatism, Pride」だ。訳すれば、「ソフトウェア職人精神:プロ意識、実用主義、プライド(誇り)」といったものか。Craftsmanshipは辞書では職人技と出てくるが、本の内容を読むと職人精神のほうがよりベターな気がする。(日本にはまだ翻訳本が発売されてなさそうだ)

 本の内容とは若干外れるかも知れないが、SIerの会社に入って、今は幸い自分をエンジニアと言えるような手を直接動かせるやりたいと思っている業務にかかわっている(もちろん全部ではないが)。しかし、年次が上がるとマネジメント業務をいやでもやらないといけなくなり、先輩たちを見ていると開発ツールよりエクセルやパワーポイントを触っている時間が多いように見える。このままだと、自分では手を動かす時間がどんどん少くなり、開発に関してはメンバーにタスクを渡し、進捗管理するだけになりそう。もちろん、プロジェクトにはマネジメントも大事とは思う。しかし、マネジメントの業務が主になった自分を私はエンジニアと呼べなくなりそうだった。

 一方、今担当している業務は小さい規模ということもあり、バックエンドからフロントエンドまで一人で構築している。自分なりには頑張って構築または開発しているわけだが、後から見ると、「こうしたほうがよかった」と後悔するところが出てきてしまう。また、今後新しいメンバーが複数人入ることになり、リーダ(一応)として、開発を進めていけばいいかという悩みもある。(マネジメントの話と合わせて、こうして自分の開発時間が減るのは悲しいと思いずつ…) 

 こうして頭が想いいっぱいになっていて、今のままでいいのか、なんでもいいからアドバイスがほしいと思っていたところ、目に入ったのがこの本だった。どうすればよりいい開発者なれ、よりいいソフトウェアを作れるかについてアドバイスをしてくれる本だった。2つのパートに分かれていて、Part 1では「理念と態度」というソフトウェア職人(プロフェッショナル)が持つべき姿勢、つまりどうすればよりいい開発者になれるかについて話している。また、Part2の「完全な転換」では人材の採用方法、チームの文化形成、品質管理方法(テスト)など、どうすればよりいいソフトウェアを作れるかについて話している。まだ読んでいる途中ではあるが、ソフトウェア開発者に限らず、エンジニアなら得られるものが多い本だと感じた。より本を理解するためにPart 1の「理念と態度」部分で覚えておきたい言葉と簡略な内容、感想などを書いていきたいと思う。(母国語→日本語なので正確な訳ではない可能性がある)

 

Chapter 1. Software Development In The Twenty-First Century(21世紀のソフトウェア開発)

  • キャリアパスを決めるときは、情熱を持てるもの、心から楽しめることを選ぶことだ。

  • ソフトウェア開発者が開発業務だけすれば良い時期はもう過ぎた。コーディングに関することではないと関係ない問題という姿勢はもう許容されない。

  • コーディングは開発者のタスクの一部に過ぎない。コーディングやあるフレームワークに慣れているからといってシニア開発者にはならない。これから開発者は以下のような様々なことができる必要がある。

    • クライアントと会話する
    • クライアントをサポートして、必要な作業を定義する
    • テスト・デプロイ自動化
    • 進捗状況の報告
    • 開発日程と費用算出
    • アーキテクチャ設計
    • 新しい技術を追跡する
    • (一部省略)

 ここでは、導入部分としてアジャイルとインターネット、クラウドなどの技術の発展がソフトウェア開発の方式を変えていると話している。また、そのことによって開発者とビジネス側の人がより密になり、シニア開発者になるためにはコーディング実力だけでは足りなってきているという。

 

Chapter 2. Agile(アジャイル)

  • 企業は特定分野のプロフェッショナルではなく、ジェネラルリストを探している。

  • コードを作成する能力はソフトウェア職人が持つべき最小要件である。

  • 多くの企業はアジャイルの工程の改善には関心があるが、技術的改善については完全に無視している。

  • アジャイルとソフトウェア職人精神は相互補完的だ。

  • アジャイルがうまく回るためには、プロフェッショナルのソフトウェア開発者が必要だ。


 ここでは、アジャイルの歴史からアジャイルの原則を話し、多くの企業がコンサルタントやアジャイルコーチから工程(開発手順)を変えることをするが、開発者の訓練(プロフェッショナルさ)には全く気を払っていないと指摘する。なので、アジャイルを導入したものの、ソフトウェアの品質は向上しないか、むしろ悪くなっているという。

 この章を読み、自分のエンジニアとしての品質に対する姿勢が足りなさを感じた。私が今担当している業務もアジャイルぽく行こうということで、1か月単位でスプリントを切って開発をしている。品質は、あまりよくないと思う。1か月に計画した機能を開発するために、とりあえず動くように開発、テストを行う。コードは書けば書くほどスパゲッティになっていて、自動化されてないテストはケース作成から完了まで3日ほどかかる。テストを完了しても、本番で動作確認をするとき、エラーになってしまう場合もあった。品質については全く思ってなく、とりあえず利用者側が要求する技能を早く出すことに集中していたのだ。今後は品質についても考慮するようにしたい。まずは自分の姿勢の変換から行い、周りへの説得もやっていかないと思っている。

 

Chapter 3. Software Craftsmanship(ソフトウェア職人精神)

  • ソフトウェア職人精神とはソフトウェア開発のプロフェッショナリズムに対するものだ。

  • ソフトウェア職人精神とは、自分自身が選択したキャリアに責任感を持ち、続けて新しいツールと技術を学び、成長するという心構えだ。

  • 自分がすること(業務)にオーナーシップを持ち、プロフェッショナルに行動し、クライアントの希望を実現できるように手伝う。また、他の開発者に学び自分の知識を教え、経験が足りない開発者たちをメンターリングすること。上のことを常に意識しているのなら、あなたはソフトウェア職人だ。


 ここでは、ソフトウェア職人精神とは何か、生まれた背景などについて説明している。

 確かに、ネットや周りで「この人すごいな」と思う人は上記のような行動をしているように見えた。技術を学ぶことを続け、学んだ知識を利用してクライアントの希望にあう設計をする。またそれを勉強会などで世の中に発表し、ディスカッションを行っている。

 

Chapter 4. The Software Craftsmanship Attitude(ソフトウェア職人の姿勢)

  • ”君のキャリアとプロフェッショナルとしての未来は誰の責任だ?”

  • クライアントを満足させるための投資は自らするべきた。

  • もちろん企業が社員に投資するのは望ましいことだが、プロならそれを会社側の責任や義務と思ってはならない。そのような機会が与えられるなら、お互い利益になる配慮と受け入れなければならない。企業が開発者に自己研鑽の時間を与えてくれるなら、開発者はより有能になり、より効率的に働くようになる。熱情ある開発者ならそのような配慮がある企業を選ぶだろう。

  • プロフェッショナルとして認められたいのなら、プロらしく行動しなければならない。ソフトウェアプロフェッショナルはいろんな業務の中ビジネスに貢献し、ソリューションにオプションを提供し、開発するソフトウェアの技術、品質、実現に最上級のサービスを提供するべきである。

  • 正社員であれ、派遣社員であれ、アウトソーシングされた開発者であれ、ソフトウェアプロフェッショナルとしてクライアントの関係を見る観点と態度が変わってはいけない。

  • 新しいことを学び、時代に遅れないように自分自身を訓練させる方法を知る必要がある。時間をどう効果的に使用できるかを把握しておかなければならない。学びと訓練が止まる瞬間、私たちのキャリアも止まってしまう。

  • 時間がないということは言い訳にならない。正確に同じ時間がみんなに与えられる。違いはその時間をどのように使うかである。


 ここでは、ソフトウェア職人が持つべき姿勢と考え方について話している。まず、驚いたなのが企業が社員に投資すること(例えば、研修や本購入)を当たり前と思ってはいけないと書いてあることだった。会社で研修に行くことを推奨しているので、それが当たり前と思っていた。しかし、「君のキャリアとプロフェッショナルとしての未来は誰の責任だ?」という文章をみて納得した。私のキャリアは私に責任がある。望むキャリアを実現するための投資は自分でやらないといけないのだ。会社が指示した研修に行くだけでは、会社が望むキャリアに進むだけになる。

 続けて、自分のキャリアの形成方法として読書、ブログ、競技プログラミング、サイドプロジェクトなどを話し、業務と生活のバランスをうまくとり、キャリアに投資できる時間(自己研鑽)を作る必要があると話している。ここは、ちょっと悩むところがある部分だった。例えば、法で定められたギリギリの残業時間まで常に働いている人は自己研鑽のための時間を出すことができるだろうか。業務外の時間は疲れの回復、生活の中の必須タスクを処理するだけで精一杯な気がする。自己研鑽の時間も作れない会社やめるしかないのかなと思う。まあ、本ではあくまで一般的な場合を話していて、最悪な例をあまり深く考えてもしょうがないかなとは思っているが…。とりあえず、自分は一般的な場合に該当するので、趣味の時間をもう少し減らし、自己研鑽の時間にもう少し投資しなければと思う。

 

付録

本の販売リンク(Amazon.jp):https://www.amazon.co.jp/Software-Craftsman-Professionalism-Pragmatism-Robert/dp/0134052501/

 

Popular Posts

CloudWatch EventsはAmazon EventBridgeになるらしい

PythonのDict型をDynamoDB形式のJsonに変換する

CloudFormationテンプレート内のStep functionsのState machine定義をS3に置けるようになった