SSブログ

プログラミング言語の経験(1) [プログラマー現役続行]

大学に入学して以来、様々なプログラミング言語を学んでプログラミングをしてきました。今日、どのプログラミング言語から学べばよいか分からないぐらい、多くのプログラミング言語が存在し、その多くが無料で利用できます。

1978年に大学に入学して、1年生の時に学んだのはFortranでした。当時、大学の計算機センターには、IBM 370システムがあり、TSS端末でFortranプログラムを作成して、バッチ投入して、コンパイルおよび実行を行っていました。そして、実行結果は、ラインプリンターに出力されるというものでした。大学のプログラミング言語のコースは、このFortranのコースだけで、基本的には、それ以外の言語は自分で学びなさいということでした。

1年生の時に、計算機(CPU)の仕組みを学ぶ講座があったのですが、そのテキストは英語でした。さらに、そのテキストには動作の仕組みがすべてAPL(A Programming Language)で記述されていました。そのため、APLを独学し、その講座の最終レポートもAPLでプログラムを書いて提出しました。当時、計算機センターには、APLキーボードを持つTSS端末があり、そのキーボードを使用して、プログラムを入力していました。しかし、APLには、演算子が100個以上あり、その演算子がキーボードのどこにあるのかを探すのが大変だったと記憶しています。

2年生か3年生の頃にPascalが登場し、計算機センターにも処理系が導入されたので、Pascalを学んでプログラミングしたりしていました。学ぶと言っても、当時は、月刊誌「Bit」の連載記事で学びました。また、当時、処理系として仮想マシンベースのUSCD Pascalなども登場していました。

おそらく3年生の時だと思いますが、コンパイラの講座で、最終レポートがコンパイラを書いて提出するというものがありました。コンパイラをPL/Iを使用して書きなさいということだったので、PL/Iを学んでコンパイラを書きました。しかし、パンチカードシステムの計算機を使用しなければならず、パンチ室と計算機室を行ったり来たりして大変でした。

3年生までは高級言語を使用していたわけですが、4年生と修士の2年間は、ひたすらZ80アセンブリ言語でプログラミングをしていました。独自に作成したハードウェア用のソフトウェアを作成していて、この頃は、アセンブリ言語でプログラミングするのが全く苦痛ではなかったです。しかし、さすがにアセンブリ言語ではないだろうということで、修士が終了する前に、Forthを使用して既存のコードを書き直したりしていました。

個々のプログラミング言語を深く極めたわけではありませんが、当時は、大学の6年間で、色々なプログラミング言語を学んだことになります。

継続的学習(7) [プログラマー現役続行]

40代を振り返って

私にとっての40代は、1999年11月から2009年11月までとなります。40代は、仕事としては、どちらかと言えば教育・コンサルテーションで始めています。C++言語を用いた新たな複写機用コントローラソフトウェア(制御ソフトウェア)の開発に先立って、200名以上のエンジニアに対して、約5日間のオブジェクト指向基礎教育を荒井玲子さんと一緒に行い、実際の開発では、設計レビューやコードレビューを行っています。私の場合、そのレビューが週に3日とか4日行い、ほぼ専任のレビューアとして一年以上行っています。また、開発で使用するC++用のライブラリー(内部では「clib」と呼んでいました)の仕様策定やコーディング規約の作成を行っています。

そして、2002年8月から2003年1月まで、再び米国(Webster, NY)に駐在しています。当初2年間の予定であったプロジェクトが中止となったために、短期の駐在となっています。帰国してから、2009年9月に転職するまでは、あるプロジェクト(100名程度)で、私自身も設計・実装・デバッグまで行い、かなりのコードをC++で書いていました。

また、2000年には、今でも続いている「Java研修」を始めています。正確に記録していませんが、すでに約170名程度の修了生を送り出しています。さらに、「プログラミング作法」教育も40代に立ち上げた教育コースであり、その中の「ソフトウェアエンジニアの心得」は、今でも教育や講演で話しています。

継続的学習の観点からは、40代は、継続して社内では勉強会を週に1回もしくは2回のペースで開催しててきたと言えます。そして、プライベートで雑誌の記事の執筆、技術書の翻訳、書籍の執筆を行うようになりました。結果として、新たな技術を自己学習するというより、プライベートな時間の多くが、執筆や翻訳に費やされるようになりました。

勉強会を通してではない自己学習は、主に技術書の翻訳を通してという部分が増えています。『Javaリアルタイム仕様』の翻訳では、リアルタイム仕様を学んでいます。Java全般としては、『プログラミング言語Java第3版/第4版』、『Effective Java 第1版/第2版』、『Java Puzzlers』の翻訳で学んでいます。GWT(Google Web Toolkit)についても、『Google Web Toolkitソリューション』の翻訳を通して学んでいます。

当初、雑誌の記事として執筆したものは、その後、まとめられて書籍となっています。さらに、『ソフトウェア開発の名著を読む【第二版】』、『プログラマー”まだまだ”現役続行』、『Java Standard Edition 5.0 Tiger』では、書籍用に加筆しています。

30代までの地道に毎日技術書を読んで自己学習をするという習慣から、40代は、社内の勉強会を中心として様々な技術書を読んでいき、プライベートでは翻訳や執筆を行う生活パターンへ変化していったと言えます。

40代をまとめると次のようになるかと思います。
  • レビューアーに専念して、設計レビューやコードレビューを行うことを経験した
  • 業務でかなりの量のコードを、マルチスレッド環境でC++を用いて行った
  • 技術教育や講演を行うようになった
  • 社内勉強会を開催するようになった
  • プライベートで翻訳や執筆を行うようになった
これらの活動が30代からできたかと問われれば、おそらく、無理だったと答えると思います。特に30代初めでは、ほぼ無理だったでしょう。それは、自分自身が若手だったため、「若手を育成する」という考え方に転換できなかったと思うからです。そう考えてくると、日本オラクルへの転職が転機だったのかもしれません。

継続的学習(6) [プログラマー現役続行]

基礎知識を学ぶ

勉強会を主催する場合に、選ぶ本の種類としては、業務に直接関連するものもありますが、これだけは最低限学んでいて欲しいという基準で選ぶものもあります。その基準で最初に選んだのは、次の本です。

The Practice of Programming (Addison-Wesley Professional Computing Series)

The Practice of Programming (Addison-Wesley Professional Computing Series)

  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 1999/02/09
  • メディア: Kindle版

この本を使用した勉強会は、第1章と第2章だけでした。英語の書籍でしたので、「勉強会ノート」も作成しました。特に新卒新人を対象として、3拠点(海老名、KSP、岩槻)で毎週開催し、遠く埼玉県の岩槻まで週に1回行っていました。朝、勉強会を開催して、そのまま岩槻でコンサルテーションをしていたと思います。

この勉強会で学んで欲しかったのは、基礎としての「データ構造とアルゴリズム」です。勉強会を始めるきっかけは、当時、一人の若手エンジニアとの会話からです。そのエンジニアの仕事のサポートをしている時に、説明するのが面倒なのでコードを書いてみせるということで、JavaでHashtableクラスを使用したコードを書き始めたら、横で、「ハッシュテーブルって何ですか?」と聞かれたので、「そんな基本的なことは聞くな」と私は返事をしたのです。その数日後、また彼に会ったら「職場の先輩数人に聞きましたが、ハッシュテーブルは知らないと言っていました」と言われて、基礎的なことも知らない人が多数いるのかと驚きました。それで、勉強会を開催することにしました。

それ以来、私の部署では、新卒新人は配属されて最初に第2章まで学習することになっていきました。今でも、私が属する開発本部へ配属される新卒新人は、第2章まで学ぶことになっています。残念ながら、ハッシュテーブルを知らないで就職してくる新卒新人は後を絶ちません(「ハッシュテーブルの季節」)。

基礎知識という観点から次に選んだのは、前にも紹介した次の本です。

Introduction to Computing Systems: From Bits & Gates to C & Beyond (Computer Engineering)

Introduction to Computing Systems: From Bits & Gates to C & Beyond (Computer Engineering)

  • 作者: Yale Patt
  • 出版社/メーカー: McGraw-Hill Science/Engineering/Math
  • 発売日: 2003/08/05
  • メディア: ハードカバー

この2冊でCPU構造のハードウェアに関する知識および「データ構造とアルゴリズム」を学ばせたことになります。次は、オペレーティングシステムを学ばせるということで、次の本を選びました。

Linux Kernel Development (2nd Edition)

Linux Kernel Development (2nd Edition)

  • 出版社/メーカー: Novell Press
  • 発売日: 2005/01/12
  • メディア: Kindle版

この本は、第3版が出版されており、第3版を用いた勉強会も開催しています。

Linux Kernel Development (3rd Edition) (Developer's Library)

Linux Kernel Development (3rd Edition) (Developer's Library)

  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2010/06/22
  • メディア: Kindle版

「データ構造とアルゴリズム」「CPUなどのハードウェア」「オペレーティングシステム」といった基礎知識は、最初にきちんと学べば、新たな技術が登場しても本質的には大きくは変化しません。そのため、若い時にきちんと学んで欲しいものです。


スポンサーリンク





継続的学習(5) [プログラマー現役続行]

30代を振り返って

私にとっての30代は、1989年11月から1999年11月までとなります。この10年間には、C++が普及し始め、Solaris上でのマルチスレッドプログラミングも登場しています。1995年には、Windows 95が登場し、Javaも登場しています。そして、後半にはインターネットの普及が始まりました。

私自身にとっても、様々な経験をした10年でした。米国駐在2年目となり1991年4月まで、Palos Verdes, CAに住んでいました。1991年5月には、Xerox PARCへ移り、2年間Palo Alto, CAに住んでいました。1993年5月には帰国し、1996年8月に最初の会社である富士ゼロックスを退職しています。

1996年9月から1997年4月までは日本オラクルに勤務し、1997年5月から1998年4月まではジャストシステムに勤務しました。ジャストシステムでは、本社がある徳島に一年間暮らしたことになります。1998年5月からは富士ゼロックス情報システムで働き始めました。

この10年間の終わりに、会社内での勉強会を開催するようになったので、それまでは、自己学習をしていたことになります。この10年間で使用した主なプログラミング言語は、Mesa、C、C++、Java、PL/SQLです。今日では、1つのプロジェクトでも複数の言語が用いられることが多いですが、私の30代では、多くの言語を同時に覚えて業務で使用する必要がない時代だったと思います。

30代で使用した言語で、C++、Java、PL/SQLは、ほぼ独学でした。会社内で何らかの教育コースがあるとか、外部の講習を受けるとかはなく、書籍を通して得た知識を開発を通して実践して学ぶというものです。ただし、Java言を業務で使用したことがあるのは、ジャストシステムに勤務していた後半の半年だけです。

この10年間は、転勤・転職により仕事の内容が変わり、その都度、新たな技術を学んでソフトウェアを開発した時代です。そこでは、業務に必要な知識を、書籍を通して独学した時代だと言えます。

この10年間で本の出版時に読んでおくべきだったと言える技術書は、次の本です。

Design Patterns: Elements of Reusable Object-Oriented Software

Design Patterns: Elements of Reusable Object-Oriented Software

  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 1994/10/31
  • メディア: Kindle版

この本は、1994年に出版されています。正確には覚えていませんが、この本を読んだのは1999年か2000年の頃だと思います。読んでみて衝撃的だったのは、1993年から開発していたFuji Xerox DocuStation IM 200で、私自身が設計課題を解決するために考え出したいくつかの手法がパターンとして紹介されていたことです。

20代での経験を基礎として、30代は、さらに様々な知識獲得や開発を通しての実践により、飛躍が期待される年代と言えます。逆に、30代前半でソフトウェア開発の第一線から離れてしまう人が多いソフトウェア開発組織では、一人のソフトウェアエンジニアとして成長することは難しいかもしれません。あるいは、30代に新たなことを一切学ばなくても支障がないソフトウェア開発を行っている組織でも、成長は難しいでしょう。
※ 支障がないと思っているだけかもしれません。

「第7回とくしまOSS勉強会」で話します [「ソフトウェアエンジニアの心得」講演]

とくしまOSS普及協議会の主催による「第7回とくしまOSS勉強会」で話をします。

日時:2015年3月20日(金)18時〜20時
場所:とくぎんトモニプラザ 4階 会議室3 (徳島市徳島町城内2-1)

詳しい案内は、こちらを参照してください。案内にも書かれているように、2つのテーマについて話をします。「ソフトウェアエンジニアの心得」と「Java SE 8オーバービュー」です。

四国には、「オープンセミナー2011@香川」で2011年9月に香川県に行きましたが、徳島へ最後に行ったのは、2003年11月ですので、10年以上前となります。徳島には、ジャストシステムに勤務していた1997年5月から1998年4月までの1年間住んでいました。

日曜日までゆっくりしたかったのですが、3月22日(日)に「とくしまマラソン2015」が開催されるため土曜日のホテルが予約できませんでした。そのため、翌日の21日(土)に横浜に戻ります。

【2015年2月26日追記】
協議会が主催の懇親会はありませんが、参加者の方に懇親会の設定をお願いしましたので、懇親会へ参加される方は、こちらで申し込みをお願いします。

継続的学習(4) [プログラマー現役続行]

勉強会を開催する

私自身が会社で朝の勉強会を開催するようになったのは、1998年です。つまり、30代終わりの時でした。それまでは、一人で技術書を読むという学習でした。勉強会を開催するようになったと言っても、それは、週に1回程度ですので、一人で技術書を読むというのは続けていました。

もともと朝型なので、勉強会は朝ということで、始業前の1時間ということで開催してきました。フレックス勤務の頃であれば、コアタイム前の1時間ということで、朝の8時30分からでした。フレックス勤務でない場合には、朝の7時40分からです。

私が過去開催してきた勉強会では、読んだ書籍の多くが英語でした。最初が『The Java Programming Language, Second Edition』であり、この第2版は翻訳されていません。英語の書籍となった理由は、私自身がだいたい英語の書籍を読んで学習していたからだと思います。29歳になった1988年11月から4年半は米国で暮らしていましたので、購入する書籍も英語でしたし、帰国してからも主に英語の書籍でした。

英語の書籍の勉強会では、できるだけ新刊を選んで勉強会を開催しています。勉強会が終わった後に、翻訳が出る本もありますし、勉強会の途中で翻訳がでる本もあります。また、翻訳が出ていない本もあります。

勉強会の期間も様々です。薄い本だと半年ですし、多少厚いと1年だったり、それ以上だったりします。会社で行った勉強会で最も長かったのは、3年でした。それは、次の本です。

Introduction to Computing Systems: From Bits & Gates to C & Beyond (Computer Engineering)

Introduction to Computing Systems: From Bits & Gates to C & Beyond (Computer Engineering)

  • 作者: Yale Patt
  • 出版社/メーカー: McGraw-Hill Science/Engineering/Math
  • 発売日: 2003/08/05
  • メディア: ハードカバー

この本の勉強会は、当初は自発的な勉強会ではなく、2004年度に私が属する事業部に配属された新卒新人全員に対して業務扱いで始めたものです。

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

当初は、週に3回も開催していたので、予習が追いつかないという状況だったようです。それで、途中から、週1回に変更しました。

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

3年を要した勉強会としては、もう1つあります。それは、月に1回、土曜日に開催したものです。そこでは、次の本を読みました。

Understanding the Linux Kernel

Understanding the Linux Kernel

  • 作者: Daniel P. Bovet
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 2002/12/01
  • メディア: ペーパーバック

この本の勉強会では、途中で翻訳が出たので、翻訳本でもOKということで、英語版を読む人と、日本語版を読む人と混在で進めました。

様々な書籍の勉強会を開催してきましたが、私のスタイルは、原則次の通りです。
  • 事前に割り当てをしたりはしない。割り当てられた部分を予習しなければならないと、それ自体が負担となり、勉強会に参加しなくなるからです。しかし、英語の書籍の場合には、ある程度、知らない単語ぐらいは事前に調べてくることは期待しています。
  • 勉強会では、基本的に全部読んでいきます。英語の書籍の場合には、頭から区切りながらでよいので、訳しながら読んでいきます。
参加者の英語力で問題なのは、文法力です。不明な単語は辞書を引けば分かりますが、構文を理解できなければ、文章を理解できません。それも、中学3年生までの英文法で習う構文の知識を駆使して、頭から読みながら構文を読み取れるかです。

会社内の勉強会を始めたのが39歳の頃です。今から振り返ってみると、米国から帰国した33歳の頃から始めたら良かったのかもしれません。しかし、その頃の私は、技術書の勉強は、各人がきちんとやるべきであるという考え方が強かったので、勉強会を開催するという発想はできなかったと思います。若手の育成に関して、考え方が変わったのは、1996年9月に日本オラクルへ転職してからです。

そう考えると、会社組織の中で自発的な勉強会が開催されていないのは、次のような理由によるのかもしれません。
  • 業務に必要な知識の学習(教育)は、会社が提供して当然、あるいは、業務時間に勉強するものだと思っている人が多い。
  • (あるいは)業務に必要な知識は、各人が自発的に学習すべきものであり、勉強会などを行う必要はないと思っているマネージャ/リーダが多く、マネージャ/リーダが自分で率先して勉強会を開催し、自発的に学習する組織を構築する必要性を感じていない。
会社での勉強会で重要なもう1つの点は、会社の会議室が自由に使えることです。たとえば、勤怠管理上、業務時間と会社施設への入退出時間との間に大きな差があってはいけないとなると、会社での勉強会は開催されなくなります。もちろん、サービス残業と明確に区別できる仕組みは必要だとは思います。しかし、勤怠管理が厳しくて、会社で勉強会を開催できませんという話を聞くと、もう少し何とかならないのかと思います。

継続的学習(3) [プログラマー現役続行]

20代を振り返って

1959年11月生まれの私にとっての20代は、1979年11月から1989年11月までとなります。この10年間でのプログラミングは、大学もしくは会社に行かなければできない時代でした。つまり、自宅でプログラミングをする環境はありませんでした。そのプログラミング環境も、大学と会社では大きな差でした。

20代を振り返ってみると、ある程度の学習は、継続的に行っていたと思いますが、家にはコンピュータもなくプログラミングはできませんので、多少興味がある範囲の学習だけだったと思います。インターネットもない時代でした。その代わり、コンピュータ関連の雑誌類は、毎月かなり読んでいました。大学時代からずっと『Bit』を読んでいましたし、『Unix Magazine』も創刊号から読んでいました。つまり、書籍中心というより、雑誌中心の時代だったかもしれません。

今日では、プログラミングをやりたいと思えば、大学生になるとか社会人になるとかしなくてもできる時代です。そして、ソフトウェア技術は、私の20代とは全く違うスピードで進歩してます。その結果、今の時代に、私が20代で過ごしたような過ごし方をしていると駄目だと思います。

私が20代の時に読んでいたら、その後の私自身の行動パターンを変えていかたもしれない書籍としては、以下の書籍があります。

達人プログラマー―システム開発の職人から名匠への道

達人プログラマー―システム開発の職人から名匠への道

  • 作者: アンドリュー ハント
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/11
  • メディア: 単行本

ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)

ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)

  • 作者: ピート マクブリーン
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/03
  • メディア: 単行本

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

  • 作者: Chad Fowler
  • 出版社/メーカー: オーム社
  • 発売日: 2010/02/26
  • メディア: 単行本(ソフトカバー)

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

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

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

これらの書籍は、私にとっては30代終わりから50代初めに出版されています。しかし、今の時代であれば、20代で読んでおくべきだと思います。だからと言って、強制的に読ませても、プログラミングが好きで、ソフトウェア開発が好きだと言える人でないと、読んでも、役立たないかもしれません。

さらに、20代に読んでおきたかった書籍としては、以下のものがあります。

Code Complete 第2版 上 完全なプログラミングを目指して

Code Complete 第2版 上 完全なプログラミングを目指して

  • 出版社/メーカー: 日経BP社
  • 発売日: 2005/03/28
  • メディア: Kindle版

CODE COMPLETE 第2版 下

CODE COMPLETE 第2版 下

  • 作者: スティーブ マコネル
  • 出版社/メーカー: 日経BP社
  • 発売日: 2005/03/26
  • メディア: 単行本

Clean Code アジャイルソフトウェア達人の技

Clean Code アジャイルソフトウェア達人の技

  • 作者: Robert C. Martin
  • 出版社/メーカー: アスキー・メディアワークス
  • 発売日: 2009/05/28
  • メディア: 大型本

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

  • 作者: Dustin Boswell
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/06/23
  • メディア: 単行本(ソフトカバー)

20代にはJavaもC++もまだ登場していませんでしたので、もう少し古いですが、むしろ『Code Complete』の初版を20代に読めていたら、私が20代に書いたソフトウェアもかなり良くなっていたのではないかと思います。

これらの書籍に書かれている内容も、読むだけではだめで、意識して自分で実践してみる必要があります。プログラミングには、身に付いてしまった変な思考パターンが現れますので、それらはかなり意識して変えていくことを繰り返してことをしないと、無意識にできるようにはなりません。

振り返ってみると、私にとっての20代は、ソフトウェアエンジニアとしての行動指針や読みやすいコードを書くことの指針を示した書籍がほとんどなく、がむしゃらにZ80アセンブリ言語(大学時代)、C言語、Mesa言語でプログラミングをしていた時代でした。

継続的学習(2) [プログラマー現役続行]

業務で使用している技術を深く学ぶ


技術を学習する際に、業務で使用している技術を学ぶことが非常に効率的です。なぜなら、日々の開発ですぐに使用できて身に付くからです。しかし、業務を通しての学習の落とし穴は、「業務で必要な範囲しか学ばない」ということです。

どのようなソフトウェア開発であっても、自分が使用している技術の範囲は狭いことがあります。たとえば、Java言語での開発経験が長いですという人でも、リフレクションを知らないとか、volatile宣言やfinal宣言がどのような意味をもたらすかを正確に説明できる人は、非常に少ないです。どちらも、マルチスレッドプログラミングでは重要な意味を持つにもかかわらずです。

私自身は、社会時になってから本格的にC言語を学び、Unixでのプログラミングを学びました。その頃読んだ本を正確には覚えていませんが、Unixに関するOSの本を1、2冊読んだ記憶があります。C言語に関しては深く学習した記憶はあまりなく、業務をこなせるようになったとこで、新たな学習をしなくなったと思います。関数ポインタを駆使したり、抽象データ型をC言語でも意識するようになったのは、社会人になって4、5年頃だったと思います。あえて、読んだ本としてあげると、次の本です。紙の書籍は、1994年出版なので、社会人となってから10年は過ぎています。

Expert C Programming: Deep Secrets

Expert C Programming: Deep Secrets

  • 出版社/メーカー: Prentice Hall
  • 発売日: 2013/07/18
  • メディア: Kindle版

1988年11月からの米国駐在時代は、Xerox社が開発したMesa言語を用いた開発でしたので、書籍もあるわけでなく、Xerox社内にある資料だけが頼りでした。

1993年からC++言語で開発を始めたのですが、その頃は、マルチスレッドプログラミング関連の本はありませんでした。C++言語に関しては、何冊か読んだと思いますが、C++言語を深く知る上で次の本が役立ちました。

Design and Evolution of C++, The

Design and Evolution of C++, The

  • 作者: Bjarne Stroustrup
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 1994/03/29
  • メディア: ペーパーバック

C++言語で、Solaris上でのマルチスレッドプログラミングを行っていましたので、以下の書籍を読んでいます。

Multiprocessor System Architectures: A Technical Survey of Multiprocessor/Multithreaded Systems Using Sparc, Multilevel Bus Architectures and Solari

Multiprocessor System Architectures: A Technical Survey of Multiprocessor/Multithreaded Systems Using Sparc, Multilevel Bus Architectures and Solari

  • 作者: Ben Catanzaro
  • 出版社/メーカー: Prentice Hall
  • 発売日: 1994/01/01
  • メディア: ペーパーバック

マルチスレッドプログラミングそのものについては、当初は書籍がなかったのですが、プロジェクトの終盤に、得た知識を確認するために以下の書籍を読みました。

Threads Primer: A Guide to Solaris Multithreaded Programming

Threads Primer: A Guide to Solaris Multithreaded Programming

  • 作者: Bil Lewis
  • 出版社/メーカー: Prentice Hall
  • 発売日: 1995/10/31
  • メディア: ペーパーバック

Programming With Threads

Programming With Threads

  • 作者: Steve Kleiman
  • 出版社/メーカー: Prentice Hall
  • 発売日: 1996/01/23
  • メディア: ペーパーバック

日本オラクル時代も様々なオラクル関連の書籍を読みましたが、記憶に残っているのは、次の一冊です。

Oracle Pl/SQL Programming

Oracle Pl/SQL Programming

  • 作者: Steven Feuerstein
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 1997/01/15
  • メディア: ペーパーバック

ジャストシステム時代もWindows関連の書籍を何冊か読んでいますが、あまり記憶に残っていません。

業務で使用している技術に関して、業務で使用していない領域も含めて、その技術を深く知るために関連する書籍を読むことは重要です。

中途採用の面接をしていも、使用してきた技術に関する書籍を読んでいない人が多くいます。与えられた業務を決められた技術で行ったきましたというレベルです。それでは、ソフトウェアエンジニアとしては、年数を重ねただけで、スキルレベルは上がっていきません。

継続的学習(1) [プログラマー現役続行]

原典を読む習慣


私自身は、継続的に学習する習慣を身に付けることが、ソフトウェアエンジニアとして重要であることを、繰り返し述べています。では、振り返ってみて、自分はどうだったのでしょうか。

1984年4月に就職して、7月初旬まで塚原研修所で泊まり込みの研修でした。配属後は、当時の厚木寮から海老名事業所まで会社のバスで通勤していてので、特に朝早く会社に行くということはありませんでした。今から考えると、やはり、この頃は、仕事をすることが精一杯の頃だと思います。

ただ、当時、担当する仕事は、新たに開発するワークステーションにXNS(Xerox Network Systems)を実装することでした。それで、英語で書かれたXNSプロトコル仕様書を仕事では読んでいました。この頃、基本的に「原典を読む」という習慣を身に付け始めたのかもしれません。Ethernetレベルから順次仕様書を読んでいきました。何らかの仕様に基づいて実装する場合には、原典となる仕様書は理解しておく必要があります。

翌年の1985年には、3270端末エミュレータの開発を指示されたので、3270データストリームの仕様書を購入して読み、エミュレータ開発を始めています。また、1987年頃ですが、BSD UnixのTCP/IPをATTのUnixへ移植する作業では、TCP/IP関連の仕様書(RFC)を、ほとんど読みました。

昔は、書籍も少なく、どうしても仕様を読むしかなかったのだと思います。しかし、そのおかげで原典となる仕様書を読む習慣を身に付け始めたのだと思います。

社会人30年を振り返ると、常に仕様書を読んできた訳ではありません。ある程度きちんと解説されている書籍があれば、書籍を先に読むことも多かったです。たとえば、Java言語に関しては、『Java言語仕様』は読んでいませんが、言語仕様もかなり詳しく解説されている『プログラミング言語Java』は、読んできました。もちろん、どうしても不明瞭な場合には、『Java言語仕様』を参照します。

一方で、原典を読んで理解できなくて挫折した本もあります。その代表例は、『The C++ Programming Language』です。まだ、C++を全く知らない1991年頃に読んだのですが、理解できなくて1度は挫折しています。しかし、1993年にはもう一度読み直したり、他の書籍を読んだりして、その後10年以上C++言語でマルチスレッドプログラミングを行っています。

初期のSolaris2.3上でのマルチスレッドプログラミングに関しては、POSIX Threadが登場する前で、資料としては、Solarisに付随してくるマニュアルだけが頼りでした。マルチスレッドに関する本もほとんどなかった時代です。

どちらにしても、きちんと解説されている原典とも言える書籍もしくは仕様書を常に読むように心がけてきたと思います。その意味で、いわゆる初心者本はほとんど読んだことはありません。逆に言えば、新たな技術を学ぶ場合には、きちんと書かれた原典とも言える書籍はどれかという視点で本を探します。本がなければ、仕様などをネットで探すことになります。たとえば、Go言語は、公式サイトにある英語のドキュメント類がやはり原典となります。

調べたい技術に関して解説されているサイトを見つけることが非常に簡単な時代です。しかし、仕事で使用している技術に関して、原典となる本や資料は、仕事をしながら少しずつでも読み進めるように継続的に学習することが重要だと思います。

(関連するプロジェクトの詳細は、こちら

MacBook Airをシェルモードでマルチディスプレイ化 [その他]

MacBook Airを購入するまでは、2007年に購入したMacBookを21インチのIiyamaのディスプレイに接続して使用していました。しかし、一昨年、MacBook Airを購入した際に、Thunderboltディスプレイも購入しました。書斎で使用する場合には、MacBook Airを閉じて、Twelve South BookArc for Macbook Airに立てて、Thunderboltディスプレイに接続しています。

【日本正規代理店品】Twelve South BookArc for Macbook Air TWS-ST-000005

【日本正規代理店品】Twelve South BookArc for Macbook Air TWS-ST-000005

  • 出版社/メーカー: Twelve South
  • メディア: Personal Computers

Iiyamaのディスプレイは使用しなくなったので片付けていたのですが、書斎の机の上を整理すれば、接続できるのではないかということで、次のアダプターを購入しました。

I-O DATA USB接続外付グラフィックアダプター 「USBグラフィック」 アナログ専用モデル USB-RGB2

I-O DATA USB接続外付グラフィックアダプター 「USBグラフィック」 アナログ専用モデル USB-RGB2

  • 出版社/メーカー: アイ・オー・データ
  • メディア: Personal Computers

これは、USBポートに接続して外部ディスプレイを接続するアダプタですが、メーカーのサイトにある最新のソフトウェアがYosemiteに対応しておらず、全く接続できませんでした。しかし、DisplayLinkの開発元サイト(http://www.displaylink.com/downloads)には、Yosemite対応の最新版がありましたので、それをダウンロードしてインストールしたら、うまく接続されるようになりました。

接続されても、今度は、21インチのIiyamaディスプレイの方にメニューバーが出てしまうので、システム環境設定の「ディスプレイ」の「配置」で、メニューバーをThunderboltディスプレイにドラッグして、メニューバーの設定を変更して作業が完了です。

ここまでは、Iiyamaのディスプレイを床に置いて確認したので、残る作業は、机の上を整理して、Iiyamaのディスプレイを机の上に持ってくることです。