SSブログ

ソフトウェアエンジニアと英語力(4) [英語]

前回のつづき)

Introduction to Computing Systems: From Bits & Gates to C & Beyond (Computer Engineering)

Introduction to Computing Systems: From Bits & Gates to C & Beyond (Computer Engineering)

  • 作者: Yale Patt
  • 出版社/メーカー: McGraw-Hill Science/Engineering/Math
  • 発売日: 2003/08/05
  • メディア: ハードカバー

この書籍は、前半は、コンピュータの仕組みを学ぶ内容となっています。それも、トランジスタから始まって、基本的なANDやOR回路、フリップフロップ、メモリ回路、ALUなどを順次説明していき、最後は、16ビットのコンピュータの回路まで説明していくというものです。練習問題も多く、勉強会では、基本的にすべての練習問題に取り組んでもらいました。

この勉強会は、私が属する事業部に配属されたその年の新卒新人は全員必須でした。さらに、週に3回も開催していたので、予習が追いつかないという状況だったようです。それで、途中から、週1回に変更しました。

書籍の前半が終わった時点で、後半への参加は、必須ではなくしました。後半は、C言語が解説してあります。しかし、C言語の単なる説明ではなく、コンパイルするとどのような命令が生成されるかや、関数呼び出しでスタックはどのように使用されるのかとかが解説されています。後半も、練習問題をすべて行いながら勉強会を続けました。

結局、この書籍の勉強会は、約3年を要しました。しかし、参加者は、コンピュータの基礎を学んだだけでなく、英語の専門書を一冊読むことを経験してもらったことになります。この本の改訂版が出版されたら、もう一度勉強会をやってもよいかなとは思っています。

(つづく)
コメント(0) 

テスト駆動開発プロジェクトの経験(4) [時の流れ]

前回からのつづき)

テスト駆動開発は、書籍を通してある程度は頭の中で理解できますが、それだけではかなり限界があります。やはり、日々の開発業務で実践していくことで、様々な経験を積めることになります。単体テスト程度や小さなプログラムでは、直面する問題の範囲も狭いものとなってしまいます。

しかし、そもそも、テスト駆動開発をほとんど経験したことがない人が多いのではないでしょうか。中途採用の面接をしていても、経験がある人はほとんどいません。経験がない上に、関連する書籍もほとんど読んでいない人は、即戦力としての中途採用としては不合格になってしまいます。

自動でテストするためには、モック、スタブ、あるいは、様々なハードウェアのエミュレータ/シュミレータを開発し、さらに、自動テストコードを開発するという追加の開発が必要になってきます。しかし、手作業によるテストには戻れませんから、すべての開発を継続していくことになります。一見、開発する量が増えるために、無駄に思う人も多いようですが、ソフトウェアエンジニアとしては、リファクタリングを行うことも含めて、高いスキルレベルと規律(躾?)が求められます。

したがって、このような開発には、新卒新人で参加できることが理想となります。なぜなら、このような開発がソフトウェア開発としては当たり前であることを経験することになるからです。そのため、2003年から行った大規模なテスト駆動開発では、毎年、必ず数名の新人を自分の開発部門に増員していました。
コメント(0) 

早朝のオフィスでコーヒーを飲む [朝型]

プログラマー”まだまだ”現役続行 (技評SE選書)

プログラマー”まだまだ”現役続行 (技評SE選書)

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

第7章「朝型力」からです。

早朝のオフィスでコーヒーを飲む

 集中して仕事をする必要があるソフトウェア開発では、静かな時間を会社で見つけ出す必要があります。その時間を見つけ出すのは、容易ではありません。特に日本ではそうです。
 私の場合、米国に駐在した五年間は個室勤務でしたが、日本で個室だったことは一度もありません。そのため、集中してソフトウェアを開発する場合や、技術書の学習をするには、誰もいない早朝に出社する必要がありました。
 1984年に24歳で社会人となって、実際のソフトウェア開発に従事しはじめた頃から、1988年暮れに米国に駐在するまでは、帰りも遅く忙しい日々を送っていました。
 その中で、学習時間を捻出するために、とにかく会社には、始業1時間前の7時台前半に出社して専門書の学習をしていました。米国駐在を終えて、1993年に帰国してから1999年までも同様でした。
 40歳になった2000年からは、翻訳活動や雑誌に記事の執筆をするようになり、朝の貴重な時間は自宅でそれらの活動に充てていますので、出社は9時前後となっていました。
 2009年に転職してからは、フレックス勤務制度でなくなり、通勤も遠くなったため、勤務先の最寄り駅まで早く到着して、最寄りのマクドナルドやスターバックスで、1時間程度、翻訳や執筆を行って出社しています。
 誰も出社していないオフィスは、静かで非常に気持ちがいいものです。40歳までは、朝、出社してまずはコーヒーを入れて、コーヒーを飲みながら集中して学習や業務に取り組んでいました。
 特に私がいちばん好きだった朝は、ジャストシステムの徳島本社に勤務していた頃、冬に和歌山県側の水平線上の朝日を見ながらコーヒーを飲む朝でした。

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

コメント(0) 

デザインパターンを学ぶ [プログラミング言語Java教育]

一年間のJava研修では、最後の3、4回で『Effective Java 第2版』を学習するのですが、その質問表に「XXXXパターンとは何ですか」とデザインパターンの質問をする受講生がかなりいます。デザインパターンに関しては、書籍もありますし、ネットで検索しても色々と見つかるはずです。

そもそも、Java言語は学んでも、デザインパターンを学んでいなければ、『Effective Java 第2版』でパターン名に言及されている部分を理解するのは難しいでしょう。しかし、大学や会社の研修できちんとデザインパターンを学ぶ機会は非常に少ないようです。

2000年前後から2005年頃までは、デザインパターンのブームがあったので、書籍も色々と出版され、勉強しなければならないという雰囲気がありました。しかし、今日、デザインパターンは、知っていて当たり前になってしまい、新たなパターン本が書かれることもあまりなく、その結果、勉強しなければならないと感じることもなくなっているのではないかと思います。

大学や会社の研修で習っていなくても、デザインパターンは自己学習してください。

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

  • 作者: エリック ガンマ
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 1999/10
  • メディア: 単行本

Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本

Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本

  • 作者: Eric Freeman
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2005/12/02
  • メディア: 大型本

増補改訂版 Java言語で学ぶデザインパターン入門

増補改訂版 Java言語で学ぶデザインパターン入門

  • 出版社/メーカー: SBクリエイティブ株式会社
  • 発売日: 2014/02/14
  • メディア: Kindle版

コメント(0) 

Google Web Toolkitについて [Google Web Toolkit]

Java研修の後の懇親会で、私のホームページには時計が右上隅に表示されているという話になったので、Google Web Toolについて。

ウィキペディアによれば、GWT(Google Web Toolkit)は、2006年5月にバージョン1.0がリリースされています。私が初めてGWTを知ったのは、2007年5月にサンフランシスコで開催されたJavaOneへ参加した時です。

JavaOneのセッションで知ったのではなく、GWTの開発チームが、JavaOneの会場ではなく、あるホテルで開いていたテクニカルセッションへ出席して知りました。レセプションパーティ付きに招待制のセッションでした。JavaOneの会場でJoshua Bloch氏から「はい、これ」という感じで招待状を渡されて行ったのが、そのGWTのテクニカルセッションでした。

そのテクニカルセッションでは、GWTの開発者達が技術的説明やQ&Aを行うものでした。でも、そこで初めて知る技術だったので、どこまで詳細を理解したかは、記憶にありません。そこには、『Graphic Java』の著者であるDavid Geary氏もいました。その時ではないですが、(たぶん翌日)David Geary氏にGWTについての本は書かないのかと聞いたら、執筆中という返事でした。

その執筆中の本の日本語版が、翌年に出版した次の書籍です。

Google Web Toolkit ソリューション

Google Web Toolkit ソリューション

  • 作者: デビッド・ギアリー
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2008/08/06
  • メディア: 単行本(ソフトカバー)

それから一年後に、自分の「ホームページの再構築」を始めました。

GWT関連の書籍のブームは、2008年から数年だけでした。それ以降は、新たな本が執筆されることもほとんどなくなったようです。しかし、開発はオープンソース・プロジェクトとして今でも続いています。結果として、最新の情報は、英語でしか入手できない状況になっています。

JavaでのGUIプログラミング(AWT、Swing、JavaFX)とJavaに慣れている人にとって、ブラウザー上で動作するリッチなUIを作成するには、GWTは面白いと思います。ほとんど、すべてのコードをJavaで書いて、Javaでデバッグして、そして、結果が、JavaScriptへコンパイルされてブラウザー上で動作するからです。さすがにJava 8の仕様はサポートしていませんが、普通にJavaの機能(パッケージ、クラス、インタフェース、enum、ジェネリックスなど)が使用できます。

私のホームページには、Java研修の課題である「デジタル時計」をGWTで書いたウィジットを表示しています。そのソースコードについては、こちらを参照してください。

ところで、2007年のGWTのテクニカルセッションの後には、レセプションがありました。

P1000239.JPG

このレセプションには、GWTの開発チームだけでなく、JavaOne会場で昼間に会った有名な人達が多数参加していました。
コメント(0) 

成長の場を求めないソフトウェアエンジニア?(2) [プログラマー現役続行]

前回は、次の段落で締めくくっています。
そのため、中堅と呼ばれる年代のエンジニアにとっては、今までの自分のスキルでこなせるソフトウェア開発に従事していた方が楽であるのかもしれません。あるいは、今さら、高いレベルが要求されるソフトウェア開発に従事するために勉強したりする気にはなれないのかもしれません。
ここで述べているようなエンジニアを組織上参加させなければならないこともあるかと思います。それは、プロジェクトが大きくなって他の組織からメンバーを異動させることでしか増員できないような場合です。あるいは、そのような増員が想定される場合もあるかと思います。

そのような増員の場合に、異動してくるであろうメンバーが、必要なプログラミング知識を持っていないことがあります。たとえば、Java言語やRuby言語による開発に、C言語しか使用したことがない組み込みエンジニアが異動してくるような場合です。

そのような場合でも、基本的には、必要な書籍を指定して学習してもらうことになるかと思います。なぜなら、(たとえば、組み込みシステムなどの)ソフトウェア開発経験が何年あっても、使用されている技術(プログラミング言語や設計手法)に関しては、新人と変わらないからです。つまり、言語だけでなく、言語が前提としている新たな設計方法も学ぶ必要があります。たとえば、C言語しか知らない組み込みシステムエンジニアが、急に、オブジェクト指向設計ができたり、「インタフェース」の概念を理解して設計できたりはしません。

新人なら学習させるのに、ソフトウェア開発経験者の場合には、異動してくる人達が慣れ親しんだ技術(プログラミング言語や設計手法)で開発するべきだと言われることがあります。もし、そのような基準で技術を選択していたら、いつまでも、古い技術しかしらない技術者の組織となってしまいます。すなわち、新たな技術を学ばない組織になります。

あるいは、1日か2日で基本的なエッセンスを教えるべきだと言われることもあるかもしれません。しかし、仮にエッセンスを教えたとしても、1日や2日ですぐに習得できるわけではありません。したがって、基本的には各人がきちんと自己学習してもらう必要があり、ある程度のレベルになるまでは時間を要することになります。時間を要することは、避けられません。
コメント(0) 

ソフトウェアエンジニアと英語力(3) [英語]

前回のつづき)

英語の書籍による勉強会を開催するようになったのは、私が39歳の時です。最初の書籍が『The Java Programming Language, Second Edition』だった訳です。実は、この第2版は、ページ数にして、『プログラミング言語Java第3版』の半分ぐらいしかありませんでした。

次に読書会の書籍として選んだのは、『Graphic Java 1.2: Mastering the JFC : AWT』でした。私は、『Graphic Java』を初版から読んでいたので、新刊が出たということで選んだと思います。当時、Javaによる開発をしていた相馬純平さんのサポートをしていました。彼には、この書籍を読んで、「本に書いてあることを私に聞かないように。ただし、読んで分からないことは聞いてよいから」と指示していました。つまり、翻訳がない本を全部読んで仕事をするようにと指示したことになります。実際、彼は、苦労しながら全部読んだはずです。
※ 著者であるDavid Geary氏の本『Google Web Toolkit ソリューション』を2008年に翻訳しています。

普通の勉強会とはちょっと違った形式で行ったのは、書籍『The Practice of Programming』の第1章と第2章の勉強会です。勤務地(海老名プライムタワー)の他に2拠点(神奈川サイエンスパーク、埼玉県岩槻)に出向いて毎週早朝に勉強会を行いました。その時に作成したのが「勉強会ノート」です。この時は、若手を中心として、英語の書籍で勉強会を行いました。前述の相馬さんも参加していました。その後は、日本語版が出たので、新卒新人を対象に、日本語版で第1章と第2章を学習させるということを行ってきました。転職してからは、私が属している開発本部だけですが、2013年度の新卒新人からやっと、必ず学習させるということになっています。

次に選んだのは、『Programming Embedded Systems in C and C++』です。これも当時は翻訳本が出ていないく、組み込みシステムを基本を学ぶということで良い教材でした。その後、改訂版が出版されていますし、日本語版も出版されています。

組み込みシステムというよりもコンピュータの基礎の基礎を新卒新人に学ばせるために選んだのが次の書籍です。

Introduction to Computing Systems: From Bits & Gates to C & Beyond (Computer Engineering)

Introduction to Computing Systems: From Bits & Gates to C & Beyond (Computer Engineering)

  • 作者: Yale Patt
  • 出版社/メーカー: McGraw-Hill Science/Engineering/Math
  • 発売日: 2003/08/05
  • メディア: ハードカバー

つづく
コメント(0) 

テスト駆動開発プロジェクトの経験(3) [時の流れ]

前回のつづき)

本来、テスト駆動開発では、すべてのテストの実行は短時間に終わらせるようにすることが必要です。しかし、開発が進むにつれて増えていく機能とテストコードにより、徐々に、テスト実行時間が長くなっていきました。

ある修正が他の機能に影響を与えていないかを、すべてのテストを実行することで、検証しようとすると1時間以上要するようになってきたのです。これは、単体テストではなく、システムテスト的に全体を動作させながらのテストの時間です。

開発者は、何らかの機能追加あるいはバグ対応の修正がシステム全体に副作用を与えていないかを確認するために、すべてのテストを実行します。そうなると、テストが完了するまで、待ちになってしまいます。なぜなら、自分の開発用PCですべてのテストを実行するからです。

そのような待ち時間に、次の開発(機能開発や障害調査)をできるように、開発用PCは一人2台(Windows用PCとは別)になるように購入していきました。開発者にとって、開発用PCは重要な道具であり、節約する部分ではないと思っています。古いPCを使用させることで経費を削減しているつもりでも、それによる開発効率の低下が、結果的に残業などの人件費の増大を招きます。その増加した費用は、PC1台の費用をはるかに上回ってしまいます。

その意味で、2009年9月に転職して、与えられたPCの性能の悪さは衝撃的でした(「開発環境(2)」)。たぶん、そのPCを一年以上使用していたと思います。現在は、Core i7(Quad Core)、16GBメモリ、1TB HD、23インチディスプレイのPCを(Windows用PCとは別に)、グループのメンバー全員に開発用に用意して、開発してもらっています。

つづく
コメント(0)