私は比較的若いプログラマーです。私は23歳で、約5年間プロのプログラミングをしています。
私がCで始めたほとんどのプログラマーとして、楽しみのためにx86アセンブリをいくつか学び、その後、プログラミングの世界で私の最大の情熱であることが判明したC++を見つけました。 CおよびC++を使用したプログラミングでは、プラットフォーム固有のAPI、ライブラリ、およびフレームワークをすべて学習する必要があり、それぞれに継続的な調査と実験が必要です。しばらくしてからJavaとC#に移動する必要がありました。私の地域に対する要求は基本的にこれらの言語に対するものであるためです。これらの言語を使用して、私はWeb開発の世界に入り、それからjavascriptを学ぶ必要がありました。 .NET Framework向けの開発は、最初はエキサイティングでしたが、Microsoftに縛られているように感じていました(もちろん、.NET Frameworkは私をLinuxから遠ざけていました)。デスクトップ開発では、私がしたことのほとんどすべてを行うことができましたQtでC++を使用する.NETでは、Web開発では代替を探す必要がありました。すぐにDjangoが見つかり、次にPythonなので、 Djangoを使用することができます今日、私はObjective-Cを使用したiOS開発を学習しています。
これまでのところ、これらすべての言語を学ぶのはかなり簡単でした(C++は私によく訓練してくれました)が、いつかそれらすべてを追跡することができなくなるのではないかと心配しています。明確にするために。私が学ばなければならない原因を学んだ唯一の言語はC#とJavaでした。プログラミングと新しいことを学ぶのが好きなので、私が楽しみのために学んだ他のすべて。また、私は自分のスキルをデスクトップ、Web、およびモバイル開発で鋭く保ちたいです。
私の質問は、複数のプログラミング言語をどのように追跡するのですか? (つまり、これらの言語の変更を追跡し、スキルを鋭敏に保ちます)そして:十分なプログラミング言語のようなものはありますか?
個人的には、言語の「追跡」は時間の無駄だと思います。新しい人気のある言語を採用することは常に良いことですが、C++やPythonなどの人気のある確立された言語を身につけたら、心配する必要はありません。優れたプログラマーであれば、言語は単なるキーワードのセットです。
そこには非常に多くの実質的なパラダイムしかない。古い犬は新しいトリックを学ぶことができないかもしれませんが、実際には多くの新しいトリックはありません。関数型/オブジェクト指向型/イベント駆動型/言語が長続きしない可能性がある場合は、別のパラダイムを学習してください。しかし、正確な言語の選択についてあまり心配しないでください。
そして、しばらく言語から離れていた後に、キーワードを1〜2つ忘れた場合はどうでしょうか。だからこそGoogleがあります。
いつかすべてを追跡できなくなるのではないかと心配です。
30年後、私はこれを言わせてください。
うん、あなたはトラックを失います。
そう?
それが彼らがリファレンスマニュアルを書く理由です。
複数の言語を学ぶことの本当の利点は、異なるparadigmsとmodelsと考え方があなたに与えることです。
Javaとその単一継承についての知識は、C++とその多重継承のビューを形成しているはずです。JavaとそのGCについての知識は、ビューを形成しているはずですC++とそのユーザー管理メモリの概念。C++とそのテンプレートの知識は、Javaとそのジェネリックのビューを形作っているはずです。これらすべての関係は、もちろん両方の方法で機能します。
関数型言語で記述したことがない場合は、C++の<algorithm>
ライブラリが何をしようとしているのか、そして(少なくともC++ 11より前の)ファーストクラスのシチズン関数がないために何が欠けているのか理解できません。動的型付け言語で記述したことがない場合、静的型付けでできることとできないことの境界を理解できません。変更可能な状態のない言語で記述したことがない場合は、変更可能な状態がもたらすペナルティを理解できません。
他の言語を学ぶことはあなたの既存の言語をよりよく理解させるので、良いことです。この点で、言語の概念はすぐに、またはまったく変化しない傾向があるため、最新の状態に保つことを心配する必要はありません。
私の質問は、複数のプログラミング言語をどのように追跡するのですか? (つまり、これらの言語の変更を追跡し、スキルを鋭敏に保ちます)
コードを書く。言語の更新についていく必要がある場合は、コードを書き続けてください。
十分なプログラミング言語のようなものはありますか?
複数の言語を学ぶことは、他の方法では得られない他の言語についての視点を得るのに役立ちます。多くの言語を学習することで、一般的に計算について広範囲にわたる全体的な見方が得られます。
しかし、すべての言語を学ぶことは不可能であり、すべての言語に価値があるとは限りません-あなたにとってもあなたの仕事にとっても。難解な言語は、実際に実用化されていないため、固有の知的価値を除いて、学ぶ価値はありません。
ですから、「十分」といったものはありません。しかし、「トラブルに値しない」ということも確かにあります。
使用する、または現在使用していると思われる言語についていくことを心配してください。新しい言語を学ぶことは役に立ちますが、二度と使用しないことにならなければ、言語の小さな変更について学ぶ理由はありません。
学習を止めないでください。しかし、あなたはすべてについてすべてを知っていることは決してありません。あなたは常にあなたがより流暢ないくつかの環境を持っています。心配しないで、楽しんでください。
完了したと感じるときは、十分なプログラミング言語があります。複数の言語を理解することは素晴らしいことですが、職場で2を使用するときに12を知っていることは、コンテキストの利点以上のものを提供するかどうかはわかりません。より多くの言語を知ることには何の問題もありませんが、残りの時間はおそらく、最も使用する必要がある言語と専門分野の知識を向上させる方が良いでしょう。話し言葉のように、あなたはあなたの人生に価値を提供するものにもっと熟達したいと思っています。
複数の言語を知っていると自慢しているが、それぞれに同じ方法でコードを記述したプログラマーを思い出すことができます。これは必ずしも良いことではありません。
また、あなたが年をとるにつれて、時間はあなたのためにあなたの心を補うのに役立ちます(私は、私が結婚する前、子供がいて、フリーランスのライターになり、キャリアの問題に取り組み始めた前よりも、側で勉強する時間がはるかに少ないです、そして私の記憶は南に行き始めました。
私は過去25年以上にわたって多くの言語を学びました。しばらくすると、一部は役に立たなくなり、忘れられます(Perl)。 6502アセンブリ、Apple BASIC、LISP、Prolog、Pascal、SPAN、FORTRAN ...
他の言語は衰退し、その後10年後に(Python)を再学習する必要がありました。 Pythonに遅れずについていく意味がありませんでした。スピードアップするのに時間がかかりません-Google/SOはあなたの友達です。
結局のところ、言語は単なるツールです。手元の仕事に使用します。スキルは、いつ何を使うべきかを知ることです。正直なところ、C++を使い始めたら、Cコーディングをやりたくありませんでした。 C#を学んだとき、C++をやりたくありませんでした。
関数型、OO、論理型など)のパラダイムが異なる言語を学習することをお勧めします。
ただし、3つの関数型言語または3つのオブジェクト指向言語を学ぶことを必ずしも提案するわけではありません。
朗読が得意ならしかし、私は何度も何度も同じようなことを学ぶのは難しいと思いますが、これはほとんど同じですが、正確ではありません。特に、ウィンドウペインティング、データベースの呼び出し、コレクションライブラリなど、さまざまな名前と規則を覚える必要があるライブラリですが、ほぼ同じように動作します。 paintRect(xstart、ystart、xend、yend)または(xstart、ystart、width、height)でしたか?ここに「終了」を含め、そこには含めませんか?
しかし、これらのことを学ぶのに苦労しない人もいます。
だから私はいくつかの言語を学ぶことをお勧めしますが、それらのうちのいくつかを深く学ぶことは、表面でのみ言語を語るよりも多くを教えるかもしれません。 1年に2言語ではないかもしれませんが、2年ごとに1言語です。
私の意見では、プログラミングはあなたが使っている言語のすべてではありません。プログラミングは考え方です。優れたソフトウェアを作成するには、優れたアナリストである必要があります。プログラミング言語は、ソフトウェアの構築を支援するだけです。確かに、各言語には欠点または利点がありますが、優れたソフトウェアを構築するには、開発者として考える必要があります。開発者のように考えていない人は、どんなに優れた言語を使用していても、優れたソフトウェアを構築することはできません。
私はいつも家を建てている誰かと比較します、彼が家を建てることができるものを持っている限り、彼は彼のハンマーを気にしません。彼はハンマー(たとえば、重量)に慣れる必要があるかもしれませんが、工具に慣れると、素晴らしい家を建てることができます。ツールのほとんどの「バージョン」は非常に似ているため、ツールに慣れるのはそれほど難しくありません(これはハンマーだけでなく、開発言語にも当てはまります)。
勉強中はJava(以前はASPとVB5を使用していた)を使用していましたが、卒業後(約5〜6年前)C#の使い方を学びました(およびJavascript)、ジョブスイッチによりVB.NETへの移行が "強制"され、次のジョブにより、.NET言語(私が実行した)の両方を使用できるようになり、Java(彼らが使用していたいくつかのレガシーツールの場合)。現在、私はX ++(Microsoft Dynamics AXの言語)を使用していますが、.NETでいくつかの開発を行っています。これらは、日々の仕事、F#、Rubyなどの新しい言語を調査することも好きです。これらの新しい言語を習得するには数日しかかかりませんでした(構文を理解するためだけ)。残りの時間は、言語と徐々に学びます。
非常に多くの言語がありますが、私はreallyが異なる(F#のような)言語にのみ焦点を合わせる傾向があります。新しい言語を学ぶことは面白くて楽しいと思うので、今のところ、新しい言語を学ぶことは非常に簡単です(少なくとも同じ考えであれば、C#、VB、Javaは同等です) 、しかし例えばF#はかなり異なります)そして私はあまり心配していません。
私は5年前にvb6でキャリアをスタートし、phpに移り、次にJavaに移り、現在.netに移っています。現在は昨年、asp.net mvc2に取り組んでいて、私の手を試しています。 mvc3も
秘密は時代遅れにならないことです世界のすべてを習得することはできないため、心配することはできません
これはキャリアの問題だと思います。したがって、特定の一連のツールを知っている場合にのみ、あなたを雇う人を説明する必要があります。多分これは仕事を失格にするかもしれませんが、多分そうではありません。新しいことを表面的に学びましょう。しかし、難しいこと(数学、新しいプログラミングパラダイム)を深く学び続けてください。
新しいツールを使用することは、トレードオフです。 IT業界は誇大広告でいっぱいであり、あなたはこれらから守る必要があります。これはステートメントから始まります:いいえ、古いエディター(emacs?)を使い続けます。しかし、時々あなたは新しいことを学ぶ必要があります。彼らは本当に年を重ねるごとに良くなります(3-4)。手元にある実際のプロジェクトを使って、仕事で新しいことを学ぶ機会があれば、楽しみになるので、ためらわないでください!誇大広告を本当のイノベーションと区別する最良の方法は、それを使用している人々を調べることです。あなたはテクノロジーよりも人を判断するのが上手です:)
私はスペクトルの反対側にいるようなものです。あなたは簡単なことを学び、この方法でより深い問題に慣れることができないので、私は複数の言語を学ぶのが嫌いです。同時に、他の言語から悪い習慣を学びます。
これまでハードコアを見たJava開発者がC++でコーディングしているとき、それは爆発するのを待っている混乱です...
問題は、すべての言語に抽象化が漏れ始める、またはあなたと対抗するための問題点があることです。構文は1日で習得できますが、効率的なコーディング方法とバグのない方法を知るには5年かかります。 at()または[]を使用しますか? mallocを使用すると、長時間実行しているプロセスでメモリが不足するのはなぜですか?
そして、パラダイムを学ぶことも興味深い命題です。 Java Cのガイドライン、またはC#のPerlガイドラインを使用すると、おそらく難読化されたコードを記述する方法の素晴らしいデモになるからです。
少数の新しい言語を学ぶことはあなたの視野を広げるのに役立つかもしれませんが、それらはあなたをよりスマートに感じさせるべきではありません、彼らはあなたが学ぶすべての新しいものであなたを鈍く感じさせるべきです。
他の誰かがどこかで「誰もが3つの言語を知っているべきだ」と提案しました。
私は同意する傾向があります。コンパイル済み言語(C/C++、C#など)、インタープリター型言語(Python、Rubyなど)、およびテキスト処理言語(Perl、Awkなど)を知っている必要があります。また、シェルスクリプト言語(Bash、最近、またはWindows Power Shell)についても知っておく必要があると思います。同じアドバイスがツールキットとAPIにも当てはまります。
進化する言語に遅れずについていく唯一の方法は、それを使うことです。通常の言語のツールキットをいくつかに限定しておくと、問題を解決するためにすべての言語を定期的に使用しやすくなるため、それぞれの開発に追いつくことができます。
だから、あなたが毎日使うテクノロジーに慣れ、そこに留まってください。時間があれば、他の興味のある分野で手を出しても何も問題はありません。通常、十分なモチベーションを備えた新しいテクノロジーを習得し、それに専念する時間をブロックするのに、有能なプログラマーが長くかかることはありません。
すべてのテクノロジーに対応する必要はありません...必要に応じてそれらをスピンアップおよびダウンして、最も頻繁に使用するテクノロジーに焦点を当てることができます。