web-dev-qa-db-ja.com

プログラミングの基礎が強力であれば、どのプログラミング言語でも簡単に習得できます。事実か神話か?

プログラミングの基礎がかなり上手な人なら、どんなプログラミング言語でも簡単に習得できるというのは本当ですか?

まあ、プログラミング言語と言うときは、PHP、Perl、Rubyなどのアジャイルで動的な言語を指しますが、昔のプログラミング言語は指しません。

私はある程度、Java、Groovy、Flexのみに取り組んできました。それで、私がアマチュアプログラマーであるが速い学習者であるという事実を大まかに考えると、そのような言語のいずれかに足場を置くのにどのくらいの時間がかかりますか?

33
Vamsi Emani

はい、予約があります。

4週間前、私はCおよびC++のプロレベルのスキルと、Javaのアマチュアレベルのスキルを持っていたと思います。上司から、JavaScriptでソフトウェアを作成するように依頼されましたが、これまでに経験がありませんでした。

次の2週間で、私は多くのサンプルコードスニペットを読み、すべてのすばらしいライブラリを見つけて、プログラムを書きました。完了しました。それから先週、私はJavaScriptの本を購入しましたが、それを読んでいて、何をしているのかわかりませんでした。これで、オブジェクトが奇妙に動作する理由がわかりました。

だから今、私は少しJSを知っています。私はそれを読んで操作することができますが、私が書いている内容は非効率的で読みにくく、ベストプラクティスに従っていないと確信しています。

一般的に、速い学習者は1週間かかり、低品質の製品を新しい言語で作成し始めることができます。 Javaを知っている場合は、C、C++、PHP、Python、JavaScriptをすぐに選択できますが、コードを変更したり、明確に定義された関数を作成するには十分です。 (正規表現は複雑であるため、Perlはより難しいかもしれません。)新しい言語でシステムを適切に構築するには、経験豊富なメンターのもとで1年間専門的に開発する必要があります。

46
Brad

基本的には答えは「はい」であり、「いいえ」です。それは、fundamentalsおよびmasteredの意味によって異なります簡単に

事実

  • プログラミングの基本を知ることは、言語に関係なく役立ちます。ここでの基礎とは、特定のパラダイムに固有ではないことを意味します。アルゴリズム、抽象化レベル、分離など。

  • 特定のパラダイム(OOP、機能など)の基本をよく理解していれば、同じパラダイムをサポートする言語を簡単に学ぶことができます。言語を熟知していれば、同じ家族の言語をすぐに習得することができます。

  • 同じファミリですべての言語を学習することで、次の言語がはるかに簡単になります。この学習曲線が、ご存知のように指数関数的に速くなっても、驚くことはありません。

神話

  • よく理解している新しい別のパラダイムに移行するとき、最初のパラダイムの言語は、同じ家族で言語を学ぶほど役に立ちません。実際、それらの違いにもよりますが、前に進んで新しいパラダイムを実際に理解する前に、いくつかのことを最初に学習する必要があります。

---コメントに基づいて最後のセクションを編集---

事実...

  • 最初のパラダイムを知るcan次を学ぶのに役立つ...

だが

神話

  • 生意気にならないでください、それがあなたを遅くするだけでなく、3番目のパラダイムのためにまったく役に立たないのです。
28
Newtopian

類似言語の場合、はい

根本的に異なるパラダイムを持つ言語の場合、それほどではない

例:C++を知っていて、Javaを簡単に学びたいとします。あなたはVB.NETを知っています、あなたはPrologを学びたいです...ケーキ全体、おそらく3つまたは4つのケーキ

14
Steven A. Lowe

簡単な答えは「真実だが確認が難しい」だと思います。言語の実際の構文よりも、密接に関連するAPI、使用法、イディオム、およびパラダイム(OO、関数など)を学ぶことは非常に困難です。プログラミングの基礎とコンパイラに関するある程度の知識と経験があれば、言語自体は簡単に征服されると思いますが、補助的なもののために習得するのは困難です。

明確な例は、ある言語から別の言語へと移行することです。 CからJava。コードの構文はCスタイルのプログラムとよく似ていますが、Java api(ジェネリック、ガベージコレクションなど))についても知っておく必要があります。一部のサードパーティフレームワーク(Spring、jUnit、Hibernateなど)は、ビジネスに役立つ何かを行うため、Cを以前に実行したことがあれば、言語構文は問題ではなく、それが残りです。

これは、Java、C#、Javascript、HTML、CSS、Delphiなどを知っている私からのものです。私が使用するフレームワークやライブラリについて隅々まで知っているわけではないかもしれませんが、私は自分の道を知っており、以前とは異なるものを使用した私の経験。 「素早い学習者」にとって、それは本当にすべて側面的な思考です。

4
Spoike

知っておく必要のあるコンピュータサイエンスの基礎には、数学的基盤(集合論、論理、グラフ理論、代数、情報理論、アルゴリズム情報理論など)だけでなく、それぞれから少なくとも1つ、多数のプログラミング言語も含まれますグループ-つまり、1つの命令型(おそらくOOPを使用しますが、そのビットは必須ではありません)、1つの熱心な関数型、1つの遅延関数型、1つの論理型、1つは連結型、またはスタックベースです。

このベースがあれば、与えられた新しい言語をすぐに簡単に学ぶことができます。一部のビットが欠落している場合、深刻な抵抗に直面する可能性があります。

そして、言語を完全に学習する最良の方法は、その重要なサブセットのためにおもちゃのコンパイラーまたはインタープリターを実装することです(もちろん、標準ライブラリーなし-これは、どの言語でも最も複雑で最も退屈な部分です)。

3
SK-logic

ここでのコンセンサスは、良好なファンダメンタルズを持つことがある程度役立つことであり、私はそれに同意しません。しかし、他の答えから欠落している1つの点は、言語のイディオムを拾う問題であり、私は言語を習得するには、慣用的にそれを書く必要があると思います。

たとえば、usingステートメントを使用してオブジェクトを自動的に破棄せずに、完全に正しいC#の連を書くことができますが、よく書かれた慣用的なC#ではusing {...} 大いに。私はこの構成を持っているnone-.Net言語を知りません(他の人はほとんど知りませんが、私のJavaはかなり錆びているので間違っている可能性があります)。この機能を持たない別の言語からは、このイディオムを一から学習する必要があります。

2
Steve

これは、「かなり良い」と「簡単に」の定義についての真の声明です。

基本をよりよく理解すればするほど、ある言語から別の言語への移行が容易になります。たとえば、オブジェクト指向言語を十分に理解しているJavaプログラマである場合、JavaとC#の基本的な構文の違いは、 1〜2週間でマスターするのは簡単です。関連するすべてのライブラリの機能がどのようにマッピングされるかを理解するには時間がかかりますが、1〜2か月で基本的なライブラリを適切に処理できるでしょう。 、それは、言語Aの問題に対する標準的なアプローチが言語Bの標準的なアプローチに直接変換されない場合(つまり、JavaのJPAではなくC#のLINQを使用したい場合)を理解し、十分に快適になることの問題です古い言語で考えて「翻訳」するのではなく、新しい言語で考えます。通常、マップを使用する機能に応じて、3〜6か月かかります。6か月の時点で、エキスパートJavaプログラマはおそらくかなり効率的でしょうntおよび有能なC#開発者。しかし、何でもそうであるように、言語の一部ではないが周囲のエコシステムの一部であるさまざまなライブラリやアドオンを習得し、一般的にその言語の開発者として自分自身を向上させるために、すべての複雑な詳細を何年も費やすことができます。

1
Justin Cave

それは、新しい言語を学ぶための人の熱意に完全に依存していると思います。ファンダメンタルズが強力で、新しい言語が何かをどのように解釈するかを理解できれば、どの言語でも簡単に学ぶことができます。

一番良い例は自分です。私はC#でほとんどの仕事をしてきましたが、かなりの数の言語を扱ってきましたが、Cからキャリアを始め、C++、Java、VB、PHP、スクリプト言語、Perlなどを学びました。今期中どこでも、この言語を学べないなんて感じたことはありませんでした。

1
JPReddy

新しいプログラミング言語を習得することは決して難しいことではありませんでした。逆に、ほとんどの場合、とても楽しかったです。しかし、私が見たが理解できなかった言語があります。その背後にあるアイデアがあったとしても、それを理解することができなかったためです。その一例がCOBOLですが、私は、DIVISIONとSECTIONに何を入れなければならないのか、そしてその理由を理解できませんでした。他の例はPHPとGroovyです。PHPを使用して、Perlがあるとすれば、なぜ最初にそれが必要になるのかを理解しようとしました。おそらく誰かがGroovyでは、その背後にある概念の一部も理解できません。

1
Ingo

それはすべて異なります。

それがよくある答えです...

しかし、ファンダメンタルズはどういう意味ですか ?? 1つのパラダイム(OOなど)の基礎を持っている多くの人々は、他のパラダイム(機能など)の基礎を持っていません。

OOから来て、すべてのデザインパターンを知っている多くの人々は、機能的なデザインパターンや、リストの理解、カリー化、末尾再帰、クロージャーなどの手掛かりがないかもしれません...

だからはい:ファンダメンタルズがすべてのパラダイムのファンダメンタルズを意味する場合。

この場合の問題は、javascriptが手続き型のように多くのパラダイムを使用することです。OOおよび少し機能的で、Java、c ++などからの奇妙なスコープがあります...

そのため、この場合、ファンダメンタルズは役に立ちませんが、ここでより多くの基礎を学び、それでも別の言語に変換することは、ツールボックスに表示されるパターンが増えるほど、ますます簡単になる可能性があります。

1
Peter

コンピュータプログラミングの芸術は、あなたが何を意味するかを正確に維持する芸術であることを忘れないでください。したがって、JavaからExcelからVisual Fortranへのアクセスに至るまで)をコンピュータに指示する手段はすべてプログラミング言語です。

そして、一部の言語は単にひどいです。私見ExcelとBasicは悪い言語です。 JavaとC++は優れた言語です。FileMakerスクリプトはひどい言語です。ずさんでない場合、HTMLは優れたものになる可能性があります。

あなたはそれを学ぶことができますか?よろしければ。それが悪い場合は、嫌悪感のしきい値に依存します。あなたが吐き気を出したいことは学ぶのが難しいです。

すでに言語Xを見て、それで遊んだことがない限り、プロジェクトで言語Xを使用することをすべてコミットする必要はありません。

0
Andy Canfield

答えは「これは神話ではない事実です!」です。

私はあなたと同じです。つまり、さまざまなテクノロジー、つまりさまざまな分野で働いてきました。 Java、.net、および最近iPhoneで動作したAndroidおよびブラックベリー。

ネットには多くのリソースがあります。情報に目を通し、それを理解して、それを実装し、さらに進んでください。

実際、「テクノロジーは開発者のために作られているのではなく、開発者がテクノロジーのために作られています。テクノロジーの変更はありますが、開発者はそうではありません」。

:)

0
necixy