回答:
「通常の」プログラミングおよびアルゴリズムの場合:
思考を変える体験のために:
あなたの心を破壊し、パダワンとジェダイマスターの境界線を越えて:
Javascriptを忘れないでください。
通常のオブジェクト指向機能ではないオブジェクト指向機能があります。高階関数とクロージャに適しています。これらは日常的に使用します。それは多くの関数型プログラミングのトリックを可能にします。それは非常に柔軟です。
そして、すべての本格的なブラウザがそれを持っているので、それは実用的です。
(もちろん、多くの不快な癖もあります。実用的な言語にはありません)
Schemeをお勧めします。
Lispから派生した関数型プログラミング言語です(実際には方言だと思います)。Common Lispとの主な違いは、そのアプローチが非常に最小限であるということです- 非常にそうです。たとえば、Schemeの正規分布(任意のスキーム<R5、またはMit / GNU / Scheme)では、ループ実装を見つけることはできません。末尾再帰を使用して独自に作成する必要があります。
本当に表現力豊かで、その構文はプログラミングの新しいことを学ぶのに最適です。たとえば、コードを見るだけで、コンパイラ/インタープリターがどのように機能するかがわかります。
さらに、MITのWebサイトから無料でダウンロードできる史上最高のプログラミングブック、コンピュータープログラムの構造と解釈が付属しています。
以下は、この魅力的な言語にすぐに興味を持っていただけるビデオレッスンです。スピーカーはSICPの著者です。http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-講義/
LISP、できればSchemeはAbelson&Sussmanの「コンピュータープログラムの構造と解釈」と組み合わせて、C / C ++によって課せられる用語以外の用語で考えることを教えます。
FORTH、特にファイル指向(D85など)ではなく、ブロック指向のFORTHを使用すると、流ciousさを抑えることができます。どのような状況でも、64文字の16行より長いルーチンを作成できない場合、抽象化と因数分解を余儀なくされます。
実を言うと、私はHaskellと言うでしょう。そして、2つの理由から:
C / Javaの世界から来た人はScalaをお勧めします。
純粋に機能的なプログラミング言語ではありませんが、オブジェクト指向プログラミングを使用して、いくつかの機能的なプログラミング機能をシミュレートします(たとえば、オブジェクトを使用して、ファーストクラス関数と高次関数をシミュレートします)。
したがって、オブジェクト指向に精通している場合、Scalaは既に知っている用語を使用して機能的な世界を説明します。
Haskell、List ...などのより機能的なプログラミングに飛び込むよりも、Scalaでの機能的なプログラミングを理解する方が簡単だとわかりました。
関数型言語は、私が今いる場所に連れて行ってくれると感じたものです。私はWebアプリケーションの開発に携わっていますが、関数型言語から学んだ概念は、他の方法では見られなかった問題の解決策を見つけるのに役立ちます。私の大学で働いていた言語は次のとおりです。
これらの言語を学習すると、抽象化の世界、および他の機能をカプセル化するコードブロックの構築方法を理解し、低レベルの詳細を隠して、高レベルのビジネス目標に集中できるようになります。
問題を新しい方法で考えることを要求するプログラミング言語がいくつかあります(もちろん、あなたが慣れているものと比較して)。prologやlispなどの論理言語。
ocamlやHaskellなどの一部の言語はカテゴリ理論に大きく影響され、一部の言語はCurryなどの異種言語です(関数型および論理型)です。カレーはおそらく、私が知っている最も心を吹き飛ばす言語です。それは、論理プログラミングでHaskellのすべての心を吹き飛ばしただけでなく、制約ベースのプログラミングとの統合でもあります。
別の楽しい言語ですオッカム-PIそれは同時実行にとても重いためだけでなく、なぜなら、最近の、Arduinoのポート。
明確なターゲットがなければプログラミング言語を正しく学習できません。あなたがそれで何をしたいのかを知っていれば、あなたはあなたのニーズに合ったプログラムを決めることができます。
たとえば、c#について考えてみましょう。
C#は、Webプログラム、コンソールプログラム、スタンドアロンの実行可能ファイル、ゲームプログラム、Silverlightプログラム、モバイルプログラムを実行できます。構文はほぼすべての場合で同じですが、シナリオごとに動作が異なります。たとえば、スタンドアロンの実行可能ファイルは、アンロードされるかプログラムが終了するまで情報を保持しますが、Webプログラムでは、ページをロードするたびに情報が破棄されます。シルバーライトでは、ほとんどの時間を苦労して過ごします。 xmlファイル。
次に、エキゾチックな言語(Haskelなど)で時間を費やさないでください。企業の話ですが、努力する価値のあるプログラムはほとんどありません。java(丘の王)、c#/ vb.net、php、sql。
Processingと呼ばれるJavaアプレットを書くための非常に簡単なプログラムがあります
この言語は、始めたばかりの場合、変数、ループ、およびそのようなことの非常に基本的な理解を提供します。