新しい言語の学習を始めます

■新しい言語の学習を始める動機
 私はどちらかと言えば、仕事がIT業界の中でもプロジェクト管理系の仕事です。しかし、現在の管理系より学生時代にIT系(特にNW系)の勉強をしたこともあり、プロトコル開発やアーキテクチャ論が今でも好きです。日々成長するために勉強を続ける必要があるのですが、あまりに関係の無い学習をしても役に立たなければ仕方が無いので、CやJavaのネットワークプログラミングを行った経験を活かして、仕事上で利用できるライフハックレベルの勉強をすることにしました。

 CやJavaは、大規模開発やrawソケットのような低レベルのプログラムをするには向いているのですが、軽いプログラミングをするときにも大量のコードを記述する必要がありオーバヘッドが多い言語です。つまり、ライフハックをする言語ではLL言語(Lightweight programming Language)であるシェルスクリプトAWKPerlPHPPythonRuby、Tcl等が良いと思ってます。
# Cを使ってKVS(key value store)も勉強してみたいが、発揮する場所が少ないしなあ。

ベスト10は、下記のようになっているようです。人気の無い言語を勉強しても会社内で「なにそれ?そんな検証の取れていない言語で作ったものは実務に使えないよ。」と、いわれかねないので下記から選ぶことにします。

1 C 18.058%
2 Java 18.051%
3 C++ 9.707%
4 PHP 9.662%
5 (Visual)Basic 6.392%
6 C# 4.435%
7 Python 4.205%
8 Perl 3.553%
9 Delphi 2.715%
10 JavaScript 2.469%

マイコミジャーナル(人気プログラミング言語ランキング、C言語が1位)
http://journal.mycom.co.jp/news/2010/04/13/024/index.html

■プログラム言語(LL言語)の選定

●条件1:LL言語であること。
・C、JavaC++、(Visual)Basic、C#Delphiを選定外(残りは、PHPPythonPerlJavaScript)

●条件2:プログラミング設計思想が私の意見と合うこと。(条件1で選定内のもののみ)

PHP
 PHPは関数なのかオブジェクトか分からないが、大量に呪文を覚える必要があるようだ。さらに、WEBと密接に関連している言語のようであり、WEBアプリを作成するためには良い言語だがそれ以外を作成するのには向かない言語のようだ。私は、他の言語を学習したこともあるので、今までの経験を活かすことのできにくい言語は学習効率を下げる意味もあり選定外です。
 参考にしたURLは以下の通り。両者とも(Perler|Rubyist)で有名なプログラマであることから、若干のバイアスがかかっている可能性もあるが、学習する前から判断はできないので信じることにする。

○404 Blog Not Found
http://blog.livedoor.jp/dankogai/archives/50835571.html

○Matzにっき
http://www.rubyist.net/~matz/20080126.html#p04



Python
 Pythonは、100行くらいのプログラムを見たが、非常に読みやすく、理解しやすい言語のように見える。一方、日本での人気はいまいちであり、実績アプリケーションも少ないようである。しかし、基本方針の「ミニマリスト的」アプローチやスローガンの「fit your brain」という発想は共感できるものになっている。Perlでの反省を活かして、わかりやすいオブジェクト指向プログラミングが可能になっている。ただ、かなり速度が遅いようだ。ライフハックをするだけだから問題はないが。

# ueBLOG(下記参照)で記述されている分析がなるほどなあと思わせました。日本のオタク(もとい専門家)の大部分は、猫等の小動物やアニメキャラクタが好きである。その専門家に対して、リアルな蛇の表紙はいかがなものか?と、言っているのでしょう。さらに、蛇が獲物として狙うであろうネズミをマニュアルとして発行するのはどうなんだ?と、言っているのでしょう。マーケティング的には、全く正しい。ターゲッティングが出来ていないといわざるをえない。

○PythonMatrixJp
http://python.matrix.jp/columns/column2.html

○ueBLOG
http://www.ueblog.org/blog/entry/pythonbook/

○isoya9の日記
http://isoya.at.webry.info/200611/article_36.html



Perl
 Perlについては、学習したことがあり、良い面や悪い面があることを知っています。ついでに書けば、現在も継続して学習しており、新たな学習対象という側面から考えると選定外になります。Larry Wallの「こんなプログラムの書き方もあるよ。」と、いった言語仕様は私好みでありますが、下手なプログラマが記述するとプログラムが見にくく(醜く)なる側面があることも否めません。結論で私が言いたいのはPerl6が早く出て欲しいということです。(B'Zじゃないですが、いつかのメリークリスマスに正式発表されるんでしょうか?)



JavaScript
 JavaScriptPerlと同様に継続して学習を続けている言語であり、新たな学習対象ではありません。この言語は、サーバからクライアント側に負荷を移していくという役割を担う言語として、最重要な言語の一つとして認識しています。私がこの言語に対して言いたいことは、デバッグをしやすくしてくれ!と、いう事です。

# 別の話題として、最近良く語られているクラウド論議は、データをクライアントからサーバに移すという流れだと思います。よって、現在のインターネットの流れとしては、①データはネットワーク側、②負荷はクライアント側といった状態と思っています。



■結論
今まで学習のしたことがないLL言語は、PHPPythonである。PHPのほうが人気の高い言語であるもののプログラム言語仕様や文化的に私と合わない。よって、実行速度は遅いもののライフハックをする上で問題の発生しないPythonを学習することにする。

# 結局、自分にとって一番学習したら良い言語って、学習してみないとわからないよね。


○追記
>B'Zじゃないですが、いつかのメリークリスマスに正式発表されるんでしょうか?
わかりにくいですね。perl6を発表するのは、(何年先になるか分からないが)いつかのクリスマスに行うという発表があったそうなので、こう書いています。

Python学習を始める前に & 学習1日目

■参考書購入
新宿の紀伊國屋書店で”初めてのpython”を購入
# Perlの場合は、リャマ本やラクダ本というが、ネズミ本とでもいうのだろうか?

http://www.amazon.co.jp/gp/product/4873113938?ie=UTF8&linkCode=as2&tag=blogsofdankog-22

書店で中身を確認したが、この本はなかなかうまく書けていそうので理解しやすそう。
# オライリーの本は、当たり外れがはっきりしているからなあ。


■初めてのpythonの構成
本書は、7章構成になっている。意外と目次を理解することは、編集者の意図を理解するうえで重要なのでメモを残す。
# 今日から初めて学習するので、下記が合っているかは保証しかねます。

1部 Pythonの基礎知識(1章〜3章)
Pythonの文法説明というより、Pythonとは?という説明や文化、開発環境についての説明

2部 ビルトインオブジェクト(4章〜9章)
・ビルトインオブジェクトを利用した基本的なPythonの文法説明
# ビルトインオブジェクト:Pythonのプログラムを構成するオブジェクト(データ構造)集まりであるデフォルト状態で提供されるもの(合っている?)。なんらかの値やデータ構造の集まり

3部 ステートメント(10章〜14章)
・if文やfor文、while文、代入等のプログラム文法を記述している。加えて、プログラム内のコメント記述法や公式マニュアルの説明
# ステートメント:プログラム内で行うこと。ビルトインオブジェクトを何らかの処理をするためのもの

4部 関数(15章〜17章)
・一般的な関数の説明と変数のスコープ、高度な関数テクニック(lambda等)の説明
# 関数:別名はサブルーチン、プロシージャ
# lambdaを昔、ランバダと読んで友人に笑われたのを思い出した。

5部 モジュール(18章〜21章)
・モジュールの基本説明、インポートやリロード、パッケージの説明。高度なモジュールテクニック
# モジュール:プログラム自身やデータの集合

6部 クラスとオブジェクト指向プログラミング(22章〜26章)
Pythonオブジェクト指向の基本説明、クラスや設計方法の説明。高度なクラス利用テクニック

7部 例外(27章〜29章)
・tryやexcept等の基本説明。例外の設計思想


■学習計画

総ページ数:691ページ
学習目標:土日は100ページ/日程度、それ以外は30ページ/日程度
学習期間:5/16(日)〜5/30(日)

○学習期間詳細
5/16(日):1章〜4章
5/17(月):5章〜6章
5/18(火):7章
5/19(水):8章
5/20(木):9章
5/21(金):10章
5/22(土):11章〜14章
5/23(日):15章
5/24(月):16章
5/25(火):17章
5/26(水):18章〜19章
5/27(木):20章〜21章
5/28(金):22章〜23章
5/29(土):24章〜26章
5/30(日):27章〜29章

なんとか5月内で収まるけど、長いなあ。備忘録を書く時間があるかどうかは微妙だな。4,600円分の学習はせねば!


○あとがき(学習1日目)
一日目の学習が終わったが、なかなか面白い。
特に、リストとタプルが面白い。Perl等でもリストはあるが、さらに高度な処理が簡単にできるのが良い。

リスト
L = [111, 'aaa', 222]
L + [4, 5, 6]
>>>[111, 'aaa', 222, 4, 5, 6]

リストのネスト
A =[ [1, 2, 3],[4, 5, 6], [7, 8, 9] ]
A[2]
>>>[7, 8, 9]

リストのrow取得
val = [row[2] for row in A]
val
>>>[3, 6, 9]

リストのrow取得後、処理(偶数のみ取り出し)
val = [row[2] for row in A if row[2] % 2 == 0]
val
>>>[6]

リストのネストの対角線処理
B = [A[i][i] for i in [0, 1, 2]]
B
>>>[1, 5, 9]

リストの文字処理(ポリモーフィズムによる変化)
D = [c * 3 for c in 'abc']
D
>>>['aaa', 'bbb', 'ccc']

ディクショナリ
E = {'aaa': 111, 'bbb': 222, 'ccc': 333}
E
>>>{'aaa': 111, 'bbb': 222, 'ccc': 333}

ディクショナリの値参照
E['aaa']
>>>111

ディクショナリの全key処理
for key in E:
print key, '=>', E[key]
>>>aaa => 111
>>>bbb => 222
>>>ccc => 333

タプル(値を削除不可)
T = (1, 2, 3)
len(T)
>>>3

タプルの値追加
T + (4, 5)
T
>>>(1, 2, 3, 4, 5)

ファイル書き込み
file = open('temp.txt', 'w')
file.write('Hello World\n')
file.write('test\n')
file.close()

ファイル読み込み
file = open('temp.txt')
fh = file.read()
>>>Hello World\ntest\n
fh
>>>Hello World
>>>test

split分割
fh.split()
>>>['Hello World', 'test']

集合演算
A = set('abc')
B = set(['c', 'd', 'e'])

A & B
>>>set('c')

A | B
>>>set(['a', 'b', 'c', 'd', 'e'])

A - B
>>>set(['a','b'])

孫正義さんと佐々木俊尚さんによる「光の道」対談の総評

■あらすじ
総務省の部会であるグローバル時代におけるICT政策に関するタスクフォースにて総務大臣である原口議員が「光の道」戦略を打ち出しました。そして、その部会に参加したソフトバンク社長の孫正義さんが「光の道」戦略を絶賛した。それに対して、ITジャーナリストの佐々木俊尚さんが光ファイバを敷設するより、プラットフォームを整備する方が重要であると主張した。Twitter上で意見の交換がなされたが、まとまらないためオープンの場で議論することになった。(2010/5/13 20:00からUstやニコ動等で生放送)

○「新しい成長戦略−原口ビジョンII−」(光の道)
http://www.soumu.go.jp/menu_kyotsuu/topics/s_topics100506.html

総務省 グローバル時代におけるICT政策に関するタスクフォース
http://www.soumu.go.jp/main_sosiki/kenkyu/global_ict/index.html

孫正義さんの主張(第9回会合を参照)
http://www.soumu.go.jp/main_sosiki/kenkyu/global_ict/kyousou_seisaku.html

佐々木俊尚さんの主張
http://japan.cnet.com/blog/sasaki/2010/04/29/entry_27039509/



■結果
 未来のICT社会へ向けての方向性は同じであることが確認された。今回の対談のポイントは、プラットフォームと光ファイバがどちらが大切かという部分であった。しかし、その点については合意がとれていない。
 しかし、国費を使わずに光ファイバを全国に敷設する構想については、前提条件はありつつも合意に達したという結果になった。前提条件は、以下の2点である。

1.光ファイバを全国に敷設する際に一切の税金を使わないこと。

2.ソフトバンク社が上記部会にて提出したプレゼン資料の光ファイバを敷設する際の算定方法が正当であること。

○「光の道」 part.1
http://www.ustream.tv/recorded/6880277
○「光の道」 part.2
http://www.ustream.tv/recorded/6881808
○「光の道」 part.3
http://www.ustream.tv/recorded/6883361



■対談模様
 下記のような予定は立てられていたものの、孫さんのプレゼン1)の時は佐々木さんはなにもいわず、佐々木さんのプレゼン2)の時には孫さんが時折自らのエピソードを間に語る形式であった。討論3)の時も孫:佐々木=3:1くらいの割合で語る形式であった。

 1)孫正義さんがご自分の持論をプレゼン:約15分
 2)佐々木俊尚さんがご自分の持論をプレゼン:約15分
 3)孫正義さん、佐々木俊尚さん、お二人の納得がいくまで討論:時間無制限
○ケツンダンポトフ
http://ketudancom.blog47.fc2.com/blog-entry-423.html

●孫さんの主張
・税金を1円も使わず、全国・全国民を光ファイバを敷設してインフラ革命を起こし月額1,400円で提供する。
・黒電話しか利用しない国民にも宅内まで光ファイバを敷設するが従来と同様の電話サービスを利用出来るようにする。その際も料金は従来通り。
・電子教科書・電子カルテ・NHKコンテンツを無料にしてクラウド化する。
・光の道実現のためにNTT東西からアクセス設備部分を切り出し、資本を完全に別会社にして、敷設した光ファイバを各社で利用する。

○孫さんのプレゼン資料
http://www.softbank.co.jp/ja/irinfo/shared/data/announce/20100513_02.pdf

●佐々木さんの主張
・高速インフラが無いから、光ファイバの利用率が低いわけではない。
・グーグル及川卓也氏が主張した三層モデル「コンテンツ」「コンテナ」「コンベヤ」のうち、日本が圧倒的に弱いのは「コンテナ」であり、つまりはプラットフォームである。コンベアはNTTなどの既存の通信時御者が努力したおかげで全国民の90%が希望すれば利用できる状態にある。
・タスクフォースにてソフトバンクが主張した光ファイバ提供の算定方式がバイアスがかかっており、光ファイバ保全費などの情報が抜け落ちており議論の土台としておかしい資料になっている。

○佐々木さんのプレゼン資料
ソースが見つかりませんでした。上記、ビデオを参照ください。



■総評(ここからは私の個人的な意見)
 佐々木さんがまともなジャーナリストであることから、孫さんが話すときにはじっくり話を聞く状態であった。一方、孫さんは自らの主張したいことを延々と主張し続けていたので、議論のバランスに欠けていたような印象である。

 私はIT業界に身を置く存在であるので、孫さんの主張は現実感を欠いている(下記参照)ことがわかるが一般の視聴者にとっては「なんて、壮大で素晴らしい計画だ!」と、思わせるプレゼンであり世論誘導がうまい人だという印象を受けました。プレゼン資料についても基本的には、タスクフォースで説明した資料の焼き直しであるが、企業の力(資料作成にかけることの出来る人数が多いという意味)を利用しているためかなり(あまり通信業界を知らない人が見れば)納得性のあるプレゼン資料になっていた。

 一方、佐々木さんのプレゼンは、いろいろな場所ですでに主張している3層モデルの説明が中心であった。私の印象では、3層モデルの説明が少し冗長ぎみであり、視聴者にとっては興味をそがれる結果になったのではないかと思っている。特に、プラットフォーム論議は、IT業界でいうとアーキテクチャプロトコルをまともに理解していれば重要であることがわかるが、一般にはグーグルの検索画面やアップルのiTune等だけがプラットフォームであるという認識であろう。おそらくそのユーザ向けにわかりやすく資料を作成したのだろうが、それにしても冗長であった印象を拭えない。(社員に指示ができる)孫さんと違い佐々木さんは、プレゼン資料を自ら大部分を作成していると思うので仕事の合間に少しづつ行うことになる。よって、費用対効果を鑑みて作成する必要があるため、あのような資料になったのであろう。

 私は、今回の論議を視聴者として、最初の議題である光の道とプラットフォームがどちらが優先順位が高いのかを論議が尽くされなかったことは非常に残念である。孫さんが、議論のまとめとして税金を使わずに光ファイバを全国に敷設することができたら反対しませんよね?と、いった趣旨でまとめていたが、議論のすり替えである。初めから見ていないユーザや論議のスタート地点がわかっていないユーザに対しては効果的であるが、あの終わり方は世論を誘導するだけでバランスの欠いた終わり方だといわざるをえない(司会者がきっちり整理すべきであったが)。日本のIT業界は、既存の利権を持つ通信事業者やソフト会社が跳梁跋扈していることは否めない事実であるが、私は間違った前提で世論を誘導させることもあってはいけないと思う。


●孫さんの主張が現実感とバランスを欠いている理由
・人口比率で残り10%をサポートすることが、設備効率的に非常に悪くソフトバンクが算定した金額では到底行うことができず、1,400円の根拠が薄い。
・現実に光ファイバ敷切の工事実施ベースで考えると、光を利用したいユーザの協力を得ることはできるため工事は可能である。一方、光を利用したくないユーザや壁に穴の開けたくないマンションの大家さん、仕事等が忙しいから家にいないため連絡が取れない一人暮らしの人等が自らに利益のないことである光ファイバ工事に協力してもらえない。よって、現実的に第1期工事のようなエリア展開は不可能である。
・以前、自ら光ファイバを敷設する事業をソフトバンクが行っていたが、現在は事実上撤退している現状を鑑みると、NTTに光ファイバ事業で敗北したからこのような主張をしているように見える。さらに、NTT東西のアクセス回線部門との連携を悪くさせて、自らの事業を大きくしようとする戦略に歴史上・ソフトバンク社長という立場を考えると見える。
・NTTの経験豊富な人材を光ファイバ敷設の人員として活用できると主張しているが、実際に光ファイバを敷設しているのは通信建設会社つまり協力会社である。大企業はどこでもそうであるが、一部のノウハウを維持する人員以外はほぼ管理しか行っていないであろうと推測する。その人員を研修にてアクセス回線を実際に敷設可能なレベルまで引き上げるためには膨大な努力がいるであろうことが想定される。若い人員ならまだしも、50〜60歳のもう定年退職が近い人材をやる気にさせて肉体労働を実施させることは現実的に困難であるといわざるをえない(やる気が無いのが悪いといえばその通りであるが・・・)。一方でNTTとしても、これ以上の余剰人員は確保できないであろうし、リストラも現実的に不可能である。
# 通信建設会社の人員を増やせば可能であるが、光ファイバを一気に敷設したあとは大量の余剰人員となり大規模リストラが起きる。よって、それにより社会不安を引き起こす可能性もある。
・黒電話は、かなり料金競争が行われており、実際は基本料金1,400円で提供していることはありえない。



○あとがき
 論議後の質問で、ipadSIMロックの解除について孫さんが、”幕府を倒すまでは武器は渡せない”、”docomoより大きくなり横綱相撲ができるようになったら”という趣旨の発言をしていたが、正直に”株主の不利益になることはできない”や”社員の生活を守るためにできない”と、答える方が良かったのにと感じました。今回の国のために!と、いった主張とずれるから言えなかったのかな?医者には、端末が使えるように努力しなさいとか既得権益を放棄しなさいと言っていたのに、やっぱり自らの既得権益の放棄は現実上、難しいですよね。理解できます。
# 上記あとがきは、既得権益を放棄しないことは悪いと言っているのではありません。
# docomoより大きくなったことがSIMロックフリー解除の前提は、なかなか長期戦のようにも思えました。


○追記
下記のURLの記事を読んでいると、すでにひかり敷設すると同時にメタルを撤去することに対しても大きな疑問が残っていることに気づきました。
http://ikururo.blog27.fc2.com/blog-entry-2.html