プログラミングの数年で、RubyからC ++までのすべてをいじりました。私は基本的な構文(Ruby)を学ぶことから、言語の能力を伸ばすいくつかの主要な(私にとって)プロジェクトを完了するまで、すべてを行いました。この多様性(および言語の真の学習が決して止まらないという事実)を考えると、いつ言語を知っている(または学習した)と言えますか?
プログラミングの数年で、RubyからC ++までのすべてをいじりました。私は基本的な構文(Ruby)を学ぶことから、言語の能力を伸ばすいくつかの主要な(私にとって)プロジェクトを完了するまで、すべてを行いました。この多様性(および言語の真の学習が決して止まらないという事実)を考えると、いつ言語を知っている(または学習した)と言えますか?
回答:
どの時点で、英語やフランス語などの言語を「学習」したと言えるでしょうか?ほとんどの人は、あなたが言語を使ってコミュニケーションをとることができれば、その言語を学んだことを受け入れると思います。すべての単語を理解したり、すべてのイディオムを理解したりする必要はありませんが、人々が日常会話で使用する言語の(かなり小さな)サブセットのほとんどを知っている必要があります。その程度まで言語を「学習」したので、その言語を毎日使用するにつれてさらに学習を続け、より多くの言語に自分自身をさらすことができます。あなたが死ぬ時までに、あなたはまだ言語について知っているすべてを知っているわけではありませんが、あなたは決して言語を「学んだ」とは言いません。
だから、私はコンピューター言語を使用していると思います。C ++やRubyなどの言語で有用なプログラムを作成できる場合、その言語を「知っている」と言うことができます。言語を知っている程度を定量化する必要がある場合は、人間の言語で使用するのと同じ用語を使用してください。「ちょっとした C ++ を知っている」または「会話型 C ++ を知っている」または「C ++に堪能だ」と言うと、あなたはただ十分に知っている、役に立つことを成し遂げるのに十分な、またはあなたが専門家であることを意味し、それぞれ。
using
またはb, a = a, b
Pythonのジェネレーター。それ以外の場合、+ 1。
誰が尋ねているかによります
適切に質問する人は、「言語を学んだ」と言う人にどのレベルのスキルが期待されるかについて、特定の考えを持っています。
基本的に、私は2つの典型的な尺度に遭遇しました。それにより、人々は「Xを学習しましたか?」という質問に対する答えを判断します。
ほとんどのオタクにとって、 これはポーサーを排除するためのトリックの質問です。これは、あなたの質問に対する他の回答ですでに実証されています;)。あなたがそれを学んだと言うならば、あなたは暗黙のうちに「完璧」である仕事の範囲を見ることに失敗します、そして、さらに悪いことに、あなたは謙虚さに失敗します。
ほとんどのボスにとって、問題を解決できれば、「学習した」ことになります。コードがコンパイルされると、基準はしばしば満たされます。謙虚な方法で彼の質問に答えると、彼は親relativeである可能性のあるポーザーにタスクを割り当てます。
それで、あなたの聴衆は何ですか?
人々は「学習した」という言葉の完全性に焦点を合わせていると思います。それはあなたが学習を終えたということです。そして誰もが指摘したように、プログラミング言語は話されている言語と同様に生きている存在です。たとえば、C#2を完全に習得した人は、LINQ、Lambdas、var
キーワード、オブジェクト/コレクションイニシャライザー、および拡張メソッドを使用してC#3を調べ、以前のバージョンで学んだことから多くのことが変わっていることを発見します。同じことがでC#4で起こっているawait
、async
キーワードやその他の新しい言語構造。
そして、ここで構文について話しているだけです。ほとんどの言語がフレームワークとペアになっていることを忘れています。C#には.NETフレームワークがあり、JavaにはRuby、C ++、PHP、およびPERLのように独自のフレームワークがあります。言語のフレームワークは語彙であり、言語自体は単なる構文であると考えてください。言語を知っているということは、その言語で文章を作成する方法を知っているということです。フレームワークを知っているということは、言語で自分自身をうまく表現できるということです。最後に、構文と語彙を理解したら、「ネイティブスピーカー」としてコードを書くためにイディオムを学ぶ必要があります。
いくつかのレベルの学習があると思います。
await
C#5からのもので、C#4の主要な新しいものはでしたdynamic
。
言語を学んだと言うことはめったにありません。それはあなたがそれについて学び終わったことを意味します、それは...愚かです。
言語のイディオムを露骨に壊さないコードを(おそらく1週間の知識の錆びの後)構文参照を参照せずに書くことができるとき、言語を知っていると言ってよい。
その欠陥に気づき始めるとき。言語の学習を開始した後は、通常、物事を行うために学習するのに忙しいか、それがどこで失敗するかを知るために非常に関与しています(もちろん、これは、それがどれほど悪いかを見るために否定的な観点から学習を開始しない限りですこれまでのお気に入りの言語と比較しています)。あなたは、あなたがそれが失敗する領域に鋭く気づくまで、あなたは本当に言語を知らないと言うでしょう。
これに対する私の個人的な答えは、
そこから、私はそれを学習と呼ぶのではなく、マスターと呼びます。
アプリケーションまたはコンポーネントがメールを読み取れる時点、つまりZawinskiの法則。
「すべてのプログラムは、メールを読むことができるようになるまで拡張しようとします。Jamie Zawinski(「ソフトウェア開発の法則」と呼ばれる)により、真に有用なプログラムはすべて、ツールキットとアプリケーションプラットフォームに進化するというプレッシャーを経験しているという信念を表明しました。彼は、メーラーのことは単なる副作用だと言います。
これは、RSSが「... RSSフィードを読むことができる」ようになったときに更新され、最近では「... Twitterフィードを読むことができる」に更新される可能性があります。;-)
私はあなたがそれを見ないときに言語を学んだと思います。forサイクルとデータアクセスは表示されませんが、アルゴリズムのワークフローは表示されます。
パラメーターの受け渡しや配列処理、魔法のマクロでトリックをすることはありません。あなたのコードは、友人や教師に見せるための自己マーケティング資料ではなく、問題に対する理解と、コンピューターに対するあなたの意思を最も読みやすい方法で表現するためのものです。
次のように、多くの間違いを避けるのに役立つ習慣があります。たとえば、「1行だけになる」または「私は馬鹿ではない」と確信している場合でも、式で{}コードブロックと()を使用演算子の優先順位」。
知っているクラス、パターン、フレームワークAPIの数のカウントを停止します。これが、インテリセンス、リファレンス、チュートリアル、およびGoogleの目的です。しかし、問題を見ると、どの部分を分割できるか、どのツールやアルゴリズムを使用してそれらを解決できるかがすぐにわかります。
あなたがどのような作品を、あるエレガントかつ小型。コーディングを楽しんで、バグを簡単に見つけることができます。はい、マスターもバグを作成しますが、それは人間であるためです-しかし、彼らはコード構造が適切な場所に導くため、すぐにバグを見つけます。
最後に、問題を考え、分析し、解決することを学びました。それらと比較して、実際の言語は二次的なものであり、ルールとツールの現在のボックスにすぎません。