プログラミングの基礎が強力であれば、どのプログラミング言語でも簡単に習得できます。事実または神話?[閉まっている]


33

プログラミングの基礎がかなり優れている人であれば、どんなプログラミング言語でも簡単に学べるというのは本当ですか?

プログラミング言語とは、PHP、Perl、Rubyなどのアジャイルでダイナミックな言語を指しますが、遠い昔のプログラミング言語ではありません。

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


1
「Any」を「Most」に置き換えます。

4
言語を「アジャイル」にするものは何ですか?アジャイルは開発プロセスだと思いました。
-oosterwal

17
簡単に習得できましたか?いいえ。簡単に学習できましたか?はい。マスタリーとは、あらゆる言語で何年も使用する必要がある専門知識のレベルを意味します。基礎が整ったら、どの言語を使用するかを学ぶことは当然のことです。
ジョエルイーサートン

1
いいえ、similair言語の場合にのみ当てはまります。Javaを知っていてもHaskellを学ぶことはできませんが、C ++などを学ぶことはできます。PHPを知っていてもアセンブリを学ぶことはできませんが、Rubyを学ぶのに役立ちます。
iveqy

回答:


46

はい、予約あり。

4週間前、私はCとC ++のプロフェッショナルレベルのスキルと、Javaのアマチュアレベルのスキルを持っていたと言えます。私の上司は、JavaScriptでソフトウェアを作成するように頼みました。

次の2週間で、多くのサンプルコードスニペットを読み、すべてのクールなライブラリを見つけて、プログラムを作成しました。完了し、機能します。それから先週、私はJavaScriptの本を買ったのですが、それを読んでいたのです。今、私は私のオブジェクトがとても奇妙に振る舞っていた理由を理解しています。

だから今、私は言う、私は少しJSを知っています。私はそれを読んで作業することができますが、私が書いているものは非効率的で読みにくく、ベストプラクティスに従っていません。

一般に、速い学習者は1週間かけて新しい言語で低品質の製品の生産を開始できます。Javaを知っている場合は、C、C ++、PHP、Python、JavaScriptをかなりすばやく見つけることができますが、コードを変更したり、明確に定義された関数を記述したりするには十分です。(正規表現は複雑であるため、Perlはより困難になる場合があります。)新しい言語でシステムを適切に設計するには、おそらく経験豊富なメンターの下で1年間専門的に開発する必要があります。


18
私はそれが2年かかると言うことを敢えてします。1年目は比較的上手になり、2年目は比較的上手になります。
ティムポスト

4
私は何十年も前に(十数個の言語を学んだ後)この経験をしました...私はエイダで働かなければなりませんでした。Adaでコードを書くのに数日かかりました。言語/ランタイムシステム設計者のヘッドスペースに本当に入り込み、良いコードを書くのに1年かかりました。
すぐに

1
正直に言うと、私もこの方法でJavaを学びました。私は現在1年のマークであり、「比較的熟練している」は正確だと思います。
ブラッド

1
その理由は、あなたのファンダメンタルズは、多分強力であっても、それほど広くないところです。クロージャ、リストの理解、他のデータ構造、jscriptの前のスコープ規則など、他の言語を知っていた場合は、問題が少ないかもしれません。
ピーター

上司(VBで数年の経験がある)が書いたコードを読むまで、VB.netで同様の経験をしました。重複コードのようなコードの匂いは、言語を超越する傾向があります!
-DisgruntledGoat

28

基本的に答えはイエスです...そしてノー...それはあなたがファンダメンタルズによって何を意味し、簡単に習得できるかにかかっています。

事実

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

  • 与えられたパラダイムの基礎(OOP、機能など)をよく理解することで、同じパラダイムをサポートする言語を簡単に学習できます。言語を熟知していれば、同じ家族の言語をすばやく見つけることができます。

  • 同じファミリーで学習したすべての言語では、次の言語がはるかに簡単になります。この学習曲線があなたが知っているほど指数関数的に速くなっても驚かないでしょう。

神話

  • 新しい別のパラダイムに移行するとき、最初のパラダイムの言語をよく知っていることは、同じ家族で言語を学ぶほど役に立ちません。実際、両者の違いによっては、前進して新しいパラダイムを実際に理解する前に、まずいくつかのことを学ばなければならない場合があります。

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

事実...

  • 最初のパラダイムを知ることができますが、次の学習を助けます...

しかし

神話

  • むかつくならないでください。3番目のパラダイムでは、速度が低下したり、まったく役に立たなかったりします。

最後の1つを除いてすべて良い。逸話的に、Cのような手続き型プログラミング言語を知ることは、Prologのような論理言語を学ぼうとすると何の助けにもなりませんでした。私の場合、それは邪魔になります。==>「A:しない」。
スティーブンA.ロウ

2
私がここで聞いた事例証拠は、Schemeでプログラミング初心者をかなり簡単に始めることができることを示唆していますが、BASICまたはC#またはそのようなもので最初にプログラミングしている場合ははるかに困難です。
デビッドソーンリー

1
@Steven&David:最後の1つについては確信が持てませんでした。私は手続き型からオブジェクト型、機能型に移行しましたが、まだロジックファミリを試していません。時間が経つにつれて経験は楽になりましたが、あえて一般化しないでください。コメントに基づいて回答を修正します。
ニュートピア

14

いずれについても同様の言語、はい

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

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


1
同意する。まったく異なる哲学に従っている言語がいくつかあります。したがって、たとえばCのような命令型言語からPrologのような論理プログラミング言語に多少の労力をかけずに切り替えることは簡単ではありません。
サキスク

4

私は簡単な答えは「ある種の、しかし検証するのが難しい」と信じています。密接に関連付けられたAPI、使用法、イディオム、およびパラダイム(オブジェクト指向、機能など)を学ぶのは、言語の実際の構文よりも非常に困難です。プログラミングの基礎知識とコンパイラーの知識がある場合、言語自体は簡単に征服できると思いますが、補助的なものがあるため習得が困難です。

明確な例は、ある言語から別の言語に移行することです。CからJava。コードの構文はCスタイルのプログラムによく似ていますが、Java API(ジェネリック、ガベージコレクションなど)を知っている必要があります。現在の「ITランドスケープ」では、サードパーティフレームワーク(Spring、jUnit 、Hibernateなど)を使用して、ビジネスに役立つことを行います。したがって、以前にCを実行したことがある場合、言語構文は問題ではなく、残りの問題です。

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


私はこれに完全に同意します。ベストプラクティス/ api /人気のあるライブラリ/などを学習するには、プログラミング言語の構文を学習するよりもはるかに長い時間がかかります。それは本当の挑戦の嘘であり、言語とそのエコシステム。
jviotti

3

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

このベースを使用すると、特定の新しい言語をすぐに簡単に習得できます。一部のビットが欠落している場合、深刻な抵抗に直面することになります。

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


2

ここでのコンセンサスは、優れたファンダメンタルズを持っていることはある程度助けになるということです。私はそれに反対しません。しかし、他の答えに欠けている点の1つは、言語のイディオムを取り上げる問題です。言語を習得するには、慣用的にそれを記述しなければならないと思います。

たとえば、usingステートメントを使用せずにオブジェクトを自動的に破棄することなく、完全に正しいC#の連を書くことができますが、よく書かれた慣用的なC#ではusing {...}多くのことがわかります。私はこのコンストラクトを持つネット言語を知りません(他の言語はほとんど知らず、私のJavaはかなり錆びているので間違っているかもしれませんが)機能は、このイディオムをゼロから学ぶ必要があります。


LispとSchemeで広く使われている同様のイディオムがあるので、その背景から来た人にとって新しいものではなく、新しい言語でこの機能を意図的に探します。
SKロジック

はい。ただし、PascalやADAなどから来ている場合、まったく新しいイディオムになります。
スティーブ

それがまさに、新しい言語を学び、ツールを賢く選択するために、各グループの少なくとも1つの言語を知っている必要があると私が信じる理由です。
SKロジック

@ SK-logic: "using"や "try ... finally"のようなものを見たとき、Common Lispの "unwind-protect"に相当するものとして理解するのに問題はありませんでした。ただし、そのような言語機能は、特定のマルチパラダイム言語の選択では表示されない場合があります。
デビッドソーンリー

1

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

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


1

私はそれが完全に新しい言語を学ぶ人の熱意に依存すると言うでしょう。基礎が強力で、新しい言語がどのように解釈するかを彼が理解できれば、どの言語を学ぶのも非常に簡単です。

最良の例は私の自己です。私はほとんどの仕事をC#で行ったにもかかわらず、かなりの数の言語で働いてきましたが、Cからキャリアを始め、C ++、Java、VB、PHP、スクリプト言語、perlなどを学びました。この言葉を通してどこでも、私はこの言語を学ぶことができないとは思わなかった。


3
そして、あなたが説明した言語は、多かれ少なかれ互いに似ています。挑戦のために、Haskell、またはScheme、Forth、またはPrologを学びましょう。
デビッドソーンリー

1

新しいプログラミング言語を学ぶのは決して難しいことではありませんでした。それどころか、たいていはとても楽しかったです。しかし、私が見たが理解できなかった言語があります。なぜなら、もしあったとしても、その背後にある考えを理解できなかったからです。1つの例はCOBOLです。どの部門と部門に何を入れなければならないのか、そしてその理由は理解できませんでした。他の例は、PHPおよびGroovyです。PHPでは、perlがあるので、そもそもなぜPHPが必要なのかを理解しようとしました。おそらく誰かが説明できます。Groovyでは、その背後にある概念も少し理解していません。


1

それはすべて依存しています。

私はそれがしばしば答えであることを知っています...

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

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

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

この場合の問題は、javascriptが手続き型、オブジェクト指向、関数型などの多くのパラダイムを使用し、java、c ++などからの奇妙なスコープを持つことです...

したがって、この場合、基本は役に立たないが、ここでより基本的な部分を取り上げて別の言語に変換しても、ツールボックスで取得するパターンが増えれば増えるほど、簡単になります。


0

コンピュータープログラミングの技術は、まさにあなたが言うことを維持する技術であることを忘れないでください。そのため、JavaからAccess、Excel、Visual Fortranまで、何をするかをコンピューターに伝える手段はプログラミング言語です。

また、一部の言語は単純に悪いです。IMHO ExcelとBasicは悪い言語です。JavaとC ++は優れた言語です。FileMakerスクリプティングはひどい言語です。ずさんな人でなければHTMLは優れたものになります。

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

すでに言語Xを見てプレイしたことがない限り、プロジェクトで言語Xを使用することをすべてコミットしないでください。


0

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

私はあなたと同じように、さまざまなテクノロジーで働いてきました。java、.net、最近ではiPhone、Android、およびBlackberryを使用していました。

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

実際、「技術は開発者のために作られたものであり、開発者は技術のために作られたものではありません。技術は変わりますが、開発者はそうではありません」。

:)

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