万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

〜若手ITエンジニアに送る2時間のMatzワールド〜

タイトル:まつもとゆきひろが語る
『ビューティフル コード』×『プログラマ35歳定年説』
〜若手ITエンジニアに送る2時間のMatzワールド〜

にいってきた。
オライリー本「ビューティフル コード」にサインもらいました。

下記、内容


●ビューディフルコード
自己紹介
島根の小さい会社。50人。
楽天では、フェローという肩書き。自分でもフェローが何か分からない。

・ビューティフルコード
オライリー本。
36人くらい。
日本語で書いたら翻訳されるということで出した。
会場、女性比率はいつもは少ないけど、今日は少し多い。
プログラム経験がない人は少ない。

■コードの美とはなにか
・コードとはなにか
・ソフトウェアは美しいのか

ソフトウェアは見栄えの方、デザインなど
中身は?

■コードは工業製品ではない
・よくありう誤解
・ソフトウェア工場
・大量生産しない
・コピーは一瞬

基本的な設計。
ソフトウェアは情報
自動車における、コストはゼロ
生産はしない。
プログラムを書くこと=車そのものを設計すること に相当する。

まつもとさんは某T会社部品系のCADをやっていた。
粘土のかたまりを削って作る。泥臭い。デザインを考える。
ソフトウェアは規模が大きいにもかかわらず沢山作る。
車の設定と同じ仕事をプログラマは毎日やっている。
アーティスティック、クリエイティブな仕事。ライン作業=誤解の原因+不幸の原因

■コードは設計である
・職人芸
・一品もの
・善し悪しがある

陶芸を作ってもらうのと同じ話しのはず。
社会に組み込まれたりお金の対象になる。=善し悪しがある。

■コードは実用品である
・実用に共してナンボ
・用の美

飾ってナンボというより、使ってナンボ。
例)DVDプレイヤーを飾るのでなく再生すること

■コードは読み物である
・CODE READING
・教材
・知識の宝庫
オープンソース

本があるまえがきだけ書いている。印税は入ってこないw。
コンピュータは自発的に何もしてくれ。
例)TwitterにPOSTすることもどういうことなのかを設計しないと行けない。
意志の伝達手段。人間とのコミュニケーション。
まつもとさんはTwitterのPOSTプログラムは、誰かのを読んで理解してから作った。
仕様書を読むのではなく、プログラムから理解曖昧性のないもの。
この世にオープンソースなどなくて、OSの知識が欲しいとすると、
→OS作っている会社に就職。
OSSなら実用レベルのOSが手に入る。上から下まで。
多くの知識を身につけることが出来る。

昔はオープンソースはなかった。
今は30〜40代の人はマイコンベーシックマガジン
電器屋にいくとベーシック。みんなゲームを書く。
ソ=スコードを読む。本に書いているのを一文字一文字書く。
間違いを探しながらスキルを磨く。
ゲームをいじって簡単にしたり難しくしたりしてスキルを磨いた。

1990年代コンピュータのOSのついて
→コンピュータメーカに聞いて電話する。この人なら持っている。
OSをコピーしてもらう。
積極的に他人のソースコードを読む人は、優れたプログラマになる。

■パワーの美
・「できない」を「できる」に
アルゴリズムの力

スーパープログラマは、ソースコードのデータ構造とアルゴリズムを見直す。
本質的なアルゴリズムを見直すことによって、新しいアルゴリズムの改善をする。

■計算量
・O記法 オー記法
・O(1) どんなに増えても計算量は変わらない理想のプログラム
・O(n) 比例する。まぁよい。データが倍になると計算も倍。
・O(n・log(n)) ソート系
・O(n^2) データが倍になると4倍。よくない。

■ソート
・バブル
クイックソート 弱点は最悪のケースの場合、要素数の二乗に比例する。

■不可能を可能に
Rubyの文字列処理
SJIS+EUC
 Shift-JISとEUCに速攻対応した。
 自分が困るから。
 誰かのオープンソースを参考に
 この修正をするとUnicodeが使えるようになる。(吉田さんの大きなメールで)
 →まつもとさんの固定概念を打破した。
・+UTF-8
・→M17N
今3つできるから他言語にできるのでは?
CSI(コード設計インデペンデント)はRubyだけ。

■効率の美
・生産性
・簡潔さ

今朝、飛行機で島根から来た。
いかにはやくいかに沢山作るか。
→簡潔さ。

■簡潔さは力ない
・Succintness is Power
Paul Graham
 ポールグラハム、ベンチャー企業立ち上げてプログラマにしては金持ち。ハッカー
 ベンチャーキャピタリスト(儲けた金で新たなベンチャーを育てる。)

進化の方向は、「いかに簡潔に書くか」
→人間の意図をいかに簡潔に。
 昔の物より、今の方がいいのは、簡潔によって得られたパワーだ。

■簡潔さは力?
・Brooksの生産性不変の法則
 人月の神話の作者。IBMでOS360
 1日にかけるコードは、プログラマの選択する言語によって違う。
 Rubyとでは出来る仕事量は違う。
・本質に集中
 コンピュータに何をさせたいか?おまじないやお約束に労力を使わなくていい。
・実行可能擬似言語。
 本当のプログラム言語はおまじないが多すぎてアルゴリズムが埋もれてしまう。

JavaによるHello World
class Sample {
public Sample {
public static void main(String args[]) {
System.out.println("Hello World");
}
}
}

RubyによるHello World
print "Hello World"

本質に集中できる。

■冗長の排除
・DRY
・Don't Repeat Yourself

昔はコード数で給料が決まっていたので、コピペばっかりしていた。
お客様の満足度で決まる。
繰り返しは悪である。

■DRY
class User
end

これはユーザのテーブルに違いない。
Users(複数形)にする。

■怠惰のための勤勉
・手抜きは美しくない
・苦労を見せびらかすのは粋じゃない

■水鳥のごとく
・水上は優雅に
・水面下では懸命に

■シンプルは美しい
・シンプルとなにか
・しばしば誤解される

■現実は複雑だ
・ソフトウェアも複雑だ
・避けがたい現実
・現実を直視する。

シンプルな言語が書ける言語は言語は泥臭いことをやっている。
言語が複雑だと、言語側簡潔になる。

■人の心は単純じゃない
・単純さが好き
・複雑さも好き
・簡単な問題がいい
・難しい問題もいい

■単純さの罠
・単純さはゴールじゃない
・どこを単純にするか

■人間にフォーカス
・思いやりはうれしい
・やさしいものは美しい
・人間のためのソフトウェア

■バランス
・要は人間がどう感じるか
・唯一の正解がない
・非理系的
 理系的ではない、答えが決まらない。

■思考の流れ
○○を〜して、〜して、〜する。
カスケーディング

AR

■思考の流れ
main = do cs <- getContents
putStr (unlines (take n (lines cs)))

ハスケル

■外面の美
・人間がどう感じるか

■人間を進化させる
・現状に安住するより
・前向きに進みたい
・長い目で見た効率

かな入力の方が、ストローク数が少ない。
ローマ字の母音を右にした。
最初は苦労したが3日で・

■内面の美
・外には見えない
・外面ほど価値観が変化しない
ユークリッドの互除法

・コードに内在
・プログラマには関心を持って欲しい

■コードはアートだ
・人間のために

■プログラマ=アーティスト?
・アートを作る人
・自覚があるか
・歯車ではない
・作業員ではない
・創作的
・自発的

プログラミングをやりたいから。

■エンジニア+アーティスト
考慮すべきこと
・納期
・観客
・チーム
寺院を作っているとき石切山?
これを切って美しい寺院を建てるんだの話し

■アーティストの条件
・自覚
・自発

■美しいコード
理解に基づいたコード
・人間(外面の美)
・機械(外面の美)

■「理解」が鍵
・どれだけ知っているか
・どれだけ理解できるか
・どれだけ考慮できるか
本当に助けになるのを理解できるか?
上司、顧客、仲間、家族
アーティスティックなプログラマのキモ

■まとめ
・コードは美しい
・コードはアート
・プログラマはアーティスト

誤解の蔓延
・ソフトウェア工場
・シンプルは善
・アーティストは「仕事」にならない

■質疑・応答
Q.これは美しいというコード?

A.自分で書いたコードは美しい
 GNU Emacsの中身がアーティスティックで読みにくいが、美がある
Emacs Lisp

Q.仕事の仕方
アメリカのGoogleは理想的
 ありとあらゆることが自由
 気の合う仲間とできる
 就業時間の20%は自由に使える。
 日本でもこのように出来るか?

A.エンジニアの幸せは本人が決める
 まつもとさんは5倍幸せ?
 昼飯は自分で払っている。

 東京が嫌い。
 卒業して浜松で働いていた
 同期は200人いた。
 コンピュータサイエンスは6人しかいなかった。
 大切にしてもらえた。
 東京には沢山コンピュータ会社あるから幸せではない。
 仕事は一つしかできないので、東京でも島根も一緒。

Q.好きな食べ物は何ですか?

A.かねつし?トマト(イタリア)

「気にかけてもらえると嬉しい。」もソフトウェアにもある。

Q.世の中のアーティストとはどうやって判断。

A.現実的な物。
 ソフトウェアを大切にする。
 自覚している人はほっといても学ぶし、経験する。
 コードが進んでないのを上司にどう言い訳しようか
 継続する。
 プログラミングが好きだ。

■プログラマ35歳定年説
・お詫び
 AM1時に会場変更してしまった
 デブサミはハズしたが、パソナテックのイベントとかぶった
 時間の遅れ、カウンセリングの時間をずらした

○パネラー
・まつもとさん
・修行さん
 デジタルハリウッドの講師、マーケティングなどを2年間教えて
 WEBとかシステム、映像の学生が多い

ギャクバリ 依存型ではない
 日本人があることにそれてしまう。逆に行けば勝ちます。
 文部科学省だと同じ。
 リクルートコスモス事件。〜譲渡事件。
 300人中 230人くらい
 環境の作り方がある。
 みんながやってないのをやるのがいい。
 5万円の株が一億になった。
 自分を信じてやったなぁ。

・川井さん
 
○理由
・35歳になったらプログラミングを若い人に譲ってマネジメントにしろ
・体力的には無理では?
・新しい技術はもうできないのでは 

30〜40はプログラマ人口が20代後半と比べて激減
20代は横ばい、
40代は1.8倍
IPA、30代にIT業界から他の業界に移るのはプログラマが多い。

決まり文句・・・最近ブログ書いてなくて

元プログラマは最近コード書いてなくて

35歳を超えてるのにバリバリ書いてる人会場に数名。
「心配だ」はいない。

・他の職種では、年齢によっておこるもの
 同じ仕事をするんだったら、別の子として給料安いほうがいいね

本人適正がとれれば
・人月と神話
 遅れたプロジェクトに人を投入するな
 コミュニケーションコストがかかる。
 50の力を10人集めても500にならない
 出来るプログラマはできるが、出来ないプログラマは一生出来ない。
 扱いにくい。組織として。
 スーパーなプログラマは居場所がないかも?
 
まつもとさん・・1/5は仕事して、あとはオープンソースプロジェクトで。
給料上げる派の難しい。

自分は待遇される価値は無いから伸ばせないのか、価値があるのに会社は認めてくれない。
会社は変わることがないので、会社を替える。→転職

転職がはんめ?にならない。
待遇をよく出来ない。
出来る人をどんどん流す社会にしないと価値が上がらない。

資格がなくて自分がどれくらいの能力かを測るのは難しい。
指標が困っている。
チームワーク
センスの話
場があると、モチベーションが上がっていく。
場を取りに行く。

・クラブのCTO こうのさん?
肯定視点
高度な知的労働は、歳をとっても出来る。
医者、弁護士、ユージシャン、芸術家
→経験が物を言う

医者、弁護士
そもそも国家試験に合格しなければならない
35歳を超えても出来るのは試験で選ばれてるので、生き残っている
35歳を超えても出来ない人は、見切りを付けて他のことをやった方がいい。

体力以外の部分は取り柄がない。
年齢の部分以外で出来ないのはオリである。
アルゴリズムができないと、フィールドをコピーするプログラムを沢山作る。体力勝負。
「価値を高めるには抽象的に。」
まつもとさんの知人

結構優秀だったのに、40歳になって最近コード書いてなくて・・
社会的にマネージメントになる。
エンジニアとしてあがると、マネージメントになる。
給料が上がらないので、あがるためにこっちのキャリアパスに。
昔は技術はあったのに、最近の技術にかまってられない・・

傾向との交差に30,40歳に。
どうしてソフトウェアの価値を認めてみないのか。→何故か?
マネージャが100人いないと書けない。
上級エンジニア「ソフトウェア書いたこと無い人がないです。」がいる。
この国自体に問題がある。

SEとPGの差
プロジェクトマネージャになる差ではない。
上級エンジニアの次はなに?→フェロー??

35歳後半になると、いきなりリーダになるように。
ひたすらコード書き続きたい。

楽天では複線エンジニア
CTOは30代
エンジニアでもマネージャの両方のキャリアパスを用意。

ソフトウェアの価値を見いだしてないから。

昔は物を作れば売れていた。
今は市場が変わった
 もっといいのがあるけど売りません。
 お客さんとをまとめる機能
 サービスのアップ
 お客のニーズを合わせることが出来ない

○エンジニアに対するイメージ先行
・徹夜している人
・秋葉原の人
・発注したお客さんが分かっていない。

メディアの力。

組織に従う。奴隷になる。組織し搾取されたまま。
扱いにくい人沢山より、扱いやすい人を2人の方がいい。
世間的な価値を高めるのが重要。

名前をひらがなにする
OSSを作る
田舎に住む

・まつもとさんの知り合いの厳しいエンジニア
組織に搾取されていた。
歯を食いしばって、寝ずにOSSを書いていて、それを名刺代わりにして、転職した。
OSSを作って回している。

・海外
エンジニアはエンジニアで頑張る。
やりやすいとこがある。
日本みたいに年功序列でなく、パフォーマンスよって給与が出る
パフォーマンスが下がると給与が減る
いつかあがるからという

フリーランスエンジニアが多い。
会社に属さず好きなことをする。営業に困る。

・アメリカ、有る一つの企業が一つのプロジェクト
契約が終わって解雇。
→日本ではやりにくい。

PGの状況は明るくない。

・中国のエンジニア
10人中国のエンジニアを連れてきて派遣
中部の人
すごい勉強する
「1つの知識があると幸せです」
法律でぼこっとかわるが、頭の中は変わらない。自分の家族は自分で守る自分のために勉強します。
生きるための仕事を本気でやったら凄い。
日本は生きるための危機感が薄い

○まとめ
現状は存在する
実情、そういう傾向はある
・要因
 スキル
 パフォーマンス
 構造、組織

どうするか?
→人材関係
 キャリアの作り方は色々作れる
 自分なりの自分のやり方
本・・プロフェッショナルナレッジ

一つの会社に300人がざらにある
競争率が高い。

その場何もしなくて変わらないのが怖い
昨日と同じ事をしている自分 市場価値が下がっている。
5年後どうなるか?
ローンが変わっていく

左脳系
労働の対価

右脳系
想像、0から価値を得る

将来30までに決めて欲しい
→35歳を超えて給料をもらって家族を養うのは狭き門

開発経験は有利、代え難い価値がある。
営業、本を書く、スキル

ジェネレータ
自動アプリケーション生成。
若いプログラマのトップエンジニア、趣味でプログラミングを、人間的にもいい。

他人の人生に無責任

理不尽なことを拒否しない。
→OSSか、エンジニアとしての技能を磨く

自分の人生に対して真剣に。