ほとんどのプログラマーは、他のものを残して単一のスタックに特化していますか、それとも同時に複数の言語の専門家ですか?複数ある場合、標準はいくつですか?
専門家とは、単に言語の構文を知っている以上のことを意味します。専門家は、標準のライブラリ、ツール、環境、構文を十分に知っているため、常に物事を調べたり、本やチュートリアルを読んだりする必要がなく、重要なプログラムを書くことができます。
複数の言語を知ることの主な利点は、それらを直接記述することではありません。他のすべての条件は同じであるため、C、PythonやLISPなど)を知っているC#プログラマーと協力して、C#でハッキングしたことがあるプログラマよりも作業を進めたいと思います。言語の方が優れています。問題を複数のレベルで、複数の視点から考えることができると、非常に役立ちます。
プログラミングに対する考え方を変えないプログラミング言語は、知っておく価値はありません。 -Alan Perlis
それは、もう1つの言語をチェックオフしたり、履歴書に載せたりすることではありません。基盤となる概念を十分に理解して、十分なメリットを得るためにプログラミングする必要があります。構文の基本的な理解からそれを得ることはありません。
より直接的な答えは「依存する」です。
より大きな会社では専門化することが期待されています/許可されていますが、上で述べたように、お気に入りの1つのツールを超えて物事を理解することには依然としてメリットがあると思います。
小さな場所では、本当にそれを回避することはできません。それ以外の場合は、通常、アプリを維持するだけでなく、アプリをビルドする必要があります。また、実際にアプリをビルドする場合と同じように、ログやデータの変更を実行するために同じ言語を使用しないでください。技術的には逃げるは単一の言語を知っていれば可能だと思いますが、パフォーマンスが高く、強く型付けされた(または少なくともアサーションが可能な)コンパイルされた言語を使用することの利点は、重労働です。メンテナンス/セットアップ/スクリプトタスクのスクリプト言語はかなり大きいようです。確かにそれなしではやりたくありません。
あなたは非常に興味深い質問があります:
私はプログラマーが特定の言語の「専門家」であるべきだとは思いません。プログラマーとして、私たちはプログラミング、アルゴリズムの設計、明確なステップでの思考の専門家であることを意図していると私は信じていますが、プログラミング言語はあなたが学ぶだけのものです。
「良い」プログラマーは、古典的な「私はこれまでこれまで働いたことがない」ということを恐れることなく開発プロジェクトを処理するので、5営業日以内に言語を習得する必要があります。ベストプラクティス、ツール、およびライブラリを主に2つの方法で学びます。コードに頭をぶつけたり、たくさんの本を読んだりします。
「優れたプログラマーはただコードを書く」という前提の数年後には、C#コードもC++コードもJavaコードもない)、プログラム、言語、およびテクノロジーの開発を学ぶと、それほど重要ではありません。もちろん、PHPよりもC#の方を上手に移動する方法は理解できますが、よく学べば、Pythonに。
あなたのような私のアイデアを願っています!
1つですが、それは他の人を無視できるという意味ではありません。それらを使用しない理由を正当化するのに十分な知識を持っているか、制限を知っている必要があるので、適切なときに助けを求めることができます。
それはおそらくあなたの性格に依存すると思います。主題の隅や隅まで掘り下げることに夢中になる人もいれば、物事の広い視野を得たいと思う人もいます。あなたはおそらくあなたがどんなタイプの人格であるかを理解する必要があるでしょう。私は互いの上に1つを置くのではなく、それぞれの用途があります。
前者として、あなたは専門家、第一人者、専門家になります。後者は、より一般的な使用法であり、さまざまな状況で使用できる可能性がありますが、サブジェクトにそれほど深くまたは長くは入りません。
目の前の。
1。しかし、あなたはそれが得意なのです。
1つは、時々他のいくつかの言語で書かれた重要な現実世界のプログラムを読むことができる必要があります。ある意味では、プログラマーがエキスパートであるものは母国語に似ています。彼らはそれを考えますが、他の言語を学び、話すことは、プログラマーが他の考え方を理解できることを示すという点で非常に優れています。彼らが複数の言語で母国語と同じくらい流暢に考えることができれば、それは素晴らしいことです。
これは良い質問ですが、基準があるとは思いません。通常、私が見たところによると、人々は1つの環境(windows/linux、mac、solaris)で1つの高水準言語(C++、Javaなど)に精通しています。彼らは他の高級言語を大まかに知っていますが、完全には理解していません。 (例:C++、Java人々はおおよそ知っています。)おおまかに言って、彼らは1つのタスクのパフォーマンスを専門家の言語と他の言語で比較できます。一部のスクリプト言語(たとえば、Linuxの人々はbashを知っており、Windowsの人々はVBAを知っており、Webの人々はPHPを知っています)。
私にとって重要なのは、言語よりもアルゴリズムの基本的な知識です。あなたの基本が上手いのなら、どんな言語でも台無しになる機会は少ないでしょう。
しかし、そうです。時には、どの言語がどのタスクに適しているかを知ることが役立つ場合があります。たとえば、次のコードはCよりもPascalの方がはるかに高速です。
strcat(A、 "こんにちは"); strcat(A、 "WOrld"); strcat(A、 "こんにちは!");
これは、Pascalが文字列の長さを最初の場所に保存するため、最後の場所に簡単にジャンプできるためです。 Cでは文字列の終了は '\ 0'なので、実際にはstrcat操作のために文字列全体をトラバースする必要があります。
JoelがSO=ポッドキャストで述べたように、多くの多くの言語を知り、タスクに適切な言語をいつどのように使用するかを知っている方が良いです。別の例としては、たとえば命令型言語や関数型言語を知っているとよいと思います。
PHPやASP.Netのようないくつかのサーバー側の技術を知っているかもしれないので、言語に精通していないプログラマーもいるでしょう。 .NetまたはVB.Net、またはJava、JavaScriptやFlashなどのクライアント側スクリプト言語のカップル。これは、ここにWebのものを置くために使用されるハードウェアに入る必要はありません。
同時に、ダース言語以上の専門家であるプログラマーもいるでしょう。それは彼らがほとんどの場合、各言語内で多くのことを上手く保つためにかなり忠実に勉強するものだからです。
それはあなたがプログラミングしている環境に依存します。以前の仕事では、私の仕事のほとんどはPerlでした。そこにいる間、私はかなり上手になりました。現在は、構文がほとんどわからない3つの言語のレガシープログラムがある場所で働いています。新しいプロジェクトでの作業に加えて、それらを維持することが期待されます。私は今ではどの言語も習得していませんが、プログラミングの方が良い気分になったと思います。より抽象的に考える方法を学び、最初に全体像を確認してから、構文とライブラリを調べて詳細を入力しました。