ページ内ジャンプ:

アレゲなニュースと雑談サイト

nabeshinによる 2008年03月19日 15時10分の掲載
お仕事と鍛錬と部門より。

あるAnonymous Coward 曰く、

本家記事より。思考の幅を広げ、プログラミング自体に対する理解を深めるためにも他のプログラミング言語を学ぶことが大切だそうだ。新しい言語を学ぶことによりスキルを大きく伸ばせるとChris Diggins氏はブログで説いている。彼はC++やJavaの経歴を持つ人たちが次に学ぶ言語として、Rubyを挙げている。「ダイナミック言語の力量を試すことが出来、SmalltalkやPerl、そしてLispの概念を活用できる」からだそうだ。しかしどれか1つに絞るとすれば「どんなバックグランドをもつプログラマであろうと取っ付きやすい」Scalaが一番のお勧めとのこと。

このScalaを知らなかったのですが、使っている、使ったことのある方はいらっしゃいます? 新たにプログラミング言語を学ぶとしたら何を学びたいか、もしくはお薦めの言語などありましたらそれもぜひ。

この議論は賞味期限が過ぎたので、保存されている。 新たにコメントを書くことはできない。
表示オプション しきい値:
  • Anonymous Coward : 2008年03月19日 15時52分 (#1315887)
    ちょっと草植えときますね型言語 Grass [sky.or.jp]

    実用性はともかくとして、こういうのも知っておいて損はないかと。
  • 面白そうですね (スコア:3, 参考になる)

    Deasuke (34806) : 2008年03月19日 16時03分 (#1315893) 日記
    とりあえず簡単な日本語の解説記事です。
    http://www.thinkit.co.jp/free/article/0711/4/3/
    --
    Best regards, でぃーすけ
  • そもそものハナシですが (スコア:2, おもしろおかしい)

    duenmynoth (34577) : 2008年03月19日 19時12分 (#1316002) 日記
    C++とJAVAだけで精一杯
    どちらか一方だけでもマスターできるかどうか怪しいのに
    この上さらに新しい言語を学ぼうなんて大それた事は考えてもいませんでしたよ

    私が無能なだけ?
    • Ryo.F (3896) : 2008年03月19日 19時26分 (#1316015) 日記
      C++とかJAVAとかを学ぶ、というのは、言語仕様・文法を学ぶことに加えて、それに付随する膨大なライブラリの使い方を学ぶ、ということを含んでるよね。
      他の言語もそう言ったスタンスで学ぶと、無理が出てくる。
      そうでなくて、言語仕様や文法のみ、あるいはそれに加えてごく基本的なライブラリの使い方だけを学ぶ、というスタンスでも、「プログラミング自体に対する理解を深める」ことになら十分役立つと思うよ。
    • Anonymous Coward : 2008年03月19日 20時30分 (#1316055)
      息抜きとして全然違う言語で遊ぶと、メインで使っている言語を新たな視点で見られる様になります。
      そういう意味でも、毛色の違う言語を覚えるのはおすすめです。
    • 1個のコメント が現在のしきい値以下です。
  • kmizu (29449) : 2008年03月19日 19時14分 (#1316004)
    Scalaは仕事では使ってませんが(というか学生なのですが)、趣味のプログラミングでは
    普通に使っています。Scalaは

    ・処理系がJVM上で動作し、Javaのクラスに容易にアクセス可能
    ・クラス指向OOP(手続き型)と関数型のハイブリッド
    ・静的型付けでかつJavaの型システムとのギャップが少ないため、
        Javaのクラスを継承してScalaのクラスを作成することが問題無く可能

    などの特徴を持っているため、特にJavaプログラマが新たに学ぶ言語として
    お勧めです。また、単にオブジェクト指向と関数型のハイブリッド型であるに
    とどまらず、

    ・implicit conversionによるユーザ定義の自動型変換(Views)
    ・ユーザ定義可能なパターンマッチング(Extractor)
    ・structural typing
    ・path-dependent type

    などの、他の言語にはあまり見られない面白い機能も持っているので、言語オタクの
    方にもお勧めできる言語になっていると思います。
  • Anonymous Coward : 2008年03月19日 19時22分 (#1316011)
    微妙に違和感を感じて気持ち悪い、が正解じゃね?

    まぁ、それはさておき、
    「いろんな経験者が移行しやすい」事と「新たに学ぶのに適している」事は全く相関性がないと思うが如何か?
  • 提案 (スコア:2, 興味深い)

    paprika (5024) : 2008年03月19日 19時54分 (#1316034) 日記
    新たにプログラム言語を学ぶとしたら、「オレ言語」を自作してみるのがお勧め。

    --
    あなたの予想に反して、このページが見えているでしょうか?
  • foobar2006 (30156) : 2008年03月19日 21時09分 (#1316071) 日記
    日本ではかなりマイナーみたいですが(^^;
    http://pike.ida.liu.se/ [ida.liu.se]

    Cの知識でほとんどなんとかなるから(構文がほぼそのまま)。
    クラスも使えるんで、Cの次にC++に行かずにPikeってのもありかも。

    また、ちょっとアルゴリズムのテストってな時に良くて、
    sscanf()、sprintf()やらsizeof()まであるので、後でCにもコピペしやすい。
    • i12o (35348) : 2008年03月19日 23時28分 (#1316144)
      今Pike使っていろいろやってるんですが、コンパクトなサンプルコードとか見当らなくて
      苦労してます。なんかいいオブジェクト・モジュールの書き方とか使い方の情報源ありませ
      んかね。
      # いや、すんげー量の英語ドキュメントちまちま見てはいるんですが、今一つリファレンス
      # マニュアルの見方がわからない(- -;)

      理解できてないためにいろいろ(?_?;)連発ですが、なんとなく書いてて安心しますね。
      型指定を明示できるあたりがいいのかな。
  • elderwand (34630) : 2008年03月19日 21時58分 (#1316096) 日記
    必要になったら勉強します。
  • 使用例 (スコア:1, 興味深い)

    Anonymous Coward : 2008年03月19日 15時20分 (#1315872)
    私自信も使ったことはありませんが、どう書く?org [doukaku.org]に scala での解答例が結構あります。
    といっても、ほとんど一人で書かれているようですけど。

    同じお題の、他の言語での解答例と見比べてみると、どんな言語かわかりやすいかもしれません。
  • いま俺に必要な言語は (スコア:1, すばらしい洞察)

    Anonymous Coward : 2008年03月19日 15時53分 (#1315888)
    英語、だな

    日常会話というプログラムを組み立てるのも一苦労ですよ
  • 最近、「最適なー用言語は?」
    って話題に触れる機会が多いのだけどなんなんだろう?
    それはそうと、

    やりたいことが明白なら
    それにそって選べばいいでしょ?

    思考の幅を広げるためなのに
    とっつき易さとかどうでもいい要素でしょ。
    知ってる概念(過去の遺産)が活用できたら勉強にならんし。

    # #define begin {
    # #define end }
    # なんというPascal
  • 手続き型言語だと何を使っても大同小異だし、発想の転換をするなら関数型言語でしょう。
    そういう意味なら、論理型言語のProlog [wikipedia.org]も。
  • constメソッドというのはC++のアレでしょうか?
    だとすると、そーいうのはScalaにはありません。
    ただ、無くてもさほど支障は無いですが。
  • funya (14942) : 2008年03月20日 9時22分 (#1316287)
    関数型は、「入力に対して一つの出力」「関数の適用の順に実行」

    論理型は、「複数の変数の関係を記述する」「ルールの適用の順に実行」

    という差が一応あるんだけど、工夫すれば相互に記述出来るので等価といってもいいかな。

    一見、関数型は手続き型に見えるし、副作用を持つ関数型言語は、実際、手続き型言語と
    ほぼ同じ。論理型でも、Prolog なんかは、backtrack以外は、ほとんど手続き型と言っても
    良い。

    一方で、OPS5系とかCommitted Choice言語、あるいは関数型言語でも、
    実行の順序も外側の関数で実行出来るものから実行するなんてのがあって、
    どんな順序で動くのか予測が難しいものは、手続き型からは遠い。

    人が知らない言語、あるいは学ぶのが難しい言語を使いこなすというのは、快感ではあるんだが、
    虚しくもある。(淋しいという感じ?)

  • Anonymous Coward : 2008年03月20日 13時15分 (#1316371)
    >何を覚えてたんだって?

    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ですが、もっとラクなものを見つけたら乗り換えます。それだけ。

    書くのが面倒だと自覚してしまった言語(特定言語なり方法論なり)に拘って「自滅」してしまいたくないので。

  • CもJavaも知りませんが。
    Ocamlはどうでしょうか。
    これもよくしらないのですが、コーディング量は最小で実行性能もそこそこある。

    Javaしか使っていませんが、OCamlとSacalaには興味があるんですよね。でも、いまだに手をつけていないのですが。

    しかし、いまだに仕様記述から自動プログラミングできるという言語できていないのかな?
    どの言語も言語そのものと山ほどあるライブラリーを覚えないといけないので
    よほどのど根性がないてやってられない。

    これはプログラミング言語ではなく仕様記述言語のことでしょうか。であれば、いくつか実用化されているようですが。たしかFelicaは本格的に仕様記述言語を導入したと、どこかで見た気がします。Felicaの場合はVDMをつかったとか。
    私はフォーマルメソッドの専門家ではないので、VDMでの仕様記述でなにがどこまで生成されるかわかりませんが、組込系では徐々に導入されているようですね。

    Webアプリとかは多分導入が難しいんだろうなぁ。
  • Erlangもお薦めリストに入れておいてもらえますか?
    既にJava,PHP,Perl等をやってきた方であれば、

    ・諸先輩方が言われてるように、関数型言語から新しい考え方を学べるのは楽しい。
    ・言語仕様がかなりコンパクト(その分、変と言われてるようだけど)なので、覚えるこ
      と自体は楽。
    ・専用のシェルで評価実行しつつ、コンパイルして実行、他スクリプトやGUIやWebでも
      実行できるので、試しやすいし、ほとんどのプラットフォームが抑えられているので間
      口が広い。
    ・標準でかなり広範囲のモジュールが附属してて、CEANやjungerl等のライブラリサイ
      トもあるので、それほど自分で拡張とか考えなくていい
    ・特性としては軽量プロセスの生成を基本とした、分散並列処理がすごく得意で、そっ
      ち方面へのプログラミングのステップアップとしては最良だと思う。
    ・Ejabberd(Jabber)、Yaws(Web)、Erlyweb(RoRみたいなやつ)、Mnesia(分散DB)等
      勉強がてらに触って楽しそうなものもでてきてる。
    ・最近「プログラミングErlang」という良本が出た!

    逆に、

    ・最近はあまり流行ってない?
    ・国際化とか頭っからないらしい。日本語を扱えないことはないけど、不便。

    という感じですが、Amazon EC2とかで何十台も計算機資源をつかってなんかし
    たいなと夢を見ながら学んでます。
  • MDA的な考え方に基づいて、コードを自動生成するツールなら有りますよ。
    AndroMDAとかはWebアプリも作れるはず。

    参考:
    http://codezine.jp/a/article.aspx?aid=132 [codezine.jp]
  • 6個のコメント が現在のしきい値以下です。