かとじゅんの技術日誌

技術の話をするところ

WEB+DB PRESS Vol.65 で記事を書きました

10月22日発売のWEB+DB PRESS Vol.65で連載3回目の記事を書きました。

WEB+DB PRESS Vol.65

WEB+DB PRESS Vol.65

  • 作者: 天尋左石,柄沢聡太郎,小野修司,ミック,みやけん,長野雅広,おにたま,中島聡,清水亮,角田直行,はまちや2,大塚弘記,松信嘉範,板垣貴裕,福岡博,大和田純,白土慧,太田昌吾,じゅんいち☆かとう,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/10/22
  • メディア: 大型本
  • 購入: 12人 クリック: 165回
  • この商品を含むブログ (11件) を見る

タイトルは「再考するJava【第3回】Java SE 7 新機能のポイント 〜言語仕様の小さな拡張&NIO.2 ファイルシステムインターフェイス〜」です。Java SE 7の新機能*1を紹介する記事を書きました。
try-with-resources構文は、一度使い始めると便利すぎて、後戻りできないですねw ダイヤモンドオペレータも、例外のマルチキャッチも便利です!
それと、水島さん、櫻庭さん、なぎせさんに、レビューをしていただきました。物書きってのは本当に難しいですね。おかげで勉強になりました。本当にありがとうございました!
書店に立ち寄ったらぜひ見てみてください。Java SE 7を知ってもらうよい機会になればと思っています。

あと、特集の「インフラの基礎知識」はみんな読むべきだなと思いました。

ということで、よろしくお願いします。

追記:
Eclipse 3.7.1でJava SE 7に正式に対応しています。
http://download.eclipse.org/eclipse/downloads/drops/R-3.7.1-201109091335/index.php

*1:全部紹介できなかったので一部のみということで、言語仕様の小さな拡張&NIO.2 ファイルシステムインターフェイスに絞って解説しています

転職先が決まりました

転職活動を始めました - じゅんいち☆かとうの技術日誌
の結果発表の時が来ました。ということで、転職先が決まりました。
「バリューパックでセットで転職をできればいいねぇー」なんていってましたが、結局 別々の会社に転職することになりました。まぁ、別々の会社に行っても、お互いに触発しあえる存在というのは変わらないので。

そして、私は23日から 株式会社ドワンゴ の社員になります。java-jaの人たちから声を掛けてもらったのがきっかけです。
当初は、分散処理系や研究開発系の業務を想定していましたが、技術を使って、なんか面白いこと、変わったこと、インパクトがあることをやってみたいという思いがあり、決断した次第です。
そもそも書ききれないと思いますが
@,@,@,@,@,@,@,
@,@ のみなさんには、私の細かい質問に答えていただきました。ありがとうございました。
ドワンゴ社を検討する上で、この本をさらっと読みましたが、これが面白い。シンパシーを感じるところが多かった。


いわゆる、奇人、変人、天才がいる会社らしい。他にこういう会社は知らないので面白いんじゃないかなと。技術レベルが高い会社なので、自重せずに済みそうです。そして、Scala厨を増やす計画も徐々に進めます。

今回、お声がけいただいた企業様や関係者の皆様、本当にありがとうございました。今後ともよろしくお願い致します。そして、ドワンゴ社員のみなさん どうかよろしくお願いします!

あわせて読みたい
ソフトウェア開発者、完売いたしました - 都元ダイスケ IT-PRESS

WEB+DB PRESS Vol.64で記事を書きました

WEB+DB PRESS Vol.64

WEB+DB PRESS Vol.64


8月24日発売のWEB+DB PRESS Vol.64で連載2回目の記事を書きました。
タイトルは「再考するJava【第2回】プロジェクト自動生成ツールの再考 maven-archetype&Spring Roo」です。今回の記事はツールの使い方がメインなんで、難しい部分は少ないと思います。Spring Rooアドオンの作り方などにも触れていますが、浅く広くで感覚を掴んでもらうような内容なので、十分に理解できると思います。
他にも面白そうな特集が。個人的には特集3の「かな漢字変換をどのように実現するか 作って学ぶ日本語入力」が楽しそうです。
ということで、よろしくお願いします。

1万時間の訓練

プログラマが知るべき97のこと』の 『22 1万時間の訓練』P44 をもう一度読み返してみました。以下、だらだらと感想文を書いてみます。

プログラマが知るべき97のこと

プログラマが知るべき97のこと

 集中的訓練の目的は、あくまで自らの能力を高めることにあります。いわゆる「スキル」や「テクニック」を身につけることが目的なのです。集中的訓練において重要なのが「反復」です。身につけたい能力をいくつかの小さな要素に分割し、その一つ一つについて反復訓練をし、習熟度を高めていきます。つまり「反復の反復」が必要になる、ということです。ゆっくりと、能力全体の習熟度を望ましいレベルにまで引き上げていきます。集中的訓練の目的は習熟度を上げることであり、個々の課題、作業をこなし、完了することではないのです。

「反復」は重要なのは言うまでもないですが。この「反復」についてもう少し考察してみるならば、単純に繰り返しても記憶に定着しにくいという事でしょうか。

情報を長期記憶に送り込むには、同一の符号系列の単純な反復である維持リハーサルではなく、情報に対するイメージの構成や意味的処理によって既有知識と関連づける精緻化リハーサルが有効である。 記憶したい情報を相互に関連づけたり情報の意味づけを行う、いわゆる《深い処理》にあたるものだ。
単語のスペルや音韻に注意したり,繰り返し読み上げたり書き写したりするような「浅い」処理を行うよりも,意味を考えたり,イメージしたり、自分の経験と関連づけるような「深い」処理を行う方が,その単語の保持成績は優れたものになる。

この話を、プログラミング言語の学習で置き換えて考えるならば、サンプルプログラムを見て動かすぐらいは「浅い処理」で、自分で設計し考えて実装することが「深い処理」かもしれません。いずれにしても、「深い処理」は意味を考えたりするので、当然 手間はかかりますね。でも、逆に言えば、一手間を掛ければ定着しやすいかもしれませんね。

 代金をもらって開発をする場合、その主たる目的は、製品を完成させることにあります。集中的訓練の場合はそうではなく、自分の能力を高めることを主たる目的とします。両者は本質的に違うものです。まず自分に問うてみてください。普段、仕事での開発作業に費やしている時間はどのくらいですか? それに対し、自分の能力を高めるのに費やしている時間はどのくらいですか?

私は98年(SIer経験2年目)に、Windowsのプリンタードライバを作っていました。特殊なDDKでINIファイルに設定を記述すると大半のドライバーのソースが生成されるという環境でした。そして、このINIファイルが機種やOS、言語リソース毎にできて爆発しましたw INIファイルをDRYにするための対策として、C言語プリプロセッサと同等の機能を持つツールをC++で実装することにしました。これは業務外でやったんですよね。楽しかったから。BNFもASTも分かっていなかったので、今思えばひどいですが*1オブジェクト指向のモデリングはある程度こだわった記憶があります。漠然と研鑽しても身に入らなくて、何かゴールがあるよいのではないかと思いますね。結局はこういうことが「深い処理」になるような感じですね。

果たして「エキスパート」と呼ばれるだけの能力を身につけるには、一体、どのくらいの量の訓練が必要なのでしょうか。それについては次のようなことが言われています。
● Peter Norvig は、何かでエキスパートになるには約1万時間の訓練が必要と述べている。いわばこの1万時間というのが「マジックナンバー」ということになる。
● Mary Poppendieck も、著書『リーンソフトウェア開発と組織改革』の中で「どんな専門的職業であれ、入念に計画された、集中的な訓練を最低10,000 時間積み重ねることとで専門家になると言う」と書いている。
 専門的な技術や知識は、ゆっくりと徐々に身につくものです。1万時間が経過した途端、急に身につく、というわけではありません。それでも、ともかく1万時間やる、ということが大切なのです。ただ1万時間と言ってもそれは膨大な時間です。週に20時間なら10年かかることになります。

1万時間は長いですが、週20時間で10年間続ければエキスパートになれるわけですね。できないことはないですね。

「1万時間努力したはいいけれど、結果、自分にはエキスパートになる素質がないとわかるだけかもしれない」そう心配する人はいるでしょう。そんな心配はいりません。エキスパートには必ずなれます。
何かに秀でた人間になるかどうかは、ほぼ、自分がなろうとするかどうかだけで決まるのです。すべてはあなたの意志次第なのです。過去20年間におよぶ調査でも、ある知識や技術が身につくかどうかは、大部分が、訓練に費やされた時間の長さで決まる、という結果が得られています。天賦の才はさほど重要ではないのです。

"自分がなろうとするかどうかだけで決まる"というのが印象的ですね。結局は、人間の行動を決定するのは自分自身の意志ですね。そして、"天賦の才はさほど重要ではない"ということだそうです。どれだけ訓練したかですね。「かとうさんとは、違うんですよ。僕らは」と聞かされることが多いのですが、そういう人はつべこべ言わずに「1万時間の訓練」を読んだほうがいいと思うよ!

*1:その当時の自分に、Scalaを教えてあげたいw

言語だけでなく文化も学ぶ

プログラマが知るべき97のこと』の 『26 言語だけでなく文化も学ぶ』P52 には

プログラマが知るべき97のこと

プログラマが知るべき97のこと


こんなことが述べられています。

 Andy Hunt とDave Thomas は、多くの人に影響を与えた著書『達人プログラマー』の中で、「毎年、新たなプログラミング言語を1 つは学ぶこと」と勧めています。私はそのアドバイスに従い、過去何年かの間に実際に数多くの言語を学んできました。そして、その中で「言語を学ぶというのは、ただ文法、構文を学ぶことではなく、その背景にある文化も学ぶこと」という重要な教訓を得ました。

「毎年、新たなプログラミング言語を1 つは学ぶこと」は有名な指針ではありますが、なかなか毎年 言語を習得するのは大変です。どうせ大変なら、楽しみながらやったほうがいいですね。さらに大変ですが、その背景にある文化まで学びなさいと言っているわけですね。でも、文化を学ぶことには大きな意味があります。

 どのような言語でもFORTRAN のように書くことはできます。しかし、言語にはその言語独自の文化というものがあり、真にその言語を知るには、その文化も正しく学ぶ必要があるのです。

どんな言語でもFORTRANのように手続き型言語のように記述できる。だからといって、それは設計として良い選択をしているのか。そこで疑問を感じたほうがよさそうです。その言語がどのように考えられて作られているか知ることが、文化を学ぶことではないかと思っています。難しい言葉で言い換えると言語設計の意図ってことですかね。
ちょっと前の経験ですが、他社のPHPプログラマが開発したAndroidアプリのソースを見たことがあります。それは、まるで手続き型というか、PHPのようなJavaプログラムでした。Javaの文化に馴染んだ私には難解でした。もはやJavaとは言い難い。
ということで、言語の機能だけ学んでも、その言語を使いこなすことは十分にできないと思うのです。まずは「郷に入っては郷に従え」で言語の背景にある文化も学ぶべきですね。

「なぜクラスというものが存在するのか」を学び理解する姿勢が重要です。関数型言語で使われるラムダ式が最初なかなか理解できないとしても、怖じ気づくことはありません。ひたむきに、分かるまで使うように努めるのです。
 新しい言語を学び、その勘所をつかんだら、前から知っていた言語の使い方がそれまでと変わっていることに気づき、自分で驚くことがよくあります。

クラスなんてありふれた存在ですが、「なぜ必要か」という視点で問われると案外まっとうな答えを返せないものです。でも、文化を学べばその答えにたどり着くことが可能です。私も、Scalaでイカしたコードを書くために、Haskellを始めることにしました。Scalaで少し関数型の文化を学んだおかげもあり、今 Haskell本を読んでも理解がスムーズにできます。Scalaを始める前に読んだことがありましたが、難解すぎて理解できなかった。今はスムーズに理解できるんです。文化を理解するって大きな意味があるんですね。
そういう意味では、「言語だけでなく文化も学ぶ」はよい習慣だと思います。

Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell―実戦で学ぶ関数型言語プログラミング

[life] Interviews

I've been looking for another job since the beginning of this month.
I said I'll quit my current job on my blog two days ago.
Then many people made contact with me and I've got twenty offers so far.
I really appreciate their offers. And I've been busy with interviews.
Today's first interview was fun because I met three beautiful women.
I have two more interviews for today. I'll try my best!

転職活動を始めました

トライクレオという会社で、SI業務の本業の傍ら、部下(id:daisuke-m)と研究開発を果敢に取り組んで、試験運用寸前まできましたが、研究開発業務自体が継続できない状況になりました。SI業務の利益をやりくりして研究開発に回していたのですが、、SI疲弊の影響は無視できなくなりました。

おとなしく、全員でSIの現場に出ればよいわけですが、ムー大陸的な様相というか、このままやっても先はないでしょうねと。*1

というわけで、SI以外の次の進路を考えてみることにしました。実は、SI以外の進路は選んだことはありますが、そこがSIより楽園かというとそうでもないです。結構 過酷だったりしますが、キャリアとしてポートフォリオが組める転職をしたいと思っています。

現職は、今月末で離れることになります*2。いずれにしても、SI業界に居ながら仕事で研究に割く時間をもらっていたので、今の会社には感謝しています。それと、現職でお世話になった皆様、本当にありがとうございました。
そして、id:daisuke-mも一緒に離れます。「仲がいい上司と部下」とよくイジられていたのですが「退職まで一緒か」とツッコミをもらいそうですねw 二人揃って同じところに転職できたらよいですがね...。難しいかもね。

というわけで、二三日前から転職活動しています。
次の進路は、間を空けずに決めたいなと思っています。とりあえず、LinkedInで職歴を書いてみました。
http://www.linkedin.com/in/j5ik2o/
大したこと書いてませんが、英語で書いてみました*3。言語はJavaScalaがメインで、自分的にはサーバサイドのお仕事が向いてるとは思います。それとマネージャは避けています。コード書けないから。

8月には新天地を予定しているので、あまり時間がありませんね。現在、候補を探索中ですが、世間をあまり知らないものですから、どこかよいところあれば、ぜひ教えていただけると助かります。

あわせて読みたい : 【転職活動】ソフトウェア開発者のバリューパックを発売、限定1セットのみ! - 都元ダイスケ IT-PRESS

*1:格好付けてスミマセン><

*2:適職が見つからない場合は、期間限定でフリーをやるかもしれませんが...

*3:Japaneseもあります。http://www.linkedin.com/in/j5ik2o/ja