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

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


この書籍の「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
  • メディア: 単行本(ソフトカバー)


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

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

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


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

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

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

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

原著は、こちらです。

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」)

翻訳のきっかけ [プログラマー現役続行]

プログラミング言語Go』は、私にとっては15冊目の翻訳本になります。技術書の翻訳は2000年からですので、平均すると1年に1冊のペースとなります。結果として15冊ですが、当然、1冊目は初めての翻訳だったわけです。そして、技術書を翻訳するようになったきっかけを聞かれることがよくあります。

プログラミング言語Go

プログラミング言語Go


40歳になる1999年の後半に考えていたのは、40歳になったら、雑誌の記事や技術書の執筆、それに技術書の翻訳をやっていきたいというものです。フリーランスではないので、会社での仕事とは別に私的な時間にそのような活動をできたらと漠然と考えていましたが、何か具体的な手段は何も考えていませんでした。

当時、私は「Javaカンファレンス」という団体の個人会員でした。Javaカンファレンスの99年度総会(1998年9月25日)には一人で参加したのですが、翌年の2000年度総会(1999年9月13日)には会社の若手エンジニアであった相馬純平さんと一緒に参加しました。

総会の懇親会の場で、雑誌「Java PRESS」を出版していた技術評論社の編集の人と相馬さんが談話して、「相馬さんも記事を書きませんか」という話になったのですが「よい人がいますから」ということで、実際には私のところにその編集の人を連れてきて紹介してもらい、三人で談話しました。そのときに話した内容の一つが『The Java Programming Language, Second Edition』が翻訳されていないという話でした。しかし、何か記事を書く話にはなっていません。

正確な時期については憶えていないのですが、だめもとで記事を書いて投稿してみようと思い、最初の記事『「The Java Programming Language, Second Edition」について』を書いて、「Java PRESS」の編集部へ投稿してみました。幸い採用されて、2000年3月の「Java PRESS, Vol.11」に掲載されました。最初の記事を投稿した後に他に何か書けませんかと聞かれたのだとおそらく思うのですが、別の記事『AWT/Swingにおけるイベント処理のメカニズム』を書いています。これをきっかけとして、その後の「Java PRESS」、「XML PRESS」「Software People」といった雑誌に記事を書いています。40代前半は、雑誌の記事を多数書いていたことになります。相馬さんも、2000年後半から雑誌の記事を書き始めています。

話を戻すと、最初の記事では「The Java Programming Language, Second Edition」はよい本であり、翻訳されていないことは残念であるという趣旨で本の紹介を書きました。その私の記事を読まれた当時のピアソン・エデュケーションの編集担当であった藤村行俊さんからメールをいただき、第2版の翻訳に関しては時期を逃したのと翻訳する予定はありませんということでした。

その後、何度かメールのやり取りをして、藤村さんから「柴田さんも何か翻訳してみませんか」とメールで聞かれて、「やります。今度出る第3版はどうでしょうか?」という返事をして、「The Java Programming Language, Third Edition」を翻訳することになりました。これが、翻訳をするきっかけでした。

プログラミング言語Java (The Java Series)

プログラミング言語Java (The Java Series)

  • 作者: ケン アーノルド
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2001/06
  • メディア: 単行本

実は、こうやって翻訳した『プログラミング言語Java第3版』は、出版時期からすると私にとっては最初の翻訳本ではありません。最初に出版した翻訳本は、「Javaリアルタイム仕様」なのです。

Javaリアルタイム仕様 (The Java Series)

Javaリアルタイム仕様 (The Java Series)

  • 作者: G. ボレラ
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本


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

Core Java, Volume II--Advanced Features (10th Edition) (Core Series)

Core Java, Volume II--Advanced Features (10th Edition) (Core Series)


Vol.1のレビューは時間切れで全部の章を行うことができませんでした。Vol.2のレビュー依頼がきましたので、全部の章をレビューできるかどうかは分かりませんがレビューすることになりました。

言語研修と練習問題 [プログラマー現役続行]

長年『プログラミング言語Java第4版』をテキストの一部としてJava研修を実施しています。また、『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』を用いたJava8研修も三回実施しました。

どちらの書籍にも練習問題がそれぞれ100問以上あります。研修の受講生は、それらの練習問題全部に取り組みプログラミングしてくることが求められています。来年2月から開講予定のGo言語研修ではテキストとして『The Go Programming Language』を使用します(実際には翻訳原稿)。そして、この本にも練習問題が100問以上あり、すべてプログラミングしてもらうことになります。

技術書を一人で黙々と学習する場合と、研修で学習する場合の大きな違いの一つは、全部の練習問題のプログラミングに取り組み続けられるということです。私もそうですが、一人で技術書を学習している時は、技術書に練習問題があっても、それをプログラミングして解くことは少ないです。

一人で学習する場合とは異なり、研修受講生は全員が同じ練習問題に取り組んでいるという状況が、結果として個々の受講生がプライベートの時間(休日など)に取り組み続けられるモチベーションになっているのだと思います。研修日には、全員の解答のコードを確認することはできませんが、他の受講生の解答を見ることで得ることも多いと思います。

副業 [プログラマー現役続行]

私自身は、1984年4月に就職してからずっと会社勤めをしています。会社は4回変わりましたし、これからも変わらないとは言い切れません。一方で、会社以外から給与以外の収入(雑所得)を得るようになったのは2000年からです。

主な収入は、「原稿料」、「印税」、それと「組版料」です。雑誌の原稿を書いていたのは2006年までなので、それ以降は「印税」と「組版料」のみです。一部の本を除いて、基本的に自分が翻訳した本を自分で組版して納品してきました。残念ながらこれらの収入で暮らせるほどには、日本では技術書は売れません。

安達 裕哉さんが”「副業すると、本業の成績も上がる」と語る経営者の話”と題したブログ記事で、副業をしている人の特徴として以下の三つが書かれています。
  • 人脈が多い
  • 収入の口が他にもあるので、評価に拘泥(こうでい)しなくなる
  • 経営者視点が持てる
人脈ですが、確かに多少は広くなっているかもしれません。出版社と著者達との人脈は普通のソフトウェアエンジニアよりもあります。原著の草稿のレビューをするというのも、そのような人脈のおかげだったりします。今回の『The Go Programming Language』の英語草稿のレビューも、担当している米国の出版社の(知り合いである)編集者へ直接自分でお願いして、著者のAlan DonovanとBrian Kernighanに紹介してもらいました。

ソフトウェアエンジニアとしては、翻訳を通して多くの知識を学ぶと同時に、著者達と多くのメール(質問や間違いの指摘)のやり取りをすることで、実際に会ったことはない人が多いですが人脈は広がっていると思います。

二つの目の「会社での評価にこだわらなくなる」というのは、ある程度そうかもしれません。そのため、ソフトウェア開発に関しては社内で褒めるところが見あたらないことが多く、私が問題点を指摘することが多いため、「柴田さんは褒めない」と評価が下がったりするのですが気にしていません。あるいは自分が重要だと思う活動が評価されなくてもそほど気にしないようになってきています。

三つ目の「経営者視点が持てる」ですが、何かを作って売るという副業ではないので、それほど持てるようになっているとは思えません。ただ、翻訳は膨大な時間を費やす必要があるので、それが結果的にどのくらいの時給になるのかは最近は気にして、すべての作業時間を記録しています。ちなみに昨年出版した『APIデザインの極意』は「今日までの収入」を「翻訳に費やした時間」で割ると時給1,722円です。

副業により給与以外の収入はありますが、それに加えて上記の最初の二つの項目は大きなメリットだと思っています。

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