そのプログラム言語で何が出来る? ゆるふわプログラミングのススメ
-
Upload
koutaro-chikuba -
Category
Documents
-
view
4.645 -
download
4
description
Transcript of そのプログラム言語で何が出来る? ゆるふわプログラミングのススメ
そのプログラム言語で何が出来る?LL でゆるふわプログラミングのススメ
@mizchi
自己紹介• id: mizchi• 人科 学部 4 年 松居研究室• この勉強会の主催• はてな、 Twitter 、 Facebook とか
o めぼしいサービスには居ます• 最近古典 SF にハマってる• 意識がない学生
プログラミング歴について
• インターネットはじめたのが 8 歳o エロみてて 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 に訊け大量の公開ライブラリコーディングの楽しさに直結
• 流行りの言語はどれも似ているo 言語はお互いに影響を与えあっている
どれか覚えたら他の学習コストは半分以下o どうせなら簡単なやつで入門しろ!!!
注意 !もてはやされてる ≠ ノウハウが蓄積されてる
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 < PHP1 < 1.2 < 2 < 20 < 100
※ 実装や環境によって異なります
/ :::::::::::::::::::::::: ヾヽ . i :::::::://///::::::::::::::::::| .|::::::/ :://// i.:::::⌒⌒ ノ .|:::::/ |::::| |::/. . ヘ ヘ .|::| .⊥|.- (=・ ).-.(・= )-.|⊥ | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ l .!:; ⌒ ´. し .`⌒ ::|. l .| 仮に 100 倍だったとして、何がいけないんでしょうかね ゝ . ヘ / ィ _ノ __,. -‐ ヘ < ニ二ニ> /─- __ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ _ -‐ ''" / !\  ̄ / !\  ゙̄ー - 、 ハ /. | ヽ  ̄ ̄ /| ヽ ハ | ヽ く ! . ̄ ̄ ! .> / ! | | _> .|. .| < _ / ! .∧ ! ヽ | | / i .∧ / \ | ヽ i i / | / ハ ハ ヽ | ヽ ! ! / | /ヽ / \ | ヽ . | . | / | // \ / \ | . ヽ i i / | / - ' ヽ /, -──‐- ミ」 , ‐''二二⊃、 |/ / ̄ ̄`ヽ ! レ′  ̄ ̄ ̄ ` ー─ --- 、_ / ′二ニヽ ' \ --──┴'' ̄ ̄ ヽ |
だが……
最近のコンピュータは速い!一般的な、何かを操作するようなプログラムはナノ秒 (10-9) からマイクロ秒 (10-6 ) におさまる
人間の反応は大したことない人間が変化を認識できる時間 1/60秒 ≒ 0.017 秒(格ゲーのフレーム数 )
インターネットはさらに遅いWeb: 通信の遅延 0.01 ~ 0.5 秒 (光速 30万 km/s の限界 ) ......... プログラム自身の実行速度なんて誤差では
速い言語を検討すべきタイミング • アルゴリズムに工夫するべきところはないか?
o お前のプログラムが遅いのはお前の実装が糞だから! 「データ構造とアルゴリズム」を学びましょうほとんどの計算爆発は指数関数的に増加する
• 一回しか使わないなら丸一日かかってもいいo 寝て起きて終わってるなら、寝ろo だいたいは実行途中でもっといいやり方思いつく
通信レイテンシや人間の反応速度を超えたときに考えればよくてしばらくはそんなプログラム書かないから 安心してメモリを食い潰せ!!!!
=> 適材適所が望ましい
ウェブプログラマの間では LL は流行っている実行速度は通信の遅延で無視できる
ゲーム開発では C/C++実行速度が速いほどたくさんのエフェクトを計算できる少ないメモリにデータを圧縮して、どれだけ早く計算するか、という世界
LL が速度を犠牲にして得たもの対話インタプリタ 対話的に 1 行ずつ実行出来るよっ!
動的型付 何を代入したかで型が決まるなら型の宣言いらなくね?
モダンなオブジェクト指向 後発だけに洗練されたものがほとんど
ガベージコレクション ( GC ) メモリ管理は言語側が勝手にやってくれるよ!
対話インタプリタで高速フィードバック学習
mizchi-mba:mzi%[~] ipython -cl>>> 3+5/10 3 # 期待通りの結果じゃない>>> 3+5.0/103.5 # 小数の割り算であることを明記したので解決>>> obj = ["hoge","fuga"] # リスト型のオブジェクトを宣言>>> obj.length # Java では配列長は length だったなーと思いつつ実行すると------------------------------------------------------------Traceback (most recent call last): File "<ipython console>", 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
以上、ご清聴ありがとうございました!