プログラミングスキル全般を向上させるプログラミング言語ですか?[閉まっている]


27

プログラマーにどの言語を学ぶように勧めますか?それは、多くの言語を使用するからです(しかし、持っているかもしれません)が、それは一般的にプログラミングスキルを向上させ、別のことを考えさせるためです)方法?


12
単一ではありません。むしろ:可能な限り多く、それぞれが他のものと可能な限り異なる。

回答:


27

「通常の」プログラミングおよびアルゴリズムの場合:

  • python、習得に便利、使いやすく、読みやすい。
  • C ++は、コンピューターとは何かを教えます。

思考を変える体験のために:

  • ハスケル
  • プロローグ

あなたの心を破壊し、パダワンとジェダイマスターの境界線を越えて:

  • 共通のLISP

3
はい、C、chrisaycockに同意し、組立コンピュータが本当に何であるかをお教えします、C ++は上向きに非常に非常にわずかなステップですが、それでもあなたはメモリポインタと高パフォーマンスの問題のような問題を扱う必要があります
Lacrymology

mh。Prologは素晴らしいですが、一般的なプログラミングスキルを向上させるためにどのように面白いかはわかりません。私は、プログラミング言語(プロシージャではなく、statiを説明する)よりも、その構造をクエリできる代替の数学/論理表記システムと考えています。編集:何かについての考え方は確かに変わりますが、それはプログラミングではありません。
-cbrandolino

プロローグはプログラミング中です。宣言型プログラミングであり、ロジックに根ざしています(したがって、比較的数学的な)、はい。しかし、まだプログラミング中です。最後の点については、別のLisp(つまりScheme)も同様だと思いますか?

3
プロローグは、ロジックパラダイムの最も有名な言語です。扱うことができるすべてのパラダイムに心を向けることが重要です。プログラマとしてより良くなりたい場合は、精神的な敏get性を得るのに役立ち、さらに新しいツールを提供します。どんなLisp方言でもうまくいくと思いますが、Common Lispで私が見ることは、それが私にとって最も生産的に使用可能なLispのように見えるということです。
Lacrymology

1
Common LispよりもSchemeに投票します-実際にLispを実際に使用することになると思うかどうかによります。そうでない場合は、Schemeに進みます。
スキルドリック

13

Javascriptを忘れないでください。

通常のオブジェクト指向機能ではないオブジェクト指向機能があります。高階関数とクロージャに適しています。これらは日常的に使用します。それは多くの関数型プログラミングのトリックを可能にします。それは非常に柔軟です。

そして、すべての本格的なブラウザがそれを持っているので、それは実用的です。

(もちろん、多くの不快な癖もあります。実用的な言語にはありません)


1
JSにはJavaにはないオブジェクト指向機能がありますか?
マフムードホッサム

3
@Phobia:JSは全く異なる方法でオブジェクト指向を行います。クラスはありません。継承はプロトタイプを介して行われます。基本的に、オブジェクトは他のオブジェクトから継承できます。関数は一流の値です。それらを渡すことができるだけでなく、新しいメソッドを既存のオブジェクトに簡単に割り当てることができます。JSがデータを非表示にする方法もJavaとはまったく異なります。オブジェクトが公開するものはすべてパブリックなので、クロージャーを使用してデータとメソッドを非表示にします。「標準的なオブジェクト指向」はないことに注意してください。JSは、C ++などよりもSmalltalkが発明した「元の」オブジェクト指向に少し近づいていますが、Javaのオブジェクト指向も「標準」です。
9000

11

Cとコンピューターの動作方法のアセンブリ

関数型プログラミングとメタプログラミングの両方のためのHaskellLISP

ベクトルおよび簡潔なプログラミング用のAPL

プログラムを使用してコンピューターを管理する方法については、bashまたはtcsh


4
APLの代わりに、同じ作成者がJを使用できます。
9000

アセンブリ時に+1。重要な開発を行った後でも、同じように高級言語をまったく見ないでください。まったく異なる方法でコーディングについて考えさせる何かを探しているなら、ASMはそれを行います。
カーティス

9

Schemeをお勧めします。

Lispから派生した関数型プログラミング言語です(実際には方言だと思います)。Common Lispとの主な違いは、そのアプローチが非常に最小限であるということです- 非常にそうです。たとえば、Schemeの正規分布(任意のスキーム<R5、またはMit / GNU / Scheme)では、ループ実装を見つけることはできません。末尾再帰を使用して独自に作成する必要があります。

本当に表現力豊かで、その構文はプログラミングの新しいことを学ぶのに最適です。たとえば、コードを見るだけで、コンパイラ/インタープリターがどのように機能するかがわかります。

さらに、MITのWebサイトから無料でダウンロードできる史上最高のプログラミングブック、コンピュータープログラムの構造と解釈が付属しています

以下は、この魅力的な言語にすぐに興味を持っていただけるビデオレッスンです。スピーカーはSICPの著者です。http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-講義/


ありがとうございました。ただし、熱心なプログラマーを涙に流しやすいレッスンであることに注意する必要があります。
-cbrandolino

@cbrandolino-確かに、関数型プログラミングクラスはコンピューターサイエンスプログラムから多くの人々をノックアウトしました。
jmort253

1
Scheme 最小限のものでしたが、R5ではいぼがいくつか成長し、R6では明らかに巨大になりました。とてもきれいだったので、残念です。本当にミニマルでありながら実用的な言語については、Lua-
ハビエル

@ハビエル、あなたは正しい。回答を編集して実装を指定します。
cbrandolino

私は大学のatmでスキームをやっていて、それが嫌いです。それが関数型言語であるからではなく、私は長い間その中に入りたいと思っています。しかし、構文は本当に私を殺します。キーボードには3種類のブレースがあり(山かっこを数える場合は4つ)、括弧のみを使用しています。どうして?他のものを使用することの問題は何ですか?
フェマレフ

4

LISP、できればSchemeはAbelson&Sussmanの「コンピュータープログラムの構造と解釈」と組み合わせて、C / C ++によって課せられる用語以外の用語で考えることを教えます。

FORTH、特にファイル指向(D85など)ではなく、ブロック指向のFORTHを使用すると、流ciousさを抑えることができます。どのような状況でも、64文字の16行より長いルーチンを作成できない場合、抽象化と因数分解を余儀なくされます。


4

Javaは世界中の大学で最も教えられている言語の1つであり、それには理由があります。多くの場合恐竜に似ていますが、現代のプログラミングの概念の非常に優れた概要を皆に提供します。コンピューター自体がアセンブラーやすでにはるかに多くの抽象的な言語Cのように動作する方法を示していません。しかし、パイロットは飛ぶことができなければならず、飛行機を自分で組み立てることはできません-JAVAを学んでください最近(Java)、c ++、php、c#、ruby(on rails)pythonなどの(一般的な)言語で書けるコードの優れた基礎として...

最大


3

LINQを使用したC#3。

関数型プログラミングの素晴らしい入門書です。

プログラムを書いて(またはプロジェクトオイラーを解いて)、できるだけ多くのループをLINQ呼び出しで置き換えてみてください。
関数型プログラミングと遅延評価の概念を習得するのに役立ちます。

そこから、F#に進むことができます。


3

実を言うと、私はHaskellと言うでしょう。そして、2つの理由から:

  • 関数型プログラミングを学ぶための最良の方法です。他のほぼすべての言語はデフォルトで副作用を許可しますが、機能的にはできます(そして、これにはMLとErlangが含まれます: 詳細については、この講演を参照してください)。Haskellはデフォルトで機能しますが、必要なときに副作用を使用することができます。
  • これは間違いなく、コーディングする前に考えることを奨励する言語です。正直に言うと、これは私にとって本当に問題になったことはありませんでした(もしあれば、まったく逆です)。それは私が少数派のようだと言った。私が遭遇したプログラマーのほとんどは、「5分でソリューションをコーディングする前に何日も問題を熟考する」という考え方ではなく、「最初にコードを書き、後で質問する」という考え方のようです。 。したがって、この種の言語は、ほとんどのプログラマーに貴重な経験を提供できます。

3

C / Javaの世界から来た人はScalaをお勧めします。

純粋に機能的なプログラミング言語ではありませんが、オブジェクト指向プログラミングを使用して、いくつかの機能的なプログラミング機能をシミュレートします(たとえば、オブジェクトを使用して、ファーストクラス関数と高次関数をシミュレートします)。

したがって、オブジェクト指向に精通している場合、Scalaは既に知っている用語を使用して機能的な世界を説明します。

Haskell、List ...などのより機能的なプログラミングに飛び込むよりも、Scalaでの機能的なプログラミングを理解する方が簡単だとわかりました。


2

関数型言語は、私が今いる場所に連れて行ってくれると感じたものです。私はWebアプリケーションの開発に携わっていますが、関数型言語から学んだ概念は、他の方法では見られなかった問題の解決策を見つけるのに役立ちます。私の大学で働いていた言語は次のとおりです。

  • C ++(機能しませんが、ポインターやメモリ管理などの概念は非常に貴重です)
  • スキーム博士
  • ML / Ocaml(ML / Ocamlを使用して別の言語を作成しました!)
  • JavaScript(クライアント側とサーバー側の両方で業界で注目を集めている関数型言語)

これらの言語を学習すると、抽象化の世界、および他の機能をカプセル化するコードブロックの構築方法を理解し、低レベルの詳細を隠して、高レベルのビジネス目標に集中できるようになります。


1

Rubyには、私が使用した中で最も強力で直感的なテストフレームワークの1つがあります。ルビーでテストを書き始めるまで、モックとスタブを適切に使用する方法を本当に理解したかどうかはわかりません。rSpecとCucumberは素晴らしいツールです。


1

問題を新しい方法で考えることを要求するプログラミング言語がいくつかあります(もちろん、あなたが慣れているものと比較して)。prologlispなどの論理言語。

ocamlHaskellなどの一部の言語はカテゴリ理論に大きく影響され、一部の言語はCurryなどの異種言語です(関数型および論理型)です。カレーはおそらく、私が知っている最も心を吹き飛ばす言語です。それは、論理プログラミングでHaskellのすべての心を吹き飛ばしただけでなく、制約ベースのプログラミングとの統合でもあります。

別の楽しい言語ですオッカム-PIそれは同時実行にとても重いためだけでなく、なぜなら、最近の、Arduinoのポート


1

バランスの取れたプログラマーは、いくつかのバッグを持っています。これには次のものが含まれます。

  • コンピューターの内臓がどのように機能するかを学習するためのアセンブリ。
  • CやPascalなどの手続き型言語。
  • Schemeなどの関数型言語。
  • SqueakなどのOOP言語。

これらはすべて、問題について考えアプローチするためのわずかに異なる方法を教えます。


0

明確なターゲットがなければプログラミング言語を正しく学習できません。あなたがそれで何をしたいのかを知っていれば、あなたはあなたのニーズに合ったプログラムを決めることができます。

たとえば、c#について考えてみましょう。

C#は、Webプログラム、コンソールプログラム、スタンドアロンの実行可能ファイル、ゲームプログラム、Silverlightプログラム、モバイルプログラムを実行できます。構文はほぼすべての場合で同じですが、シナリオごとに動作が異なります。たとえば、スタンドアロンの実行可能ファイルは、アンロードされるかプログラムが終了するまで情報を保持しますが、Webプログラムでは、ページをロードするたびに情報が破棄されます。シルバーライトでは、ほとんどの時間を苦労して過ごします。 xmlファイル。

次に、エキゾチックな言語(Haskelなど)で時間を費やさないでください。企業の話ですが、努力する価値のあるプログラムはほとんどありません。java(丘の王)、c#/ vb.net、php、sql。


0

Processingと呼ばれるJavaアプレットを書くための非常に簡単なプログラムがあります

この言語は、始めたばかりの場合、変数、ループ、およびそのようなことの非常に基本的な理解を提供します。


0

ここでいくつかの素晴らしい提案。おそらく個人的にはCまたはC ++を使用します。それらは、物事がどのように機能するかを理解する上で非常に重要ですが、他の言語では難読化される傾向がある多くの概念に対処することを強制します。物事が実際にどのように機能しているかを理解するだけで、後で使用している言語が詳細の一部を隠している場合でも、プログラマーとして役立ちます。

それよりも少し下のレベルを掘り下げたい場合、アセンブリは楽しいですが、それで多くを成し遂げることを期待しないでください。:)


0

Rubyをお勧めします。Rubyは、パラダイムの変更を要求しませんが、複数のパラダイムで作業することを奨励します。これの利点は、あなたが慣れている方法で仕事をすることができないことにイライラする代わりに、あなたが慣れている方法で物事を行うことの制限に不満から別のパラダイムを使用することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.