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

技術書のレビュー(5) [プログラマー現役続行]

The Go Programming Language (Addison-Wesley Professional Computing Series)

The Go Programming Language (Addison-Wesley Professional Computing Series)


4月から始めた原稿のレビューですが、4か月で、全体を2回レビューしました。私自身のレビュー作業はこれで終わりです。発売日は、12月から11月へ前倒しされているようです。

本の公式のホームページは、こちらです。最終的には、サンプルコードがgo getコマンドダウンロードできるようになる予定です。公式ホームページの目次も最新になっています。

私自身の次のプライベートな作業は、ピアソン桐原から出版されていた、今は絶版となっているある本の再出版の準備です。




第22期Java研修が終了しました [プログラミング言語Java教育]

2014年9月に開講した、私にとっては第22期となるJava研修が終了しました。6名の受講生で始まりましたが、5名が修了しました。その内1名は、派遣で来てもらっていた人ですので、リコーグループとしては4名が修了し、延べ94名が修了したことになります。

P1050451.JPG
第22期生と私

リコーグループ内での研修コース名は、「プログラミング言語Java基本技術習得」コースとなっています。コース名は、初心者向けコースという印象を与えるのですが、初心者向けではありません。

コース名が意味するのは、「業務でJava言語を用いてソフトウェアを開発するのであれば、最低限、これだけのことは学んで開発に従事する」ということであり、私自身からみた基準です。


スポンサーリンク





書籍『The Go Programming Language』(3) [golang]

The Go Programming Language (Addison-Wesley Professional Computing Series)

The Go Programming Language (Addison-Wesley Professional Computing Series)


今まで発売日が11月2日となっていましたが、12月14日へと延期されたようです。


スポンサーリンク





技術書のレビュー(4) [プログラマー現役続行]

Core Java Volume I--Fundamentals (10th Edition) (Core Series)

Core Java Volume I--Fundamentals (10th Edition) (Core Series)


こちらの本のレビューですが、時間切れで、すべてをレビューできませんでした。全部で959頁もあるため、以下の章をレビューできただけです。

Chapter 1 An Introduction to Java
Chapter 2 The Java Programming Environment
Chapter 3 Fundamental Programming Structures in Java
Chapter 4 Objects and Classes
Chapter 5 Inheritance
Chapter 6 Interfaces, Lambda Expressions, and Inner Classes
Chapter 13 Deploying Java Applications
Chapter 14 Concurrency


スポンサーリンク


守・破・離(1) [プログラマー現役続行]


終章「技術の伝達と個人の成長」より
 茶道や武道の世界には、「守・破・離」という教えがあります。これはその人のレベルに応じて、それぞれの段階でどのようなことを実践すべきかを示したものです。三つの段階を簡単に説明しておくと、「守」は決まった作法や方を守る段階、次の「破」はその状態を破って作法や型を自分なりに改良する段階、そして、最後の「離」は作法や型を離れて独自の世界を開く段階です。
 一般的には、すべての学習は真似から始まります。手本に従ってそれと同じようにすることを求められるのです。これがまさに「守」です。
 決められていることを生真面目に守るこの段階は、繰り返しも多く非常に面倒だし、なによりもやっているほうは面白くもなんともありません。そのためそこで我を通して自己流でいきたがる人がいます。しかし、自分の土台をつくるためには、素直に手本を真似るほうが結果として早く進歩することができます。
 実際、初期の段階で我慢して手本の真似を徹底的に繰り返していると、そのうちに手本と同じようにやることの意義や、手本から外れたときに生じるデメリットが理解できるようになります。ここまでくると「強制されて仕方なく守っている」というより、「自ら望んで守っている」という状態になります。やっていることの内容や価値を自分なりに理解しているので、自分の意思で率先して手本を守るようになるのです。
 ところで、世の中にはこの状態で満足してしまう人がたくさんいます。そのような人は、当然のことながらそれ以上の進歩はありません。
 本当に楽しいのはここからです。この段階まで来た人は、自分で創意工夫をしながらいろいろなことが試せるようになります。内容を理解しているため、従来の方法よりもっといい方法はないかと自分で探すことができるからです。そのような能力があるのに何もしないのはもったいないことです。
 そして、この状態がまさに作法や型を破る「破」の段階です。基本的には、作法や型を手に入れて、そこからさらに出ようと意識して行動した人だけが進歩を続けられるのです。もちろん、このときの試行錯誤はしっかりとした経験と根拠に基づくものなので、初心者があてずっぽで行動するのとはまったく違います。決められた道から外れても、それによって致命的な失敗を犯す危険性は極めて低いし、むしろこのときの行動はより効率的で合理的な方法の創出につながらう可能性も大です。
残念ながら、普通の企業におけるソフトウェア開発では、お手本として優れたソフトウェアが存在することは少ないです。実際には、悪いお手本が蔓延し、経験の浅い若手などは、その悪いお手本を真似する(コピーする)ことが多く、結果として、「守」の段階から抜け出せなかったりします。そして、次の「離」への段階へほど遠いものとなってしまいます。

たとえば、次のようなJavaのコードを見かけることがあります。
if (null == x) {
    ...
}
C/C++言語では、本来x == NULLと書くべきところを間違ってx = NULLと書いてしまってもコンパイルが通ってしまい、誤ったコードを書いたことに気付かないので、NULL == xと書くように指導された人も多いかと思います。しかし、最新のコンパイラであれば警告してくれます。「コンパイル時のワーニング(-Wallと-Werror)(2)

Javaでは言語仕様が異なりますので、そもそもif (x = null)と書いたらコンパイルエラーです。なぜなら、xboolean型ではないからです。もし、C/C++言語からの習慣で、Javaでもそのように書いているとしたら、その人は、とても次の「離」の段階にはいけないと思います。また、Javaでもそのように書くように指導している人も同じです。

技術書のレビュー(3) [プログラマー現役続行]


短期の依頼ですが、この本もレビューすることになり、レビューを始めました。この『Core Java』は初版から第9版まで読んだことはないです。もう、書き終えたようで、すべての章が送られてきました。

4月からレビューしている『The Go Programming Language』は、Brian KernighanとAlan Donovanによる執筆が続いています。

The Go Programming Language (Addison-Wesley Professional Computing Series)

The Go Programming Language (Addison-Wesley Professional Computing Series)

  • 作者: Alan A. A. Donovan
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2015/11/02
  • メディア: ペーパーバック


コードレビューの視点 017 [コードレビューの視点]

防御的にプログラミングされているかに注意する

防御的プログラミングに関しては、過去に書いているこちらを参照してください。

書いたコードが正しく呼び出される限り、防御的プログラミングのためのコードは余分なコードのように思えてしまうかもしれません。しかし、様々なモジュールを結合してソフトウェアを作り上げていくと、常に正しく呼び出される保障はありません。

16年ぐらい前の話ですが、当時、ある若いエンジニアのコードをレビューした時に、引数の値の異常値を検査していなかったので、そのことを指摘したことがあります。その時の彼の回答は、「そのような異常値は、仕様書に書かれている正しい値の範囲外であり、そのような値が渡ってくることはありません」でした。

それに対して、「仕様書に書かれた通りの範囲の値が渡されるのは、すべてのデバッグが終わった時なので、検査をするコードを入れなさい」と返事したような気がします。

実際、防御的プログラミングは、それを行ったことによる効率的な障害調査を経験してみないと、必要性を実感できないものです。そのため、強制的に防御的プログラミングをさせる必要があるかもしれません。

ソフトウェアの品質を高める1つの方法として、コードレビューでは、防御的プログラミングを行っているかに注意を払う必要があります。

講演予定「レッツゴーデベロッパー2015」 [プログラマー現役続行]

7月25日(土)に仙台で開催される「レッツゴーデベロッパー2015」で話をします。詳細については、下記のリンクを参照してください。


私の話の内容は、次の通りです。
柴田芳樹氏
タイトル
ソフトウェアエンジニアとして心がけてきたこと」
概要
プログラマー”まだまだ”現役続行』の 内容のきっかけとなる出来事を交えながら、ソフトウェアエンジニアとして何を心がけてきたかを中心に話をします。 特に、若手のソフトウェアエンジニアを育成するために、行ってきたこと、感じたこと、考えていることについて話をします。


コードレビューの視点 016 [コードレビューの視点]

ボクシングに注意する

Java言語に限った話ですが、不注意なボクシング/アンボクシングに注意する必要があります。

Javaが1.4の頃からプログラミングしている人であれば、自動ボクシングが言語仕様として存在しない頃からJavaを使用していわけですから、Booleanクラスとboolean型の違いを分かっていると思います。しかし、Java SE 5.0以降からJavaでプログラミングを始めた人は違いが分かっていない人が増えてきていると思います。

5.0は、2004年9月にリリースされていますので、すでに10年以上が経過しています。そのため、基本データ型(byte, short, char, int, long, float, double)とラッパークラス(Byte、Short、Character、Integer、Long、Float、Double)の違いを分からないままプログラミングしている人がいるのではないでしょうか。そのため、コードレビューなどで、以下のようなフィールド宣言を見かけたりします。
Boolean flag = false;
この場合、どうして「booleanではなく、Booleanなのですか?」という質問に対して、質問の意図を理解できないようであれば、ボクシングを理解していないと思って間違いないでしょう。

不注意なボクシングは、使用するメモリ量の増加や性能低下になってしまいます。その仕組みについては、初心者でもしっかりと理解しておくことが必要です。ボクシングに関しては、拙著『Java 2 Standard Edition 5.0 Tiger』の第2章「ボクシング/アンボクシング」を参考にしてもらうとよいかと思います。

コードレビューの視点 015 [コードレビューの視点]

意図しない継承に注意する

Java言語でクラスを設計する場合に、継承されることを想定していなくても、実際には継承可能なコードを書いてしまうことが多いです。たとえば、次のコードを考えてみてください。
public class Point {
    private final int x;
    private final int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() { return x; }
    public int getY() { return y; }
}

このようなクラス宣言をした場合には、このクラスの使用方法は、1つではありません。単純にインスタンスを生成するだけでなく、クラスを継承して別のクラスを作成するという使用方法や、さらに、メソッドをオーバーライドして使用するなどができてしまいます。

ところが、コードレビューで、このようなコードを見かけたときに、「継承を前提とした設計なのですか?」と聞くと、「継承されることは想定していません」という返事が返ってくることがあります。Java言語では、継承できないように書くには、さらにクラスをfinal宣言するとかprivateのコンストラクタだけにするとかの手間をかけないといけないため、意図せずに継承可能なクラスを書いてしまうことが多いです。

しかし、継承される前提の設計でなければ、そもそも継承できないように書くべきです。コードレビューでは、その点を注意しなければなりません。特に、公開APIとなるようなクラスでは、なおさら注意する必要があります。

前の10件 | -