まだ朝は明るいですが(2) [朝型]
前回、外出時でも都心へ向かう場合には、始発に乗車するということを書きました。
今日は、田町で午前中、打ち合わせがあるので、いつもの通り始発に乗車し、長津田→大井町→田町と乗り継いで、田町駅には7時過ぎに到着しました。これで、これから何らかの理由で電車に遅延が発生しても、打ち合わせには遅れないことになります。
外出する際には、事前に、スターバックスが近くにあるかを調べておきます。今朝は、スターバックスの田町駅西口店に来ています。ビルの中の一角にある店舗です。店舗の隣には、三菱自動車のショールームでしょうか、車が置いてあります。
普段、海老名へ外出する際によく行っている海老名のビナウォーク内のスターバックスとは異なり、ここの店舗は、出社前に寄っていると思われる人々が非常に多いです。それでも、座れないことはないです。
今日は、田町で午前中、打ち合わせがあるので、いつもの通り始発に乗車し、長津田→大井町→田町と乗り継いで、田町駅には7時過ぎに到着しました。これで、これから何らかの理由で電車に遅延が発生しても、打ち合わせには遅れないことになります。
外出する際には、事前に、スターバックスが近くにあるかを調べておきます。今朝は、スターバックスの田町駅西口店に来ています。ビルの中の一角にある店舗です。店舗の隣には、三菱自動車のショールームでしょうか、車が置いてあります。
普段、海老名へ外出する際によく行っている海老名のビナウォーク内のスターバックスとは異なり、ここの店舗は、出社前に寄っていると思われる人々が非常に多いです。それでも、座れないことはないです。
2014-10-15 07:47
コメント(0)
スキル向上の場としての練習問題(3) [プログラミング言語Java教育]
(「スキル向上の場としての練習問題(2)」からのつづき)
Java研修の練習問題(書籍『プログラミング言語Java第4版』の練習問題)でもそうですが、先に実装を書いて、後で、簡単なテストを
解答のコードを見ると、明らかに間違いがあるにもかかわらず、テストはパスしましたと言われることが多いのです。そこで、実際に、書かれたテストを見ると、テストケースが非常に単純な場合しか書かれていなかったりします。
テストコードをどこまできちんと考えて書けるかも、ソフトウェアエンジニアのスキルとして重要です。しかし、その前に、テスト対象のコードのAPIをどれだけきちんと考えられるかが、さらに重要です。
練習問題では、特に、防御的プログラミングを含めたAPIを設計するという視点から、自分ならこのように設計して、ドキュメント(Javadoc)を書くということを行ってもらう必要があります。しかし、練習問題できちんとAPI設計をできなければ、本番のソフトウェア開発できちんとできる可能性は低いです。
Java研修の練習問題(書籍『プログラミング言語Java第4版』の練習問題)でもそうですが、先に実装を書いて、後で、簡単なテストを
main
メソッドに書いている人の場合、テストケースが漏れていることが多いです。解答のコードを見ると、明らかに間違いがあるにもかかわらず、テストはパスしましたと言われることが多いのです。そこで、実際に、書かれたテストを見ると、テストケースが非常に単純な場合しか書かれていなかったりします。
テストコードをどこまできちんと考えて書けるかも、ソフトウェアエンジニアのスキルとして重要です。しかし、その前に、テスト対象のコードのAPIをどれだけきちんと考えられるかが、さらに重要です。
練習問題では、特に、防御的プログラミングを含めたAPIを設計するという視点から、自分ならこのように設計して、ドキュメント(Javadoc)を書くということを行ってもらう必要があります。しかし、練習問題できちんとAPI設計をできなければ、本番のソフトウェア開発できちんとできる可能性は低いです。
ソフトウェア開発では、私達は仕事で練習しています。だから、仕事で誤りを犯すのです。専門的職業から練習を切り離す方法を見つける必要があります。練習の場が必要なのです。− Dave Thomas
初心者は、講義を通してではなく、練習することで学習するのです。初心者は一に練習、二に練習、三に練習です。同じ課題を何度も何度も繰り返すことで、スキルを磨き、テスト駆動開発(TDD)とシンプルな設計の原則に反応するように、体と心を鍛えます。正しく反応するように、脳のニューロンを結び付けて、結び付け直して、さらに、結び付け直すのです。会社でのソフトウェア開発は、練習の場ではありません。練習は自分の時間で行う必要があります。ー Robert Martin
2014-10-14 06:12
コメント(0)
書籍『Linuxによる並行プログラミング入門』 [本]
大学時代の私の恩師である重松先生の新刊です。C言語のプログラミング中級クラスの方を対象としているそうです。内容を見ていないですが、POSIX Threadによる並行プログラミングが書かれているのではないかと思います。
私がいわゆる並行プログラミングを学んだのは、アセンブリ言語でマルチタスクプログラミングをしていた大学時代を除けば、会社で学んだMesa言語によるものです。そうは言っても、Mesa言語でコードをたくさん書いた訳ではなく、既存のコードを修正・デバッグすることが主でした。
本格的なマルチスレッドプログラミングは、1993年からSolaris 2.3を用いてC++言語で行いました。主に、Solarisに付属するマニュアルで学習しながらプログラミングしていました。
開発がほぼ終盤になった1995年の暮れに、出版されたばかりの『Threads Primer』を読みました。それまでは、スレッドプログラミングの本がなかったので、復習を兼ねて読んだことになります。
Threads Primer: A Guide to Multithreaded Programming
- 作者: Bil Lewis
- 出版社/メーカー: Prentice Hall
- 発売日: 1995/10/31
- メディア: ペーパーバック
この本は、英語の原著を読んで、私が初めて間違いを著者へ問い合わせた本です。1995年12月25日に問い合わせのメールを出して、以下の返信を29日にもらっています。
Yoshiki,Javaは、まだ登場していない頃でした。
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
2014-10-13 06:37
コメント(0)
ソフトウェアエンジニアと英語力(2) [英語]
(前回のつづき)
英語の技術書を使用した勉強会を主催するようになったのは、1998年後半か1999年だと思います。最初に選んだ書籍は、『The Java Programming Language, Second Edition』で、いわゆる書籍『プログラミング言語Java』です。しかし、この第2版だけ日本語版はありません。初版は翻訳されていましたが、第2版は翻訳されていません。第3版と第4版は、私が翻訳しています。
当時のことは、あまり覚えていませんが、10名弱ぐらいの勉強会だったと思います。富士ゼロックス内でもJavaを用いたプロジェクトは、1つしかなかった頃です。
英語で技術書を読むことで重要なのは、継続して読み続けけることです。しかし、英語で読むということをほとんど行っていない人にとっては、背中を押す何かが必要であり、その1つが勉強会だと思います。
この最初の英語による技術書の勉強会の参加メンバーの一人に、現在は米国のシリコンバレーに駐在している木南英夫さんがいます。様々な技術領域で活躍されていますので、知っておられる人も多いかと思います。当時は、かなり苦労されながら勉強会の予習をされていたようです。10年間ほど一緒に仕事をし、2002年8月には、私にとって2度目の米国駐在となるWebster, NYへも同じプロジェクトで一緒に赴任しました。木南さんも、今は、2度目の米国駐在です。
英語の技術書を読む場合、最近の若い人達に言っているのは、「翻訳されているのであれば翻訳書を読んで、すばやく技術を学んでください。同時に、興味がある技術領域の(まだ翻訳がない)新刊を英語で読むようにしなさい」ということです。私の場合、英語で技術書を読むことが圧倒的に多くなった理由は、後者です。つまり、面白そうな新刊が出たので読むということです。
(つづく)
英語の技術書を使用した勉強会を主催するようになったのは、1998年後半か1999年だと思います。最初に選んだ書籍は、『The Java Programming Language, Second Edition』で、いわゆる書籍『プログラミング言語Java』です。しかし、この第2版だけ日本語版はありません。初版は翻訳されていましたが、第2版は翻訳されていません。第3版と第4版は、私が翻訳しています。
当時のことは、あまり覚えていませんが、10名弱ぐらいの勉強会だったと思います。富士ゼロックス内でもJavaを用いたプロジェクトは、1つしかなかった頃です。
英語で技術書を読むことで重要なのは、継続して読み続けけることです。しかし、英語で読むということをほとんど行っていない人にとっては、背中を押す何かが必要であり、その1つが勉強会だと思います。
この最初の英語による技術書の勉強会の参加メンバーの一人に、現在は米国のシリコンバレーに駐在している木南英夫さんがいます。様々な技術領域で活躍されていますので、知っておられる人も多いかと思います。当時は、かなり苦労されながら勉強会の予習をされていたようです。10年間ほど一緒に仕事をし、2002年8月には、私にとって2度目の米国駐在となるWebster, NYへも同じプロジェクトで一緒に赴任しました。木南さんも、今は、2度目の米国駐在です。
英語の技術書を読む場合、最近の若い人達に言っているのは、「翻訳されているのであれば翻訳書を読んで、すばやく技術を学んでください。同時に、興味がある技術領域の(まだ翻訳がない)新刊を英語で読むようにしなさい」ということです。私の場合、英語で技術書を読むことが圧倒的に多くなった理由は、後者です。つまり、面白そうな新刊が出たので読むということです。
(つづく)
2014-10-10 07:53
コメント(0)
テスト駆動開発プロジェクトの経験(2) [時の流れ]
(前回からのつづき)
私自身の転職により、私自身が開発を行うことがなくなってしまったので、私にとっての6年間におよぶテスト駆動開発は終わりを迎えました。その開発は、すべてC++で開発したのですが、その間に、私自身は多くのことを経験したと思います。
書籍を読んで良いと思ったことは、日々の活動で実践してみて、良いか悪いかの判断したものも多いです。特に、英語版の『Clean Code』 で良いと思ったことは、実際に自分で試してみてということを行いました。
一方で、自分で書いていないコードのリファクタリングも行ったりしました。機能の実装が終わった(つまり、テストをパスするようになりました)と報告があったコードを、ある日見てみたら、あまりにも実装がひどいことに気付いたことがあります。
担当者を呼んで、リファクタリングするように指示しようと思ったら、その日は(体調不良か何かの理由で)休みでした。結局、その日は、テストコードがどれであるかを確認してから、私自身で一日かけてリファクタリングしたのですが、それでも、まだ不十分という状態でした。翌日も、担当者が休みというこで、さらにもう一日リファクタリングして、ほとんど書き直してしまいました。
テスト駆動開発だから良い品質のコードが書かれるということではありません。それは、あくまでも、開発者一人一人のスキルレベルに依存します。テスト駆動開発が良い点は、このように本人もしくは他の人がリファクタリングを行うことで、品質を向上させることができる可能性があることです。しかし、あくまでも、リファクタリングをきちんと実施することが求められます。
(つづく)
私自身の転職により、私自身が開発を行うことがなくなってしまったので、私にとっての6年間におよぶテスト駆動開発は終わりを迎えました。その開発は、すべてC++で開発したのですが、その間に、私自身は多くのことを経験したと思います。
書籍を読んで良いと思ったことは、日々の活動で実践してみて、良いか悪いかの判断したものも多いです。特に、英語版の『Clean Code』 で良いと思ったことは、実際に自分で試してみてということを行いました。
一方で、自分で書いていないコードのリファクタリングも行ったりしました。機能の実装が終わった(つまり、テストをパスするようになりました)と報告があったコードを、ある日見てみたら、あまりにも実装がひどいことに気付いたことがあります。
担当者を呼んで、リファクタリングするように指示しようと思ったら、その日は(体調不良か何かの理由で)休みでした。結局、その日は、テストコードがどれであるかを確認してから、私自身で一日かけてリファクタリングしたのですが、それでも、まだ不十分という状態でした。翌日も、担当者が休みというこで、さらにもう一日リファクタリングして、ほとんど書き直してしまいました。
テスト駆動開発だから良い品質のコードが書かれるということではありません。それは、あくまでも、開発者一人一人のスキルレベルに依存します。テスト駆動開発が良い点は、このように本人もしくは他の人がリファクタリングを行うことで、品質を向上させることができる可能性があることです。しかし、あくまでも、リファクタリングをきちんと実施することが求められます。
(つづく)
2014-10-09 08:16
コメント(0)
「APIデザインの極意 Java/NetBeansアーキテクト探究ノート」を読む会 [APIデザインの極意]
APIデザインの極意 Java/NetBeansアーキテクト探究ノート
- 出版社/メーカー: インプレス
- 発売日: 2014/05/23
- メディア: Kindle版
10年以上続いているJava読書会で、今月から『APIデザインの極意』を読み始めるそうです。
http://www.javareading.com/bof/
本は買ったものの、一人で読み進めるのが大変だという人は、参加されるとよいかと思います。
2014-10-08 06:44
コメント(0)
まだ朝は明るいですが [朝型]
毎朝、自宅を5時40分過ぎに出て、最寄り駅が5時54分発の始発の電車に乗車しています。この季節は、まだ明るいですが、ひと月もしないで、暗い時間帯となります。冬になれば、朝は暗いですし、帰宅時も暗いです。
通勤電車に座って、書斎化(「通勤電車の書斎化」)するために早い時間に家を出るのですが、書斎化だけでなく、いくつかの利点があります。
外出といっても、田園都市線で都心へ向かう場合です。逆方向に外出したりする場合には、始発には乗らないことが多いです。
通勤電車に座って、書斎化(「通勤電車の書斎化」)するために早い時間に家を出るのですが、書斎化だけでなく、いくつかの利点があります。
- 勤務先、あるいは、外出先の最寄り駅まで朝早く行くため、始業時刻や外出先での仕事を始める時刻より前に、交通機関が何らかの事故で止まっても、遅刻することがありません。
- 途中で何らかの理由で乗車した電車が遅れたとしても、とくに遅刻を気にする必要はありません。
- めったにないですが、多少朝寝坊したとしても、座っては行けませんが間に合います。
外出といっても、田園都市線で都心へ向かう場合です。逆方向に外出したりする場合には、始発には乗らないことが多いです。
2014-10-08 06:32
コメント(0)
スキル向上の場としての練習問題(2) [プログラミング言語Java教育]
前回の記事「スキル向上の場としての練習問題」では、単体テストを作成することが可能な練習問題では、JUnitなどを使用して、単体テストを作成することでリファクタリングまでのスキル向上のための練習をするのがよいと述べました。特に、テストファーストということで、「Red-Green-Refactor」を実践するのがよいです。
ただ、練習問題の中には、「単純にログを出力して(目視で)確認するだけでよい」と述べられているものもあります。その場合でも、普段から単体テストを作成してリファクタリングをしている人の解答は、それなりの品質になっていたりします。
マーチンファウラーの書籍『リファクタリング』では、「リファクタリング」は、リファクタリング対象のコードをテストするテストコードを書いてから行うのがリファクタリングです。その定義に従えば、テストコードなしでは、単なる「書き直し」となります。
普段からきちんとリファクタリングしている人は、テストコードがないコードでも、動作確認が終わった後に、「習慣的に無意識にコードの見直し」を行うことになります。したがって、ログによる確認でよいとされる練習問題でも見直して修正することになります。
たとえ小さな練習問題であっても、その解答のコードを見ると、作成者の思考パターンとエンジニアとしてのスキルが、ある程度分かってしまうものなのです。
書籍『リファクタリング』については、拙著でも紹介しています。
ただ、練習問題の中には、「単純にログを出力して(目視で)確認するだけでよい」と述べられているものもあります。その場合でも、普段から単体テストを作成してリファクタリングをしている人の解答は、それなりの品質になっていたりします。
マーチンファウラーの書籍『リファクタリング』では、「リファクタリング」は、リファクタリング対象のコードをテストするテストコードを書いてから行うのがリファクタリングです。その定義に従えば、テストコードなしでは、単なる「書き直し」となります。
リファクタリングを開始するとき、最初にすることは常に同じです。対象となるコードについてきちんとしたテスト群を作りあげることです。リファクタリングは非常に順序だっていて、新たなバグを生み出しにくくなっていますが、人間が作業する以上、間違いを犯す可能性があります。このためテストは大切で、きちっとした一連のテストを用意するべきなのです。
書籍『リファクタリング』より
普段からきちんとリファクタリングしている人は、テストコードがないコードでも、動作確認が終わった後に、「習慣的に無意識にコードの見直し」を行うことになります。したがって、ログによる確認でよいとされる練習問題でも見直して修正することになります。
たとえ小さな練習問題であっても、その解答のコードを見ると、作成者の思考パターンとエンジニアとしてのスキルが、ある程度分かってしまうものなのです。
新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)
- 作者: Martin Fowler
- 出版社/メーカー: オーム社
- 発売日: 2014/07/26
- メディア: 単行本(ソフトカバー)
書籍『リファクタリング』については、拙著でも紹介しています。
2014-10-07 06:30
コメント(1)
【レビュー募集】『Java SE 8 実践プログラミング』 [Java SE 8 実践プログラミング]
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング
- 作者: Cay S. Horstmann
- 出版社/メーカー: インプレス
- 発売日: 2014/09/22
- メディア: 単行本(ソフトカバー)
募集終了しました
この書籍のレビューを書いてブログなどに掲載してくださる方に、書籍を出版社からプレゼントします。先着7名様までです。
希望の方は、以下の内容を私宛へメールでお知らせください。
件名:『Java SE 8 実践プログラミング』希望私へのメールは、私のホームページ(こちら)の右下の「メールを送る」ボタンをクリックしてください。
内容:送付先住所と御名前(勤務先宛の場合には、所属組織も)
私のTwitterアカウント(@yoshiki_shibata)へのDM(ダイレクトメッセージ)でもよいです。ただし、私がフォローしていない人からはDMは送れないのでフォロー依頼をメッセージで送ってください。
2014-10-05 06:49
コメント(0)
『Effective Java 第2版』の電子版(PDF)が発売になりました [本]
2つの電子出版サイトから発売となりました。
こちらは、Digital e-honのサイトです。
こちらは、VarsityWave eBooksのサイトです。
古い記事を間違えて上書きしたので、改めて両方を紹介します。
こちらは、Digital e-honのサイトです。
EFFECTIVE JAVA 第2版 (The Java Series)
- 作者: Joshua Bloch
- 出版社/メーカー: 丸善出版
- 販売開始日: 2014/10/1
- メディア: PDF
こちらは、VarsityWave eBooksのサイトです。
EFFECTIVE JAVA 第2版 (The Java Series)
- 作者: Joshua Bloch
- 出版社/メーカー: 丸善出版
- 販売開始日: 2014/10/1
- メディア: PDF
古い記事を間違えて上書きしたので、改めて両方を紹介します。
2014-10-04 06:16
コメント(0)