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

Kindle版:Introduction to Computing Systems: From Bits & Gates to C & Beyond 3rd Edition [読書会]

Introduction to Computing Systems: From Bits & Gates to C & Beyond (English Edition)

Introduction to Computing Systems: From Bits & Gates to C & Beyond (English Edition)

  • 出版社/メーカー: McGraw-Hill Higher Education
  • 発売日: 2019/09/03
  • メディア: Kindle版

紙の本はかなり高額ですが、Kindle版も発売になっており、5000円弱となっています。第2版が2003年ですから、16年振りの改訂となります。

この本の第2版に関しては、何度かブログで紹介していますが、その一つを再度引用しておきます。
この書籍は、前半は、コンピュータの仕組みを学ぶ内容となっています。それも、トランジスタから始まって、基本的なANDやOR回路、フリップフロップ、メモリ回路、ALUなどを順次説明していき、最後は、16ビットのコンピュータの回路まで説明していくというものです。練習問題も多く、勉強会では、基本的にすべての練習問題に取り組んでもらいました。

この勉強会は、私が属する事業部に配属されたその年の新卒新人は全員必須でした。さらに、週に3回も開催していたので、予習が追いつかないという状況だったようです。それで、途中から、週1回に変更しました。

書籍の前半が終わった時点で、後半への参加は、必須ではなくしました。後半は、C言語が解説してあります。しかし、C言語の単なる説明ではなく、コンパイルするとどのような命令が生成されるかや、関数呼び出しでスタックはどのように使用されるのかとかが解説されています。後半も、練習問題をすべて行いながら勉強会を続けました。

結局、この書籍の勉強会は、約3年を要しました。しかし、参加者は、コンピュータの基礎を学んだだけでなく、英語の専門書を一冊読むことを経験してもらったことになります。この本の改訂版が出版されたら、もう一度勉強会をやってもよいかなとは思っています。
ここで述べている勉強会の対象者は2005年度の新卒新人でしたので、読み終えたのが2008年となります。

この本は、米国の大学のComputer Scienceの一年生用に書かれており、実際に教えられています。日本の大学ではここまできちんと教えている大学はとても少ないのではと思います。

上記の引用している記事の最後に書いているように、第3版が出たので社内で勉強会を開催したいと思います。いつから始めるかは未定ですが、以下のスケジュールを考えています。

【開催日時】毎週木曜日 午前8時〜9時30分(90分)

基本的には事前割り当てなどせずに、勉強会の中で英語を日本語に訳しながら読んでいき、練習問題もその場で問いていきたいと思います。おそらく3年は要するとは思いますが、私が定年退職する前には終わると思います。希望者は社内のSlack(@yoshiki.shibata)で私まで直接知らせてください。


スポンサーリンク




コメント(0) 

第26期Java研修を開講します [プログラミング言語Java教育]

2000年から継続してきたJava研修ですが、リコーを退職した時点で開催していた第25期で最後となっていました。その後、個人として『Effective Java 第3版』研修を実施しています。しかし、いきなり『Effective Java 第3版』では、「受講生のJavaに関する知識が不十分なために、内容を理解できないし、説明も難しい」という本質的な問題を抱えています。そのため、『Effective Java 第3版』研修をどのように行うのがよいか試行錯誤中です。

一方で、『Effective Java 第3版』をきちんと理解するためには、やはり従来のJava研修でなければ無理があると考えて、第26期のJava研修を9月から開催します。Javaは発展を続けているため、従来の一年間のコースではなく、一年半のコースとして開催します。それでも、Java 10以降はカバーできないのではないかと危惧しています。

仕事では、日々Goでプログラミングをしており、Javaを使う機会はないです。しかし、Javaとの付き合いは1996年8月からと長いので、これからも若手のソフトウェアエンジニアの成長を助ける意味で、技術教育は続けていきたいと思っています。


スポンサーリンク





コメント(0) 

Introduction to Computing Systems: From Bits & Gates to C & Beyond 3rd Edition [本]

Loose Leaf for Introduction to Computing Systems: From Bits & Gates to C & Beyond

Loose Leaf for Introduction to Computing Systems: From Bits & Gates to C & Beyond

  • 作者: Yale N. Patt
  • 出版社/メーカー: McGraw-Hill Education
  • 発売日: 2019/08/27
  • メディア: Loose Leaf

「Loose Leaf for」となっているのでどのように製本されているかちょっと不明ですが、第3版が出版されます。

この本の第2版に関しては、いくつか記事を書いていますが、その一つがこちらです。


スポンサーリンク





コメント(2) 

第1期、第2期『Effective Java 第3版』研修が終了 [プログラミング言語Java教育]

Effective Java 第3版

Effective Java 第3版

  • 出版社/メーカー: 丸善出版
  • 発売日: 2018/10/30
  • メディア: Kindle版

Java研修の第25期生を対象とした、翻訳原稿を用いた補講を経て、『Effective Java 第3版』研修の第1期と第2期が今月終了しました。

以前は、一年間のJava研修の最後で『Effective Java』を学習してもらうため、受講生のJavaに関する知識はある程度揃っていました。今回は、いきなり『Effective Java』でしたので、受講生のJavaに関する知識や経験はさまざまであり、補講とは異なり、ときにはJava言語の仕様そのものを解説をする必要がありました。

読めば分かると思われる項目を途中でいくつか飛ばして、何とか項目85まで終わらせることができました。7月からは第3期を開講します。

第1期であるアットウェア社の様子は、こちらです。

コメント(0) 

メルペイで一年が過ぎました [プログラマー現役続行]

前回の「メルペイで9か月が過ぎました」から3か月が経過して、ちょうど一年が過ぎました。

この3か月で特筆すべきことは、私事ですが、腰部脊柱管狭窄症がかなりよくなったことです。メルペイへ入社した2018年6月頃から数ヶ月が症状が最も悪かった頃で、大江戸線の六本木駅から六本木ヒルズまで歩くのも非常に辛かったです。幸い薬だけで改善しました。完全に回復したわけではないですが、4月からは、大江戸線の六本木駅のホームから地上まで階段を歩いて上がっています。

メルペイ入社(2018年6月)から今年の4月までは、加盟店管理画面のbackendのマイクロサービスを担当していましたが、5月からは別のマイクロサービスのチームへ異動して、私にとっては新たなドメイン領域の開発に取り組んでいます。

この一年間の個人的な活動としては、次のようになります。
2000年から途切れることなく、18年間技術書の翻訳を続けてきましたが、昨年『Effective Java 第3版』の翻訳を終えて、現在は技術書の翻訳は行っていません。

60歳まであと半年となりましたが、今後も開発現場でのソフトウェア開発と技術教育を続けていきたいと思っています。

コメント(0) 

API仕様を書く(Mercari Engineering Blog編) [API仕様を書く]

API仕様を書く」と題して一連の記事を書きましたが、gRPCに関する内容を改めてMercari Engineering Blogとして書きました。



コメント(0) 

Kindle版『Effective Java 第3版』 [Effective Java 第3版]

Effective Java 第3版

Effective Java 第3版

  • 出版社/メーカー: 丸善出版
  • 発売日: 2018/10/30
  • メディア: Kindle版

出版当初は、電子版としてDRMフリーではありませんが、PDF版がリリースされていました。Kindle版についても新たにリリースされました。ただし、以下の制約があります。
  • リフローではなく固定レイアウトで、文字列のハイライトや検索、辞書の参照、引用などの機能が使えない
  • 紙の本の第1刷と内容は同じであり、紙の本で見つかっている誤りは修正されていない(正誤表はこちらです)。


コメント(0) 

FORTRANから始まって41年(10) [プログラマー現役続行]

教育を行う能力

能力というよりも、ソフトウェアエンジニアとして経験した方がよいのが、技術教育です。教えることの長所はいくつかあります。
  • 教えるためには、技術を理解する必要がある
  • 教えることで、技術を理解できる
当然のことながら、ある技術を教えるためには、自分自身で理解する必要があります。一方で、受講生からの質問に答えるために、深く考えたり、調べたりたりすることで、教えている技術を深く知ることになります。

現在、私自身が行っている技術教育は、Go言語研修『Effective Java 第3版』研修です。以前は、Java言語研修も行っていましたが、現在は行っていません。富士ゼロックス情報システムおよびリコーに勤務していた頃は、以下のような教育も行ってきました。
  • ソフトウェアエンジニアの心得
  • A Quick Tour of C++
  • テスト駆動開発
  • 書籍『プログラミング作法』の第1章と第2章
  • デザインパターンや設計原則
各内容の説明は省略しますが、私自身は、技術教育担当の組織に属していたわけではなく、ソフトウェア開発組織に属していることがほとんどでした。

技術教育で難しいこと

技術教育の中で難しいのでは、受講生からの質問に適切に答えることです。つまり、以下のことを行える必要があります。
  1. 聞かれた質問から、本当は何を知りたくて質問しているかを引き出すこと
  2. 質問者および他の受講生の技術的知識がどこまであって、どこから説明するのが良いかを考えること
Java言語研修やGo言語研修では、事前にテキストの指定された範囲を読んで疑問点を質問表に記入してもらうのですが、本当は何を知りたいのかについては、研修当日に質問者に聞かないと分からないことが多いです。

質問の意図が理解できたとしたら、どのように説明すれば理解してもらえるかを、その場で考える必要があります。そのためには、説明の基礎となる知識を質問者や他の受講生が知っているのかをまず聞くこともあります。たとえば、「O表記(O Notation)が分かりますか?」、「CPUとメモリはどのように接続されていますか?」、「スタックとは何ですか?」とかの質問をすることがあります。それは、質問に対する回答を理解するために必要だからです。

そして、よくあるのが、質問の回答を説明する前に私自身が質問をすることで、話が脱線することです。たとえば、Go言語ではゴルーチンのスタックが自動的に伸長するのですが、それに関する質問を受けると、「スタックとは何ですか?」「スタックにはどのような情報が保存されるのですか」「他の言語ではスレッドのスタックの大きさはどのくらいですか?」「他の言語ではスタックサイズが固定長なのはなぜですか」などと聞き返してから、私が発した質問に対する回答の説明を始めてしまうからです。一通り説明が終わってからGo言語に戻ると、「スタックが伸長することがどれだけ画期的か」という話題に戻る訳です。

コメント(0) 

FORTRANから始まって41年(9) [プログラマー現役続行]

若手人材を育成していく能力

私自身は、37歳になるまで若手の人材を育成することには、ほとんど関心を持っていませんでした。どちらかと言うと、「レベルが低いエンジニアにプログラミングさせるな」という考えが強かったです。私自身の考えが変わったのは、日本オラクルに転職してからです(「40代最後の年」)。

若手の人材、特に新卒新人で入社してきた若手のエンジニアに対しては、最初の数年できちんと育成する必要があります。それは、単に目の前の開発業務ができるようにさせるという意味ではありません。今回、この一連の記事で書いている基礎知識の習得や、さまざまな習慣や能力の獲得を行うように指導する必要があります。

したがって、「若手を育成する能力」というのは、ある程度ソフトウェア開発の経験を積んでから伸ばすように思われますが、実際には2年目からある程度経験を積むことが可能です。つまり、最初の1年での経験をもとに指導を行うというものです。ただし、「きちんと」指導できる範囲は狭いと思います。そのため、本人も成長過程であることを認識しておく必要があります。

育成をあきらめることもある

一人のソフトウェアエンジニアとしては、上司が自分を育成してくれると期待するのは間違っています。自分自身の成長は、自分自身の努力の結果であり、上司はその成長のための努力を後押ししてくれたり、サポートしてくれたり、指導してくれたりするだけです。矛盾しているようですが、一方でソフトウェアエンジニアとしては、若手を育成していくことも求められます(「ソフトウェア・スキル・インデックス」)。

しかし、現実には育成をあきらめる場合もあります。以下のような場合です。
  1. 若手に対して、さまざまな指導や教育を行った結果として、伸びる見込みがないと判断した場合
  2. 学習することをやめってしまった中堅のエンジニアの場合
1.に該当するケースはめったにありませんが、残念ながら私自身が途中で育成を断念したことが2回あります。半年以上の指導や教育を行った結果として断念するのですが、その後の対処は難しいです。その若手の面倒を誰かがみることで開発チーム全体の生産性が低下してしまう状況なので、開発チームから外す必要があります。

講演や教育で「新たな技術を学習しない中堅エンジニアはどうやったら変わってもらえるでしょうか?」と質問されることが多いのですが、私の回答は上記の2.に該当します。つまり、「あきらめる」ということです(詳しくは、「ソフトウェアエンジニアの成長カーブ」を参照してください)。

nice!(0)  コメント(0) 

FORTRANから始まって41年(8) [プログラマー現役続行]

テスト設計能力

今までの41年間を振り返って、十分に学習して実践できていないと思うのは、ソフトウェアのテスト設計です。もちろん、テスト駆動開発を行っていますので、テストコードを書いていないということはありません。

ソフトウェアのテスト設計は、品質工学的な視点を持って行う必要があるのですが、あまりきちんと学んで実践して来なかったというのが正直なところです。組み合わせ爆発を回避して効率よくテストを行うということに関しては、Hayst法がありますが、それもきちんと経験・実践することなく今日に至っています。

ソフトウェアテストHAYST法入門 品質と生産性がアップする直交表の使い方

ソフトウェアテストHAYST法入門 品質と生産性がアップする直交表の使い方

  • 作者: 吉澤 正孝/秋山浩一/仙石太郎
  • 出版社/メーカー: 日科技連出版社
  • 発売日: 2007/07/26
  • メディア: 単行本

書いたコードの品質を担保するために、経験のある先輩にレビューしてもらうように、テスト設計もきちんと経験がある専門家に指導を受けるのが、自己流になるのを避けるのによいと思っています。

10年以上前のことですが、当時マルチスレッドプログラミングによる複雑なシステムをテスト駆動開発で開発していたのですが、テスト設計として正しいのか、何か問題がないかという視点で助言をもらうために、私が部門長だった開発部で、秋山さん(上記の本の共著者)に指導を受けたことがあります。そして、行っているテストを説明したら、テスト設計が間違っているし、使うべきテスト設計手法が違っているという指摘を受けたことがあります。そして、指導に従ってテストを修正したらバグが見つかったという経験があります。

障害分析

テスト設計に加えて、障害を分析する活動も重要です。障害ごとなぜ発生したのかを分析して、どのような原因で発生している障害が多いかを整理して、対策を検討する必要があります。

障害分析というと、プロジェクトが終わった後に、振り返り的に行う組織が多いと思います。しかし、そのような障害分析では、効果的な改善はできないことが多いです。主な理由は以下の通りです。
  • 障害の真の原因を知るには、障害対応した担当者からヒアリングする必要があるが、以前に行った障害対応なので、担当者が思い出せないことがある。
  • 担当者は次のプロジェクトにすでに従事しており、障害分析のために時間を割り当てることができない。
障害分析は、開発中に始める必要があります。そして、開発組織(あるいは、開発チームやグループ)自身が行う必要があります。そうでなければ、上記の問題で、きちんとした障害分析ができないし、対策の検討を行い、開発中に対策の実施までを行って効果を見るというサイクルを回すことができません。障害分析は、プロジェクトの最初から行う必要はありません。障害がある程度の数、発生してから始めてよいです。そして、実際に分析を始めると、分析に必要な情報が不足していることに気づくことがあり、次に障害が発生したときに追加の情報を収集して分析に加えるというサイクルになります。

残念ながらこのように障害分析を行っている開発組織は少ないと思います。障害分析もきちんとできるようになるまでは、それなりのレビューや指導を受ける必要があります。幸い、私自身は、10年以上前に、上記の書籍の共著者である吉澤さん(現在は、品質工学会の副会長)から指導を受ける機会があり、私が部門長をしていた開発部で一年ほど指導を受けていました。

nice!(0)  コメント(0) 
前の10件 | -