web-dev-qa-db-ja.com

実験言語を学ぶ価値はありますか?

私はいつか現場でプログラマーとして働きたいと思っている若いプログラマーです。 Java、VB.NET、C#を知っています。私は新しい言語を学びたいです(プログラマーとして、私が知っていることを拡張することは価値があることを知っています-あなたを別の考え方にさせる言語を学ぶために)。私はどの言語が一般的であるかをオンラインで調べました。誰もがCとC++を知っているので(一般にコンピューターについてほとんど知らないマグルであっても)、私はおそらくCをプッシュするべきだと思いました。

CとC++は素晴らしいですが、古いものです。 HaskellやForth(などなど)は古く、人気を失っています。これと同じ理由で、C(またはC++)を学ぶのが怖いです。 Javaもかなり古く、JVMによって実行され、ネイティブコードにコンパイルされていないため、動作が遅くなります。

私は長い間Windows開発者でした。私は最近Java-を使用し始めましたが、それはより用途が広く、他の場所に広がったからです。問題は、それが使用可能に見えないことですこれらの理由のための言語:

  • 最も使用される目的は、Webアプリケーションおよび携帯電話アプリケーション(特にAndroid)です。
  • それを使用して作成された実際の製品に関する限り、頭に浮かぶのは、Netbeans、Eclipse(作成の律法、およびIDE言語をIDE for-これは、HTML/CSS/Javascriptを作成するためのWebページを作成するようなものです)。
  • それ以外はサーバーに使用されますが、まさか-サーバーを作成/構成するだけではありません。

ただし、.NET言語は優れています。

  • 真剣な会話の中でVB.NETやC#に言及すれば、人々は笑います。
  • MONOを使用しない限り、クロスプラットフォームではありません(まだ開発中であり、いくつかの改善が必要です)。
  • Javaのように、CLRによって実行/管理されるため、低レベルのものに欠けています。

私の最初の考えは、Cのようなものを学び、それを使用してC++に踏み込むことでした(ただし、私が十分に理解/基盤を持っていることを確認するためです)。


私が調べたもの

Fantomは見栄えがいい。それは私の2つのお気に入りの言語間の素敵な仲買人のようなもので、2つの言語を交換して公開することもできますが、私が望むものとは異なり、完全なコンパイルではなく、CLRまたはJVM(公開先によって異なります)にコンパイルされます。

[〜#〜] d [〜#〜]も見えるいいね。それは非常に使いやすい言語のようであり、 multiple ソースからは、実際にはC/C++よりも優れているようです。私はそれですぐにジャンプしますが、現時点では明らかに主流ではないため、その成功はまだわかりません。

他にも、Web開発で Opa やGOOGLEの Go などの他のことに焦点を当てた、かなり見栄えのよいカップルがいくつかあります。


私の質問

これらの「実験的」言語を学ぶ価値はありますか?他の質問を読んだのですが、常に言語を習得しておらず、すべての言語に心を開いていないと、プログラミングに対する適切な考え方がないということです。私はこれを理解していますが、まだ十分に理解できていないかもしれませんが、実際、言語が主流にならないのであれば、何か他のことを学ぶことに時間を費やすべきでしょうか?私は古い(またはすぐに古くなる)プログラミング言語を学びたくありません。多くの人々がこれを何か重要なものと見なしていることを知っていますが、*しかし、あなたが実際にFORTRANを検討していることはありますか(まだ知っていなかったとしても)。私の目標は、私が将来成功することを確認するために最新の状態を保つことです。


免責事項

はい、私は若いプログラマーであるため、おそらく私の質問では多くの素朴な発言をしました。 自由に修正してください!どこかで学習を開始する必要があるので、私の知識の多くは、私の考えに誤った発言や欠陥を引き起こしたほどの大ざっぱなものです。感想はコメントに残してください。


結果...

私は本当に驚くべき反応に驚いています、それらのほとんどは私の誤解と誤解をとてもうまく指摘しています。私はこれからかなり多くを学びました、そして、うまくいけば私が学んだすべてをうまく利用することに興奮しています!私はおそらく次にHaskellを学習し始めます(notそう古い言語ですが、20歳以上-hahaha)そしてそれから始めます私の周りの他のいくつかのオプションを見てください。

ありがとう

25
Freesnöw

大幅に異なる言語を学ぶことは、言語を学ぶことではなく、問題へのさまざまなアプローチに触れることです。ツールボックスのツールはそのままです。

注意すべき点の1つは、Haskellは特に古くはなく、主流の言語に精通している人にとっては非常に優れた候補であることです。 LISPのような非常に古い言語でも、物事への影響のため、学ぶのに非常に役立ちます。

また、Javaおよび.Netは解釈されないため、その誤ったラベル付けに基づいて誤った仮定を行っていると思います。

29
Telastyn

健康を維持する:定期的に練習する

練習は完璧になります。

writeANDreadのコードが多いほど、Enlightenmentに近づきます/プログラマーとしての習得/開発者/ソフトウェアエンジニア/第一人者/忍者/職人/ハッカー/流行語。より多くのコーディングと読み取りを行うだけでなく、コードを記述する新しい方法を試すことで、よりオープンマインドな人が(願わくば)残ります。

おすすめの読み物:

新しいパラダイムと言語機能について学ぶ

新しいSuper-Language-Xで使用しているものをEnterprise-Language-Yに変換できないかもしれませんが、たぶんいつ認識できるでしょうそれはぴったりだったかもしれません。 たぶん特定の目的に合うようにプロジェクトに異なるテクノロジーまたはスタックを統合するタイミングを知ることができるでしょう。またはたぶん言語Yの機能を使用して言語Xのクールな機能をエミュレートし、コードをリファクタリングして、それから利益を得る方法(および他のco-途中で労働者)。

たとえば、 興味深いFP原理を発見し、それらをJavaに適応させたいと思うかもしれませんが、これは間違いなくFP)です

おすすめの読み物:

すべての取引のジャックになる...いくつかのマスター?

その「実験的」段階にあるときにどの言語が主力になるかはわからないので、そのうちの1つに賭けることについてあまり心配する必要はありません。おそらく、他の人々が同じ賭けをし、それらがあなたの履歴書に現れるのを見ると興味をそそられるでしょう。ベルトにツールを1つ追加します。私たちの場合、最終的にどれだけ重くても問題はありません。

もちろん、すべての取引のマスターになることはできません。しかし、あなたは1つのマスターになり、残りはかなり上手になるでしょう。あなたは工芸品を学んでいます、そして私たちのものは多面的です。定期的にエクササイズをしたり、ワークショップに参加したり、本を手に取ったり、新しいペットプロジェクトを書いたりすることは、私たちの分野で変化し続ける変化に対応するための方法です。

おすすめの読み物:

順応性を保つ

適応することを学ばなければ、必要なときにそれを行うのは困難です。常に新しいことを学ぶことで、新しいものを拾うたびにどんどん良くなります(非常によく似た課題に束縛されない限り)。

"Stay Young"オアシスの曲のようです:Stay young and invincible

順応できれば、生き残ることができます。

おすすめの読み物:

可視性を維持:募集代理店のレーダーを理解する

キーワードとテクノロジーをチェックボックスとして使用します。私たちは、無知な採用担当者のためのハニーポットとしてそれらを使用します。

それは両方の方法で機能します。あなたが本当に自分のものを知っている限り、履歴書にたくさんのものを置くのは良いことです。それはあなたの適応性と知識の幅広さを示しています。さらに、これらのいくつかを実際にマスターし、他のいくつかではまともな場合、それはあなたがあなたの履歴書の異なるバージョンを異なるポジションと仕事のために調整することを可能にします。


その他の役立つSEトピック

23
haylem

Telastynの答えを拡張するために、それは確かに異なるプログラミングパラダイムへの露出についてです。たとえば、それはロジックプログラミングの学習についてではなく、次のことを目的としています。

  • 学ぶことを学ぶ(新しいスキルを学ぶ練習)
  • 新しい方法で考えるように脳を訓練する
  • あまり一般的ではない(または難解な)知識を得て、ほとんどの人が持っておらず、役に立つかもしれない
    • または少なくともあなたの技術的な知識でそれらを印象づけます:)
  • そしてもちろん、それは貴重な技術的洞察を提供します。 C#がDよりも人気があるのはなぜですか? C++はDができることすべてを行うことができますか? Dはもっとできるのですか、それとも構文糖のようなものですか?

http://skilldrick.co.uk/2011/02/why-you-should-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/

Brainf * ckを学ぶもう1つの理由は、チューリング完全プログラミング言語の基本を理解することです。プログラマーが言語を比較するときの一般的な議論は、「まあ、それらはすべてチューリング完全だ」ということです。つまり、ある言語で実行できることはすべて、別の言語で実行できます。 brainf * ckを習得すれば、チューリング完全言語を使用することがいかに難しいか、そしてその議論がいかに根拠がないかを理解するでしょう。

http://norvig.com/21-days.html (Peter Norvig)

少なくとも半ダースのプログラミング言語を学びます。クラスの抽象化をサポートする1​​つの言語(JavaまたはC++)、関数の抽象化(LISPまたはMLなど)をサポートする言語、構文の抽象化(LISPなど)をサポートする言語、宣言仕様をサポートする言語を含める(PrologまたはC++テンプレートのように)、コルーチンをサポートするもの(IconまたはSchemeなど)、および並列処理をサポートするもの(Sisalなど)。

8
Astyanax

私の最初の考えは、Cのようなものを学び、それを使用してC++に踏み込むことでした(ただし、私が十分に理解/基盤を持っていることを確認するためです)。

ええと、これは誤った膨大な山です。 Cを知っている人は難しい C++の学習に時間を費やしています。なぜなら、言語の使い方について知っていると思っていることのほとんどすべてが、間違いの山であるからです。リモートで優れたC++でさえある、慣用的なCは事実上ありません。 C++をゼロから学ぶほうがよいでしょう。私のように、他の人々がC++を学ぶのを助けるために時間を費やしている人々は、C-習慣を落とすように人々に教えるために大規模の割合を費やしています。

人気に関して言えば、C++ isは最近、ちょっとした再出現を経験しています。実際、パフォーマンスdoesが重要であり、すべてのコンポーネントをマネージドコンポーネントとして実行することは避けられないことに気づき、Modern C++(特にC++ 11)はまったく似ていません。 Cのゴミだと思っていたので、それほど悪くはありません。それは本当に年をとっていません。新しいものになっています。新しい標準は大幅なアップグレードであり、現在C++が使用されている多くの分野で、現在またはパイプラインにある適切な代替言語はありません。まともなC++相互運用性(C++自体も含む)を備えた言語がなく、既存のC++コードベースからの移行を困難にしているためです。

真剣な会話の中でVB.NETやC#に言及すれば、人々は笑います。

新しい人を取得します。申し訳ありませんが、VB.NETは、VB6からの移行を支援することを除いて、何らかの理由で実際には存在しません。また、C#は実際の言語であり、実際には価値のある目標ではありません。実際の言語機能といくつかの素敵なライブラリを追加したことを除けば、Javaに少し似ています。 C#は、VSで非常に優れたツールを備えた非常に人気のある十分にサポートされた言語であり、それをひどくはしゃぎません。

MONOを使用しない限り、クロスプラットフォームではありません(これはまだ開発中であり、いくつかの改善が行われています)。

MONOはかなり安定しています。さらに、最終的に、デスクトップコンシューマの90%(または80%でしたか?)が現在Windowsを実行しています。デスクトップアプリケーションを開発する場合、クロスプラットフォーム言語を使用していても、Windows以外のユーザーがサポートする価値があるかどうかについては未解決の問題です。

最終的には、C++やHaskellなどの言語を学ぶことで多くを得ることができます。C++やHaskellは、大規模なランタイムではなく強力なコンパイラテクノロジーに焦点を当てています。

PHPを選択しないでください。そのことから学べる唯一のことは、言語を構築しない方法です。

7
DeadMG

あなたが言ったことに対するカップルのコメント...

1)Cが古くても、すべてのプログラマーがCを学ぶ必要があります。マシンに近づくための素晴らしい言語です。 Joelの CS学生へのアドバイス ....から.

卒業する前にCを学ぶ

パート2:C.私がC++を言っていないことに注意してください。 Cはますますまれになっていますが、それでもプログラマーの共通言語です。それは、彼らが互いに通信するために使用する言語であり、さらに重要なことには、ML、Java、Pythonなどの流行のジャンクを教えている大学で教えられる「現代の」言語よりも、マシンにはるかに近いということです。日々。少なくとも1学期はマシンに近づく必要があります。そうしないと、高レベルの言語で効率的なコードを作成することができなくなります。コンパイラやオペレーティングシステムで作業することはできません。これは、最高のプログラミングジョブの1つです。大規模なプロジェクト向けのアーキテクチャを作成する信頼を得ることは決してありません。継続とクロージャ、例外処理についてどれだけ知っているかは気にしません。理由を説明できない場合(* s ++ = * t ++);文字列をコピーする、またはそれがあなたにとって世界で最も自然なことではない場合、まあ、私が考える限り、あなたは迷信に基づいてプログラミングしています:基本的な解剖学を知らない医師が、製薬販売の可愛い人が効くと言ったことに基づいて処方箋を出します。

2)言語は、一般的に使用されていなくても、考え方を学ぶのに適しています。 Scheme(またはLISP)を学んで、トレンディでなくても関数型プログラミングを理解してください。 このボードの別の投稿 から。

おめでとうございます。コンピュータサイエンスを教えようとしている残りの数少ない学校の1つに行くように思えます(私にとって)。第一言語としてのSchemeの学習は(IMO)非常に良いことです。いいえ、それは他の多くのものほど商業的ではありませんが、コンピュータサイエンスの本質を学ぶための優れた言語です。 – Jerry Coffin、2011年10月20日3:32

C、C++、およびJavaはコンピュータサイエンスの副産物です。Schemeのルーツはすべてコンピュータサイエンスにあります。商業利用の言語は、マクドナルドが料理に関係しているのと同じくらい、コンピュータサイエンスに関係しています。 – JasonTrue 2010年10月20日5:30

これらの人は正しいです。コンピュータープログラミングとコンピューターサイエンスを混同している-ダイクストラが言ったように、それは望遠鏡の構造を天文学と混同しているようなものです。 Schemeは、コンピュータサイエンスの基本的な概念を学ぶのに最適な言語です。コンピュータサイエンスの学位を取得することは、Javaで基幹業務アプリを作成する方法を学ぶことであると期待している場合、間違ったプログラムに登録している可能性があります。 – Eric Lippert、2011年10月20日7:40

私が知っているほとんどすべての開発者は、自分でC/C++を学びました。そのために大学は必要ありません。 – mouviciel 2011年10月20日7:48

動物学コースが象の屋台をいじくる方法ではなく、進化生物学、解剖学、動物の行動を教えるのと同じ理由で-jk。 10月20日11で7:58

今、あなたの元の前提を攻撃しているにもかかわらず、私はあなたの好奇心を称賛されるべきだと思います。好奇心が足りないために時代遅れになる人が多すぎます。あなたの個人的な成長を利用することは、あなたが上手に成長することを示す大きな兆候です。最もよく学ぶ人々は、物事がどのように機能するかを尋ね続けようとする人々です。

6
MathAttack

あなたが学ぶどんな言語も、今後5年間で変わるでしょう。それはあなたがしばらくあるかもしれないと思う言語を学ぶことではなく、むしろ学ぶ方法を学ぶことです。言語の学習にさらされる機会が増えるほど、その言語を学習するプロセスが長期的に非常に役立ちます。

私が最後に働いた会社は、独自の社内言語を使用していました。 Visual Basicに似ていましたが、同じではありませんでした。私が他の言語を知っていたという事実だけのために、私は他の従業員よりもはるかに速く彼らの言語を習得することができました。

C++、BASIC、Pascalを学んだ後、日本語を学びましたが、コンピューター言語と外国語を学ぶことは同じスキルを身につけていると言えます。これらのスキルは失われるか、研ぎ澄まされる可能性があります。意欲があるなら、続けて新しい言語を学びましょう!

(ps。FORTRANまたはアセンブリの学習に関しては、少なくとも古い言語の1学期を取ることは価値があると思います。これは、新しい言語で当たり前のこと、フラグ、メモリ割り当てなどについて考えることを可能にします。)

3
BillyNair

プログラマーになりたい場合は、できるだけ多くの「古い」言語を学ぶことをお勧めします。 LISPから始めて、Forthを十分に理解し、すべてのWirth言語の進化、Fortranの進化、Prologの興亡に注意を払い、秘密のAdaエコシステムに潜入し、Occamの学習から秘密の武器を手に入れましょう。 「主流」を追いかけることは、意欲的なプログラマーが今までにできる最も愚かなことです。

3
SK-logic

物事の露出部分についてはあなたに同意します。私はJava、C、C++、Javascript、Python、Rubyおよび.NETを少し知っています(主に私はM $ <-個人的な意見を嫌うので)知っていますが、私はDでのプログラミングは本当に大好きです。

Dには本当に素晴らしい機能セットがあります(それらのほとんどはC++/Java(クラス抽象化を持つ言語)などで実装されています)が、私が最も気に入っていることの1つは、ジェネリックスとデリゲートです(コールバックの実装が簡単になります)。それとは別に、C++に比べてはるかに単純な構文を扱うことができます。 Dは非常に効率的なガベージコレクターを備えていますが、メモリを自分で処理することを選択できます(特にC/C++モジュールとのインターフェースの場合)。 Dには、ユーザーが投稿するモジュールの負荷がありませんが、エントリーの障壁にはなりません。既存のC/C++ライブラリ(十分な数のライブラリ)と簡単にインターフェイスできるため、モジュールの必要性に対して冗長になります。

Dには独自の標準ライブラリ(Phobos)があり、すべての一般的なプログラミング問題のニーズに対応しています。 Phobosまたは単独で使用できる代替ライブラリ( Tango-D2 )もあります。 Web開発者であり、イベントベースのサーバーを作成する必要がある場合、TangoにはNice Selector抽象化(select()、poll()、epoll()のみのtango.io.Selector)があります。 libevよりもパフォーマンスが優れていることがわかりました。

2
Shripad Krishna

PostscriptやAPLなどの言語でプログラミングを学ぶことは、おそらくその知識を使用する可能性がゼロに近づくため、間違いなく時間の無駄だと言えるでしょう。しかし、同じことを言えば、RubyとPythonは、何かにそれらを使用するつもりがない場合は時間の無駄です。

しかし、LISPをPostscriptとして作成する必要がある場合でも、LISPの学習は無駄であると言う人はほとんどいません。しかし、LISPを学ぶと、問題について(うまくいけば)別の考え方をするように教えられます。そのため、ほとんどのプログラマーは、それがあなたの時間に見合う価値があると言います。

それでも、必要な時間の投資は実際には1〜4時間しかないので、私は新しい言語を学ぶことをためらいません。そしてLuaのような言語の使用は最も珍しい場所でポップアップします。そして、例を数時間かけて実行していなければ、それらを認識していなかっただろう。

新しい言語を見つけたら、それが何に役立つかを少し読んでください。それがニッチであるなら、あなたの好きな言語があまりカバーしません、そして、基礎を学ぶために一日かかります。 確かに、学士号のシーズン17を見るよりも時間を費やす方が良いです。それ以外の場合は、時間を浪費する可能性があります。そうすれば、それを使うと、頭に浮かぶことができ、どこで詳細を確認できるかがわかります。

個人的にはGoを調べることをお勧めします。これを使用して、CまたはC++で3日かかる13ページのサードパーティライブラリよりもパフォーマンスの高いシングルページプログラムを作成しました。 Python、C#、Rubyなどでさえ不可能です。それは本当に、本当に、本当に自分のものを知っている人々によって設計されました。

1
tylerl

言語は、ある種のドメインの問題を解決するために開発されています(少なくとも最初は)。ツールで問題を解決できない問題に直面していない場合は、大工になることを期待して木の板を叩きます。言語が解決しようとしている問題の種類を理解しようとします。 「実験的」言語と新しい/ヒップなクールな言語の唯一の違いは、それをサポートするお金です。たとえば、Go from googleやDartです。それらが私の裏庭で開発された場合、それらはおそらくいくつかのフォーラムで死ぬでしょう、それだけです。彼らは、彼らが解決しようとしている問題を説明するのが得意である場合にのみ生き残ります。あるいは、PerlやC++のように、問題を解決して生き続けるための方法を吸収するのが得意な逆の方法もあります。そして、私はLuaを学ぶことをお勧めします、それはプログラム内に埋め込むために作られた言語であり、それは非常に高速で軽量であり、Javaのような一部の言語ができる大きな問題または小さな問題を解決するためのツールを提供しますt簡単な方法で解決します。日本語を例に取ると、文化、文化を無視して、構文、文法、アルファベットを習得しただけでは、なぜそれほど複雑であるかを理解できず、結局すべてについて忘れてしまいます。 。

1
alfa64

複数の異なる言語を学ぶことは、プログラミングのより広い視野を提供します。 「異なる」を強調-例C#とJavaを学ぶことは、それらの1つだけを学ぶこと以上のことをあなたに教えることはありません。しかし、C#やJavaを学ぶこと、そして関数型言語(例えば)は学ぶことになります。

そうは言っても、若いプログラマーとして、さまざまな種類の言語を見て回る前に、1つの言語を本当にしっかりと理解することで、より多くの価値を得ることができると思います。 Java、VB.NET、C#をどれだけよく知っているかは、あなたの質問から完全に明らかではありません。上記の言語のいずれかを使用してプロジェクトを攻撃した場合、ボトルネックは言語自体の知識ではなくプロジェクト自体であると確信していますか? 「languageでこれを行うにはどうすればよいですか?」実際の問題について考えるよりも、おそらく現在の言語の1つにもっと焦点を合わせる必要があります。

そして、個人的には、どちらであるかを決定するために実用的なアプローチを取るべきだと思います。 Java is used for Android apps?Great、if if make if Android apps are you're興味のあるものです。無関係の場合C#はWindows以外の開発にはあまり適していませんか?Linux向けの開発に関心がある場合は悪いニュースですが、そうでない場合は関係ありません。

そして、あなたが言及した「実験的な」言語は?実用的には、他の人との作業に関してはあまり適していません。Fantomを知っているすべての人に、C#またはJavaを知っている人がおそらく1000人いるはずです。個人的なプロジェクトでは、これは必ずしも問題ではありません。

1
Carson63000