Category Archives: 論評

地下鉄で最適な情報端末は何だったのだろう

地下鉄内でネットが使えるようになっていくらしい。今後は都内で電波が切れるということを体験することはほぼ無くなると思われるので、今のうちに、そんな時代を振り返って書き残したいと思う。

電波が途切れがちな地下鉄で最適な情報端末は何だったのだろう。

モバイルノートPC、今時何でもソーシャル、クラウド、Webにつながってないなんてありえない。WebアプリはHTML5オフラインサポートをまともにやっているところを見たことがない。辛うじてキャッシュしててもブラウザ更新ボタンを押したら死亡。リードオンリーならまだしも、書き込みがまともに出来るサイトなんて見たことがない。

Android/iPhone、専用ネイティブアプリが充実、さすがにオフラインでも起動はするし、通信が切れていても情報くらいは表示してくれるのが一般的、Webアプリと比べれば100倍快適!キャッシュも多いから、過去データの閲覧ならば十分快適にできる!ただし、書き込みについては依然として弱くて、電波が切れるとTweetすらできなくなる。やはり常時接続前提の端末だと思う。

携帯電話、こいつこそ、東京の地下鉄事情に最適な端末だと思う。メールはオフラインでも書けるし、受信済みのメールはもちろん読める。オフライン状態でメールを送信しようとすると、次にオンラインになるまでメールをプールしてくれて、オンラインになったら勝手に送受信してくれる。地下鉄でのちょっとした確認ならiチャネルの字幕程度で十分だ。

さあ、ガラケーを持ち歩く理由がまたひとつなくなろうとしている。これを機に、ガラケーは死滅したってほぼ誰も文句を言わないだろう。

山岳部出身の僕から言わせれば、山では最近(2006年頃)まで、ドコモはMovaしか使い物にならなかった。部ではFOMAは禁止だった(故にauの人が多かった)。山では充電もできないし、電池は低温だと性能が低下する。電波も途切れがちだ。携帯電話の普及によって、山で救助の呼び出しに使われることが増えたらしい。賛否両論あるが。それによって救われた命もあるだろう。山に登るなら、今でもガラケーと、携帯ラジオは外せない。(免許取って無線機もあった方が望ましいが)

僕は万が一山で遭難したときのために、十分に電池が長持ちして十分に丈夫で防水なスマートフォンが出るまでは、ガラケーを持ち続けたい。

何者にもなれないエンジニアが、技術を磨くためのただ3つの方法

エンジニアの生存戦略として、よく「アウトプット大事」と言われます。

「勉強会でお客さんになっていては上達しない。発表者にならなければ!」とか「本を読むだけでなく、OSSにコミットしよう」とかは、確かにその通りだと思います。言うまでもなく、人に教えるには教わる側の数倍の知識が必要とされます。技術は実践しないと身につかないですよね。

とはいえ、会社で雇われ、平均的に働き、平凡な能力しかない大勢のエンジニアにとって、OSSにコミットしたり、勉強会でLTすることは結構敷居が高いことです。そもそも、使う価値があるからOSSは使われ、聞く価値があるから発表は聞かれるのです。世の中実力勝負です!昔よりは裾野が広がったとは言え、それでもオリジナリティって難しいのです。

そこで今日は、僕自身一平凡なエンジニアとしての視点から、普通のエンジニアが上を目指すために取るべき戦略を提案してみたいと思います。

ローカルグループ活動

○○ユーザ会主催などのガチの勉強会でいきなりLTするのはちょっと怖い高いですよね。一流の人達に混じってガクガクブルブル………しかし、一流じゃなくてもあなたの話を聞きたい人は居ます。地域や会社、友達、IT以外の趣味を持つグループなどの仲間です。そんな仲間内で、お互いに勉強しあう会を定期的に行うのはどうでしょうか?

このような近しい人の輪では、発表の内容自体よりも「○○さんは何をやっているのだろう」ということに参加者は興味を持っています。それでも発表するという行為は変わりません。この要求度に限って言えば、本当のIT勉強会となんら変わらないのです。従って、発表のやり方とかスライドの作り方が自ずと鍛えられるようになります。

ただし、このような会での発表のあり方は、ガチの勉強会と異なって、参加者が発表者の発表内容を聞きたくて来ているわけでは(必ずしも)ないところがあります。そのため、自分の専門分野外の人に専門分野のことを説明するための工夫が必要です。仕事をしているとその分野についてとても深い所で気づかず、うっかり専門用語を使ってしまいます。そういう発表をすると、とたんに寝る人が出たりします。それを防ぐためには敢えて自分の専門分野外の一般受しそうな話を持ってきたり、専門分野外のことも広く浅く(なぜなら参加者の中では例えば一番「パソコンに詳しい」と思われている)知っておくなどの準備が必要です。そういうのを好むか好まないかは人それぞれとは思いますが、エンジニアはユーザあってのエンジニアですし、意外とこういう場から世の中のニーズが見えてきたりします。

コミュニティー奉仕

「この人すごい!尊敬する!でも雲の上のような存在でなかなか声をかけられない」そんな人っていますよね?
ところで、昨今勉強会がたくさん行われていて、大抵の勉強会は受付や会場設営などのスタッフやボランティアを募集していたりします。いつもお世話になっている勉強会に「客」ではなく「スタッフ」として参加すると、あこがれのあの人と話す機会に思わず恵まれるかもしれません。

「優秀な人の輪に入る」ということは自分戦略として重要です!

タダ働き

「知り合いにPC関係のことであれやってあげたのに、さも当然のようにされて、礼も言われなかった」
という話をよく耳にします。僕自身、何度かそのような経験があります(笑)。しかし、今となってはそんなことはどうでも良いと思っています。
プログラマーが余暇を利用してコーディングというのは、なかなかできるものではありません。「日々の仕事で疲れているし、もう液晶ディスプレイなんか見たくもない!!そんな心境で、休日はつい午後まで寝て過ごしてしまったと」いう話がピンと来る方は結構いらっしゃるのではないでしょうか?

しかし、自分の技術を使って人に喜んでもらうことができるとしたら、モチベーションもグッと上がりませんか?(`・ω・´)

その際、対価は受け取らないという手法を提案します。対価を受け取ってしまうと「仕事」になってしまって途端に窮屈な感じがします。なにより、お金を取るんだから自分が完全に理解している手堅い技術を使いたくなります。そこからは成長は見込めません。プロらしくないかもしれませんが、対価を受け取らないんだから責任も軽減されます。一方で、お金を取らないのだから当然費用が発生する方法は使えません。必然的にOSS、フリーミアムのあるプラットフォームなどを利用する方向に行くと思います。最近ホットなScalaとか、GoogleAppEngineなどを使うチャンスです!そして、小さなプログラムでも、れっきとした事例です。これであなたもモテエンジニアへ一歩踏み出せます!(*´∀`)

プログラミング入門に向くのはどの言語か

釣りのようなタイトルで申し訳ありません。
この話題、人によってそれぞれの意見をもっていると思うので、議論が収束しなくなりがちです。

例:
「私がJavaScriptを初心者用の言語として選んだわけ」(404 Blog Not Found)
http://blog.livedoor.jp/dankogai/archives/51005691.html

僕自身の経験に言わせれば、僕がプログラミングに入ったのは、Delphi2.0でした。言語がPascalということで、敬遠されがちの面もありましたが、塚越一雄さんの本が高品質であったため、快適に学習することができました。

ある程度アルゴリズムっぽいものを学ぶ段階で、僕は10進BASICに触れました。ちょっとしたグラフをプロットする機能もあったので、色々なグラフを書いて遊びましたし、一連のソートのアルゴリズムを試したりもしました。自分で乱数を実装したりもしました。

今の時代となっては、どちらの開発環境も入門に使用するのは一般的ではないかもしれません。が、両者の特長を述べますと

Delphi

×
便利な開発環境 有料
型安全 めんどくさい
実行ファイルが作れる コンパイルしなければならない

10-BASIC

×
無料 開発環境が簡素
インタープリタですぐ実行 実行ファイルがつくれない
手軽 バグが見つかりにくい

この構図を無理矢理現代の言語に持ち込むと

Java

×
便利な開発環境(Eclipse) 起動が遅い
型安全 めんどくさい
速い コンパイルしなければならない

JavaScript

×
ブラウザがあれば開発できる 開発環境が統合されていない(Firebugなどはある)
スクリプト言語なのですぐ実行 実行ファイルがつくれない
手軽 バグが見つかりにくい

ということで、僕は両方同時に覚えることをオススメします。複数の言語がコンガラがって混乱するとかいうのはアマいです。プログラマーをやっていると、ひとつの言語だけで何かができるなんて、絶対ありませんから!

別の面で比べると、JavaはJavaだけ学んでも、面白くないということが問題です。Webアプリを作りにはTomcatや、Servletを覚えなければなりません。一方のJavaScriptは、これを覚えるためにはHTMLやDOMの知識が不可欠です。とはいえ、今の時代、Webというプラットフォームを利用しない手はないので、いずれ、HTMLやDOMはマスターする必要があります。ならばいっそ、これらを効率的に学べる土壌があれば良いと思います。ということを考えていたら、絶好の答があることに気づきました。

Google App Engine for Java

です。既存のプログラマーにはBigTableが敬遠され、本番で使うにはSpin upががが…と色々言われていますが、これから入門する人にとっては、SQLを覚えるよりもデータストアのLowLevelAPIはシンプルですし、「制約はバグを作ってサーバを全部ダウン」という事件を起こさないということで、素晴らしいのではないでしょうか!

ということで、探してみたのですが
http://www.google.co.jp/search?aq=f&sourceid=chrome&ie=UTF-8&q=Google+app+engine+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80

その手の入門書、ありませんね……。なんで!?

「Java言語のひと通りの文法を理解していること」「HTML、Webの基本を理解していること」そんなことすら要求せずに、appengineを使ってそれらを学んでしまおうという試みがあっても良いじゃないかと思います。プログラミング入門にappengine(Java)を使うメリットを列挙すると:

  1. 無料ですぐ始められる
  2. 開発環境がある(賛否両論ありますが、開発環境が立ち上がるとプログラミングモードになるという僕の感覚として)
  3. SQLを学ばなくて良い
  4. JSPを学ばなくて良い(後述)
  5. プログラムを暴走させて事件を起こすキケンが少ない
  6. みんなに公開できる

ほら、入門にグッドじゃないですか!

Twitterで、ハッシュタグ#appengineを見ていると、レベルの高い方々が多いです。が、これからプログラミングをはじめようというような初心者の人がいません。ともすれば、日本のappengineコミュニティは難しいものになってしまいはしないか?多少端折ってもいいから気楽に楽しくappengineでプログラミングを覚えましょうよ!

という試み、誰か、試してみませんか?お前がやれ?うん、時間があればやってみてもいいかも。僕自身appengine初心者で、未だにSlim3のGlobal Transactionが必要になるレベルのアプリすら作ったことがないのですが、自分が学習する意味も込めて、やってみようかなあ。
とかいって、何ヶ月も放置されるかもしれませんが。目下、iPhone SDKの勉強に注力していますので……。

このことを考えたきっかけは、先日に大学時代に所属していたサークルに遊びに行ったら、未だにCで入門していたことを聞いたことでした。1年かけてCをやって、黒い画面にhello, worldとか書きながら多くの新入部員が挫折してしまう……それに、これからはHTML5の時代だというのに、クラウドとかあるというのに、、Canvasとかあるというのに、それらを使っている人が全然いない!!Cを半年かけて、それからWinAPIを半年かけて、さらにDirectX……そんなことしなくても、JSでいきなりCanvasがあるじゃないですか!

まあ、「Cをバリバリにやって、3Dアクションゲームをバンバン作って、ゲーム会社に就職してやるぜ!」というのがサークルのカラーならばそれもいいかもしれません。しかし、「長年それでやってきたから」という保守的な部分が出てしまっているなら、どうなのかな?