So-net無料ブログ作成
検索選択
前の10件 | -

デザインパターンを学ぶ [プログラミング言語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) 

まだ朝は明るいですが(2) [朝型]

前回、外出時でも都心へ向かう場合には、始発に乗車するということを書きました。

今日は、田町で午前中、打ち合わせがあるので、いつもの通り始発に乗車し、長津田→大井町→田町と乗り継いで、田町駅には7時過ぎに到着しました。これで、これから何らかの理由で電車に遅延が発生しても、打ち合わせには遅れないことになります。

外出する際には、事前に、スターバックスが近くにあるかを調べておきます。今朝は、スターバックスの田町駅西口店に来ています。ビルの中の一角にある店舗です。店舗の隣には、三菱自動車のショールームでしょうか、車が置いてあります。

普段、海老名へ外出する際によく行っている海老名のビナウォーク内のスターバックスとは異なり、ここの店舗は、出社前に寄っていると思われる人々が非常に多いです。それでも、座れないことはないです。

コメント(0) 

スキル向上の場としての練習問題(3) [プログラミング言語Java教育]

(「スキル向上の場としての練習問題(2)」からのつづき)

Java研修の練習問題(書籍プログラミング言語Java第4版』の練習問題)でもそうですが、先に実装を書いて、後で、簡単なテストをmainメソッドに書いている人の場合、テストケースが漏れていることが多いです。

解答のコードを見ると、明らかに間違いがあるにもかかわらず、テストはパスしましたと言われることが多いのです。そこで、実際に、書かれたテストを見ると、テストケースが非常に単純な場合しか書かれていなかったりします。

テストコードをどこまできちんと考えて書けるかも、ソフトウェアエンジニアのスキルとして重要です。しかし、その前に、テスト対象のコードのAPIをどれだけきちんと考えられるかが、さらに重要です。

練習問題では、特に、防御的プログラミングを含めたAPIを設計するという視点から、自分ならこのように設計して、ドキュメント(Javadoc)を書くということを行ってもらう必要があります。しかし、練習問題できちんとAPI設計をできなければ、本番のソフトウェア開発できちんとできる可能性は低いです。
ソフトウェア開発では、私達は仕事で練習しています。だから、仕事で誤りを犯すのです。専門的職業から練習を切り離す方法を見つける必要があります。練習の場が必要なのです。
Dave Thomas
初心者は、講義を通してではなく、練習することで学習するのです。初心者は一に練習、二に練習、三に練習です。同じ課題を何度も何度も繰り返すことで、スキルを磨き、テスト駆動開発(TDD)とシンプルな設計の原則に反応するように、体と心を鍛えます。正しく反応するように、脳のニューロンを結び付けて、結び付け直して、さらに、結び付け直すのです。
Robert Martin
会社でのソフトウェア開発は、練習の場ではありません。練習は自分の時間で行う必要があります。
コメント(0) 

書籍『Linuxによる並行プログラミング入門』 [本]

Linuxによる並行プログラミング入門

Linuxによる並行プログラミング入門

  • 作者: 猪平 栄一、重松 保弘
  • 出版社/メーカー: 共立出版
  • 発売日: 2014/10/24
  • メディア: 単行本

大学時代の私の恩師である重松先生の新刊です。C言語のプログラミング中級クラスの方を対象としているそうです。内容を見ていないですが、POSIX Threadによる並行プログラミングが書かれているのではないかと思います。



私がいわゆる並行プログラミングを学んだのは、アセンブリ言語でマルチタスクプログラミングをしていた大学時代を除けば、会社で学んだMesa言語によるものです。そうは言っても、Mesa言語でコードをたくさん書いた訳ではなく、既存のコードを修正・デバッグすることが主でした。

本格的なマルチスレッドプログラミングは、1993年からSolaris 2.3を用いてC++言語で行いました。主に、Solarisに付属するマニュアルで学習しながらプログラミングしていました。

開発がほぼ終盤になった1995年の暮れに、出版されたばかりの『Threads Primer』を読みました。それまでは、スレッドプログラミングの本がなかったので、復習を兼ねて読んだことになります。

Threads Primer: A Guide to Solaris Multithreaded Programming

Threads Primer: A Guide to Multithreaded Programming

  • 作者: Bil Lewis
  • 出版社/メーカー: Prentice Hall
  • 発売日: 1995/10/31
  • メディア: ペーパーバック

この本は、英語の原著を読んで、私が初めて間違いを著者へ問い合わせた本です。1995年12月25日に問い合わせのメールを出して、以下の返信を29日にもらっています。
Yoshiki,

You are most correct, and I am embarrassed that this statement made it into the book, even after it was reviewed in detail by many people who should have caught it.

The 2nd printing has corrected it.

Thank you for pointing it out.

-- Bil
Javaは、まだ登場していない頃でした。
コメント(0) 
前の10件 | -