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

39
そそそそそそそそそそそそそそそLL そそそそそそそそそそそそそそそそ @mizchi

description

 

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

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

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

@mizchi

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

自己紹介• id: mizchi• 人科 学部 4 年 松居研究室• この勉強会の主催• はてな、 Twitter 、 Facebook とか

o めぼしいサービスには居ます• 最近古典 SF にハマってる• 意識がない学生

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

プログラミング歴について

• インターネットはじめたのが 8 歳o エロみてて PC 没収されたのが 13 歳

• プログラミングはじめたのが大学 1 年夏• 主に Python / Javascript• ブラウザいじりが趣味 (Firefox/Chrome)• エディタいじりが好き (Emacs/Vim)• 研究で Kinect いじってる• C/C++ レイヤーはわかりません!

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

この勉強会の主旨建前人科のプログラミングぢから高めたい!

本音自分が ( たぶん ) 院に進学するのであと数年 3 年はこのキャンパスにいる

=> プログラミング趣味の人がいないと寂しい

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

質問

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

あなたのプログラミングへのモチベーションに、

明確な目標がありますか?

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

たとえば………Windows アプリ開発がやりたい

Mac の GUI アプリ、 iPhone アプリ開発がやりたい

Android アプリ開発がやりたい

3D の派手なグラフィックのゲーム開発がやりたい

ブラウザ向けの拡張開発がやりたい

etc...

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

たとえば………Windows アプリ開発がやりたい => C/Win32API 、 C#/.NetFramework やれMac 、 iPhone アのプリ開発がやりたい => ObjectiveC/Cocoa やれ

Android アプリ開発がやりたい => Java やれ

3D の派手なグラフィックのゲーム開発がやりたい => C/C++/OpenGL やれ

ブラウザ向けの拡張開発がやりたい => Javascript やれ

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

該当する人、あなたへの発表は以上!

ありがとうございました!

次の発表をお待ちください (^q^)

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

今日の発表は………とりあえず興味あるよ!とか

目標あるけど漠然と何やっていいかわからない、とか

とりあえずプログラミングできたらかっこいいじゃん?とか

そういう人向けのギーク入門講座です

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

ギークとはコンピュータやインターネット技術に時間を費やし、深い知識を有する者

                         (by wikipedia)

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

思いつき駆動開発こういうの欲しいな、と思ったとき、その場で適当にプログラム作っちゃうような、そんなスキルがあったら嬉しい

それができればコンピュータの中で神になる!

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

手足のように酷使できる言語をなにか 1 つ持ちましょう

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

では、

万能のプログラミング言語

とは?

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

ねぇよ、んなもん同じ計算資源を使う以上、何かを犠牲にして何かを得るわけで……

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

流行りの言語は お嫌いですか ?

■■■■■■■

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

人気がある言語を使えネット上に大量のコードサンプルググって解決するという安心感が大事俺に訊くな Google に訊け大量の公開ライブラリコーディングの楽しさに直結

• 流行りの言語はどれも似ているo 言語はお互いに影響を与えあっている

どれか覚えたら他の学習コストは半分以下o どうせなら簡単なやつで入門しろ!!!

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

注意 !もてはやされてる ≠ ノウハウが蓄積されてる

NodeJS , Scala , Go など、流行る兆しはあるが頻繁な仕様変更とバージョン依存が多くて魔窟言語本体のソース読め!な世界 安定稼働で 2,3 年は必要

言語だけじゃなくて「最新フレームワーク」も

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

Native vs Light Language

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

プログラム言語は( 超大雑把には )   二つしかない!

読み書きしにくい &  速度が早いvs

読み書きしやすい &  速度が遅い

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

読み書きしにくい &  速度が早いC /C++ / Java …

☓   速度が早い◯ コーディング時に最適化せざるを得ない

コンピュータが 理解しやすい 人間を犠牲にして 実行速度を求める!

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

読み書きしやすい &  速度が遅いRuby / Python / Perl / PHP …         LL (Light Language,   軽量言語 )

☓   読み書きしやすい ◯ データ構造がゆるふわ

計算速度を犠牲にして、最適化しないかわり「なんかそれっぽいの」を許す

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

◆ 超大雑把な実行速度比較C < C++ < Java <<(LL の壁 )<< Perl, Ruby, Python <  PHP1  <  1.2  <  2   <                             20                    < 100

※ 実装や環境によって異なります

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

                  / :::::::::::::::::::::::: ヾヽ                  . i :::::::://///::::::::::::::::::|                   .|::::::/ :://// i.:::::⌒⌒ ノ                  .|:::::/      |::::|                   |::/.   . ヘ   ヘ .|::|                  .⊥|.- (=・ ).-.(・= )-.|⊥     | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄                  l   .!:;   ⌒ ´. し .`⌒ ::|. l    .|  仮に 100 倍だったとして、何がいけないんでしょうかね                  ゝ . ヘ        / ィ   _ノ                 __,. -‐ ヘ  < ニ二ニ>   /─- __ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄            _   -‐ ''"     /   !\  ̄ / !\     ゙̄ー - 、          ハ       /.    | ヽ  ̄ ̄ /|   ヽ        ハ          |   ヽ      く     ! . ̄ ̄  !     .>        /   !            |    |       _>   .|.      .|    < _       /    !           .∧    !     ヽ     |      |      /      i    .∧         /  \  |      ヽ    i      i     /       |  / ハ        ハ   ヽ |      ヽ    !     !    /       |    /ヽ       /   \   |       ヽ .    |   .    |   /        |   // \      /      \  |        . ヽ  i     i   /          | / - '     ヽ      /,   -──‐- ミ」         , ‐''二二⊃、       |/   / ̄ ̄`ヽ !     レ′   ̄ ̄ ̄ ` ー─ --- 、_ /  ′二ニヽ '  \ --──┴'' ̄ ̄ ヽ   | 

だが……

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

最近のコンピュータは速い!一般的な、何かを操作するようなプログラムはナノ秒 (10-9) からマイクロ秒 (10-6 ) におさまる

人間の反応は大したことない人間が変化を認識できる時間 1/60秒 ≒ 0.017 秒(格ゲーのフレーム数 )

インターネットはさらに遅いWeb:  通信の遅延 0.01 ~ 0.5 秒 (光速 30万 km/s の限界 )      ......... プログラム自身の実行速度なんて誤差では

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

速い言語を検討すべきタイミング • アルゴリズムに工夫するべきところはないか?

o お前のプログラムが遅いのはお前の実装が糞だから! 「データ構造とアルゴリズム」を学びましょうほとんどの計算爆発は指数関数的に増加する

• 一回しか使わないなら丸一日かかってもいいo 寝て起きて終わってるなら、寝ろo だいたいは実行途中でもっといいやり方思いつく

通信レイテンシや人間の反応速度を超えたときに考えればよくてしばらくはそんなプログラム書かないから 安心してメモリを食い潰せ!!!!

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

=> 適材適所が望ましい

ウェブプログラマの間では LL は流行っている実行速度は通信の遅延で無視できる

ゲーム開発では C/C++実行速度が速いほどたくさんのエフェクトを計算できる少ないメモリにデータを圧縮して、どれだけ早く計算するか、という世界

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

LL が速度を犠牲にして得たもの対話インタプリタ 対話的に 1 行ずつ実行出来るよっ!

動的型付 何を代入したかで型が決まるなら型の宣言いらなくね?

モダンなオブジェクト指向 後発だけに洗練されたものがほとんど

ガベージコレクション ( GC ) メモリ管理は言語側が勝手にやってくれるよ!

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

対話インタプリタで高速フィードバック学習

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 が持ってるメソッドの候補が!

コマンドライン上でガンガン実行対話インタプリタで実行 => コードに反映 のサイクルを回す「習うより慣れろ」

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

ところで、 LL の読み書きしやすさってなんだ?

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

趣味

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

歴史が長くコンピュータに最適化された C/C++  OS の差異を吸収して安定稼働する Java  ………

という棲み分けに対して

LL には「僕の考えた最強のプログラミング言語」 がたくさんある

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

色々触って自分が好きなのを選べばいい

人気なのは Ruby Perl Python PHP

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

LL の紹介

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

◆Ruby開発者:まつもとゆきひろ特徴「多様性は善」という考えで、自由な書き方が出来るPerl と関数型言語 lisp の影響が強い。開発拠点が日本で、日本語の情報が多い。日本語書籍も。Ruby on Rails というフレームワークが有名

公開ライブラリ : rubygemsインタプリタ : irb

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

◆Python開発者: Guido van Rossum (Google)特徴「多様性は悪」 記法が単純で、誰が書いても似たようなコードになる。結果として簡潔かつ、可読性が非常に高い。世界的には Ruby より使用者が多い。日本だとマイナー。「入門自然言語処理」「集合知プログラミング」など、オライリー出版社のサンプルコードは Python が増えてきた。

公開ライブラリ : PYPI

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

◆Perl日本で著名な Perl ハッカー:小飼弾 ( dankogai )   宮川達彦 ( miyagawa )

特徴テキスト処理に強い。 LL としては歴史が古く、 CPAN という公開ライブラリが有名。ハッカー文化が根強い。最近は Ruby と Python に押され気味。 mixi/Livedoor/ はてな等、ちょっと前の ITベンチャーはみんな Perl だった。

公開ライブラリ : CPAN

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

◆PHP著名なプロダクトWordPress ( ブログエンジン )PukiWiki ( ウィキ )

特徴ウェブに特化した言語。 HTML に埋め込むような形式で使われる。平易な文法で、少しの設定で簡単にウェブ開発が始められるため人気がある。最近の ITベンチャーでは、 PHP の需要が圧倒。 GREE等が有名。

公開ライブラリ : PEAR

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

以上、ご清聴ありがとうございました!