プログラマになれない あなたのための言語戦略
Present by ぱろっと(@parrot_studio)
for Gunma.web #7 @ 2011/12/17
Profile:
ぱろっと
@parrot_studio
parrot-studio.com
ところで・・・ by the way...
比較的「言語」寄りの
プレゼンが多い私ですが・・・
プログラミング言語は山ほどある
from: http://news.mynavi.jp/news/2011/11/14/012/
キーワードもいろいろ(´・ω・)っ
コンパイル / インタプリタ / 中間コード / VM
手続き型 / オブジェクト指向 / 関数型
クラス / プロトタイプ / 多重継承
無名関数 / クロージャ / デリゲート
“何を言ってるのか
さっぱりわからない・・・(lll゚Д゚)”
とはいえ、Webで仕事をするなら、
「各言語の大雑把な特徴」
くらいは知っていた方がお得
そう、プログラマでなくても(`・ω・´)
というわけで・・・ with the reason to say...
“私が読んだり書いたりしたことがあり、
Webシステムで使われている言語”
だからPythonとか
GoとかDartとか
APLはないのよ(´・ω・`)
これを「7つ」見ていきましょう
1. Perl
事例 : mixi / hatena
自作 : ダイス機能付きチャット
1. Perl
・ 軽量言語(LL)としては古い部類
・ Webの黎明期を支えた重要な言語
・ Linuxに入ってないことがまずない
1. Perl
・ なんだかんだで技術者がたくさん
・ 自分もWeb系言語では最初に触れた
1. Perl
・ 「フリーでのスクリプト配布」
という文化があった
・ OSSとはまた違う感覚
1. Perl
・ 古い言語だがフレームワークが
きっちり整備されている
・ 今でもやってる人が多いということ
2. Java
事例 : ECサイトや基幹システム等
Androidアプリ
自作 : ギルド戦出欠管理システム for RO
2. Java
・ 特にSI系で根強い
・ 大規模開発に「都合の良い」仕様
・ クリティカルな性能要求にも対応可
2. Java
・ 利用者数ではTOPクラス
・ なんだかんだで実績がある
・ なんだかんだで安定して速い
2. Java
・ 一般のWeb系も無縁ではない
・ Apacheのプロジェクトで使われまくり
・ Androidアプリ開発言語としても
3. Ruby
事例 : Twitter / cookpad / R天
自作 : RDGC / Fragment of Stars / etc...
3. Ruby
・ 新しめの会社がよく使っている
・ スタートアップでRailsとかありがち
・ 「とりあえず動くもの」が作りやすい
3. Ruby
・ その気になればなんでもできる
・ 「全て」がプログラマに解放されている
・ 時に「黒魔術」と称されることも
3. Ruby
・ 「あるべき姿」を常に追求するため、
仕様変更がそれなりにある
・ 1.8のコードはたいてい1.9では動かない
3. Ruby
・ これらの特徴から、Java屋というか
SI系で嫌われる感
・ 「なんでもできてしまう」のが都合が悪い
・ 実際は採用実績もある
4. PHP
事例 : Facebook / Wikipedia
WordPress系 / OpenPNE系
4. PHP
・ 「技術がっつりじゃない人」も
触れることが多い言語
・ CMS等でよく使われているため
4. PHP
・ レンタルサーバだと、
最初から入っているケースが
・ WP一式がプリインストールというプランも
4. PHP
・ 決して「簡単」な言語ではない
・ 言語を「まともに」習得するコストは
他と変わらないはず
5. C#
事例 : EC系サイトなど / MSのサイト
5. C#
・ 立派にWebで使われている言語
・ Javaを今風に書き直したっぽいイメージ
・ もちろんWinアプリにも
5. C#
・ Windows「専用」と誤解されやすい
・ ISO標準だし、JISも採択
・ Linux等で動かす環境がちゃんとある
5. C#
・ 公式な開発環境があるのがでかい
・ 大規模開発では環境の統一がわりと重要
・ 無料版もあるし、有料版は高機能
6. Scala
事例 : Foursquare / (Twitter)
6. Scala
・ 大規模な並列処理に向いている
・ ゆるめの関数型
・ Javaと関数型のいいとこ取り
・ see : Gunma.web #5
6. Scala
・ Webフレームワークもちゃんとある
・ 「Lift」はFoursquareも採用
・ TwitterのフロントはRuby
6. Scala
・ Javaが得意だから
Scalaも簡単・・・とはならない
・ そもそも関数型的な設計は難しい
・ RubyやC#あたりで慣らした方が・・・
7. JavaScript
事例 : ほとんどのWebサイト
自作 : (´・ω・`)としたー
7. JavaScript
・ HTMLを操作するために
使われることが多い
・ 知らないWebプログラマはまずいない
・ 少なくとも、書くだけは書ける
7. JavaScript
・ 「誰にでもできそう」と誤解される言語
・ 実際はとても難しい
・ jQuery等で書くのが楽になるが、
設計が楽になるわけではない
7. JavaScript
・ 「Node.js」によりサーバサイドにも
・ イベント駆動型サーバで大量の接続に対応
・ 各言語に似た実装はあるが
JSには「ある利点」があった
・ see : 「Software Design」 2011/09
・・・そろそろお疲れでしょう(´・ω・)? perhaps you are tired...
たぶん、あなたが聞きたいのはこれ
“一番いい言語を頼む”
そんなものはない!
(ノ゚Д゚)ノ彡┻━┻
「文化」や「環境」によって
BESTは違うから、
選択肢を増やしておくのが大事
(`・ω・´) b
「言語で仕事を選ぶ」のではなく、
「仕事に合わせた言語を選ぶ」のが
“プロ”グラマー(ドヤァ
個人で勉強のために
何か作る時は別よ(´・ω・)?
とはいえ、Webである限り、
「ある原則」に従えば、
言語はあまり関係ない
REST
RESTfulな実装さえできれば、
言語とかフレームワークとか
些細な問題
“お前は常にシステムにとって
最良の言語を思い、
自由に選択していけ”
参考文献:いっぱい
ありがとうございました
(´・ω・)っ旦~
【おまけ】
言語の特徴を知るためには、
それが生まれた経緯と、
設計思想を知る必要がある
前の言語の良い部分を引き継ぎ、
ダメな部分を整理したのが
新しい言語となる
だからといって、
古い言語がダメということはない
その理屈だともうCはいらない子に(´・ω・`)
ただし、新しい言語の方が、
「今風のコード」が
書きやすいのは事実
書きやすい
=シンプルでわかりやすい
=直観的である
=生産性が高い
最近だと関数型風のコード
see : Gunma.web #5
一方で実績やライブラリが欠けていたりということも
新しいパラダイムを理解するコストもかかる
結局、フレームワークの完成度にもよるが、
新しい言語の方が構造化の難易度は比較的低い
【さらなる蛇足】
HaskellとかErlangの本は持っているけど、
ここで挙げられるほど詳しくなかったので除外
CoffeeScriptは入れようと思ったけど、
「コードが美しい」というのは
プログラマ視点過ぎるので外した
(´・ω・`)
Ex. CoffeeScript
・ 美しいJavaScript
・ 「GoodParts」なJavaScriptに
コンパイルされるので安心
・ see : Gunma.web #2
Ex. CoffeeScript
・ ある意味でRubyの親戚
・ もっと正確にはLispの孫(?)
・ Rails3.1からデフォルトで使われている
Ex. CoffeeScript
・ Node.jsのコードも
CoffeeScriptで書ける
・ CoffeeScript自体がNode.jsで実装
・ 現在いろいろ試し中
http://d.hatena.ne.jp/parrot_studio/20111207/1323245393