So-net無料ブログ作成
プログラマー現役続行 ブログトップ
前の10件 | -

レビューした(している)これからの新刊 [プログラマー現役続行]

これから出版される本で、今年その本の英語の草稿をレビューした本です。

Core Java SE 9 for the Impatient (2nd Edition)

Core Java SE 9 for the Impatient (2nd Edition)

  • 作者: Cay S. Horstmann
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2017/09/25
  • メディア: ペーパーバック

結構なページ数があるので、全部をレビューできませんでしたが、Java 9に合わせて更新されています。Horstmann氏のJava関連の最近の書籍は、レビュー依頼が米国の出版社からあるのですが、『Core Java Volume I--Fundamentals (10th Edition)』 『Core Java, Volume II--Advanced Features (10th Edition)』 も、ページ数が膨大で全部をレビューできませんでした。

Go in 24 Hours, Sams Teach Yourself: Next Generation Systems Programming with Golang

Go in 24 Hours, Sams Teach Yourself: Next Generation Systems Programming with Golang

  • 作者: George Ornbo
  • 出版社/メーカー: Sams Publishing
  • 発売日: 2018/01/01
  • メディア: ペーパーバック

米国の出版社からの依頼でレビューしたものです。Go言語の入門書で、これからGo言語を学ぶ初心者向きです。各章が1時間で消化できるないようになっています。初心者本でしたが、私自身も新たに学ぶことができた事柄もありました。

草稿が執筆中なので、レビューそのものがまだ終わっていませんが、現在レビュー中なのが次の本です。

Effective Java (3rd Edition)

Effective Java (3rd Edition)

  • 作者: Joshua Bloch
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2017/12/29
  • メディア: ペーパーバック

こちらは、第2版と同様に、著者のJoshua Blochが、レビューして欲しい人達(20名以上)に直接草稿を送っています。9年振りの改訂です。

コメント(0) 

練習問題の解答からみるエンジニアのレベル(3) [プログラマー現役続行]

私が今まで開催してきた社内のJava研修やGo研修では多くの練習問題を解かなければなりません。その練習問題の解き方から、どのようにソフトウェアエンジニアのレベルが分かるかについて書いたのが、次の記事です。
この記事での分類とは別に、最近驚いた解答がありました。それは、Go言語研修でのことです。Go言語研修では『プログラミング言語Go』をテキストとして使用しています。

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

  • 作者: Alan A.A. Donovan
  • 出版社/メーカー: 丸善出版
  • 発売日: 2016/06/20
  • メディア: 単行本(ソフトカバー)

驚いた解答は、次の練習問題に対する解答でした。
練習問題7.5 ioパッケージのLimitReader関数はio.Readerであるrとバイト数nを受け取り、 rから読み出す別のReaderを返しますが、nバイトを読み出した後にファイルの終わりの状態を報告します。その関数を実装しなさい。

func LimitReader(r io.Reader, n int64) io.Reader
この練習問題の意図は、ioパッケージのLimitReader関数と同じ機能を実装しなさいというのは明白です。そして、これは、プログラミングの練習問題ですので、自分で考えて実装することが求められます。

しかし、驚くことに、数人の受講生がioパッケージのLimitReader関数の実装コードを丸々コピーしていたことです。元の英語のコメントもそのままコピーしている人や、コメントだけ削除してコピーした人がいました。

これは、自分で何も考えないという点において、「全く解けていない」レベルよりも低いレベルかもしれません。

コメント(0) 

リコーでの8年間に出版した本の一覧 [プログラマー現役続行]

2000年から技術書の翻訳や自著の出版をしていますが、2009年9月1日にリコーへ入社してから出版した書籍です。出版順に、次の通りです。

ソフトウェア開発の名著を読む 【第二版】 (技評SE選書)

ソフトウェア開発の名著を読む 【第二版】 (技評SE選書)

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

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

  • 作者: Dave H. Hoover
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/07/08
  • メディア: 単行本(ソフトカバー)

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

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

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

プログラミング原論

プログラミング原論

  • 作者: アレクサンダー ステパノフ
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2010/12/24
  • メディア: 単行本(ソフトカバー)

Android SDK 開発クックブック

Android SDK 開発クックブック

  • 作者: ジェームズ・スティール
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2011/07/26
  • メディア: 単行本(ソフトカバー)

プログラミング言語Goフレーズブック

プログラミング言語Goフレーズブック

  • 作者: David Chisnall
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2012/10/04
  • メディア: 単行本(ソフトカバー)

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

Objective‐C明解プログラミング―基礎から応用までステップ・バイ・ステップ方式でわかりやすく解説 (Developer’s Library)

  • 作者: スティーブン・G. コーチャン
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2013/05
  • メディア: 単行本

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

  • 出版社/メーカー: インプレス
  • 発売日: 2014/05/23
  • メディア: Kindle版

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

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

  • 出版社/メーカー: インプレス
  • 発売日: 2014/09/22
  • メディア: Kindle版

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

  • 作者: Alan A.A. Donovan
  • 出版社/メーカー: 丸善出版
  • 発売日: 2016/06/20
  • メディア: 単行本(ソフトカバー)

8年間の在籍期間に、私的な活動として全部で10冊(自著2冊、翻訳本8冊)を出版したことになります。2013年にはピアソンの翻訳書籍からの撤退に伴い、ピアソン桐原社から出版されていた書籍がすべて絶版となりました。しかし、『プログラミング言語Java 第4版』『Effective Java 第2版』『プログラミング原論』は、後に他の出版社から再出版されています。

最後の2冊『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』と『プログラミング言語Go』は、社内教育であるJava8研修とGo言語研修のテキストとしても使ってきました。

技術書の翻訳の場合、一般的な勉強会で技術書を読むことと大きく異なるのは、英語から日本語、それに校正作業の過程で何度も読み返すということです。さらに、社内教育でテキストとして使う本に関しては、教えることにより、内容がかなり頭に残っていきます。

コメント(0) 

AITCセミナー [プログラマー現役続行]

2017年6月16日(金)に、AITCセミナーで、「ソフトウェアエンジニアの心得 / Go言語の紹介」と題して2時間の話をしました。案内は、こちらです。

「ソフトウェアエンジニアの心得」はQ&Aを入れて2時間30分でいつも話すのですが、約1時間で話をしたため、省略した部分も多かったです。

「Go言語の紹介」は、Go言語の特徴をデモを含めて行ったのですが、45分だったので、用意した資料をすべて話すことはできませんでした。資料は、こちらです。

参加者は約40名程度で、セミナーの後は懇親会で、90分ほど参加者と色々と話をすることができました。

再訪:News Improvement [プログラマー現役続行]

アドレナリンジャンキー プロジェクトの現在と未来を映す86パターン

アドレナリンジャンキー プロジェクトの現在と未来を映す86パターン

  • 出版社/メーカー: 日経BP社
  • 発売日: 2009/10/26
  • メディア: Kindle版

この書籍の「News Improvment」(日本語訳では「ニュースの改良」)に関連して、過去いくつかのブログを書いています。
「News Improvment」が蔓延しているソフトウェア開発組織は、それが一種の「組織文化」になっているため、何度でもデスマーチプロジェクトを繰り返していくのかもしれません。

新装版『達人プログラマー』(2) [プログラマー現役続行]

先日書いた記事がきっかけで、出版社から献本していただきました。

IMG_0495.JPG

右が1999年12月28日に読了した原著、真ん中は「Software People, Vol.6」(2005年4月)に書評を書くために読んだ日本語版、左が今回出版社から献本してもらった新装版。

原著が1999年10月20日に出版された直後に購入し、読んで気付いた点を著者にフィードバックしたので、英語の原著の2nd printing(第2刷)以降には、次のように謝辞が変更されています。

IMG_0498_3.jpg

追加されたのは、「The second printing of this book ... 」で始まる第2段落です。実は、この段落が追加されて自分の名前が掲載されているのを知ったのはかなり後で、たまたま何かを検索しているときに見つけました。それで、もう一冊原著を購入したので書斎には二冊あります。

私が40歳の時に読んだ本です。そして、こらからも若い人達にぜひ読んでもらいたい本です。

新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

  • 作者: Andrew Hunt
  • 出版社/メーカー: オーム社
  • 発売日: 2016/10/20
  • メディア: 単行本(ソフトカバー)


新装版『達人プログラマー』 [プログラマー現役続行]

新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

  • 作者: Andrew Hunt
  • 出版社/メーカー: オーム社
  • 発売日: 2016/10/20
  • メディア: 単行本(ソフトカバー)

ピアソンが日本での翻訳出版から撤退した時に絶版になった『達人プログラマー』が、再出版されます。再び、日本のソフトウェアエンジニアが読むことができるようになったのは、とてもよいことだと思います。「ソフトウェアエンジニアの心得」と題した講演や教育でも紹介しているのですが、絶版の本を紹介するのはちょっと心苦しいものがありました。

拙著『ソフトウェア開発の名著を読む 【第二版】』でも紹介しており、紹介の最後に次のように書いています。

より優れたプログラマーへ

本書には、実践的なプログラマーとなるために常に心得ておくべき事柄と、日々のソフトウェア開発で実践すべき事柄が、具体例と共にまとめられています。すべてを一度に行うことは困難ですが、すぐに試すことができる事柄については、実際に実践して一つ一つ身につけていけば、より優れたプログラマーになることができると思います。

原著は、こちらです。

The Pragmatic Programmer: From Journeyman to Master

The Pragmatic Programmer: From Journeyman to Master

  • 作者: Andrew Hunt
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 1999/10/20
  • メディア: ペーパーバック

原著の1st printing(第1刷)を読んだのは出版直後の1999年12月でした。私が40歳になった頃です。私自身に影響を与えた名著の中の一冊です。是非、若い人達にも読んだもらいたい本です。

余談ですが、原著の2nd printig(第2刷)以降には、謝辞が追加されており私の名前も掲載されています。謝辞の欄であっても名前が初めて掲載された本です。残念ながら日本語版にはその追加された謝辞は追記されていなかったので、今回の再出版でも追記されていないと思います。

練習問題の解答からみるエンジニアのレベル(2) [プログラマー現役続行]

練習問題の解答からみるエンジニアのレベル」では、研修の予習である練習問題の解答のレベルを分類してみました。解答のレベルに対して、次のように分類しています。
  • 全く解けていない
  • 一見すると解いているように見えるけど、バグがある
  • 練習問題が求めているものと解答が異なる
  • 解いているが、動作の確認が目視になっている
  • テストコードも整備されてきちんと解かれている
研修では全員の解答を確認する時間はないので、一人か二人の解答を確認します。当然、その場合に上記の最初の三つのレベルの人の場合、そのままでは解答したことにはならないわけです。

未解答(誤解答)に対して受講生がどのような対応をするかは、次の二つに分けられます。
  • もう終わったということで何もせずに、次回の範囲を予習をする。
  • 解いていなかった問題を解いたり、誤っていた解答を修正した後で、次回の範囲を予習する。
最近の研修では練習問題の解答の提出は、すべて各人のgithub.com上の公開リポジトリで行ってもらっていますので、研修後にどちらの対応をしているかは簡単に分かります。

当たり前ですが、研修後にどちらの対応をするかは、社会人となってからのソフトウェアの開発年数には全く関係ありません。私が期待するのは、私から指示されなくても後者の対応をするソフトウェアエンジニアです。

練習問題の解答からみるエンジニアのレベル [プログラマー現役続行]

長年行っているJava研修(Java 8研修も含む)はテキストとして『プログラミング言語Java第4版』『Java SE 8 実践プログラミング』を使用しています。また、今年から始めたGo言語研修『プログラミング言語Go』を使用しています。どのテキストにも、プログラミングの練習問題が豊富に含まれています。

基本的にプログラミングの練習問題は事前に解いてもらいます。そして、研修の場で解答の確認を行います。つまり、ソースコードを研修の場で開くわけです。私自身は事前に解答のソースコードを見ておくことはしませんので、研修の当日に受講生のソースコードを見ることになります。

練習問題であってもソースコードの可読性という視点でも分類はできますが、解答できているかというレベルで分類すると次のようになります。
  • 全く解けていない
  • 一見すると解いているように見えるけど、バグがある
  • 練習問題が求めているものと解答が異なる
  • 解いているが、動作の確認が目視になっている
  • テストコードも整備されてきちんと解かれている

全く解けていない

練習問題にもさまざまな難易度があるので、サービス問題ともいえるやさしい問題から難易度が多少高いものがあります。練習問題なので、難易度がものすごく高いものはあまりないです。それでも、「解けていないのはどういうこと?」と思われる難易度の低い問題を解いていない人は、全体として解けていない問題が多くなります。
※ ソフトウェア・スキル・インデックスでいえば、レベル1(初心者)と2(見習い)の間でしょうか。

一見すると解いているように見えるけど、バグがある

実は、これがおそらく最も多いです。研修の場で初めて私自身が受講生の解答を見るのですが、エディターやIDEでコードを開いて見た瞬間に「何か臭う」と思い、よく読むとやはりバグがあるのです。そこで、解答を作成した受講生にどこかおかしくないかと聞くと、最も多い返事が「だいぶん前に書いたので忘れました」という回答です。研修は一月に1日だけなので、進捗によっては一か月前もしくは二か月前に書いたコードとなります。

練習問題の解答のソースコードは短いものが多く、「忘れた」と回答したら済まされるという思考はソフトウェアエンジニアとして正直許されません。そのような回答をされると私が言うのは、「覚えているかどうかではなく、今読んで理解して問題点を見つけなさい」です。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

練習問題が求めているものと解答が異なる

これも意外と多いです。つまり、練習問題の設問内容をきちんと読まずに、間違った解答もしくは機能が少ない解答となっています。多くは、練習問題で複数の機能が要求されているのに、全部を実現していない場合です。そして、どうして全部実現していないのかと聞くと、「練習問題の内容を読み落としていました」という回答が圧倒的に多いです。そもそも、練習問題はせいぜい2,3行で書かれています。それでも、最後まできちんと読まずに解いてくるわけです。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

解いているが、動作の確認が目視になっている

すべての練習問題でテストコードが容易に書けるわけではありませんが、容易に書ける練習問題でも、動作の正しさを、実行して目視で確認するだけと言うものです。そして、バグがあるけれどテストケースが少ないためにそのバグに気づけていないことが多いのは、目視で結果を確認するようになっている解答です。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

テストコードも整備されてきちんと解かれている

これは何も言うことはありません。
※ ソフトウェア・スキル・インデックスでいえば、レベル3(初級職人)でしょうか。

研修の練習問題であっても、「許される無知の範囲は開発経験年数に反比例する」で書いたのと同じように、経験年数が長いほど期待される解答のレベルは高くなっていきます。

許される無知の範囲は開発経験年数に反比例する [プログラマー現役続行]

UUUM社の採用に関するブログ「優秀なエンジニアを採用するために面接で気をつけていること」でエンジニアの学習に関して次のように書かれています。
採用を決める時の一番重要なポイントは実力ですが、20代の若い方は将来性を期待して、ポテンシャル採用をすることもあります。 ポテンシャル採用で重要なのは、なんといっても向上心。 「いろんな技術を勉強したいんです」というのは誰でも言いますよね。 本当にそう思っているのであれば普段から勉強しているはずなので、中身をちゃんと理解できているのかを確認させてもらいます。 20代に関しては、現時点での実力が多少低くても採用します。 その代わり、しっかり勉強してもらって、ちゃんとした技術力を身につけてもらいます。

30代になってくると、やはり実力が求められます10年近くもエンジニアをやっていながら、技術的な知識の薄い人が多いのには驚かされます。 それだけ長い時間をかけて実力が伸びてないということは、今後の伸びも期待できないので、残念ながら不採用となってしまいます。 なので、20代の若い方達には、今のうちにしっかりと勉強して実力を身につけてもらいたいと思います。

以前書いた「継続した学習」では、中途採用の面接の際に行っていた読書した書籍の確認の話を書いています。面接時に読んだ書籍の一覧を用いた確認は前職の富士ゼロックス情報システムの頃からやっていたのですが、本当に「10年近くもエンジニアをやっていながら、技術的な知識の薄い人が多いのには驚かされます。 」
※ この一年は自分で率いるプロジェクトもなく、部下なしの状態なので中途採用の面接をすることはありません。

私が行っている社内研修であるJava言語研修Go言語研修には、入社2年目や3年目ぐらいの若いエンジニアが受講することが多いのですが、コンピュータの基本構造、「データ構造とアルゴリズム」、オペレーティングシステムなどの基礎的な事柄を知らない人が多いのです(「ハッシュテーブルの季節」)。

研修後の懇親会などでは、「新卒新人や入社して2、3年目で知らないで許される範囲は多少広いが、経験年数を経るごとに許される範囲は狭くなっていく」という話をします。つまり、きちんと学習を継続していかないと、だめなわけです。

しかし、継続的に学習を続けていくことの重要性を教えることなく、与えられた開発業務をこなせればよしとするソフトウェア開発組織が多いのではないでしょうか。その結果、10年が過ぎて他の会社に転職しようとしても不採用になってしまうエンジニアの集団になってしまう可能性が高くなります。(「ソフトウェア開発組織が持つべきカルチャー 001」)

前の10件 | - プログラマー現役続行 ブログトップ