どの時点で自分が言語を「学んだ」と言えるでしょうか?


67

プログラミングの数年で、RubyからC ++までのすべてをいじりました。私は基本的な構文(Ruby)を学ぶことから、言語の能力を伸ばすいくつかの主要な(私にとって)プロジェクトを完了するまで、すべてを行いました。この多様性(および言語の真の学習が決して止まらないという事実)を考えると、いつ言語を知っている(または学習した)と言えますか?


12
あなたが探している言葉は、言語を「習得する」ことであり、この文脈で「学習する」ことは少し奇妙です。
ピーターB

7
「言葉は意味を意味します。意味がわかったら、言葉を忘れることができます。」-荘
-jfrankcarr

9
この質問をする必要がないとき、あなたはあなたが知る必要があることを学んだでしょう

1
@JarrodRobersonこう言ったのはこのZhuangziですか?
jadkik94

2
LinkedInによると、あなたのスキル履歴書にプログラミング言語を載せるのに非常に低いバーがあります...私のLinkedInによると、以前にJavaコードを見たことがある人は、明らかに自分のスキルセクションにそれをリストすることに抵抗を感じていません。
クリスデール

回答:


70

どの時点で、英語やフランス語などの言語を「学習」したと言えるでしょうか?ほとんどの人は、あなたが言語を使ってコミュニケーションをとることができれば、その言語を学んだことを受け入れると思います。すべての単語を理解したり、すべてのイディオムを理解したりする必要はありませんが、人々が日常会話で使用する言語の(かなり小さな)サブセットのほとんどを知っている必要があります。その程度まで言語を「学習」したので、その言語を毎日使用するにつれてさらに学習を続け、より多くの言語に自分自身をさらすことができます。あなたが死ぬ時までに、あなたはまだ言語について知っているすべてを知っているわけではありませんが、あなたは決して言語を「学んだ」とは言いません。

だから、私はコンピューター言語を使用していると思います。C ++やRubyなどの言語で有用なプログラムを作成できる場合、その言語を「知っている」と言うことができます。言語を知っている程度を定量化する必要がある場合は、人間の言語で使用するのと同じ用語を使用してください。「ちょっとした C ++ を知っている」または「会話型 C ++ を知っている」または「C ++に堪能だ」と言うと、あなたはただ十分に知っている、役に立つことを成し遂げるのに十分な、またはあなたが専門家であることを意味し、それぞれ。


15
会話や流fluentという用語はかなり主観的であり、自然言語に適していますが、コンピューター言語に適用した場合の意味を理解することは困難です。まだ主観的ですが、機能的イドマチックな方がうまくいくかもしれません。機能的とは、構文を十分に知って有用な構造を記述することを意味し、慣用的な知識を持っているとは、言語での記述方法を知っているだけでなく、C#での使用など、言語のイディオムを使用することも十分に知っていることを意味しますusingまたはb, a = a, bPythonのジェネレーター。それ以外の場合、+ 1。
マークブース

13
@MarkBooth試験のスコアの短い説明は、主観的なものです。ポイントは、ほとんどの人がコンピューター言語の知識の大まかなガイドとしてすでに人間の言語の知識のレベルに慣れていることを使用し、さらに調査を促す友好的な方法でそれを行うことです。会話型C ++は、「基本についてはよく知っていますが、高度なコード、あいまいなコード、またはトリッキーなコードについて支援が必要な場合があります」の略です。
カレブ

3
私はあなたがほとんど正しいと思いますが、多くの人々は、彼らがまだ悲惨なレベルを持っているときに自然言語を学んだと間違って思い込んでいると思います。また、プログラミング言語を学んだと言う人にも当てはまります。
ヘイレム

あなたの答えは完璧だと思います。それは言語の知識を定量化することがどれだけ不可能かさえ示しています。実際、流fluentはネイティブスピーカーが必要とするほど多くの説明でほとんど何でも話せることを意味しますが、これはほとんどのネイティブスピーカーが古き良き作家が持っている言語知識の10分の1を持たないという事実に対処しません(いいえ、ハリー・ポッターやダン・ブラウンではなく、読みにくい本物の古いスタイルです)。実際に誰も言語の問題に取り組んでいないのに、どう対処しますか?そして実際にそれがプログラミングの生産性に強く影響するときは?
モルグ。

1
@Morg。まったくのゴミ。プログラミングとは、コンピューターに何をすべきかを伝えることと同じくらい、将来のプログラマー(自分を含む)と通信することです。確かに、1つのコードを書くだけではうまく通信する必要はないかもしれませんが、現実の世界では、コードの将来のメンテナーに意図を明確にすることは、コンピューターに正しいことをさせるよりもはるかに重要です。とにかく、これらのコメントはこの答えを改善するのに役立たなくなったので、さらに議論したい場合は、ソフトウェアエンジニアリングチャットにお問い合わせください。
マークブース

25

誰が尋ねているかによります

適切に質問する人は、「言語を学んだ」と言う人にどのレベルのスキルが期待されるかについて、特定の考えを持っています。

基本的に、私は2つの典型的な尺度に遭遇しました。それにより、人々は「Xを学習しましたか?」という質問に対する答えを判断します。

ほとんどのオタクにとって、 これはポーサーを排除するためのトリックの質問です。これは、あなたの質問に対する他の回答ですでに実証されています;)。あなたがそれを学んだと言うならば、あなたは暗黙のうちに「完璧」である仕事の範囲を見ることに失敗します、そして、さらに悪いことに、あなたは謙虚さに失敗します。

ほとんどのボスにとって、問題を解決できれば、「学習した」ことになります。コードがコンパイルされると、基準はしばしば満たされます。謙虚な方法で彼の質問に答えると、彼は親relativeである可能性のあるポーザーにタスクを割り当てます。

それで、あなたの聴衆は何ですか?


4
インタビューでは、知っていれば知っています。職場では、Googleがそれを知っていれば知っています。
-asfallows

3
インタビューでは、インタビュアーがネクタイを着ている場合は「知っています」、そうでない場合は「「知っている」と定義してください」です;)。公平を期すため、ほとんどのインタビュアーは、「経験がある」かどうかを尋ねます。「経験がある」と答えた方が簡単です
ケプラ

18

人々は「学習した」という言葉の完全性に焦点を合わせていると思います。それはあなたが学習を終えたということです。そして誰もが指摘したように、プログラミング言語は話されている言語と同様に生きている存在です。たとえば、C#2を完全に習得した人は、LINQ、Lambdas、varキーワード、オブジェクト/コレクションイニシャライザー、および拡張メソッドを使用してC#3を調べ、以前のバージョンで学んだことから多くのことが変わっていることを発見します。同じことがでC#4で起こっているawaitasyncキーワードやその他の新しい言語構造。

そして、ここで構文について話しているだけです。ほとんどの言語がフレームワークとペアになっていることを忘れています。C#には.NETフレームワークがあり、JavaにはRuby、C ++、PHP、およびPERLのように独自のフレームワークがあります。言語のフレームワークは語彙であり、言語自体は単なる構文であると考えてください。言語を知っているということは、その言語で文章を作成する方法を知っているということです。フレームワークを知っているということは、言語で自分自身をうまく表現できるということです。最後に、構文と語彙を理解したら、「ネイティブスピーカー」としてコードを書くためにイディオムを学ぶ必要があります。

いくつかのレベルの学習があると思います。

  1. Hello World(最も初歩的なプログラムを書くことができます。)
  2. 熟練(基本的なプログラムを作成できますが、オンラインヘルプを定期的に参照する必要があります)
  3. 流Flu(必要なリファレンスを使用して事前プログラムを作成できます)。
  4. ネイティブスピーカー(最小限のオンラインヘルプで高度なプログラムを作成できます。コードは他のネイティブスピーカーのコードと区別できません)。

3
Nitpick:awaitC#5からのもので、C#4の主要な新しいものはでしたdynamic
svick

そうですね...私は、C#のバージョンは.NETのバージョンで行くうちトラック負け続ける
マイケル・ブラウン

7

言語を学んだと言うことはめったにありません。それはあなたがそれについて学び終わったことを意味します、それは...愚かです。

言語のイディオムを露骨に壊さないコードを(おそらく1週間の知識の錆びの後)構文参照を参照せずに書くことができるとき、言語を知っていると言ってよい。


2
イディオムは変化し、スタイルは場所によって異なり、実際、言語自体は時間とともに変化します。C ++などの言語を学習するまで「知っている」または「学習した」とは言えない場合、C ++を学習したと主張できる人はほとんどいません。
カレブ

1
@カレブ。
マイケルブラウン

3
あなたがそのように学んでいるなら、あなたはあなたの母国語さえも知らない、それはあまりにも愚かである(少なくともほとんどの人にとって)
-superM

@Caleb、それよりも悪いことに、C ++の多くの部分は無視されるとより良くなります。CarmackとTorvaldsの両方が指摘したように。
モルグ。

3

これは、意見に基づいた要素です。すべての技術用語で「学習」とは、言語のすべてを知っていることが期待されるように、完全な知識を持っていることを意味します。

しかし、プログラミングの世界では、目標/タスクを完了するためにあなたが言語で流programにプログラミングできるかどうかが重要だと思います。また、言語に慣れているかどうかも意味します。確かにあなたはそこに出て、何年も何年も大学を卒業した後に学位を取得することができますが、それは気づくためだけのものですか?いつ言語を学んだと言えるかを定義します。


2

その欠陥に気づき始めるとき。言語の学習を開始した後は、通常、物事を行うために学習するのに忙しいか、それがどこで失敗するかを知るために非常に関与しています(もちろん、これは、それがどれほど悪いかを見るために否定的な観点から学習を開始しない限りですこれまでのお気に入りの言語と比較しています)。あなたは、あなたがそれが失敗する領域に鋭く気づくまで、あなたは本当に言語を知らないと言うでしょう。


私はそれに同意できません。学習した最初の1つまたは2つの言語に当てはまる場合があります。何を探すべきかがわからない場合があります。そのため、最も巧妙な設計の失敗でも、正しい方法と見分けがつきません。いくつかの言語を学習したら、新しい言語の学習を開始するとすぐに言語の欠陥を確認できるようになります。しかし、その後、開発中にしばらくの間、「異なる」と「間違った」を誤って同一視します。各主要タイプのいくつかの言語(手続き、オブジェクト指向、関数型、宣言型...)を習得するまで、即時の判断が疑われます。
ウォーレンヤング

2

これに対する私の個人的な答えは、

  1. 簡単な実稼働レベルのプログラムを作成するための基本を知っています。
  2. 単純に思えたがそうではなかった問題を、少なくとも3時間連続して解決しました。

そこから、私はそれを学習と呼ぶのではなく、マスターと呼びます。


1

アプリケーションまたはコンポーネントがメールを読み取れる時点、つまりZawinskiの法則

「すべてのプログラムは、メールを読むことができるようになるまで拡張しようとします。Jamie Zawinski(「ソフトウェア開発の法則」と呼ばれる)により、真に有用なプログラムはすべて、ツールキットとアプリケーションプラットフォームに進化するというプレッシャーを経験しているという信念を表明しました。彼は、メーラーのことは単なる副作用だと言います。

これは、RSSが「... RSSフィードを読むことができる」ようになったときに更新され、最近では「... Twitterフィードを読むことができる」に更新される可能性があります。;-)


0

私はあなたがそれを見ないときに言語を学んだと思います。forサイクルとデータアクセスは表示されませんが、アルゴリズムのワークフローは表示されます。

パラメーターの受け渡しや配列処理、魔法のマクロでトリックをすることはありません。あなたのコードは、友人や教師に見せるための自己マーケティング資料ではなく、問題に対する理解と、コンピューターに対するあなたの意思を最も読みやすい方法で表現するためのものです。

次のように、多くの間違いを避けるのに役立つ習慣があります。たとえば、「1行だけになる」または「私は馬鹿ではない」と確信している場合でも、式で{}コードブロックと()を使用演算子の優先順位」。

知っているクラス、パターン、フレームワークAPIの数のカウントを停止します。これが、インテリセンス、リファレンス、チュートリアル、およびGoogleの目的です。しかし、問題を見ると、どの部分を分割できるか、どのツールやアルゴリズムを使用してそれらを解決できるかがすぐにわかります。

あなたがどのような作品を、あるエレガントかつ小型。コーディングを楽しんで、バグを簡単に見つけることができます。はい、マスターもバグを作成しますが、それは人間であるためです-しかし、彼らはコード構造が適切な場所に導くため、すぐにバグを見つけます。

最後に、問題を考え、分析し、解決することを学びました。それらと比較して、実際の言語は二次的なものであり、ルールとツールの現在のボックスにすぎません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.