そのプログラム言語で何が出来る? ゆるふわプログラミングのススメ

5,358
-1

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,358
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
7
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

そのプログラム言語で何が出来る? ゆるふわプログラミングのススメ

  1. 1. そのプログラム言語で何が出来る? LL でゆるふわプログラミングのススメ @mizchi
  2. 2. 自己紹介 <ul><ul><li>id: mizchi </li></ul></ul><ul><ul><li>人科 学部 4 年 松居研究室 </li></ul></ul><ul><ul><li>この勉強会の主催 </li></ul></ul><ul><ul><li>はてな、 Twitter 、 Facebook とか </li></ul></ul><ul><ul><ul><li>めぼしいサービスには居ます </li></ul></ul></ul><ul><ul><li>最近古典 SF にハマってる </li></ul></ul><ul><ul><li>意識がない学生 </li></ul></ul>
  3. 3. プログラミング歴について <ul><ul><li>インターネットはじめたのが 8 歳 </li></ul></ul><ul><ul><ul><li>エロみてて PC 没収 されたのが 13 歳 </li></ul></ul></ul><ul><ul><li>プログラミングはじめたのが 大学 1 年夏 </li></ul></ul><ul><ul><li>主に Python / Javascript </li></ul></ul><ul><ul><li>ブラウザいじりが趣味 (Firefox/Chrome) </li></ul></ul><ul><ul><li>エディタいじりが好き (Emacs/Vim) </li></ul></ul><ul><ul><li>研究で Kinect いじってる </li></ul></ul><ul><ul><li>C/C++ レイヤーはわかりません! </li></ul></ul>
  4. 4. この勉強会の主旨 建前 人科のプログラミングぢから高めたい! 本音 自分が ( たぶん ) 院に進学するので あと数年 3 年はこのキャンパスにいる => プログラミング趣味の人がいないと寂しい
  5. 5. 質問
  6. 6. あなたのプログラミングへの モチベーションに、 明確な目標 がありますか?
  7. 7. たとえば……… Windows アプリ開発がやりたい  Mac の GUI アプリ、 iPhone アプリ開発がやりたい  Android アプリ開発がやりたい  3D の派手なグラフィックのゲーム開発がやりたい ブラウザ向けの拡張開発がやりたい  etc...
  8. 8. たとえば……… Windows アプリ開発がやりたい  => C/Win32API 、 C#/.NetFramework やれ Mac 、 iPhone アのプリ開発がやりたい  => ObjectiveC/Cocoa やれ Android アプリ開発がやりたい  => Java やれ 3D の派手なグラフィックのゲーム開発がやりたい   => C/C++/OpenGL やれ ブラウザ向けの拡張開発がやりたい  => Javascript やれ
  9. 9. 該当する人、あなたへの発表は 以上!  ありがとうございました!  次の発表をお待ちください (^q^)
  10. 10. 今日の発表は……… とりあえず興味あるよ!とか 目標あるけど漠然と何やっていいかわからない、とか とりあえずプログラミングできたらかっこいいじゃん?とか そういう人向けの ギーク入門 講座です
  11. 11. ギークとは コンピュータやインターネット技術に 時間を費やし、深い知識を有する者                           (by wikipedia)
  12. 12. 思いつき駆動開発 こういうの欲しいな、と思ったとき、 その場で適当にプログラム作っちゃうような、 そんなスキルがあったら嬉しい それができれば コンピュータの中で神になる!
  13. 13. 手足のように酷使できる言語を なにか 1 つ持ちましょう
  14. 14. では、 万能のプログラミング言語                  とは?
  15. 15.    ねぇよ、んなもん 同じ計算資源を使う以上、 何かを犠牲にして何かを得るわけで……
  16. 16.   流行りの言語は         お嫌いですか ? ■■■■■■■
  17. 17. 人気がある言語 を使え ネット上に大量のコードサンプル ググって解決するという安心感が大事 俺に訊くな   Google に訊け 大量の公開ライブラリ コーディングの 楽しさ に直結 <ul><ul><li>流行りの言語はどれも似ている </li></ul></ul><ul><ul><ul><li>言語はお互いに影響を与えあっている </li></ul></ul></ul><ul><ul><ul><ul><li>どれか覚えたら他の学習コストは半分以下 </li></ul></ul></ul></ul><ul><ul><ul><li>どうせなら簡単なやつで入門しろ!!! </li></ul></ul></ul>
  18. 18. 注意 ! もてはやされてる  ≠  ノウハウが蓄積されてる NodeJS , Scala , Go など、流行る兆しはあるが 頻繁な仕様変更とバージョン依存が多くて 魔窟 言語本体のソース読め!な世界   安定稼働で 2,3 年は必要 言語だけじゃなくて「最新フレームワーク」も
  19. 19. Native vs Light Language
  20. 20. 読み書きしにくい   &  速度が早い vs 読み書きしやすい   &  速度が遅い プログラム言語は ( 超大雑把には )   二つしかない!
  21. 21. 読み書きしにくい &  速度が早い C /C++ / Java … ☓   速度が早い ◯ コーディング時に最適化せざるを得ない コンピュータが   理解しやすい   人間を犠牲にして  実行速度を求める!
  22. 22. 読み書きしやすい   &  速度が遅い Ruby / Python / Perl / PHP …          LL (Light Language,   軽量言語 ) ☓   読み書きしやすい   ◯ データ構造がゆるふわ 計算速度を犠牲にして、最適化しないかわり 「 なんかそれっぽいの 」を許す
  23. 23. ◆ 超大雑把な実行速度比較 C < C++ < Java <<(LL の壁 )<< Perl, Ruby, Python <  PHP 1  <  1.2  <  2   <                             20                    < 100 ※ 実装や環境によって異なります
  24. 24.                   / :::::::::::::::::::::::: ヾヽ                   . i :::::::://///::::::::::::::::::|                    .|::::::/ ::////⌒⌒ i.::::: ノ                   .|:::::/          |::::|                    |::/.   . ヘ   ヘ .|::|                   .⊥|.- (=・ ).-.( ・= )-.|⊥     |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄                   l   .!:;   ⌒ ´. し . `⌒ ::|. l    .|   仮に 100 倍だったとして、何がいけないんでしょうかね                   ゝ . ヘ        / ィ   _ ノ                  __,. -‐ ヘ  < ニ二ニ >   /─- __  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄             _   -‐ ''&quot;     /   ! \  ̄ / ! \     ゙̄ー - 、           ハ       /.    | ヽ  ̄ ̄ /|   ヽ        ハ           |   ヽ      く     ! .  ̄ ̄  !     .>        /   !             |    |       _ >   .|.      .|    < _       /    !            .∧    !     ヽ     |      |      /      i    .∧          /  \  |      ヽ    i      i     /       |  / ハ         ハ   ヽ |      ヽ    !     !    /       |    /ヽ        /   \   |       ヽ .    |   .    |   /        |   // \       /      \  |        . ヽ  i     i   /          | / - '     ヽ       /,   -──‐- ミ」         , ‐'' 二二⊃、       |/   / ̄ ̄`ヽ !      レ′   ̄ ̄ ̄ ` ー─ --- 、_ /  ′二ニヽ '  \ --──┴''  ̄ ̄ ヽ   |  だが……
  25. 25. 最近のコンピュータは速い! 一般的な、何かを操作するようなプログラムは ナノ秒 ( 10 -9 ) から マイクロ秒 ( 10 -6 ) におさまる 人間の反応は大したことない 人間が変化を認識できる時間 1/60 秒 ≒ 0.017 秒 ( 格ゲーのフレーム数 ) インターネットはさらに遅い Web:   通信の遅延 0.01 ~ 0.5 秒   ( 光速  30 万 km/s の限界 )       ......... プログラム自身の実行速度なんて誤差では
  26. 26. 速い言語 を検討すべきタイミング    <ul><ul><li>アルゴリズムに工夫するべきところはないか? </li></ul></ul><ul><ul><ul><li>お前のプログラムが遅いのは お前の実装が糞だから! </li></ul></ul></ul><ul><ul><ul><ul><li>  「データ構造とアルゴリズム」を学びましょう </li></ul></ul></ul></ul><ul><ul><ul><ul><li>ほとんどの計算爆発は指数関数的に増加する </li></ul></ul></ul></ul><ul><ul><li>一回しか使わないなら 丸一日かかってもいい </li></ul></ul><ul><ul><ul><li>寝て起きて終わってるなら、 寝ろ </li></ul></ul></ul><ul><ul><ul><li>だいたいは実行途中でもっといいやり方思いつく </li></ul></ul></ul><ul><li>通信レイテンシや人間の反応速度を超えたときに考えればよくて </li></ul><ul><li>しばらくはそんなプログラム書かないから </li></ul><ul><li>            安心してメモリを食い潰せ!!!! </li></ul>
  27. 27. => 適材適所が望ましい ウェブプログラマの間では LL は流行っている 実行速度は通信の遅延で無視できる ゲーム開発では C/C++ 実行速度が速いほどたくさんのエフェクトを計算できる 少ないメモリにデータを圧縮して、どれだけ早く計算するか、という世界
  28. 28. LL が速度を犠牲にして得たもの 対話インタプリタ   対話的に 1 行ずつ実行出来るよっ! 動的型付   何を代入したかで型が決まるなら型の宣言いらなくね? モダンなオブジェクト指向   後発だけに洗練されたものがほとんど ガベージコレクション ( GC )   メモリ管理は言語側が勝手にやってくれるよ!
  29. 29. 対話インタプリタで高速フィードバック学習 mizchi-mba:mzi%[~] ipython -cl >>> 3+5/10  3   # 期待通りの結果じゃない >>> 3+5.0/10 3.5 # 小数の割り算であることを明記したので解決 >>> obj = [&quot;hoge&quot;,&quot;fuga&quot;]   # リスト型のオブジェクトを宣言 >>> obj.length # Java では配列長は length だったなーと思いつつ実行すると ------------------------------------------------------------ Traceback (most recent call last):   File &quot;<ipython console>&quot;, line 1, in <module> AttributeError: 'list' object has no attribute 'length'   # エラー理由 「 list は length の attribute を持たない」 >>> len(obj) # python で配列長が欲しい場合は len() を使う、などとググるなどして情報を得る 2 >>> obj.re  # ここまで入力して、 e の次に <tab> を入力して補完しようとすると… obj.remove   obj.reverse   # obj が持ってるメソッドの候補が! コマンドライン上でガンガン実行 対話インタプリタで実行 => コードに反映 のサイクルを回す 「習うより慣れろ」
  30. 30. ところで、 LL の 読み書きしやすさってなんだ?
  31. 31. 趣味
  32. 32. 歴史が長くコンピュータに最適化された C/C++   OS の差異を吸収して安定稼働する Java  ……… という棲み分けに対して LL には 「僕の考えた最強のプログラミング言語」                      がたくさんある
  33. 33. 色々触って自分が好きなのを選べばいい 人気なのは Ruby Perl Python PHP
  34. 34. LL の紹介
  35. 35. ◆ Ruby 開発者 :まつもとゆきひろ 特徴 「多様性は善」という考えで、自由な書き方が出来る Perl と関数型言語 lisp の影響が強い。 開発拠点が日本で、日本語の情報が多い。日本語書籍も。 Ruby on Rails というフレームワークが有名 公開ライブラリ : rubygems インタプリタ   : irb
  36. 36. ◆ Python 開発者 : Guido van Rossum (Google) 特徴 「多様性は悪」 記法が単純で、誰が書いても似たようなコードになる。結果として簡潔かつ、可読性が非常に高い。 世界的には Ruby より使用者が多い。日本だとマイナー。 「入門自然言語処理」「集合知プログラミング」など、オライリー出版社のサンプルコードは Python が増えてきた。 公開ライブラリ   : PYPI
  37. 37. ◆ Perl 日本で著名な Perl ハッカー : 小飼弾 ( dankogai )    宮川達彦 ( miyagawa ) 特徴 テキスト処理に強い。 LL としては歴史が古く、 CPAN という公開ライブラリが有名。ハッカー文化が根強い。最近は Ruby と Python に押され気味。  mixi/Livedoor/ はてな等、ちょっと前の IT ベンチャーはみんな Perl だった。 公開ライブラリ   : CPAN
  38. 38. ◆ PHP 著名なプロダクト WordPress ( ブログエンジン ) PukiWiki ( ウィキ ) 特徴 ウェブに特化した言語。 HTML に埋め込むような形式で使われる。平易な文法で、少しの設定で簡単にウェブ開発が始められるため人気がある。最近の IT ベンチャーでは、 PHP の需要が圧倒。 GREE 等が有名。 公開ライブラリ   : PEAR
  39. 39. 以上、ご清聴 ありがとうございました!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×