すべてのプログラミング言語Shangxue唐西安を習得する方法

ええ、私はここで言いたいのプログラミング言語を習得する方法ではなく、すべての......
多くのプログラミングの初心者は、まだ学ぶためにどのように、プログラミング言語は学ぶために何を私に尋ねる、頼むために私に書いています。私はいつも、この問題は非常に「低レベル」であると感じ、タイトルの質問に対する答えを知っているので、彼が返信する時間がなかった:Pをしかし徐々に、私は白いが、この問題を抱えて、さらに多くの経験豊富なエンジニア、米国の大企業のみならずことが判明しました、実際には、理解されていません。
今日では、第二週にレジャー活動は、退職し、少し座って、私はこの統一長期停滞答えたかった「主な問題を。」このトピックでは、書かれているようだが、今、私は再びそれを再書きたいです。私自身の心との交流を通して多くの人々がアイデア(の言語に翻訳されていない)ので、私たちは、より正確な表現を持っています。
あなたがパズルのすべての種類を、次のされている場合は、この記事はあなたに役に立つかもしれません:
あなたは初心者プログラマで、始めるためにどのようなプログラミング言語を選択するのか分かりません。
言語「投資」を知らないあなたが経験豊富なプログラマやチームリーダーは、様々な新興の言語について混乱しています。
あなたのチームは、言語を使用するプログラム議論され、宗教的な闘争が発生しました。
あなたは......採用し、いくつかのファッショナブルな言語、痛みで泥沼で立ち往生見つかった2ヶ月後の結果を、トレンドを追いかける
私はもはやこれらの事に言わないものの、しかし間違いなく現実には、プログラミング言語は非常に重要なトピックがまだあるということですこのような状況は、短い時間で変更されません。プログラマーの仕事は、多くの場合、言語のいくつかに精通している必要があり、さらにいくつかの素晴らしい作品のあなたが、求められている「またはOOPのデザインパターンのFP-深い理解。」プログラマの仕事のために、プログラミング言語は宗教の話題は、顔に赤い勝つことができる、まだです。その宗教の強い私は批判することや、一部の人々は本能的に、私は(Javaなど)別の言語のファンだと思ったでしょう(例えば囲碁言語など)いくつかの言語ですで嘲笑。
もちろん、私はいずれかの言語のファンにすることはできません、私も陰言語のファンではない;)前に見たことがない任意の言語のために、私は常に学習プロセスを経由せず、直接ピックアップを使用します。私はこの効果を達成することができ、なぜこの記事を読んで、多分あなたは理解するだろう。内部にこのようなものを理解し、すべてのプログラマは、これを行うことができるはずです。ああ、私はそれを願っています。
言語機能の重視は、むしろ言語よりも
多くの人が自分自身や他の誰かが様々な言語のメリットのための言語の二重礼拝、熾烈な引数「発明」の人々の言語「になります」かどうかを気に。私にとっての問題は存在しないです。私は実際には、言語の欠陥の多くの重要な記事を書いたが、私はめったにこれらの人々と議論しません。主張私の周りの他の人がいる場合は、私も私の注意ではなく全体の「言語よりも、「言語的アイデンティティ」であるので、なぜ私は、その理由に最終的な分析を見つけるのです)、彼らが;?言うことに耳を傾けるのが面倒、ヘッドフォンを着用します。 " 私はそこまでしても、別の悪い言語ならば、任意の言語で良いコードを書くことができます。
あらゆる種類の「言語的アイデンティティ」の様々な組み合わせです「言語が。」類推それ、コンピュータなどのプログラミング言語。これは、ブランドは、「レジェンド」、または「IBM」、または「デル」、またはと呼ばれることもあります「りんご」。さて、あなたは、Appleが大丈夫、IBMより良くなければならないことを言うことができますか?あなたがすることはできません。どのGPUグラフィックスカードでどのくらいの解像度、監視あなたは......それを見ているクロック速度番号、L1キャッシュの数、プロセッサの種類、コア数の中にあった、L2キャッシュ、どのくらいのメモリやハードディスクドライブ、 、LANスピード、など様々で、「構成」時にはあなたは、さまざまなコンポーネント間の互換性を確認する必要があります。
これらの構成は、呼び出されたプログラミング言語に対応し、「言語的アイデンティティ。」:言語機能のいくつかの例を与える
変数定義・
算術演算・
ループのために・、whileループ
・関数定義、関数呼び出し
の再帰・
・静的な型システムの
型推論
ラムダ関数・
オブジェクト指向
・ガーベジ・コレクション
・ポインタ演算
・後藤文
これらの言語機能、あなたはそれが内部にどのような設定を参照するには、コンピュータを選択すると同じように。コンピュータを選択して、誰もが、i5のは、DDR2メモリはDDR3、よりSSDそんなに速くなるよりも、より優れている、彼らは唯一のこのモデルは、Intelのi7プロセッサの中にあったと言うでしょう、Dellは最高でなければならないと言うんでしょうディスクドライブは、ATIのグラフィックカードはようにゴミである......と、はるかに高速です。
プログラミング言語は、同じ理由です。手始めに、実際には、言語の種類は、最初に学ぶためにどの、最後にもつれを学習する必要はありません。誰かが一度私に数週間のためにもつれたこの質問を、依頼する手紙を与え、結果が言語を習得するために開始していません。そこが絡まっているこの時間は、実際には、彼はすべての言語を習得オーバーもつれすることができます。
初心者は、多くの場合、必然的に「一般的な」特性を持つことになり、すべての言語を理解していません。かかるように、変数、関数、整数および浮動小数点演算、およびAS。これらは、1つ少ないを持っている必要があり、各汎用プログラミング言語です。あなただけの「言語」を通して、単にこれらの機能の概念を把握し、あなたが他の言語にこの知識を入れて自由に感じることができ、これらの機能を学びました。あなたはタイムベースに入れて無駄にされることはありません。初心者はこれが費やした時間価値がない「学ぶためにどのような言語」もつれするので、あなたにもちょうどにジャンプし、言語を選ぶかもしれません。
多くの初心者は、新しいプログラミング言語で開始した場合、彼はこの言語膨大なマニュアルや書籍を見ていない傾向があるが、最初に解決すべき問題がある、賢いプログラマを知りません。手元にある問題で、彼はこの言語は、おそらくのように見えるかどうかを確認するために、2分で、このマニュアルの言語で見ることができます。それから彼は、バイオリンを始めた直接変更するためのいくつかのサンプルコードを拾った自分の問題を解決しようという考えにコードを置きます。この短いプロセスでは、彼はすぐに言語を習得し、心の考えを表現するためにそれを使用します。
必要に応じてこのプロセスでは、彼は質問をすることがあります
。・この言語の文法に必要なもの、「宣言された型」それは「変数を定義」、またはあなたが「型推論」を使用することができますか?
•「type」は「一般的な」?ジェネリック「分散」はどのように表現するためにサポートするかどうか?どのような文法がですね
・「機能は」これは言語の構文「関数呼び出しは、」文法は、「デフォルトを使用することができるものは何かということですパラメータ「?
* ......
気づいた?上記の引用符のそれぞれの内容は、言語機能(またはと呼ばれる概念)です。これらの概念は、構文が異なるかもしれないが、その本質は同じである、任意の言語で存在することができます。例えば、いくつかのパラメータの型は、変数の前の言語で書かれているいくつかの裏に書かれた、コロンの間隔でいくつかのあるものとないものがあります。
これらは当然、むしろ慎重言語のマニュアルを参照してくださいする最初の保持よりも、引き出す、手で問題を解決するため、実際のコードを書くことで現実的な問題です。人々の言語機能は、彼らが必要とする特性を知るマスタリング、任意の言語で、対応する表現がなければなりません。表現の直接的な方法が存在しない場合は、何らかのがなければならない「バイパスモード。」直接的な表現があれば、それは唯一のわずかに異なる構文です。だから、彼はちょうど同じを調べ、問題を持つプロパティを探している、代わりのコードを書き始めるために膨大なマニュアル内側に、眠い月に水没します。
一般的な言語機能をマスター、残りは特徴「ユニーク」のみいくつかの言語です。言語の人々の研究は新しい、良い、無害な特性を設計するために、知っている、それは非常に困難です。だから、一般的には、良い言語、そのユニークな新機能は、すべての後に、12種類以上ではありません。彼らは新しい機能以上の5種類を持っているとして知られている言語がある場合、あなたは彼らが持って来ると利点ではないかもしれないので、注意する必要がありますが、災害!
同じトークン、最高の言語の研究者、より多くの場合より言語設計者が、いくつかの主要な言語機能(またはサポーター)のデザイナーによる。例えば、有名なコンピュータ科学者ダイクストラは、強力なサポーター「再帰的」です。今、そこに再帰的な言語がありますが、あなたは知らないかもしれない、初期のプログラミング言語は再帰をサポートしていません。アルゴル60ダイクストラが強く再帰のサポートを追加するために委員会を促すまで、このような状況を変更しました。アントニー・ホーアはまた、言語機能のデザイナーです。彼はいくつかの重要な言語機能を設計されていますが、任意の言語を設計していませんでした。また、我々は王殷という名前の言語の専門家があることを忘れてはならない、彼は労働組合の種類や実装の初期の支持者であった、サポーターも例外特性を確認し、彼はあなたのブログのレーンでチェック例外と共用体の型の間で指摘しました関係:P
、彼らは誰かのデザインを聞くたびに多くの人々が盲目的に(または米国の「発明」にその人を言って、)、言語設計者を崇拝する言語、血液沸騰は、5-体のキャストを賞賛します。彼らは、実際には、プログラミング言語のすべてを理解しますが、デル、レノボのように、好きではなかった「組立機。」デザイナーの言語機能は、コア技術の創造者としてのIntel、AMD、ARM、クアルコムのようなものです。
リーズナブルな入門言語
より効果的にするために、初心者ので、それは「合理的」のようなものであるべきで、主要な言語機能を習得し、したがって他の言語にこれらの概念を適用し始め言語の明らかな重大な問題はありません。?どのような合理的な入門言語は、私が個人的にこれらの言語は、はじめに使用することができることを感じています:
・スキーム
・C
・ジャワ
・パイソン
・JavaScriptの
私は入門言語使用を推奨しないので、コントラストによっては、それはありますか?
・シェル
・PowerShellの
・AWK
・Perlの
PHP・
・ベーシック
・ゴー
一般的には、初期のUNIXシステムから特にスクリプト言語ツール、入門言語として、いわゆる「スクリプト言語」を使用しないでください。Unixシェルよりも、いくつかの進捗PowerShellのが、それはまだスクリプト言語の根本的な問題を取り除くことはなかった-彼らのデザイナーは、彼らがやっているのか分からない:P
スクリプティング言語プログラミングを使用して、非常に深刻な問題は、学習者の把握をすることですライブキー。(、ウェブの概念は、正規表現など)彼らのために初心者の無駄にあまりにも多くの時間をリードし、内部の文法に追加のスクリプト言語は、物事のいくつかのシステムユーティリティの種類を置く傾向があるが、ほとんどは、プログラミングキーの概念を理解していない:変数、関数、再帰、タイプ......
その理由の言語に似ては、言語、スクリプト言語ではなく、彼の設計者は、明らかに彼が何をしていたか分かりませんがGO、GOをお勧めしません。だから、あなたが最も重要な、最高の言語機能に焦点を当てることができない、学ぶために行くのプログラミング言語を使用します。
、主要な言語機能をマスター二次特性を無視して
、私は前に述べた支配を達成するために、パスベルデンの効果は、初心者には、代わりに二次コンテンツに気を取られているの言語の最も重要な特性に焦点を当てるべきです。私は印刷するのprintfを使用するには、どのように学生を教えるために、多くの場合、1を入門コースをプログラミングプログラミングコースの多くを発見し、ライチョウの「Hello World!」を、そして、彼らはあらゆる意味で「書式文字列」のprintfメモリは、それらの様々なを達成する必要がありますプリントアウト複雑なフォーマット、さらにテキストファイルに印刷し、その後、読み出すために必要な......
しかし、誰もが、これは実際に動作して出力し、入力されたことを知っていることは、単に言語の一部ではなく、また、プログラミングの中核となる概念を把握するために、それは二次的ですA。Javaプログラムの中には、printfの配置、まだ実際には、数週間のためにいろいろな仕事を続けました。printfの学生数百行を書き込むように、それでも算術文やループを使用する方法がわからないという何の変数と関数を理解していない!多くの初心者はプログラミングが難しいと感じる理由があり、私はできませんでも%dを、%fを、思い出すことができないの%.2f意味するだけでなく、プログラミングを学ぶためにどのように!
しかし、「教授」のタイトルのこれらのライチョウは、そう、実際のprintfでも仕事を学ぶ、ネット役に立たないもののいくつかを教えるために私を呼んで、彼らは私が尋ねるためにここにいます(たとえば、私のガールフレンドのような)の学生を教えたことが洗脳されました完了するために何の方法:あなたがループのために私に教えていないPを、機能何......あなたは数ヶ月待っていないので、私はああ、それらを学ぶためのprintfの使用方法を覚えることができますか?
あなたは一度、彼らが教え悪い教師であることを見つけるだろうこのプログラマは、基本的に台無しにしました。でも、良い先生に会った、彼女はそれらを修正することも非常に困難です。
自分が言語機能を実現する
さまざまな言語で、次のステップは、それらを高度な実装することで、コードを書くためにそれらを使用して、基本的な特性を学びました。唯一のさまざまな言語の機能を実現することで、あなたは完全にその所有者になり、それらを所有することができます。そうでなければ、あなただけの彼らのユーザーが、あなたは常に言語クリエイターの使用人になります。
彼は言ったマスターは完全に言語を理解する最良の方法は、それが自身のセマンティクスを実装するためのインタプリタを書くこと、である、それを自分で実装することで、あります。しかし、私はこの文を若干修正されるべきだと思う。完全に「言語的アイデンティティ」のようなものを理解するための最良の方法は、個人的にそれを達成することです。
私が「言語」にここにいることに注意してください「言語機能。」私たちは言語機能を使用して終了するのであなたは、この目的のために全体の言語を実装する必要はありません。限り、あなたは言語機能を実現するとして、あなたは、任意の言語の実装と使用の特性を理解することができるようになります。
例えば、SICPの学習時間を、私たちは個人的スキームは、オブジェクト指向のシステムを実現してますし。Javaの、C ++、程遠いようなPython言語の構文で実装オブジェクト指向システムのスキームは、しかし、それはあなたがこれらのOOP言語のいずれかの内部に「オブジェクト指向」の概念を理解することができ、それも、あなたが理解するのに役立ちますオブジェクトは、さまざまな違いの実現を志向します。
この効果は、言語のようにJavaの、C ++、Pythonのを学習するときに、あなただけのユーザーだから、OOP言語を学ぶためにあなたを指示し、その後、OOシステムを達成するためのスキームを自分で使用されていない、あなたがクリエイターになります。
同様の機能はように型推論、型チェック、遅延評価などがあります。私は中言語機能のほとんどすべてを実現するので、私の目の前にある任意の言語では、すべてではなく、私の神聖なの頂上上記より、おもちゃの任意のアセンブリを分解することができます。
概要
非常に多くの重要な単語を書いて3回:!言語機能、言語機能、言語機能、言語機能、初心者や経験のあるプログラマかどうかを繰り返し、あなたは言語機能に焦点を当て、全体にもつれてはならない「言語のブランド。」支配を達成するための唯一の方法は、任意の言語でほとんどすぐに拾い上げ、そして品質のコードを書きます。

おすすめ

転載: blog.51cto.com/14512197/2439361
おすすめ