私はJava、C/C++、JavaScript/jQueryにかなり熟練しており、Objective-Cはまともです。私は言語とそれに対応するフレームワークについても非常に生産的であり、コードを「クリーン」で保守可能な状態に保ちながら、エンタープライズレベルのシステム(および小規模なシステム)を簡単に作成します(そうです、6年後に自分のコードを読むことができます)ヶ月:)
プラットフォーム(iPhone、iPadなど)またはクライアント/実装組織からの指示がない限り、「なぜ」新しいプログラミング言語を学ぶ必要があるのでしょうか。 「楽しい」だけですか?そして、私がそれに価値のある何かをするつもりがないなら、その楽しみで何をしますか?
私の仲間の多くは、「次の新しいもの/言語」を学ぶために飛び込む準備ができており、それは通常PythonですRubyまたはPHP人気のあるものはほとんどありません。今、言語を知るだけでは無意味なIMHOです。また、フレームワークを理解し、その使用法/ APIや「優れた実装方法」などを学ぶ必要もあります。
では、「経済的」な意味から、新しいプログラミング言語を学ぶことには何か利点があるのでしょうか?言語が迅速かつ汚い方法で学習されている場合、おそらく迅速かつ汚いプロトタイピング/実装にも使用されますが、それを時間/労力の正当な投資と見なすことはできません。
それで、なぜ私(またはそのことについては誰でも)は、「楽しいので試してみましょう」以外の新しいプログラミング言語を学ぶべきなのです。時間の投資が長期的に見れば価値がない場合はどうでしょうか。
The Pragmatic Programmerから、ヒント#8「定期的に知識ポートフォリオに投資する」:
毎年少なくとも1つの新しい言語を学びます。さまざまな言語がさまざまな方法で同じ問題を解決します。いくつかの異なるアプローチを学ぶことにより、思考を広げ、わだち掘れに悩まされるのを防ぐことができます。さらに、インターネットで無料で入手できる豊富なソフトウェアのおかげで、多くの言語を学ぶのがはるかに簡単になりました
それは次の「新しいもの」ではありません。それはあなたの通常の思考パターン以外のさまざまな方法で考えることです。
「ハンマーだとすべてが釘のように見える」という格言があります。多分他の技術を使用して問題を解決するより良い方法があるでしょう。探索しないと、それが利用可能だったことに気付かない場合があります。
なぜ人々は山に登るのですか?エベレスト?または 24時間で100マイル ?なぜ私たちは挑戦するのですか?そこにあるからです。 「Ars gratia artis」には何の問題もありません。学習のために学ぶことは、それ自体の報酬になるポイントがやってきます。しかし、ここで新しい言語を学ぶためのより強力な理由が必要な場合は、次のようなものがあります。
問題を解決するための新しい方法新しい言語を学び、実際に時間をかけて学ぶことで、初心者として再びプログラムする機会が与えられます。その新しい視点は、古い言語に引き継がれるかもしれない技術を教えることができます。 Ruby on RailsがASP.NET MVCに及ぼす影響、またはJava HibernateがC#に移植された方法( .NETの開発に影響を与える他の無数のフレームワークを使用しています。さまざまな言語に触れることで、問題に対処するための新しい方法を学ぶことができます。
適切な仕事のための適切なツールあなたが言及した言語はすべてOO /手続き型ハイブリッド(またはCの場合は純粋に手続き型)です。関数型言語を1つまたは2つ試してみてください。再帰を使用してErlangで階乗を実装してみて、20000のときに顎が床にぶつかるのを見てください! 5秒で戻ります(サイトでスタックオーバーフローは発生しません)。次に、RMIまたはSOAPを介して通信するJVMの2つのインスタンスを取得するよりも少ないコードと時間で、アプリケーションをスケーリングして数値を処理し、プロトコルを解析する能力を調べます。特定の問題を解決することを目的とした他の言語/フレームワークを学ぶことは、より多くのツールを提供します。
新しい人との出会い/ネットワークの拡大新しい言語に飛び込むと、新しいコミュニティにアクセスできます。新しい人に会うことはあなたのキャリアにとっても個人的にも良いことです。
新しい機会新しい言語を知ることは、そのホットなスタートアップでその仕事を得るチャンスを増やすだけです。 「Rubyを知っていれば、この仕事は完璧だろう」その上、あなたはあなたがパスを切り替えることに決めるほど十分に言語を楽しむかもしれません。
新鮮に保つ毎日同じことを扱うのは面倒です。別の言語を使用すると、毎日のグラインドから離れて、次の日にリフレッシュすることができます。
そこにあるからしたいので新しい言語を学びましょう。
言葉で考える。私たちが使用する言語は、それを行う方法に影響を与えます。 ピラニア語 について興味深いケースがあります。その言語を話す人は、明らかに「単純」または「直感的」なものとして扱うことができません。数量」(「1つ」と「多く」ではありません)。
プログラミング言語も同じです。新しいプログラミング言語は、プログラミングのいくつかの側面に心を「開く」ことができます。
現在のプログラミングの背景を踏まえて、ErlangやScalaなどの関数型言語を学ぶことをお勧めします。最後に、Clojureも非常に堅固な言語です。
最初にもう少しくつろぎたい場合は、PythonまたはRubyなどの強力なスクリプト言語を試してください。
新しい言語を学びたいだけでなく、すでに知っている言語とは異なる言語を学びたいだけではありませんJavaを知っている場合、C#の学習はそれほど難しいことではありませんが、かなり似ています。理想的には、あなたが知っているものとは非常に異なる言語を選ぶべきです。 Java、JavaScript、およびObjective-Cを知っている場合は、非常に異なる何かが必要です
といった:
Ruby弱く型付けされた楽しいOO言語
Prolog非常に異なる論理プログラミング言語
Erlang同時実行性とフォールトトレランスが非常にうまく機能している
Scheme SICPを読んで悟りに到達する
Haskellコンパイルすると、おそらく機能するだけでなく、あらゆる種類の奇妙なエラーなどを防ぐことができる、世界で最も強力な型システムの1つです。
または、タイトルに書かれているとおりに7週間で7つの言語を選択します。
あなたの質問は非常に先導的なものであり、次の質問をするように私に頼みます。
あなたが職業別にプログラマーであるならば、なぜあなたはあなたの職業経験に追加するために何か新しいことを学びたくないのですか?
あなたの質問は、私がかつて持っていた学生の態度とよく似ています。 Y2Kの1〜2年前に、私が当時教えていた大学のキャリアサービスディレクターの要請により、(選択科目として)Cobolクラスを教えていました。彼はCobolプログラマーの仕事の機会で彼にアプローチしている企業が多すぎたので、スキルを習得してスキルセットに追加する機会を与えないことで、生徒に不利益をもたらすと考えました。
私はそのクラスを彼の卒業する最後の選択クラスとする学生がいました。彼は当時Cプログラマーとしても働いていました。彼は他に選択肢がなく、学位を取得したかったため、Cobolクラスを受講しました。それで、彼は肩にチップを持ってクラスに来ました。
私はすでにCを知っていて、それを専門的に使用しているので、なぜ誰もがCobolを学びたい、あるいは学ぶ必要があるのか、なぜ世界でそうなのかわかりません。
そのため、入力の各レコードに特定の形式(つまり、各フィールドが1行に占める文字数、最初、2番目、3番目など)を持つファイルからデータを読み取るプログラムを作成するタスクを彼に挑戦しました。 。)
彼は彼のプログラムをCで書くことでした、そして彼は私に彼のプログラムを見せびらかしました。同時に、私は彼に私のプログラムのCobolバージョンを見せました。
それから私は彼にカーブボールを投げました:
エンドユーザーが別の場所からデータを取得しているとします。各レコードの同じフィールドですが、フィールドごとの順序と文字数は異なります。新しいデータ形式で動作させるためにプログラムで何を変更する必要があるかを教えてください。
彼は新しいデータ形式で動作するプログラムの新しいバージョンを作るのに1日かかりました。これには、少なくとも20行または30行のコードの変更、およびいくつかの関数とモジュールの変更が含まれます。
その後、私はCobolプログラムに加える必要がある変更を彼に示しました。新しいデータ形式を反映するように、picture句を変更しました。
彼がその演習のレッスンを完全に理解したかどうかはわかりませんが、彼は少なくとも残りの学期の不平をやめました。
だから-あなたの質問に答えて:あなたは学びたいので、あなたは新しい言語を学ぶべきです。そして、あなたが学びたくないなら-あなたにもっと力を...(私がその態度であなたを雇うとは確信していません)
新しい言語を学ぶことが時間の投資に値するかもしれないいくつかの理由があります:
新しい言語を学ぶことは、すでに述べたように、「迅速で汚い」ソリューションですぐにメリットをもたらします。ただし、これらの当面の解決策は、プログラマーを調査し、新しい言語に関連付けられたアーキテクチャーをより深く掘り下げて「適切に」学習させる可能性があります。これらの簡単な学習演習は、新しい言語が追加のトレーニング時間の価値があるかどうかの調査への投資として見ることができます。
つまり:市場性。
新しいことに適応して学習する能力があることを示すことができると、雇用の見通しが開かれます。確かに、あなたが本当に熟達した1つの言語を使用してアプリケーションを作成し続けることはできますが、選択したお気に入りの言語が、あなたが取り組んできた業界とは無関係になるとわかったときに何が起こりますか。 CまたはC++でゼロから独自のWebサービスを作成するために、今日では、すべての基礎となる「webbiness」を行うツール(Think Railsなど)を使用しています。
重要なのは、結局のところ、テレビシリーズを演じる俳優のようになり、元のキャラクターとして永遠に見られているため、他の俳優に簡単に移ることができないということです。 「地球上の誰がカーク船長にインディアナジョーンズを望んでいますか?!!」同じ製品を使用したことがないプログラマーも同様です。もちろん、あなたは他の誰とも同じようにそれを知っていますが、C#での作業に進むことができないFortranとして箱詰めされているように扱われている場合、それは役に立ちません。
ジョブを簡単に移動できるようにして、オプションを開いたままにしたい場合は、経験を広げる必要があります。多くの異なる言語で、できれば少なくとも2つ以上のプラットフォームで、多くの異なるプロジェクトに取り組み、現在の状態だけでなく、それ以上の市場性を維持します。
もちろん、新しい言語を学ぶ理由は他にもたくさんあります。それだけでなく、新しい言語を学ぶこともあります。他の可能性に心を開くので、上司があなたに近づいて「何かできるか」と言ったら、あなたは利用可能なツールの選択肢で「はい」と言うことができます。
キャリアのこの時点で、より優れたプログラマーになると思われる場合は、新しい言語を学ぶ必要があります。
リストされている言語のほとんど(Java/C/C++/Javascript/Objective-C)は、従来のOO /命令型です。さらに別のオブジェクト指向/命令型言語を学ぶことは、おそらくその種のプログラミングについてこれ以上は教えないでしょう。特に関心がない限り、スペックで月の味を学ぶ意味はありません。
私はまた、桁違いの生産性向上の主張について懐疑的になりがちです。ただし、時折評判の高い生産性の高い言語をチェックして、気に入ったかどうかを確認することは価値があるかもしれません。
新しい言語を学ぶ最大の理由は、一般的な適用性のスキルを学ぶことです。そのために、関数型言語(Haskell、またはLispの1つ)と、アセンブリコードとシステムアーキテクチャ(x86またはARM)を深く掘り下げることをお勧めします。
関数型プログラミングは頭を壊し、心を改善します。一方、機械のアーキテクチャを学習することで、アセンブリの別の行を記述しなくても、デバッグと最適化の能力が向上します。
一人一人が私たちが何に取り組みたいかを決めるので...
PHPを学びたくない場合は、誰もあなたを作っているわけではありません。PHPのつづり方さえ知らなくてもプログラミングできる領域はたくさんあります。
多くの人々は、求人市場を調べて、ホットな領域がどこにあるかを確認し、それらのテクノロジーに飛びつきます。多くの人が1つの言語を学び、それを使い続け、20年後、彼らはレガシー保守エンジニアになります。そして、あなたはこれらの両極端の間のどこかにいる多くの人々を持っています。
結局、それはあなたがどこになりたいかということについてのすべてです。
私はすでに投稿されたほとんどの回答に同意します。これらに追加するには、2011 Stack Overflow User Surveyによって取得された統計をチェックしてください。知られている言語の数と獲得したお金の間には非常に高い相関がありました。それらは互いに直接結びついているわけではないかもしれませんが、それは考えるべきことです。
より多くの言語を学ぶ傾向がある人々はより多くのお金を稼ぐ傾向があります。
私が知っている最良の議論は、問題を解決するためのさまざまな方法、またはロジックを表現する方法についての見方を広げることです。 JavaとC++をよく理解していると、ネイティブ&VMレルムの両方について良い見解が得られますが、調査する「自由度」ははるかに多くあります。
私はC++で15年、Javaで5年の経験があります。私が学び、取り残した言語はたくさんあり(PHP、Pascal、さまざまなプロセッサの集まりなど)、もう使用していない言語でも、問題に対する考え方に重要な印を残したと言えます。 。また、特定のプロジェクトについて、たとえばJavaにこだわる場合でも、その支持者に適切な反論を提示するための代替案を知る必要があります。
それでも、私はPython今年だけを学びました、そしていくつかのことがエレガントにできることに喜びを感じました。そんなに多くのREST JavaからPythonへ。私が書いたサーブレット。コードの保守性における利点は非常に重要でした。確かに、私が選択する理由だけでなく、私のやり方にもマークを残しました。 Python一部のタスクだけでなく、C++とJavaでコーディングするときにも同様の設計原則を採用する可能性があるためです。
とはいえ、そのためだけに、多くの異なる言語を常に学ぶべきではないと思います。かなりの時間を要し、すでに知っている他の人々と共存するために心に留めておく必要のある「宿泊」は、時間と労力もかかります。私は、十分な成熟度があり、優れた開発者基盤があり、私が知っている、または学習を計画している他の言語とは結果が大きく異なる場合にのみ、言語を学ぶことにします。たとえば、Pythonを学ぶことにしたとき、RubyとPerlも検討しましたが、後でそれらを破棄しました-少なくとも近い将来には。
人々は新しい言語を学ぶ...
ご覧のとおり、新しい言語を学ぶ理由はたくさんあります。あなたへの私のアドバイス(そして私が良いと思う私の唯一のオリジナルの引用):
コードを頻繁に記述します。コードをよく書く。 Scheme、PHP、Java、Python、LISP、Perl、C、C++、C#、Visual Basic、Rubyなどでコードを記述します。
アルフレッドノースホワイトヘッドは、 " The Importance of Good Notation "と呼ばれる素晴らしいエッセイを書きました。
科学の発展にとって控えめに見えるシンボルがどれほど重要であるかを指摘するのは興味深いことです。これは、アイデアの強調表示を表す場合があり、多くの場合非常に微妙なアイデアであり、その存在によって、このアイデアと、そのアイデアが発生するすべての複雑なアイデアの列との関係を簡単に示すことができます。
プログラミング言語は表記法の一種です。私はOOをコーディングできます。実際、それがStroustrupがC++で一連のCプリコンパイラマクロとして開始した方法です。しかし、OOコードはJava、C++、またはC#のいずれかで記述します。これは、OOをより簡単にサポートする言語プリミティブが存在するためです。
これまでに与えられた新しい言語を学ぶすべての理由は有効ですが、新しい言語を学ぶ最も良い理由は、新しい表記法が新しい問題を解決するのに役立つ新しい方法で考えることを可能にするかもしれないということだと思います。
上記の答えのほとんどまたはすべては職業に関連しています。プログラミング。私がプログラマーになる前に、私たちは人間であることを思い出させてください。
notが新しいプログラミング言語を学ぶ理由の1つは、自分の休息をとるか、プログラミング以外のことをするためです。
私の経験、農業での作業、木材での作業から、プログラミングについて多くのことを考えました-さらに、新しい言語を学ぶことも。つまり、優れたプログラマーになるには、まず優れた人間である必要があります。あなたが人生の経験があまりないなら、プログラミング以外に、あなたがプログラミングについてのあなたの考えは、たとえあなたが専門家であっても、完全に間違っているかもしれません。
プログラミングの多くの概念は、日常生活から直接来ています。シンプルさ、保守性、実用性、有用性、高速性、そして時にはslow、モジュール性など。たとえば、大工が使用するすべての概念です。
信じられないかもしれませんが、私は個人的にプログラミングの概念について多くのことを学びました。私がそれから学んだ主なコンセプトは、シンプルさでした。ビルダーとして働くことで、私は別のコンセプトを学びました。壁を真っ直ぐに立てたい場合は、ベースをできるだけ良く構築します。
最後に、あなたの質問に対する答えは、休暇を取るか、テコンドークラスに参加するか、または庭の世話をすることかもしれません-そして、あなたの質問はもうあなたを気にしないかもしれません。