新たにプログラム言語を学ぶとしたらScalaがお勧め? 89
ストーリー by nabeshin
お仕事と鍛錬と 部門より
お仕事と鍛錬と 部門より
あるAnonymous Coward 曰く、
本家記事より。思考の幅を広げ、プログラミング自体に対する理解を深めるためにも他のプログラミング言語を学ぶことが大切だそうだ。新しい言語を学ぶことによりスキルを大きく伸ばせるとChris Diggins氏はブログで説いている。彼はC++やJavaの経歴を持つ人たちが次に学ぶ言語として、Rubyを挙げている。「ダイナミック言語の力量を試すことが出来、SmalltalkやPerl、そしてLispの概念を活用できる」からだそうだ。しかしどれか1つに絞るとすれば「どんなバックグランドをもつプログラマであろうと取っ付きやすい」Scalaが一番のお勧めとのこと。
このScalaを知らなかったのですが、使っている、使ったことのある方はいらっしゃいます? 新たにプログラミング言語を学ぶとしたら何を学びたいか、もしくはお薦めの言語などありましたらそれもぜひ。
あえて変なのを挙げてみる (スコア:3, 興味深い)
実用性はともかくとして、こういうのも知っておいて損はないかと。
Re:あえて変なのを挙げてみる (スコア:2, 興味深い)
じゃあ便乗して
Re:あえて変なのを挙げてみる (スコア:2, 参考になる)
whitespace
すべて、[space][TAB][LF]で記述する言語。
http://compsoc.dur.ac.uk/whitespace/ [dur.ac.uk]
Re:あえて変なのを挙げてみる (スコア:1)
でもソコがすばらしい。
Re:あえて変なのを挙げてみる (スコア:1)
# When humans are connected, small voices will become larger.
Re:あえて変なのを挙げてみる (スコア:1)
NIが対応機器を沢山用意して居るんで、ちょっくら実験をって時には便利。
・・・馴染めればね。
面白そうですね (スコア:3, 参考になる)
http://www.thinkit.co.jp/free/article/0711/4/3/
Best regards, でぃーすけ
さらに4つ (スコア:1)
次にくる!新登場言語 [thinkit.co.jp]
とかいって4つほど他の言語もあがってますね。
#おじさんの頭にはVBとJavaとC#とAvenueだけで精一杯です
そもそものハナシですが (スコア:2, おもしろおかしい)
どちらか一方だけでもマスターできるかどうか怪しいのに
この上さらに新しい言語を学ぼうなんて大それた事は考えてもいませんでしたよ
私が無能なだけ?
Re:そもそものハナシですが (スコア:2, 興味深い)
他の言語もそう言ったスタンスで学ぶと、無理が出てくる。
そうでなくて、言語仕様や文法のみ、あるいはそれに加えてごく基本的なライブラリの使い方だけを学ぶ、というスタンスでも、「プログラミング自体に対する理解を深める」ことになら十分役立つと思うよ。
Re:そもそものハナシですが (スコア:1)
C# や Java ならともかく、C++ の場合は膨大なライブラリの使い方というよりも、無限の可能性を秘めたテンプレートの使い方こそが肝で、この部分をマスターできるという人は世界的にもトップクラスの C++ 使いだと言えると思いますよ。
C++ をマスターするとか、幻想過ぎて困る。
中身が switch だけのテンプレートを利用したインライン関数でテンプレートへのパラメータが定数の場合、分岐で switch (3) とかになるようにすると、case 3: 以外はすべて通らないコードになるので「コード自体は他の状況にも対応している」が「コンパイルされるコードは必要最低限」で、「生成されるバイナリはインライン展開された上に switch 部分がコンパイラの最適化で消える」コードとか、目から鱗というか唖然としたというか……。
# Java/C# の Generic はよくできているけど、C++ template 使いにはおもちゃにしか見えない。
Re:そもそものハナシですが (スコア:2, 興味深い)
そういう意味でも、毛色の違う言語を覚えるのはおすすめです。
Re:そもそものハナシですが (スコア:1, おもしろおかしい)
そしてlispを覚えるためのついでとしてエディタをemacsにして以後他のエディタにさわれない呪いをうけるのであった。
#ちぇー
Re:そもそものハナシですが (スコア:1)
C++が複雑で習得困難なのは認めます。でも、覚えることが多い分、できることも多く、痒いところに手が届きやすいと思っています。私の場合、Cを習得し終わってからC++を覚えたので、差分を学習するだけで済んだのですが、ゼロからC++を学習するのは大変だと思うので、とりあえずC++のことは忘れて、Cをマスターするのをおすすめします。
その点C++は使いこなせるようになれば、ジェットコースターの如く、頭の中からコードが湧き出てくるような爽快感があります。だから私はJavaよりもC++の方が「使い心地」はいいです。
まぁ、人それぞれ使い心地の良い言語は違うと思いますが。
ハイブリッド型言語 (スコア:2, 参考になる)
普通に使っています。Scalaは
・処理系がJVM上で動作し、Javaのクラスに容易にアクセス可能
・クラス指向OOP(手続き型)と関数型のハイブリッド
・静的型付けでかつJavaの型システムとのギャップが少ないため、
Javaのクラスを継承してScalaのクラスを作成することが問題無く可能
などの特徴を持っているため、特にJavaプログラマが新たに学ぶ言語として
お勧めです。また、単にオブジェクト指向と関数型のハイブリッド型であるに
とどまらず、
・implicit conversionによるユーザ定義の自動型変換(Views)
・ユーザ定義可能なパターンマッチング(Extractor)
・structural typing
・path-dependent type
などの、他の言語にはあまり見られない面白い機能も持っているので、言語オタクの
方にもお勧めできる言語になっていると思います。
Re:ハイブリッド型言語 (スコア:1)
> クラスアンロードの問題は解決できてるのかな、
クラスアンロードの問題、というのが何を指しているのかが
よくわからないのですが、Scalaは静的にクラスファイルに
コンパイルするタイプの言語なので、その問題が動的にバイトコードに
コンパイルする言語特有なら、Scalaでは大丈夫だと思います。
一応、スクリプトをファイルを生成せずに内部でコンパイルして、
直接実行するモードもありますが、使い捨てというか短いスクリプト用の
機能といって良いもので、静的にクラスファイルにコンパイルする
のが基本的な使い方です。
Re:ハイブリッド型言語 (スコア:1)
# でもScalaは使った事無いので回答は出来ないorz
安易なAC発言反対運動中
Re:ハイブリッド型言語 (スコア:1)
ですが、具体的にどういう問題なんだろうか、という疑問です。
どちらにしても、Scalaを静的にクラスファイルに落した場合は、
実行時に特別なクラスローダが作られたり、ということは無いはず
なので、基本的に問題は無いと思います。
どんなプログラマでも・・・ (スコア:2, 参考になる)
まぁ、それはさておき、
「いろんな経験者が移行しやすい」事と「新たに学ぶのに適している」事は全く相関性がないと思うが如何か?
Re:どんなプログラマでも・・・ (スコア:1)
Re:どんなプログラマでも・・・ (スコア:1)
#目的が達成できれば言語はなんでも良いんですけどね。楽ならなお良し。
提案 (スコア:2, 興味深い)
Pikeがいいです (スコア:2, 興味深い)
http://pike.ida.liu.se/ [ida.liu.se]
Cの知識でほとんどなんとかなるから(構文がほぼそのまま)。
クラスも使えるんで、Cの次にC++に行かずにPikeってのもありかも。
また、ちょっとアルゴリズムのテストってな時に良くて、
sscanf()、sprintf()やらsizeof()まであるので、後でCにもコピペしやすい。
Re:Pikeがいいです (スコア:2, 興味深い)
苦労してます。なんかいいオブジェクト・モジュールの書き方とか使い方の情報源ありませ
んかね。
# いや、すんげー量の英語ドキュメントちまちま見てはいるんですが、今一つリファレンス
# マニュアルの見方がわからない(- -;)
理解できてないためにいろいろ(?_?;)連発ですが、なんとなく書いてて安心しますね。
型指定を明示もできるあたりがいいのかな。
Re:Pikeがいいです (スコア:1)
> 苦労してます。なんかいいオブジェクト・モジュールの書き方とか使い方の情報源ありませ
> んかね。
私の場合は改造したい既存のプログラムがPikeで書かれていた。ってところから入ったんで
そのへんあまり悩みませんでした。
後はちょっとしたツールや、対向テスト用に通信相手側をちょろっと書くくらいなので(^^;
参考になるかわかりませんが、ここなどどうでしょう。
http://modules.gotpike.org/ [gotpike.org]
とっつきやすいということなので、 (スコア:2, すばらしい洞察)
使用例 (スコア:1, 興味深い)
といっても、ほとんど一人で書かれているようですけど。
同じお題の、他の言語での解答例と見比べてみると、どんな言語かわかりやすいかもしれません。
Re: (スコア:0)
またアクセスできなくなってる... orz
最近落ちやすくなってません?
# スラドとは別名で投稿しているのでAC。
いま俺に必要な言語は (スコア:1, すばらしい洞察)
日常会話というプログラムを組み立てるのも一苦労ですよ
Re:いま俺に必要な言語は (スコア:1)
Re:いま俺に必要な言語は (スコア:1)
Re:いま俺に必要な言語は (スコア:2, 参考になる)
しゃべりは必要最低限の方がよいこともあるらしい。
ダラダラ書いていると、どの言語もロクな結果にならないらしい。
Re:いま俺に必要な言語は (スコア:1, おもしろおかしい)
「男らしくびしっとする」
という項目が有った
…という、夢を見た。
よさそうなの全部やれ (スコア:1)
って話題に触れる機会が多いのだけどなんなんだろう?
それはそうと、
やりたいことが明白なら
それにそって選べばいいでしょ?
思考の幅を広げるためなのに
とっつき易さとかどうでもいい要素でしょ。
知ってる概念(過去の遺産)が活用できたら勉強にならんし。
# #define begin {
# #define end }
# なんというPascal
2008-03-19 15:45現在 (スコア:0)
Re: (スコア:0)
Lisp系言語でしょう (スコア:0)
Schemeあたりなら良書があるし、新し物好きならGaucheかな。
まあscalaも関数型言語だから良い選択じゃないかな。
Re:Lisp系言語でしょう (スコア:1)
Re: (スコア:0)
ただ、論理型言語で普通のアプリケーションを組む方法が分からないです。Webアプリ等をPrologで作るのって無理なんですかね?
Re:Lisp系言語でしょう (スコア:3, おもしろおかしい)
> Webアプリ等をPrologで作るのって無理なんですかね?
君は技術者に対する質問の仕方を良く分かってるねw
Re:Lisp系言語でしょう (スコア:2, 参考になる)
残念ながら私はまだ挑戦したことがないのですが、SWI-Prologなら簡単そうですね。
http://www.swi-prolog.org/packages/http.html [swi-prolog.org]
Re:Lisp系言語でしょう (スコア:2, 興味深い)
あと、Lisp系の言語なら簡単にPrologを実装できるのでLispでPrologを作ってみるのも良いかも(ずいぶん昔の学生実験の課題でした)。
Best regards, でぃーすけ
Re:Lisp系言語でしょう (スコア:1, 参考になる)
PrologからJavaへのトランスレータ処理系であるProlog Cafeというのもあります.
http://kaminari.istc.kobe-u.ac.jp/PrologCafe/ [kobe-u.ac.jp]
人工知能学会誌に解説が載っています.
http://www.ai-gakkai.or.jp/jsai/journal/toolbox/04/#SECOND [ai-gakkai.or.jp]
Re:Lisp系言語でしょう (スコア:1)
既にJava,PHP,Perl等をやってきた方であれば、
・諸先輩方が言われてるように、関数型言語から新しい考え方を学べるのは楽しい。
・言語仕様がかなりコンパクト(その分、変と言われてるようだけど)なので、覚えるこ
と自体は楽。
・専用のシェルで評価実行しつつ、コンパイルして実行、他スクリプトやGUIやWebでも
実行できるので、試しやすいし、ほとんどのプラットフォームが抑えられているので間
口が広い。
・標準でかなり広範囲のモジュールが附属してて、CEANやjungerl等のライブラリサイ
トもあるので、それほど自分で拡張とか考えなくていい
・特性としては軽量プロセスの生成を基本とした、分散並列処理がすごく得意で、そっ
ち方面へのプログラミングのステップアップとしては最良だと思う。
・Ejabberd(Jabber)、Yaws(Web)、Erlyweb(RoRみたいなやつ)、Mnesia(分散DB)等
勉強がてらに触って楽しそうなものもでてきてる。
・最近「プログラミングErlang」という良本が出た!
逆に、
・最近はあまり流行ってない?
・国際化とか頭っからないらしい。日本語を扱えないことはないけど、不便。
という感じですが、Amazon EC2とかで何十台も計算機資源をつかってなんかし
たいなと夢を見ながら学んでます。
Re:メソッドに const がつけられない言語はクソ (スコア:1)
だとすると、そーいうのはScalaにはありません。
ただ、無くてもさほど支障は無いですが。
Re:メソッドに const がつけられない言語はクソ (スコア:3, すばらしい洞察)
きっとそれでしょう。
そんな彼には haskell を薦めておきましょう。
constってわざわざ書かなくても、全部 const になるよ!
# 変数すら無いけどな!
Re:パラダイム (スコア:2, 興味深い)
論理型は、「複数の変数の関係を記述する」「ルールの適用の順に実行」
という差が一応あるんだけど、工夫すれば相互に記述出来るので等価といってもいいかな。
一見、関数型は手続き型に見えるし、副作用を持つ関数型言語は、実際、手続き型言語と
ほぼ同じ。論理型でも、Prolog なんかは、backtrack以外は、ほとんど手続き型と言っても
良い。
一方で、OPS5系とかCommitted Choice言語、あるいは関数型言語でも、
実行の順序も外側の関数で実行出来るものから実行するなんてのがあって、
どんな順序で動くのか予測が難しいものは、手続き型からは遠い。
人が知らない言語、あるいは学ぶのが難しい言語を使いこなすというのは、快感ではあるんだが、
虚しくもある。(淋しいという感じ?)
Re:最も最近覚えたプログラム言語=脳内基本構文 (スコア:1, 興味深い)
for「文」とかwhile「文」とかの文法を、です。
あ。(今は)文と式の違いを指摘したいわけではないので、
for「式」と呼ぶ言語であっても扱いは同じとします。
>ごりごりと書くもので。
それは(私の言い方でいえば)
繰り返しじゃなく、
繰り返しの中っていうか後に続く実行部分、です。
for (xxx) yyy
のyyyの部分ね。
今気にしてるのはそこじゃなく
for (xxx)
までの部分です。
>関数型言語だとか、Rubyではinjectとか使って自作
まあ結果的にはそうなんですが、
この繰り返しの自作の話は、
関数型言語限定の話題だと強く言い切る必要は無い話題だと
思うんです。
というのは、やってることは結局はコールバックだから。
手続き型大好きな人に簡単に説明するには
「Cのqsort関数を見てね」
というべきかな。
qsort関数を見て「これは手続き型言語のモノではない!」とか言う人はあまり見かけませんね。
>ごりごりと書く
最終的には書かないとならない処理は書かないとならないので、
その意味でいえばコードはちっとも短くならなかったりすること
もあるんですが、
そういう部分を「切り離せる」のは快適ですよ。
buf = []
for x in a
if x.hoge continue
if x.fuga buf += x.y
end
みたいなのは、
「1つの」ループの中に
色んな分岐やデータ収集が
ごちゃ混ぜなのが厳しいです。
これが
buf = a.where{|x| x.hoge}.where{|x| x.fuga}.select{|x| x.y}
(文法はRuby風ですが、
whereとかselectっていう語の選び方は、
RubyじゃなくあえてSQLにあわせてます)
なんて書けると、
「行を絞る部分」「列を絞る部分」(SQL風にいえばですが)
を「ばらばら」に扱えるんです。
扱うってのは、読んだり書いたり(修正したり)するときに、
切り離す単位が凄く判りやすいっていう意味。
メソッド+ブロックの単位で、
コードを気楽に切り貼りできます。
順番変えるとかもサクサクできるし、
変えたときにどう振る舞いが変わるかも「見ればわかるしょ」にかなり近い。
あと、ちょっと汚れた話。
上から目線の上流野郎どもが書いた仕様書には
気楽に「hogeなもののみ表示」とか「yカラムだけ表示」とか
日本語で書いてるわけだが、
上記のようにして、日本語とほぼ同じ粒度でコードが書けるようになると、
そういう場末SEじみた仕事も、
いくらかはラクになるんだ。
翻訳(ループへの展開)を人間にやらせるからバグが出るんだ。
言語にやらせろだ。
>手続き型言語では繰返しは覚えるもんでないでしょ?
>ごりごりと書くもので。
まあ仮に本当にそうだったとしても、私は「こんなに面倒ならば手続き型言語など要らぬ!」と涙するだけです。そして北斗もとい関数(ハイブリッド)言語に移行するだけ。
べつに「手続き型にこだわりたい」なんて全く思ってません(言ってもいません)。「BASICは」「Cは」「Rubyは」といっただけですし、それらに対して「こだわりたい」とも言ってない。
今はRubyですが、もっとラクなものを見つけたら乗り換えます。それだけ。
書くのが面倒だと自覚してしまった言語(特定言語なり方法論なり)に拘って「自滅」してしまいたくないので。
Re:Ruby は後でよい、Lisp の方を (スコア:1)
Javaしか使っていませんが、OCamlとSacalaには興味があるんですよね。でも、いまだに手をつけていないのですが。
これはプログラミング言語ではなく仕様記述言語のことでしょうか。であれば、いくつか実用化されているようですが。たしかFelicaは本格的に仕様記述言語を導入したと、どこかで見た気がします。Felicaの場合はVDMをつかったとか。
私はフォーマルメソッドの専門家ではないので、VDMでの仕様記述でなにがどこまで生成されるかわかりませんが、組込系では徐々に導入されているようですね。
Webアプリとかは多分導入が難しいんだろうなぁ。
Re:Ruby は後でよい、Lisp の方を (スコア:1)
AndroMDAとかはWebアプリも作れるはず。
参考:
http://codezine.jp/a/article.aspx?aid=132 [codezine.jp]