So-net無料ブログ作成
検索選択
前の10件 | -

久しぶりにKOITが聞けるように [インターネット放送]

http://www.koit.com/は、ある時から再び日本では聞けなくなっていたのですが、今朝、iPod touchでKOITのアプリケーションを起動して接続してみたら、再び聞けるようになっていました。

試しに、MacBookでChromeブラウザで接続してみたのですが、原因は不明ですが、どうもうまく再生されませんでした。

時の流れは速く、カーラジオでKOITを聞き始めた頃からすでに25年が過ぎました。


スポンサーリンク





API設計の基礎(9) [API設計の基礎]

「API設計の基礎」は37頁しかないですが、それを題材として勉強会をしたという人達から誤字・脱字を指摘していただき、修正したものをアップしました。


2009年に最初のドラフトを公開してからもう7年になります。さまざまなプロジェクトのコンサルテーション(レビュー)を通して分かるのは、「API設計の基礎」に書いてあることを部分的でもきちんと実践しているエンジニアソフトウェア開発組織は非常に少ないということです。

「まえがき」に次のように書いています。
本書は、私自身がソフトウェア開発を行いながら学んだことをまとめたものであり、その内容には偏りがあるかもしれません。しかし、本書を通して、みなさんが私と同じような遠回りをすることなくソフトウェア開発をされることの助けとなれば幸いです。
一人のエンジニアが遠回りするのはその人の問題で終わりますが、ソフトウェア開発組織が遠回りすることは、その組織に属している現在のエンジニアや将来その組織に入ってくる若い人達が遠回りをして、結果的に技術的な負債を積み上げたり、非効率なデバッグを行ったりすることになると思います。

その意味で、今回のようにグループで勉強会を行ってもらえるというのは、その勉強会に参加している人達が属している組織に対して何らかのよい影響を与えるのではないかと思います。


スポンサーリンク





第2期社内Go言語研修 [プログラミング言語Go研修]

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

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


第2期の社内Go言語研修を今日から開講します。第1期(現在11名受講)はまだ終了していませんが、並行して第2期を開講します。第2期の受講生は7名です。
※ 社内での正式名称は「プログラミング言語Go基本技術習得」コースです。

テキストは『プログラミング言語Go』です。毎回、あらかじめ指定された範囲の内容を読んで質問をまとめて、練習問題のプログラミングの解答を提出してもらいます。質問はGoogle Drive上の共有されたGoogle Sheetに記入してもらい、練習問題は各人のGithubリポジトリを介して提出してもらいます。

第1期と第2期のほとんどの受講生は業務でGo言語を使用していませんし、Java研修もそうですが、20代の人が多いです。


スポンサーリンク





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

長年行っている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』 [訳者まえがき・あとがき]

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

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

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

日本語版によせて」から「第1章 チュートリアル」までは、こちらでPDFファイルが公開されています。『プログラミング言語Go』では「訳者まえがき」ではなく「訳者あとがき」としたので、公開されたPDFファイルに「訳者あとがき」は含まれていません。

訳者あとがき

私がコンピュータに初めて触れてプログラミングを学び始めてから、すでに38 年の月日が流れました。その間にさまざなプログラミング言語を学び、さまざまな製品開発に従事してきました。

月に一回の勉強会でしたが、会社の若手のエンジニアと一緒に私自身がGo に取り組み始めたのは2010 年8 月でした。2012 年3 月にGo のバージョン1.0 が正式にリリースされ、2012 年10 月には私にとって最初のGo に関する翻訳書である『プログラミング言語Go フレーズブック』(デイビッド・チズナール著、ピアソン桐原)が刊行されました。一緒に学んだ若手のエンジニアの一人に、Tour of Go の日本語サイトの運営を行っている荒木さんがいます。

新たなプログラミング言語を学ぶことは、よく知っているプログラミング言語から類推しながら学ぶことと、新たに学ぶことに分けられます。特に、よく知っているプログラミング言語にはない概念が含まれていると、それを理解するまでに時間を要するかもしれません。C++ での3 年間のプログラミングを経た1996 年の夏に、新たに登場したJava を学んだときにはインタフェースをすぐには理解できませんでした。Go でも、最初は私自身の理解を混乱させた機能もあります。

Go はウェブサービスで使われている事例が多いですが、言語そのものは汎用のプログラミング言語です。1993 年から2009 年まで、一部の期間を除いて私自身は組み込みシステムであるデジタル複合機(コピー、Fax、プリンター)のソフトウェア開発に従事し、C++ で開発しました。C++ での開発では独自のメモリ管理やスレッド安全なライブラリの設計も行い、最後の五年間は完全なテスト駆動開発をC++ で行いました。そのような経験を踏まえ、Go は組み込みシステムの開発にも向いていると思っています。

小さなスタックで動作する軽量なゴルーチン、CSP による通信、ガベージコレクタとメモリ保護、構造体によるコンパクトなメモリ設計、オブジェクト指向プログラミング、および、ウェブのクライアントやサーバの機能を含めたさまざまな機能を提供する標準パッケージと、道具は揃っています。したがって、オペレーティングシステムにLinux を採用している組み込みシステムでは、C やC++で開発するのではなく、Go で開発するのが適切だと思っていますし、将来Go で開発されるのが普通になる日がくるのではないかと期待しています。実際、ある組み込みシステムの制御ソフトウェアをGo を使った完全なテスト駆動開発で行うプロジェクトを2 年間にわたり率いて、Go での組み込みシステムの開発が可能なことを実証できました。

『プログラミング言語Go』の翻訳を通して、私自身も多くの事柄を再確認することができました。さらに、実際に練習問題を解くことで、Go の標準ライブラリの強力さを再認識した次第です。この本は、Go の基本仕様を理解するために必要十分な情報が網羅されており、いわゆるバイブル的な本としての役割を十二分に果たす内容になっています。読者のみなさんも、言語仕様を理解するだけではなく、練習問題を実際に解かれることをお勧めします。

この翻訳書が、日本でのGo の普及に役立ち、日本のソフトウェアエンジニアがGo でのプログラミングを楽しめることに役立てば幸いです。


内容補足:『プログラミング言語Go』 [golang]

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

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

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

すでに本になってしまったので訳注を追加することはできませんが、補足として書いておきたいと思います。

7.8節「errorインタフェース」(p.226)に次の記述があります。
error を作成する最も簡単な方法は、指定されたエラーメッセージに関する新たなerror を返す errors.New を呼び出すことです。errors パッケージ全体は、次の4 行しかありません。
    package errors

    func New(text string) error { return &errorString{text} }

    type errorString struct { text string }

    func (e *errorString) Error() string { return e.text }
errorStringの基底型は、その表現を不注意な(あるいは意図的な)更新から保護するために、文字列ではなく構造体です。(以下省略)
文字列は不変(immutable)なのですが、リフレクションを使用すると書き直すことができます。リフレクションを使用して文字列を書き直したコード例はこちらです。

一方、構造体の非公開なフィールドはリフレクションを使用して書き換えることはできません。そのことは、p.396に記述されています。
Display をos.Stdout へ適用した場合、Unix ライクなプラットフォーム上のos.File 構造体のfd int フィールドといった、通常の言語規則に従えばアクセスできない構造体の非公開なフィールドの値をリフレクションが読み出せることが分かります。しかし、リフレクションでそのような値を変更することはできません。

(コード例は省略)

アドレス化可能なreflect.Value は、走査によって構造体の非公開のフィールドが得られたかどうかを記録しており、そうであれば変更を許しません。


『プログラミング言語Go』刊行記念トークセッション [golang]

スクリーンショット 2016-06-20 4.36.33.png


7月6日(水)に開催されるGoogleのソフトウェアエンジニアである鵜飼文敏氏とのトークセッションです。鵜飼文敏氏からは、書籍の帯のメッセージをいただきました。鵜飼氏は、次の本の監訳をされていますし、『Binary Hacks ―ハッカー秘伝のテクニック100選』を共著で執筆されています。

Go言語によるWebアプリケーション開発

Go言語によるWebアプリケーション開発

  • 作者: Mat Ryer
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2016/01/22
  • メディア: 大型本

無料ではなく入場料はドリンク付きで1000円ですが、奮ってご参加ください。ジュンク堂のイベントページは、こちらです(事前予約が必要です)。

当日は、著者アラン・ドノバンとブライアン・カーニハンのサインが書かれた日本語版が展示される予定です。

第1章公開:『プログラミング言語Go』 [golang]

プログラミング言語Go

プログラミング言語Go


発売に先行して、以下の内容を含むPDFが公開されました。PDFはこちらです。
  • 日本語版によせて
  • 目次
  • まえがき
  • 第1章 チュートリアル

【追記】6月10日に出版社から届きました。
13442446_1207804605905481_4671615962188119945_o.jpg


『プログラミング言語Go』刊行記念イベント [golang]

プログラミング言語Go

プログラミング言語Go


池袋のジュンク堂で「Goの設計思想を読み解く~実際の開発に活かすために」と題して、刊行記念イベントが開催されます。鵜飼さんとのトークイベントです。
開催日時:2016年07月06日(水) ~
場所:ジュンク堂 池袋本店
鵜飼 文敏(Googleソフトウェアエンジニア
柴田 芳樹(『プログラミング言語Go』訳者)
19:00開場
19:30開演
事前予約が必要ですので、参加方法などの詳しい情報はこちらを見てください。

前の10件 | -