So-net無料ブログ作成
前の10件 | -

16冊目の翻訳本 [本]

翻訳本としては私にとって16冊目となる、次の本の翻訳本を12月に出版します。

Becoming a Better Programmer: A Handbook for People Who Care About Code

Becoming a Better Programmer: A Handbook for People Who Care About Code

  • 出版社/メーカー: O'Reilly Media
  • 発売日: 2014/10/03
  • メディア: Kindle版

原著は3年前に出版されています。著者のPete Goodliffeは、次の書籍の著者です。

Code Craft エクセレントなコードを書くための実践的技法 Mynavi Advanced Library

Code Craft エクセレントなコードを書くための実践的技法 Mynavi Advanced Library

  • 出版社/メーカー: マイナビ出版
  • 発売日: 2014/09/17
  • メディア: Kindle版

『プログラミング言語Go』の翻訳作業が終わった後の、2016年6月から翻訳に着手しました。一年以上を要したことになります。

『Becoming a Better Programmer』は、優れたプログラーを目指すための人のために、様々な話題が取り上げられています。40歳から始めた技術書の翻訳ですが、翻訳を行った本から多くのことをソフトウェアエンジニアとして学んできました。この本もからも多くのことを認識し直したり、学ぶことができました。

Amazonで予約注文できるようになりましたら、改めて紹介します。

12月からは、私にとって17冊目となる本の翻訳に着手する予定です。



スポンサーリンク





コメント(0) 

clibと呼ばれるライブラリー開発の思い出(4) [clib]

(前回はこちら

メモリ管理ライブラリ

1990年代に開発したFuji Xerox DocuStation IM200 / AS200は、オペレーティングシステムがSolaris 2.3であったため、プロセスが存在していました。つまり、ユーザのメモリ空間に関しては、プロセスの壁があった訳です。それでも、プロセス内でのメモリ破壊のデバッグには苦労しました。

メモリ管理ライブラリのAPI設計にあたっては、メモリ空間がシステム全体で一つというVxWorks上で、どうやって効率よくメモリ関連の問題を早期に発見するかという視点で設計しました。細かな技術的な詳細は説明しませんが、メモリ管理ライブラリは以下の機能を持つように設計しました。
  • メモリをヒープゾーン(Heap Zone)と呼ばれる大きな単位で扱い、すべてのメモリ獲得は指定された特定のヒープゾーンから行う。用語「Heap Zone」は、初期のMachintoshのAPIから拝借したものです。
  • ヒープゾーンから獲得されたメモリブロックをdeleteオペレータで解放する際に、そのメモリブロックの範囲を超えて書き込みをして破壊していないかを検査する仕組み。破壊を検出した場合には、破壊を報告すると同時に、そのメモリブロックをnewオペレータで割り当てたソースコード名と行番号を表示する。
  • newオペレータで獲得されていないメモリブロック(もしくは、誤ったアドレス)をdeleteオペレータで解放しようとしていないかを検査する仕組み。
  • メモリブロックが獲得されたが初期化されていない、もしくは、解放されたことをデバッガーで調べている時に分かるようにする仕組み(初期化忘れやダングリングポインターに容易に気づく仕組み)。
  • ヒープゾーン内の現在のメモリ使用量と最大使用量を知る仕組み。
  • メモリリークを容易に検出できるようにし、リークしているメモリ ブロックがどのソースコードの何行目で獲得されたかを報告する仕組み。
今日では、このようなことを気にしないといけないような言語で開発することは少なくなっていると思います。しかし、2000年の頃、C++による大規模な組み込みシステムの開発では、これらの機能を事前に用意していないと、メモリ関連の障害によるデバッグは大変な時代でした。今から、やり直せるとしたら、C++ではなく、Go言語で作り直すと思います(訳者あとがき『プログラミング言語Go』)。

メモリ管理ライブラリはもちろんスレッドセーフに作成されており、このライブラリに基づいて、共通ライブラリとしてコレクション機能も含む「スレッドライブラリ」を設計しました。「スレッドライブラリ」は、Javaとそのライブラリに強く影響を受けたC++用ライブラリでした。

次回は、「スレッドライブラリ」について簡単に説明します。


スポンサーリンク





コメント(0) 

通勤電車の書斎化(2) [朝型]

3年半前に「通勤電車の書斎化」を書いています。現在はどうなっているかというと、6社目となる現在の会社では、田園都市線(半蔵門線)で通勤するため、自宅の最寄り駅から始発(初電)の5時54分に乗車しています。

2駅で終点なので、そこで各駅停車に乗り換えます。この時間は確実に座れます。もっと遅い時間でも各駅停車には座れます。問題なのは、会社の最寄り駅までの間で、ノートPCを開いてどれだけ快適に作業ができる混み具合かということです。

田園都市線は混むことで有名ですが、遅い時間に乗車するとかなり混みます。そして、ノートPCを開いて作業ができるような状況ではなく、目の前の人がかなり近くまできます。つまり、座れても作業ができないのです。したがって、最寄り駅では始発に乗車します。そうすると、それほど混むこともなく、ノートPCを開いていても快適に作業できます。

電車内では、着脱式の覗き見防止フィルターを使っています。着脱式なので便利なのですが、ディスプレイの下(MacBookでDockのアイコンが並んでいる部分)はピッタリと張り付いていなくて少し浮いていて、ぼやっと見えます。


電車の中では会社の仕事をする訳ではなく、プライベートの翻訳作業が圧倒的に多いです。次に多いのは、技術書の原著のレビューです。どちらもないときは、技術の学習をしていたりします。今年は、ずっとある本の翻訳を行っていましたが、私の方の作業はすべて終わっています。出版は、おそらく年末になるかと思います。一方、今年レビューした技術書はこちらです。

朝は、会社の最寄り駅に到着するのが7時過ぎです。それから、スターバックスに行って、8時30分頃まで作業を続けて、それから出社します。

現在は、変則的な勤務をしており、16時に退社して、18時から20時まで家で仕事をしています。リコーに勤務していた頃と違って、API仕様・テストコード・実装を書いたり、PullRequestをレビューしたりと、終日ソフトウェア開発をしていることが多いです。そのためか、それとも、年齢的なことなのか、あるいは、朝起きてから13時間以上経過しているからかもしれませんが、16時に退社して電車は座れるのですが、疲れから30分ぐらい寝ていることが多いです。


スポンサーリンク





コメント(0) 

第5期Go研修を11月から開講します [golang]

2017年8月31日付けで株式会社リコーを退職し、9月からはソラミツ株式会社に勤務してソフトウェア開発に従事しています。しかし、勤務日は月曜日から木曜日までの週4日勤務の雇用契約を結んでいます。金曜日は契約上は休日です。

リコーグループで行っていたGo研修は9月22日(金)に第3期と第4期が終了しました。同様に、Java研修も9月8日(金)に第25期が終了しています。9月は社員ではないので、個人として有償で金曜日に実施したものです。

リコーの退職は、自己都合扱いといっても「セカンドキャリア制度」(ある種の早期退職制度)の適用を受けており、リコーグループの会社から私個人への業務委託は今後は認められないということになっています。今後3年間は、リコーグループに対して技術教育を行うことはありません。

11月下旬から私にとっては通算で第5期となるGo言語研修を某企業で実施します。その企業では第1期となります。

コメント(0) 

第3・4期Go研修が終了しました [golang]

2017年4月に開講した第3期および第4期のGo言語研修が9月22日に終了しました(Go言語研修実績)。第3期は9名、第4期は4名が修了しました。これで、27名が修了したことになります。

第3・4期Go研修.jpg
修了生と私(3名欠席)。

先週終了した第25期Java研修も含めて、株式会社リコーの社員として実施していたすべての言語研修が終了となりました。

今までJava研修やGo研修は、社内研修という位置付けで実施してきました。そのため、在籍していた時期ごとに、富士ゼロックスグループ(富士フィルムグループ)やリコーグループの社員が対象でした。今後は、教育を希望される企業に対して実施していく予定です。

コメント(0) 

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

2016年11月に開講し、私にとっては通算で第25期となるJava研修が終了しました(Java研修実績)。9名が修了しました。2010年の第11期以降のリコーグループとしては、延べ118名が修了したことになります。私が株式会社リコーを退職したことにより、第10期と同様に『Effective Java』の学習を行うことなく、終了となりました。

25期.jpg
修了生と私

第25期はJava8研修も統合したのですが、『Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング』も、残念ながら第3章までとなりました。

最終回の成果発表会では、研修の振り返りと会心のデジタル時計のデモを各人に行ってもらい、最後に修了証書を授与しました。その後に、全員で門前仲町で懇親会を行いました。

Java研修を通して、全員が以下のことを経験出来たと思います。
  • 専門書をきちんと読んで学習するという経験と習慣。同じ本を一人で独学するのとは異なり、研修を一緒に受けている仲間がいることで読み通すことができ、練習問題にも取り組み、結果として学習する習慣が身に付いたと思います。
  • Java言語をみっちりと学んだので、今後、さまざまなプログラミング言語を学習する際に対比しながら学習できるようになったと思います。
この一年間の受講生の努力が、彼ら・彼女らの今後のソフトウェアエンジニアとしてのキャリアの基礎になれば、私にとって嬉しいことです。

コメント(0) 

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

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

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) 

延期:『Effective Java, 3rd edition』 [Effective Java 3rd]

『Effective Java, 3rd edition』の英語版の発売日が延期されたようです。12月29日発売となっています。

Effective Java (3rd Edition)

Effective Java (3rd Edition)

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


コメント(3) 

株式会社リコーを退職します(2) [転職]

今日(2017年8月31日)がリコーへの最終出社日です。2009年9月1日にリコーへ入社してから、主に行ってきたことを簡単にまとめます。

【業務関連】所属した開発組織の業務として行ったものです。
  • 技術教育:2010年に延べ500名以上のソフトウェアエンジニアに対して、「ソフトウェアエンジニアの心得」「テスト駆動開発」「C++」「API設計の基礎」などの教育を実施しました。しかし、「教育と場」でも書いたように、今から振り返ってみると、単に「教育をした」と「教育を受けた」ということだけが残り、私が教えた内容を実際の開発の現場で指導する人がいないため、開発組織としてのレベルアップにはならなかったと思います。

  • Jenkins導入:2010年10月から行ったものです。当時デジタル複合機内で動作するJavaの開発環境やインテグレーション環境は、私の視点からはあまりにもお粗末でした。それで、FXIS時代に一緒に仕事をした派遣会社のエンジニアに来てもらい、二人で二ヶ月で一新しました。ソースコントロールシステムをCVSからSubversionへ移行し、それまですべて手作業で行われていたビルドをすべて自動で行えるようにしました。さらに、FindBugsを含む静的解析ツールの導入も行いました。この2年後に「継続的インテグレーションは強みではなくなった」という記事を書いていますが、これは継続的インテグレーションに対する社内のあまりの無理解に対して書いたものです。

  • 1701G:1701Gというのは、2013年7月に発足した開発グループの正式な名称です。私がグループリーダでした。Star Trekのファン(つまり、トレッキー:Trekkie)であれば、1701が何を意味するのか分かると思います。

    このグループでは、デジタル複合機のコントローラソフトウェアをリコー社内では前例のない方法で開発しようとしたものです。Go言語を用いて、完全テスト駆動開発というものです。当時、Go言語での開発経験者の中途採用活動も行っていましたが、今日とは違って経験者は皆無でした。

    グループとしての活動は2年間で終了させられました。途中で、このグループの開発よりもはるかに先を行っているHPの開発を知りました。それについては、こちらで書いています。実は、このHPよりも先行できる可能性があったのが富士ゼロックスでした。1701Gで行った開発は、私が2003年から2009年まで従事したC++によるプロジェクトを、Go言語で若手のエンジニアを中心として焼き直したものでした。

  • 技術レビュー:1701G以降は、開発現場の成果物のレビューを中心として活動を行ってきました。

【技術教育】2000年から行ってきている教育です。
  • 「ソフトウェアエンジニアの心得」教育:リコーへ入社する前から行っていた2時間30分の研修です。リコーでは、2009年から今年まで、情報系として入ってきた新卒新人向けに毎年行ってきました。

  • Java言語研修:詳しくは、こちらです。8年間にリコーグループで109名が修了しています。途中から数えるのが面倒になったので正確な数字は分かりませんが、約1/4の修了生がすでに転職しています。今年は、2年ぶりにJava研修のOB・OG懇親会を開催しました(その様子はこちらです)。

  • Go言語研修:書籍『プログラミング言語Go』の出版を機に始めたGo言語の研修です。詳しくは、こちらです。
上記の3つの研修は、希望される企業があれば有償で開催可能です。開催日は原則金曜日となります。ただし、今回私が適用を受ける「セカンドキャリア制度」(いわゆる早期退職制度)の制約により、リコーグループの会社に対しては開催できません。

コメント(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) 
前の10件 | -