SSブログ

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

業務としてのソフトウェア開発で、テストファーストやリファクタリングを必ずしも経験できるとは限りません。業務で扱っているソフトウェアが、いわゆる(テストコードがない)「レガシーコード」だったりすると難しかったりします。私自身の経験からしても、2000年に書いた雑誌記事「リファクタリングの勧め」(「Java PRESS, Vol.12」2000年5月)でも、業務以外のコードで練習することを勧めています。

そのような練習の場の1つとして、私が行っているJava研修の課題の練習問題があります。実際の製品開発ではないので、プログラミングの質は問われないのですが、それでも、かなり個人差が現れます。

テストコードが書けるような練習問題であっても、単純に結果を出力して目視で確認するだけの人もいれば、JUnitを使用してテストコードを書いてくる人もいます。mainメソッド内にテストコードを書いて、目視で確認するという解答も多いです。実装を見ると間違っているのに、テストは通りましたという場合には、そのほとんどがテスト項目不足となっています。

練習問題などは、テストファーストを経験する格好の材料ですし、テストに合格したあとにリファクタリングをすることで、「Red-Green-Refactor」を練習することもできるわけです。しかし、提出された練習問題の解答やテストコードを見るとがっかりすることが多いです。

一年間のJava研修を修了した人だけが受講資格がある「Java 8基本技術習得」コースは、一ヶ月遅れて10月から開講します。練習問題も多いのですが、GitHubへ提出されている練習問題の解答を見るとがっかりすることが多いです。新人ではないので、自分のスキルを向上させる練習の場だと認識して、もう少しテストファーストやリファクタリングを実践してもらいたいものです。
コメント(1) 

訳者まえがき 『Java SE 8 実践プログラミング』 [訳者まえがき・あとがき]

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

  • 作者: Cay S. Horstmann
  • 出版社/メーカー: インプレス
  • 発売日: 2014/09/22
  • メディア: 単行本(ソフトカバー)

訳者まえがき

 私自身がJava言語を学び始めたのは、1996年の夏でした。その頃は、バージョン1.02であり、ネストしたクラスやネストしたインタフェースは言語仕様として存在していませんでした。バージョン1.1でネストしたクラスやネストしたインタフェースが登場し、Javaプログラムの書き方が変わりました。その後の言語仕様の大幅な拡張は、2004年にリリースされたバージョン5.0であり、ジェネリックス、enum、アノテーションといった変更が加えられました。

 それから10年が過ぎて、再び言語仕様の大幅な拡張が行われ、Java 8として登場したのです。Java 6および7でも言語仕様の変更は行われましたが、小さなものでした。Java 8でのラムダ式の導入により、従来のコードが簡潔に書けるだけでなく、多くのライブラリが影響を受けて拡張されています。そして、いわゆる関数型プログラミング的な思考を求められるようになりました。

 ラムダ式に加えて、今までのJavaと大きく変わったのはインタフェースです。デフォルト実装を持つメソッドをインタフェースへ追加することができるようになりましたし、実装を持つstaticメソッドをインタフェースへ追加することもできます。ラムダ式のサポートとインタフェースの仕様変更は、従来とは異なったJavaプログラミングの世界への扉を開いたことになります。

 この本では、簡潔にJava 8の機能が説明されています。第1章から第8章までは、Java 8に関して説明されており、第9章ではJava 7が説明されています。また、各章の章末に練習問題が用意されています。練習問題に取り組むことで、Java 8の基本的な機能を習得することができると思います。

 1996年の夏からの18年間で、私自身は、Javaを通して多くのことを学んできました。もちろん、この本でも新たなことを学ぶことができました。多くのJavaプログラマーが新たな言語仕様を学び、実践し、マルチコア時代へ向けた新たな道具を獲得することに、この翻訳本を役立てていただければ幸いです。

※ バージョン5.0で行われた言語仕様の変更は、拙著『Java 2 Standard Edition 5.0 Tiger --- 拡張された言語仕様について』にまとめられています。

コメント(0) 

Jolt Awards 2014: The Best Books [Jolt Awards読書会]

2014年のJolt AwardsのThe Best Booksが発表されました。Jolt Awardを受賞したのは、次の本です。
【Jolt Award】


Python in Practice: Create Better Programs Using Concurrency, Libraries, and Patterns (Developer's Library)

Python in Practice: Create Better Programs Using Concurrency, Libraries, and Patterns (Developer's Library)

  • 作者: Mark Summerfield
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2013/08/29
  • メディア: ペーパーバック

Jolt Productivity Awardとして選ばれたのは、次の2冊です。

【Jolt Productivity Award】


Single Page Web Applications: JavaScript End-To-End

Single Page Web Applications: JavaScript End-To-End

  • 作者: Michael S. Mikowski
  • 出版社/メーカー: Manning Pubns Co
  • 発売日: 2013/09/27
  • メディア: ペーパーバック

Programming: Principles and Practice Using C++ (2nd Edition)

Programming: Principles and Practice Using C++ (2nd Edition)

  • 作者: Bjarne Stroustrup
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2014/05/25
  • メディア: ペーパーバック

最後にFinalistは、次の3冊でした。

【Jolt Finalist】


Automate With Grunt: The Build Tool for Javascript

Automate With Grunt: The Build Tool for Javascript

  • 作者: Brian P. Hogan
  • 出版社/メーカー: Pragmatic Bookshelf
  • 発売日: 2014/05/03
  • メディア: ペーパーバック

Rethinking the Internet of Things: A Scalable Approach to Connecting Everything

Rethinking the Internet of Things: A Scalable Approach to Connecting Everything

  • 出版社/メーカー: Apress
  • 発売日: 2013/12/29
  • メディア: Kindle版

Threat Modeling: Designing for Security

Threat Modeling: Designing for Security

  • 出版社/メーカー: Wiley
  • 発売日: 2014/02/12
  • メディア: Kindle版

どれもまだ読んでいません。
コメント(0) 

Java 8の研修コース(2) [プログラミング言語Java教育]

記事「Java 8の研修コース」で、9月に開講するとしたJava 8の研修コースですが、私の業務の都合で10月開講となりました。テキストは、もちろん、次の本です。

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

  • 作者: Cay S. Horstmann
  • 出版社/メーカー: インプレス
  • 発売日: 2014/09/22
  • メディア: 単行本(ソフトカバー)

今回は、「トライアル」コースとして開講します。何回で終わるか分からないので、トライアルとしています。受講生は、予習範囲を読んで疑問点を質問表としてまとめ、練習問題は全部解いて提出してもらいます。

質問表は、すべてGoogle Driveで共有して、そこへ記入という方式を取ります。また、練習問題の提出は、すべて、受講生が各人でGitHub上にリポジトリを作成して提出する方式にしました。

受講資格は、社内の一年間の「プログラミング言語Java基本技術習得」コースを修了していることです。今までに修了した人は、72名※1しかいません。今回のトライアルでは、その内の14名が受講します。
※1 実際には、すでに5名の修了生が転職していますので、対象は67名です。

本来は、9月開講でしたので、受講生には第3章までを印刷したもの※2を事前に渡してあります。もちろん、本が出版されましたので、残りの章は本で学習してもらいます。
※2 今回の本も、私自身で組版しています。
コメント(0) 

『Java SE 8実践プログラミング』が届きました [Java SE 8 実践プログラミング]

Bx0BabDCEAAuQtn.jpg
4月から翻訳を始めた、私にとっては14冊目の翻訳本となる『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』が出版社から届きました。5月に『APIデザインの極意 Java/NetBeansアーキテクト探究ノート』を出しましたので、今年で2冊目の翻訳本となります。2冊続けて翻訳し、両方で約1年半(約800時間)を費やしました。

今回の本には、「日本語版によせて」はありませんが、日本語版向けの段落が「まえがき」に1段落だけ追加されています。今回は、余白を多めに取って組版していますので、書き込みなども行いやすいと思います。

通勤電車の書斎化」で述べているように、翻訳作業の半分ぐらいは電車の中です。残りは、スターバックスなどか自宅です。組版の最後の調整や、レビューアからの指摘事項の反映・確認などは、大きなディスプレイで作業するのが効率的だったりするので、自宅では27インチのThunderbolt Displayに接続して作業します。

翻訳のきっかけと翻訳作業」で述べているように翻訳を行うことの個人的な恩恵の1つは、(メールのやり取りを通して)著者と知り合えることです。そして、その著者の次の著書のレビューをする機会を得られたりすることです。今回も、翻訳の予定はないですが、Horstmann氏の次の著書のレビューを行っています(「技術書のレビュー」)。
コメント(0) 

再び聴けるようになったKOIT(2) [KOIT]

http://www.koit.com/

iPadの「96.5 KOIT」アプリで聴けるかを試してみました。きちんと聴けるようです。

米国シリコンバレーにあるPalo Alto, CAに住んでいた頃(1991年5月から1993年4月までの2年間)、カーラジオでよく聞いていたFM放送局がKOITでした。当時は、車には、カーラジオかカセットテープのプレイヤーだけしかない頃でした。KOITを聞いていると、シリコンバレーの青空や、当時はそれほど混んでいなかったフリーウェイ260を思い出します。
コメント(0) 

再び聴けるようになったKOIT [KOIT]

再び日本で聴けなくなったKOIT(2)」では、聴けなくなったKOITが聴けるようになる場合があるというのことを書きました。その記事では、KOITのホームページへ行って、「Listen Live」ボタンを押しても、通常のPCのブラウザーからはだめで、iPadのブラウザーでは、PCとは別のURLヘ接続されて、聴けるということを書いています。

その後、そのiPadのブラウザーから接続されるURLも変更になったのですが、てっきりiPadなどのiOSからだけの接続先が変更になったという先入観を持っていました。つまり、普通のPCのブラウザーでKOITのトップページから「Listen Live」ボタンを押してもそのURLヘの接続は行われないと思い込んで、実際には試していませんでした。

今朝、試しにMac上のChromeブラウザーでKOITのホームページへ行って、「Listen Live」ボタンを押したら、iPadのブラウザーから接続されるURLと同じページに行って、普通に聴くことができました。iPadのKOITアプリから聴けるかは、まだ、試していません。

KOITのホームページは、こちらです。
コメント(0) 

学生気分の人(2) [プログラマー現役続行]

以前、荒井玲子さんの著書から引用した内容で「学生気分の人」という記事を書いています(まずは、読み返してみてください)。

その中で特に次の部分について、私なりの経験からの補足をします。
 一方、企業にとっては、社員は利益を生み出す人材です。したがって、社員に対する教育は投資です。投資に対する利益が得られなければ、投資機会も存在しません。よって、自分がどこまでスキルアップするのか、というのは、自分で設定する必要があります。そのスキルがその企業にとって有益である場合、企業は少しは支援をしてくれる場合もあります。
「社員に対する教育は投資」であり、「利益が得られなければ、投資機会も存在しません」と述べられています。会社によっては、様々な教育制度を提供していたり、有償の教育を受けるための予算を準備していることもあります。つまり、それらも投資なのです。

しかし、エンジニアの中には、そのような教育は毎年受けられるとか、教育の予算をもっと増やすべきだと意見を述べるのですが、実際の開発業務では成果が上がっていない人がいます。つまり、学生気分で教育を受けているし、受けるのが当然の権利だと勘違いしているわけです。

私自身は、昔から、有益だと思えるカンファレンスなどは、業務扱いで行くように指示したりします(無料のカンファレンスならなおさらです)。業務扱いというのは、休みを取る必要もないし、交通費も支給するということです。しかし、1日分の給与と交通費という投資なのです。海外のカンファレンスならもっと多くの投資となります。

ある時、ある(無料)カンファレンスに参加したいので業務扱いで参加してもよいかと聞かれたことがあります。その時の私の回答は、「行きたいなら有給休暇を取って行ってください」でした。そしたら、「業務扱いで行ける基準は何ですか」と聞かれたので、「業務扱いで参加させるという投資に、その人が値するかという私の判断です。業務扱いの参加は、会社にとってあくまでも投資です」と答えました。

自分のスキル向上を会社に頼るべきではありません。荒井さんの言葉を借りれば「自分がどこまでスキルアップするのか、というのは、自分で設定する必要があります」。そして、スキルアップのための支援を会社がしてくれることを期待しないことです。
コメント(0) 

書籍『A Practical Approach to Large-Scale Agile Development』(2) [技術的負債]

A Practical Approach to Large-Scale Agile Development: How HP Transformed LaserJet FutureSmart Firmware (Agile Software Development Series)

A Practical Approach to Large-Scale Agile Development: How HP Transformed LaserJet FutureSmart Firmware (Agile Software Development Series)

  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2012/11/15
  • メディア: Kindle版

先日紹介したこの本には、技術的負債とういうことはあまり話としてはできてきませんが、日々の開発活動を通して、技術的負債を少なくすることができる開発プロセスの確立とも言えます。

技術的負債に関しては、過去に以下の記事を書いていいます。

技術的負債を残し続けるというのは、長期的に見れば、その開発組織のソフトウェア開発力を徐々に下げて行くことになっていきます。

「技術的負債(3)」では、次のように書いています。
見方を変えると、技術的負債は、将来性のある若手をきちんとしたソフトウェアエンジニアとして成長させる場を奪ってしまうことになります。良いコードを書くという機会もなく、リファクタリングを経験する場もなく、過去に誰かが作った負債と格闘させるだけとなります。そのような状況では、ソフトウェア開発にもともと興味がない人は、負債を膨らませていくだけでしょう。一方、意欲のある若手は、成長できないため会社を辞めていくことになります。その結果、技術的負債に無頓着な人々が開発組織の大半を占めるようになり、会社は負債をますます増大させることになります。
「技術的負債(4)」では、さらに次のように書いています。
さらに、一からシステムを作成した経験がないエンジニアが組織内に増えてしまうことにもなります。製品を出し続けることで技術力があると思っているのは単なる錯覚に過ぎず、画期的な競合製品が出てきた時に、技術の空洞化が起きていて、自社製品開発では追いつけない可能性が高くなります。
1,000万行を超えるソフトウェアを、継続的インテグレーションや継続的デリバリーを達成したアジャイル開発へと移行させるということは、普通の企業ではまねできないことだと思います。
コメント(0) 

継続した学習(3) [プログラマー現役続行]

ソフトウェア開発は物づくりです。その物づくりをうまくなるためには、様々な知識を吸収して、それを日々実践して習得する必要があります。本を読んだだけでは、プログラミングできるようにはなりません。ましてや、読みやすく理解しやすいプログラムを作成するというのは、単に動作するだけのプログラムを作成するよりは、高いスキルレベルが要求されます。

たとえば、読みやすいコードを書くために、推奨される書籍としては、以下のような本があります。
当然のことながら、これらの本を読んだだけでは、読みやすく理解できるようなコードが書けるわけではありません。単に知識を詰め込んだだけです。それを実際の日々のプログラミングで試してみて、自分のコードが読みやすくなったかと判断しながら実践していく必要があります。そして、自分視点ではなく、他人視点(つまり、他の人が読んで理解しやすいか)と自分で判断できるようになるまで実践していく必要があるのです。

つまり、「継続した学習」に加えて「日々の実践」による自分自身のスキルアップを行いながら修得していく必要があります。しかし、そもそも書籍を読まない、読んでもきちんとした実践を行う努力をしていない人のレベルは、その設計やソースコードに現れてしまいます。あるいは、色々指摘しても、「自分にとっては分かりにくくない」という言い訳をすることになります。

場合によっては、普段の開発業務でまったく実践できていないのに、本を読んでいるのだから評価されるべきだと、業務の目標設定に書いてくる人もいます。目標とする達成レベルは本を読むことではありません。学習を通して学んだことを実践して修得して、自分自身のスキルが向上して、それが日々の成果に現れていることに、達成レベルを置くべきです。そのための継続した学習なのです。
コメント(0)