• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
そのプログラム言語で何が出来る? ゆるふわプログラミングのススメ
 

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

on

  • 4,638 views

 

Statistics

Views

Total Views
4,638
Views on SlideShare
4,636
Embed Views
2

Actions

Likes
3
Downloads
6
Comments
0

1 Embed 2

https://twitter.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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