So-net無料ブログ作成

Fedora Core 13, プログラミング言語Go, Linuxカーネルソースコード [プログラマー現役続行]

勉強会準備として、VM Playerをインストールして、Fedora Core 13をVAIO Xにインストールしました。Linuxを動かす環境としてはちょっと非力ですが(起動からログイン画面が表示されるまでに、4分18秒を要します)。

その上で、プログラミング言語Goをインストールし、『Linux Kernel Development』の勉強会用に、Linuxカーネルのソースコードをダウンロードしました(「【社内連絡】 勉強会参加者募集」)。

夜間ビルドとテスト駆動開発(2) [プログラマー現役続行]

ソフトウェア開発組織として、ソフトウェアを開発する上で、ソースコード・コントロール、テストの自動実行、継続的インテグレーション、夜間ビルドなどの環境を整えるのは、最初に行うことだと思っています。プロジェクトの初期に工数をかけても行うべきことであり、作業項目に当然入っているべきです。

しかし、このことが全く認識されることなく、環境整備も他の開発項目との間で優先順位付けをして、優先順位が高ければリソースを割り当てるという発想がされたりする場合があります。なぜ、そうなってしまうかというと、おそらく、古い開発スタイルでしか働いたことがないからかもしれません。

私を含めて、どんなに良いものでも経験して使ってみないと良さが実感できない場合があります。実際に使ってみて、良いか悪いかを判断して経験を積んでいくことが長い道のりでは重要になってきます。しかし、人に説得する場合には、相手が素直にまずは聞いてみるというのがないと、相手は経験していないのですから、非常に難しかったりします。

(「夜間ビルドとテスト駆動開発」)

Read Any Good Books Lately? [プログラマー現役続行]

Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams

Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams

  • 作者: Steve Maguire
  • 出版社/メーカー: Microsoft Pr
  • 発売日: 1994/08
  • メディア: ペーパーバック

この本からの引用で、「ソフトウェアエンジニアの心得」で話していることです。
新しい知識と見識を得るために、私は常に本を読んでいます。一冊の良い本を選べば、他の人が何十年もかかって修得してきた見識を、数日で得ることができます。それなのに、なぜ、何年もかかって試行錯誤により学ぶのですか。非常に大きな差ですよ。もし、チームのメンバーが一年間に6冊の見識深い本を読んだとしたら、そのことがメンバーの仕事にどのような影響を与えるか想像してみてください。
Steve Maguire, Debugging The Development Process

アプレンティスシップ・パターン』からの引用です。
普通の古いローテクの本の中にだけ見出せる情報もあります。ブログは優れた読み物を提供しますが、JerryWeinberg、Fred Brooks、SteveMcConnell、Kent Beck などの経験豊富な実践者の本に記録された膨大な知恵は、たとえより広い帯域情報でもってさえも、置き換えることができません。
David H. Hoover, Adewale Oshineye, 『アプレンティスシップ・パターン

書籍『The Pragmatic Programmer』 [プログラマー現役続行]

ふと思い立って、私がいつ読んだのかを確認してみました。

The Pragmatic Programmer: From Journeyman to Master

The Pragmatic Programmer: From Journeyman to Master

  • 作者: Andrew Hunt
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 1999/10/20
  • メディア: ペーパーバック

この英語版の原著を読み終えたのが出版直後の1999年12月28日です。翌年に日本語版が出版されています。

達人プログラマー―システム開発の職人から名匠への道

達人プログラマー―システム開発の職人から名匠への道

  • 作者: アンドリュー ハント
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/11
  • メディア: 単行本


そして、この本の紹介記事を書いたのが、2005年3月に発売されている「Software People, Vol.6」です。その紹介を収録した『ソフトウェア開発の名著を読む』が出版されたのが、2006年7月です。第2版が2009年10月です。

ソフトウェア開発の名著を読む (技評SE新書 003)

ソフトウェア開発の名著を読む (技評SE新書 003)

  • 作者: 柴田 芳樹
  • 出版社/メーカー: 技術評論社
  • 発売日: 2006/07/26
  • メディア: 新書

ソフトウェア開発の名著を読む 【第二版】 (技評SE選書)

ソフトウェア開発の名著を読む 【第二版】 (技評SE選書)

  • 作者: 柴田 芳樹
  • 出版社/メーカー: 技術評論社
  • 発売日: 2009/10/21
  • メディア: 単行本(ソフトカバー)

日本語版の『達人プログラマー』は、10年前に出版されて、絶版になることなく販売が続いています。したがって、大規模なソフトウェア開発組織の中では、多くの人が読んでいてもおかしくはないと思います。この本には、ソフトウェア開発に関する「常識」が多く述べられています。

本に書かれている内容が何を意味しているのかが分からないということであれば、自分の経験に照らし合わせて説明することができます。しかし、本を読まない人に、説明して納得させるということを行うのはかなり根気を必要とします。あるいは、説明して納得させるのが馬鹿らしくなってきます。

もう、10年以上前のことですが、ある若手に『Graphic Java』の英語版(日本語版はまだ出版されていませんでした)を渡して、「この本に書いてあることは聞かないように。ただし、読んで分からないことは聞いても良い。」と指導したことがあります。つまり、技術な問題に関してその本に書かれていることを、書かれている部分を読むことなく、私に質問しないようにということです。でも、そのためには、実際には全部読まないといけないことになります。そうでなければ、書かれていたかどうかさえ分かりませので、安易に質問できないことになります。

「API設計の基礎」コース [API設計の基礎]

書きかけのままになっている「API設計の基礎」は、全く更新できていません。本来書きにたかった内容をベースとして「API設計の基礎」コースを新たに社内で行います。時間が取れたら「API設計の基礎」も、徐々に更新したいと思います(でも、多分、年内は無理かな・・・)。

今回のコースを最後として、私自身が何かの教育コースを社内向けに新たに作って行うのは最後です。教えるべきことは、まだ色々とあります。しかし、自発的に継続した学習を行わない文化を形成してしまった開発組織向けに教育を行っても、焼け石に水です。

今度も継続的に行うのは、参加者の自発的な努力を促す「プログラミング言語Java」コースと朝の勉強会(読書会)だけになっていくかと思います。

(「教育と場」)

『プログラマー現役続行』の改訂版 [プログラマー現役続行]

プログラマー現役続行』の改訂版を8月末か9月初めに出します。全部の章に加筆・修正を行い、第12章「30代、40代の人たちへ」を追加しています。

Javaプログラミング道場 [プログラマー現役続行]

私自身が今まで行ったことがない新たな教育コース(Javaプログラミング道場)を7月24日(土)に行いました。教育コースの目的は、以下の通りです。
仕事以外の場において、ソフトウェア開発の基礎練習を行う。
  • テストファースト開発(テスト駆動開発)
    短いプログラムを通して、テスト駆動開発を経験する
  • 防御的プログラミング
    防御的プログラミングを意識して行う
  • 公開APIの考え方と仕様書の記述
    防御的プログラミングで検査する機能をきちんとAPI仕様に記述する
  • ペア・プログラミング
    一人で開発するのではなく、他の開発者とコミュニケーションを行いながらの開発を経験する
  • 人前での練習/より良いプログラミング
    自分が書いたコードも含めて、コードのレビューを全員で行うことで、より良いプログラミングを学んでいく
2名一組の6組で、EclipseとJUnit4を使用し、同じ課題を解いていく形式で進めました。遠方(佐賀県唐津市や大阪)からの参加もあり、10時から開始して、18時に終了しました。

参加者は、様々な職場でソフトウェア開発に従事しているのですが、やはり、多くの開発現場では、まだまだテスト駆動開発は普及も定着もしていないようです。そのため、今回初めて、小さい課題ながらも経験してもらうことができました。

今回の参加者には、『アプレンティスシップ・パターン』をプレゼントしました。

【社内連絡】 勉強会参加者募集 [プログラマー現役続行]

ブログに書いていますが、社内向けの内容です。

勉強会(読書会)を開催したいと思いますので、希望者は社内の私のメールアドレスに、『勉強会参加希望』と題したメールをください。

開催日: 毎週、月曜日の1回 朝7時40分から9時10分
開始日: 9月6日(月)
場所: 私が勤務している事業所(海老名)の会議室(会議室は未定)
書籍: Robert Love著、『Linux Kernel Development, 3rd edition』(各人購入してください)
申込み〆切: 8月27日(金)
定員: 10名以下(申込み順)
進め方: 基本的には訳しながら読んで行きます。したがって、ある程度、事前に数ページは読んで、知らない単語は調べておく必要があります。

業務ではありませんので、非業務扱いです

業務時間外の勉強会ですので、参加資格は社員に限定していません。誰でも参加可能です。

Linux Kernel Development (3rd Edition) (Developer's Library)

Linux Kernel Development (3rd Edition) (Developer's Library)

  • 作者: Robert Love
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2010/07/02
  • メディア: ペーパーバック

Amazon Kindle版はこちら

終了までに一年近く要するかもしれません。すらすらと英語を理解できる必要はありません。目的は、英語で読むことに抵抗感をなくすことと、Linux Kernelの仕組みを理解することです。

Robert Loveのブログでの紹介

ソフトウェア技術者のレベル(4) [プログラマー現役続行]

自発的で継続した学習をするかしないかは個人の問題です。しかし、その個人の行動パターンに影響を与えているのが、その人が所属している開発組織なのです(「開発組織のDNA」、「開発組織のDNA(2)」)

そして、技術者への基礎教育をどのように行っているかも、影響を与えています(「基礎教育」)。必要な教育を行い、さらに、開発の現場で日々指導することで技術者のレベルを上がっていきます。あくまでも、「基礎教育とその教育内容を踏まえた上での日々の指導」を両方行う必要があります(「教育と場」)。

教育内容を踏まえた上で行うには、基礎教育として教える内容も開発の現場できちんと把握しておく必要があります。そして、開発現場での指導のベースとなる教育が行われている必要があります。しかし、残念ながら教育にも指導にも興味がない開発現場であれば、制度上の「OJTごっこ」は行っても、技術者としてはきちんと成長しなかったりします。

基礎教育や現場でのきちんとした指導を行わず、スキルレベルが低いエンジニアが起こした低レベルな問題を個別にモグラたたきしたり、起こした問題にだけ焦点を当てた教育をすることだけで対処しても、エンジニアのスキルは上がりません。本を読めば普通に書いてある「当たり前」のことさえ、本を読まないエンジニアのために、時間をかけて教育コースを作って、教育しても本質的な改善にはなりません。なぜならば、次には別の問題を起こすからです。

ソフトウェア開発は複雑な要素が多く絡み合っていますから、自発的に継続した学習をしないスキルレベルのが低いエンジニアが起こした問題だけをカバーするような、モグラたたきのような教育を行っても、「モグラたたき中毒サイクル」に陥るだけです。

そして、「モグラたたき中毒サイクル」に陥った開発組織に属した人達は、相変わらず自発的な勉強はしないことになります。そして、そのような環境に放り込まれた新卒新人がきちんと成長する可能性は、低くなってしまいます。

ソフトウェア技術者のレベル(3) [プログラマー現役続行]

継続した学習を続けるには、そもそも、ソフトウェア開発を楽しんでいる必要があります。つまり、プログラミングそのものを楽しいと思える必要があるということです。そして、社会人になる前に楽しいと思えている必要があるのかもしれません。

もちろん、社会人となってから会社でプログラミングを始めるようになった場合でも、楽しいと思える場合もあるか思います。しかし、業務として開発するソフトウェアが、初心者にとって必ずしも楽しいとは限りません。

ソフトウェア開発は物作りであり、それが楽しめなければ、そのための学習を継続して行うことは困難です。好きでもない仕事のために、プライベートな時間に学習するモチベーションを持つことは無理です。見方を変えると、継続した学習をしないというのは、ソフトウェア開発そのものを楽しめていないのかもしれませんし、プログラミングを含めたソフトウェア開発に興味がないのかもしれません。