SSブログ

一人前になるには10年 [「ソフトウェアエンジニアの心得」講演]

「ソフトウェアエンジニアの心得」と題した話は、講演として行ったり、技術教育として企業向けに行ってきています。基本的には、拙著『プログラマー”まだまだ”現役続行』に沿っていますが、その中で「一人前になるには10年」ということで話をしています。該当部分を拙著から抜粋したのが次の部分です。
一人前になるには10年

 ソフトウェア開発は創造活動であり、創造能力を高めるには、「より良くできないか」という問題意識を常に持ちながら、多くの経験を積んでいくことです。
 リチャード・ガブリエルは、「ソフトウェアを書くことは芸術であり、本当にうまくなるには10年を要する」とも述べています。
 これは、「10年間ソフトウェア開発を経験した人が一人前である」という意味ではありません。実際の開発現場では、単に10年間を過ごしただけであり、一人前といえる経験・知識にはほど遠い人も多いのです。
 デービッド・フーバーとアデワレ・オシニェイェは、『アプレンティスシップ・パターン』の中で次のように述べています。
十分に長い期間続けていれば、「経験者」と呼ばれ始めますが、それがあなたの目標であってはいけません。経験が示すのは、あなたが生き延びてこられたことだけです。学んだ量を示しているのではなく、過ぎ去った時間を示しているだけです。ソフトウェア業界のある部分では、能力の大幅な向上をしなくても、一年で経験したことを10回繰り返すのは非常に簡単です。実際、これは時として、反経験(anti-experience)になることがあります。つまり、年を重ねることが、単に身に付けた悪い癖を強化しているだけの現象です。したがって、あなたのゴールは経験を積むことではなく、スキルが上がることであるべきです。
 いかなる芸術でも、何の練習もなく優れた作品は生み出されません。多くの練習を積み、何が本質的なのか、何がそうでないのかを見極める能力を養っていくことが必要となります。

『プログラマー”まだまだ”現役続行』(p.25)

ずっとC言語でしかプログラミングをしたことがない場合、1990年初頭であれば、オブジェクト指向設計やオブジェクト指向プログラミングをした経験がなくても、不思議ではありませんでした。しかし、今日、10年以上の経験者(実際には「反経験」)が、「オブジェクト指向の指導・教育を会社で受けたことがない」からオブジェクト指向が分からないという答えられる時代ではないと思います。「オブジェクト指向を勉強したことがないから分からない」と言うのであればまだ多少は救いがあるかもしれませんが。

確かに会社での仕事を通して学ぶことも多いです。しかし、会社は、会社にとって必要と思われる投資で無い限り、技術教育に投資したりしません。たとえば、C言語での開発しか行っていない会社が、会社の業務と関係ない言語の教育に投資したりしない訳です。
大多数のプログラマーやシステムアナリストは、自分の専門性が時代遅れにならないように維持することを会社に頼ることはできません。ソフトウェア業界で取り残されないためには、自分から進んで自分の時間(休暇さえも)や自分のお金を投資しなければなりません。
Edward Yourdon, Decline & Fall of the American Programmer
意外に思われる人が多いですが、私自身は、Javaを使用した開発業務に直接従事したことはあまりありません。今は、作成されたJavaコードのレビューなどは行っていますが、そのようなJavaの製品コードのレビューを行うようになったのも2009年以降です。実際の製品開発で1993年以降(2008年まで)使用してきた言語は、C++です。

振り返ってみると、私自身は、会社で新たな技術を教育してもらったという記憶があまりありません。仕事で使うために初めての開発でC言語を学び、C++も独学に近く、Javaも1996年から趣味で学んでいるという状況です(Mesa言語だけは、Xerox社内の言語なので会社で覚えましたが)。会社で教えることはあっても教えてもらったという経験は非常に少ないです。

私自身は、実際には、多くのことを書籍を通して学んできたのだと思います。そして、学んだことを実際の開発で実践することを繰り返してきたのだと思います。今日私自身がレビューなどを通して指導していることのほとんどは、書籍で学んで実践して経験して、その中で本質的だと理解した事柄に基づいているのだと思います。
Read Any Good Books Lately?

新しい知識と見識を得るために、私は常に本を読んでいます。一冊の良い本を選べば、他の人が何十年もかかって修得してきた見識を、数日で得ることができます。それなのに、なぜ、何年もかかって試行錯誤により学ぶのですか。非常に大きな差ですよ。もし、チームのメンバーが一年間に6冊の見識深い本を読んだとしたら、そのことがメンバーの仕事にどのような影響を与えるか想像してみてください。
Steve Maguire, Debugging The Development Process
自分の知識のなさやスキルの低さを「会社で教えてもらったり指導してもらったことがない」と言い訳しているようでは、20年たっても一人前になることはないかと思います。

書籍『Peopleware: Productive Projects and Teams, Third Edition』 [プログラマー現役続行]

Peopleware: Productive Projects and Teams (3rd Edition)

Peopleware: Productive Projects and Teams (3rd Edition)

  • 作者: Tom DeMarco
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2013/06/28
  • メディア: ペーパーバック

拙著『ソフトウェア開発の名著を読む 【第二版】 』で紹介している『ピープルウェア』の第3版が出版されます。

訳者まえがき『Objective-C明解プログラミング』 [訳者まえがき・あとがき]

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

  • 作者: スティーブン・G. コーチャン
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2013/05
  • メディア: 単行本

訳者まえがき

 Objective-Cは、C言語とSmalltalkを組み合わせたプログラミング言語であり、オブジェクトの概念をSmalltalkから取り入れています。1983年に開発されており、その誕生からすでに30年が経過しています。Objective-Cは、C言語で記述されたプログラムをそのままObjective-Cコンパイラでコンパイルできて何の問題もなく実行されるという初期の決定に基づいて開発されました。その点では、C++言語と似ていますが、全く異なる発展を遂げています。C++言語とは対照的に、Obejctive-Cの生みの親であるBrad J. Cox氏は、現在のObjective-Cには関与しておらず、Apple社が独自に言語仕様を拡張してきました。
 私自身がObjective-Cという名前を聞いたのは、1990年頃であり20年以上前のことです。当時のMacintosh用の開発言語はC言語でした。そのため、Objective-Cのコミュニティは小さいものでした。本書の第1章で述べられているように、Apple Computer社がNeXT Software社を買収してから、Mac用の開発言語としてObjective-Cが採用されています。今日ではiPhoneやiPadの爆発的な普及により、多くのプログラマがObjective-Cを学び使用しています。
 本書は、初めてのプログラミング言語としてObejctive-Cを学ぶ人達を対象としていますので、C言語でのプログラミング経験がないことを前提として説明されています。結果として、C言語の解説は後半の章である第13章「基本的なC言語機能」で行われています。そして、本書全体が、初心者だけでなく、Objective-Cでプログラミングを行ってきた人にも役立つ内容となっています。
 当初は、原著Programming in Objective-Cの第4版で翻訳を始めましたが、XcodeとObjective-Cのバージョンアップにより、翻訳中に第5版が出版さました。そのため、第5版の修正内容を反映してあります。
 この日本語版が、読者のみなさんのObjective-CによるプログラミングとOS X/iOSアプリケーション開発の助けになれば幸いです。

『Objective-C明解プログラミング』

総閲覧数が累計で200万を超えました [総閲覧数]

総閲覧数が総計で100万を超えました」と書いたのが2年前ですので、ほぼ2年間で100万です。

200万ページビュ.png

この2年間で最も読まれたのは、次の2件です(閲覧数は、2013年6月13日7:00AM)。

訳者あとがき『アプレンティスシップ・パターン』 [プログラマー現役続行]

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

  • 作者: Dave H. Hoover
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/07/08
  • メディア: 単行本(ソフトカバー)
訳者あとがき

 2002 年初めにSoftware Craftsmanship(『ソフトウェア職人気質』)を読んだのは、私が42 歳の時でした。大学で情報工学を専攻し、社会人となってから、すでに18 年が経過していました。会社内の立場は管理職であり、それまでの約4 年間は、技術教育、設計レビュー、コードレビューを行ってはいましたが、自分自身でプログラミングを行いソフトウェアを開発することはありませんでした。『ソフトウェア職人気質』を読んで決断したことは、もう一度現場に留まるために、2 度目の米国駐在を受け入れることでした。残念ながら2 度目の米国駐在は、プロジェクトの中止により短期で終わってしまいましたが、私にとっては転機でした。
 帰国してからの約5年間は、管理職という立場で、自分自身で設計・実装・デバッグまで行いながら、テスト駆動開発を行い、直接ソフトウェア開発に従事してきました。その一方で、若手の育成のために、部門全体を職人育成の場として、活動を行ってきました。振り返ってみるとアプレンティスを育て、短期間にジャーニーマンにするために、自分なりに考えたカリキュラムを実行していました。
 私自身が勉強会を主催することで、継続した読書の習慣を身に付けてもらうようにし、最初の言語としてJava 言語をきちんと学んでもらうために『プログラミング言語Java』および『Effective Java』を使用した教育を毎年行ってきました。本書がもっと早く出ていれば、職人を育成するための私のカリキュラムも、もっと良くなっていたかもしれません。
 本書には、ソフトウェア開発に従事して、これから貴重な人生を費やすための若い人々へのアドバイスが多く含まれています。私が就職した頃に本書や『ソフトウェア職人気質』の書籍があれば、今までの人生は違っていたかもしれません。私自身は、非常に遠回りしながら、長い道のりを歩んできたと思います。翻訳するだけでなく、自分の経験と照らし合わせながら、色々と考えさせられることが多い内容でした。
 本書は、これから熟練職人になることを目指す若い人々だけでなく、長年ソフトウェア開発に従事してスキルを伸ばしてきた人達にも読んでもらいたい内容です。現場の若手の育成は自分の仕事ではないと考えるのではなく、若手の育成も長い道のりを歩ませるために続けなければならない活動であると認識する必要があります。
 この日本語版が、日本での若手ソフトウェア技術者にとって、長い道のりを歩む上でガイドとなれば幸いです。そして、私自身もさらに歩み続けたいと思っています。

訳者あとがき『アプレンティスシップ・パターン』
ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)

ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)

  • 作者: ピート マクブリーン
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/03
  • メディア: 単行本