まつもとゆきひろが語る「ビューティフルコード」×「プログラマ35歳定年説」 聴講記

まつもとゆきひろが語る「ビューティフルコード」×「プログラマ35歳定年説」に行ってきた。
内容、発言等で間違い等あれば修正しますのでご指摘を。

入場

人の入りはだいたい70〜80人程度。
裏で「Webデベロッパの祭典+ちょっとアキバ気分で。」がやっているので、エンジニアが分散したかもしれない。

第一部「ビューティフルコード」

Matz自己紹介

普段はネタを使い回すことが多いが、川井さんに頼まれたんで今日は新ネタを持ってきた。

コードの美とは?
  • コードとはなにか
  • ソフトウェアは美しいのか
コードは工業製品ではない

よくある誤解

  • ソフトウェア工場
  • 大量生産しない
  • コピーは一瞬
コード=設計 (not 生産)
  • 職人芸
  • 一品もの
  • 善し悪しがある→工業製品生産とは違うことを無視されがち
コードは実用品
  • 実用に供してナンボ
  • 用の美→茶器みたいなもの
コードは読み物
  • TwitterPostだろうが、OSのコア部分だろうが、自由に読める!
  • ベーマガネタ→自分な好きなように改造してBASICを覚える時代があった
  • 優れたプログラマは漏れなくソースコードを読むのがすき
パワーの美
  • 「できない」を「できる」に
  • アルゴリズムの力→処理速度が100倍、1000倍に!
計算量
  • O(1)
  • O(n)
  • O(n*log(n))
  • O(n-2)

ソートアルゴリズム

不可能を可能に

Rubyの文字列処理

  • 当初:SJIS+EUC
  • 1999年:UTF-8に対応(Matzは対応が難しいと思っていたが、吉田氏がパッチを)
  • →M17N
  • Matz<メジャー言語で内部でUnicodeに変換していないのはRubyぐらい
効率の美
  • 生産性
  • 簡潔さ
簡潔さは力なり

「Succintness is Power」 (Paul Graham)

簡潔さは力?
  • Brooksの生産性不変の法則
  • 本質に集中できる
  • 実行可能擬似言語

JavaのHelloWorld

class Sample {
    public static void main(String[] args) {
      System.out.println("HelloWorld!");
    }
}

Rubyでは・・・

puts "HelloWorld!"
冗長の排除
  • DRY(Don't Repeat Yourself)

Matz<昔?はソースの行数で仕事量を計っていた

DRY
class User < ActiveRecord::Base
end
怠惰のための勤勉
  • 手抜きは美しくない
  • 苦労を見せびらかすのは粋じゃない
水鳥のごとく
  • 水上は優雅に
  • 水面下では懸命に
現実は複雑だ
  • ソフトウェアも複雑
  • 避けがたい現実
  • 現実を直視する
人の心は単純じゃない
  • 単純さが好き⇔複雑さも好き
  • 簡単な問題がいい⇔難しい問題がいい
人間にフォーカス
  • 思いやりはうれしい
  • 優しいものは美しい
  • 人間のためのソフトウェア
バランス
  • 用は人間がどう感じるか
  • 唯一の正解がない
  • 非理系的
思考の流れ

○をして、〜して、〜する
Rubyでの例

puts ARGF.each.take(n)

Haskellでの例

main = do cs < - getContents
  putStr (unlines (take n lines cs))
  • 人間がどう感じるか
  • 人間は進化する
  • 新たな知識
  • 慣れ
  • 最適化
人間を進化させる
  • 現状に安住するより前向きに進みたい
  • 長い目で見た効率
内面の美
コードはアートだ
  • 人間のために
  • 製品ではなく作品
プログラマ=アーティスト?
  • アートを作る人
  • 自覚があるか
アーティストとは?
  • 作業員ではない
  • 歯車ではない
  • 創造的
  • 自発的
(そうはいっても・・・)エンジニア+アーティスト

○考慮すべきこと

  • 納期
  • 顧客
  • チーム
アーティストの条件
  • 自覚
  • 自発
  • プログラマ一人一人がアーティストであってほしい
美しいコード

○理解に基づいたコード

  • 人間(外面の美)
  • 機械(外面の美)
「理解」が鍵
  • どれだけ知っているか
  • どれだけ理解できるか
  • どれだけ考慮できるか
まとめ

○美しいコード

  • コードは美しい
  • コードはアート
  • プログラマはアーティスト

○誤解の蔓延を打破しよう

  • ソフトウェア工場
  • シンプルは善
  • アーティストは「仕事」にならない

質疑応答

今まで見た中で美しいと思ったコードは?
  • 自分の書いたコードw
  • Emacs(正直読みにくいが美があると思う)
Googleみたいな会社(例えば20%ルール)を日本で作るためのアイディアとかありますか?
  • エンジニアの幸せは自分の基準で決めること(絶対的な基準は無い)
  • 例えばGoogleは20%しか好きなことできないけど、僕は100%好きなことやってます
  • 自分の能力が必要とされているところにつとめるのが良いのでは(最初の会社でプログラミング工学を学んだ新卒が少なくて重宝された)
  • 逆張りをすることで幸せになれるかもしれないですよ?(仕事が多い東京にきたからってプログラマとして幸せになれるとは限らない!)
好きな食べ物は?(会場笑)
  • 加熱したトマトが好きなんで、イタリア料理なんかが好きですね
アーティストはセンスが必要だと思うが、プログラマのセンスとは?
  • プログラミングが好きだという自覚(誰かに強制されるのではなくて、自発的に勉強、行動すること)

第二部「プログラマ35歳定年説を切る!」

全部は追い切れないので、重要と思ったやりとりを中心に

登壇者
  • Matz
  • ジェイブレイン 修行氏
  • ウェブキャリア 川井氏
プログラマ35歳定年説〜よく言われる理由
  • 後進に道を譲り、管理をするように会社に言われる
  • 35歳で知力、体力の限界がくる
現状
  • 40以降で生き残ったプログラマは給料が1.8倍にはなっている
  • IT業界から違う業界に流れている
  • Matz<まず、この3人の中で僕が一番年上と言うことに驚愕w
  • 体感としては事実であるとは感じている(友人、知人などの状況を垣間見て)
挙手質問
  • 35を過ぎてプログラマしている人→結構いる→このセミナーの意味無いんじゃねw
  • 30を過ぎて不安に思っている人→そこそこいる
日本の会社、給与制度
  • 年齢が上がるとともに総合職、管理職みたいになっていく
  • Matz<実際に(35歳でプログラマを続けるのは困難と)感じている人がいるという事実は怖い
  • ブルックスの法則の話
  • 人がいっぱいいてもコミュニケーションロスが生まれる→いまだに理解している管理者が少ないのでは?
  • Matz<そういう待遇をうけている人は会社を移るべき。転職してもマイナスになりにくい職業。もっと転職して、淘汰を促すべきでは。
  • 川井氏<資格が無い→客観的な評価がわかりづらい
  • 修行氏<この業界も評価が難しい。「あの人はがんばっている」など曖昧な評価になりがち
  • 修行氏<センスの話もあるが、自分の市場価値を上げる方法が必要なのでは
  • 川井<仙石(KLabのCTO)さんの話プログラマの35歳は、医師や弁護士の国家試験みたいなものでは?→むしろ向かない人は35歳で管理に回るべき」
  • Matz<大筋で同意なんだが、周りにも優秀なエンジニアでも40過ぎで「最近コード書いていない」みたいな人も多い→立場が管理者になっている
  • Matz<なぜ日本ではソフトウェア開発の価値は認めてもらえないのか??
  • Matz<「ソフトウェアを書いたことがない上級エンジニア」とやらがいるのはおかしい
  • Matz<プログラマの上級職が無いのが問題・・・フェロー?(場内爆笑)
なぜプログラマの価値が認められないのか?
  • Matz<会社の経営者が価値を認めてくれないのが問題
  • Matz<物言えるプログラマが出てこないと駄目
  • 修行氏<IT業界は技術が陳腐化しやすい→常にフォローする必要がある
  • 修行氏<自分の価値をいっそう上げる行動も必要だろう
  • 川井氏<プログラマの世間のイメージが悪い(スーパーハカー、アキバ系...)→発注しているお客さんに仕事の内容が理解されない
  • 川井氏<例えば月9でキムタクがプログラマやるとか、漫画とかにスーパープログラマ出すとかイメージ戦略も必要では。
  • Matz<自分で行動しないと変化が起きない
  • Matz<世間的な価値を高めていく行動の積み重ねが必要!
  • Matz<実例:「オープンソースを作る→名刺代わりに売り込み→もっと待遇の良い会社に転職」
  • 川井氏<会社の仕事のみにとらわれないことが重要
海外のプログラマ
  • 川井氏<海外ではどうなんです?
  • Matz<日本よりはやりやすい
  • Matz<年功序列ではなく、パフォーマンスに対して給料が出る(下がることもある)
  • Matz<フリーランスが多いこともある
  • 川井氏<日本でもフリーランス多いですよね?
  • Matz<日本のフリーランスは海外とはちょっと違う
  • Matz<海外ではプロジェクト単位で仕事。(日本では派遣の延長?)
エンジニアへのアドバイス
  • 川井氏<修行さんはエンジニアにどんなアドバイスをしているんです?
  • 修行氏<例えば、中国のエンジニアはすごく勉強する人が多い
  • 修行氏<なぜ?と聞くと、「頭の中に入った技術は奪われないですから」(共産主義・・・)
  • 修行氏<もっと向上する意識を日本のエンジニアが持つことも大切なのでは
まとめ
  • 35歳定年説は存在する
  • 個人よりも日本の組織体質に原因がある

○打破するためには (※TrinityT自身での勝手なまとめです)

  • 自分のやりたいことができない、キャリアパスが無い会社ならば転職も視野に
  • 会社に頼っていたのでは駄目。とにかく自ら行動。勉強。
補足
  • 修行氏<転職は大変になっている。競争率がすごい上がっている。
  • 修行氏<去年と同じことをやっていたのでは抜かれる=市場価値が落ちていると認識した方が良い
  • 川井氏<30歳までには自分の方向性きめるべき→無理してプログラマを選ぶ必要はない
  • 川井氏<開発の経験をするのはほかの職業に比べても価値がある
  • 川井氏<20代前半の若いエンジニアの考え方はかなり進んでいる。
  • Matz<自分の人生は他人に決められない
  • Matz<他の人と同じことをしないこと(茨の道かもしれないが)

感想

第一部
  • アーティストとしてのプログラマという意見は身にしみた。最近職業プログラマっぽくなっている自分に猛省。
  • もう少しソースを追おう。
  • 余談だが、まだコード行数で工数見積もっている会社はある気がする。。。
  • なぜ彼女はMatzの好きな食べ物を聞きたかったんだろうか・・・
第二部
  • 川井氏の「ドラマでプログラマ」については、このようにすでに実現されているが、内容は・・・ドラマの作り手の意識は今もこんな感じだろうから難しいか。。。
  • 修行氏の中国のエンジニアの話はすごく刺激的。中国の人は母数が多いこともあるので、日本人も安穏としてられない。

最後に、関係者の皆さん、お疲れ様でした!