web-dev-qa-db-ja.com

APIドキュメントなしでプログラミングすることは本当に必要なスキルですか?

私は今日Javaプログラミング試験にほとんど合格しませんでした。スレッド化に関するいくつかの一般的な質問に答える必要があり、うまくいかなかった小さなスレッド化されたプログラムを書く必要がありました。ラップトップをコンピュータに接続する必要がありました。プロジェクター画面ですぐにプログラムを記述します。最初の試みは匿名クラスを使用することでしたが、正確な構文を忘れていました。おそらく興奮のためか、または過去2週間は主にphpでコーディングしていたためです。 APIのドキュメント。答えは「いいえ」だったので、別の方法を実行してRunnableを実装しました。プログラムは最後に要求されたものを実行していました。もちろん、審査官は私の最初の失敗に気付き、それが私のスコアに大きな影響を与えました。 APIドキュメントの使用が許可されていないことに驚きました。

だから、私の質問です:APIドキュメントなしで完璧にコーディングできることは本当に重要ですか?このスキルを磨くべきですか?現実の世界や職場環境で本当に重要ですか?プログラミングコースでは、パターンの学習、優れたデザインアプリケーションを作成するスキルの開発、APIを使用して必要な情報をすばやく見つけるスキルに焦点を当てました。私はAPIドキュメントなしでプログラミングする方法を学ぶことを試みていませんでした。それは就職の面接(APIドキュメントなしのコーディング)中になくてはならないものですか?

22
bancer

Real Life™では、私はこのスキルを「ナイストゥナイト」と評価しますが、まったく必要ではありません。ただし、大学の環境では異なります。

ドキュメンテーションなしでコーディングする機能は、学生が主題に精通していることのindirect指標として使用できます。ある意味では、ドキュメントに触れずに何かをコーディングすると、以前にAPIを使って練習したことがあることが教授にわかります。問題のAPIを大まかに理解している賢い人は、ほぼすべてを理解できるはずですJava彼女のAPIこれは偶然ではありません。多くの場合、プログラマーは仕事で学習することが期待され、Javaを含む一般的なプログラミングシステムのAPIドキュメントは、プログラマーがすばやく学習できるように構造化されています。例、概念を簡潔かつ簡潔に示す。

これは、(あなたがどれほど賢いかを測定するのではなく)主題についての知識を測定するという教授の目標に直接反します。したがって、ドキュメントを確認せずにコードを尋ねることは不合理ではありません。

注:質問の編集に応じて、この回答を編集しました。

39
dasblinkenlight

かつて彼のコードに小さなバグがある人がいたので、彼はそれをStackOverflowに持っていき、助けを求めました。 StackOverflow:Java(繰り返しなしで数値を生成する) 。私は彼のコードを見て、彼のHashSetは常に値で満たされているが、それはそれで、彼は私に尋ねました:「どうやってそれをクリアしますか?」私は私が与えた答えを特に誇りに思っていないことを認めなければなりません。

あなたは絶対にあなたが毎日使用する基本的なものを知る必要があります。あなたはそれらすべてを知る必要があり、それらをよく知る必要があります。しかし、基本的なものだけです。

他のすべての場合、重要なことは、あなたが望むことをする何かがそこにあることを知ることです。正確にどのクラスを使用する必要があるか、正確にどのメソッドを呼び出す必要があるか、正確にどのパラメーターをそれに渡す必要があるかは、脳の貴重なニューロンを占有しておく必要がないものです。それがドキュメントの目的であり、それがオートコンプリートを備えたIDEが発明された理由です。そして、Pushが駆り立てば、常にStackOverflowとより大きなinterwebzがあります。

プログラマーにAPIの詳細を知ってもらうことは、弁護士に法的コードとすべての判例を具体的に知ってもらうことと同じです。それは無意味です。無駄な運動。

21
Mike Nakis

APIドキュメントなしでプログラミングすることは本当に必要なスキルですか?

必須というわけではありませんが、

非常に望ましいスキル

imNSho。

私は最近数か月間、APIを私よりもはるかによく知っている人と密接に協力してコーディングを行いました。彼はAPIのドキュメントをスキップできるので、生産性が非常に高くなります distract meをチェックします。


ここでは、流暢さについて話しています。 何かができるだけでなく、流暢であることについて。

あなたはそれが流暢であることを知っていますか?それは誰かがあなたを見ているとき、それはまるであなたがタイプするようにコーディングするかのように見えます...

  • ...ちょうど正しいコードが指から画面に流れるかのように。 APIドキュメント、チュートリアル、およびマニュアルをチェックしないかのように。実際、あなたはそれらすべてをチェックしますが、それはすべてあなたの頭の中にあるので目に見えません。あなたはあなたの頭の中で必要なすべての知識を持っています-充電さ​​れ、ロードされ、使用する準備ができています。

...それは流暢な知識です。初心者が1時間かかるようなことをするのに1分かかるときです。本当に努力する価値があります。 それは勝利のようなにおいがします。

someAPIの流暢さを習得し、それがどのように感じられるかを適切に覚えている場合、このメモリはanyその他のAPI。

9
gnat

いいえ。APIドキュメントから検索する機能がなければ、私は死んでしまいます。私がそれを持っていない唯一の時は、私がドキュメントにアクセスできない何かをデバッグしようとしているときです。次に、APIを「リバースエンジニアリング」し、必要に応じてカットアンドペーストします。

APIとは何か、どの部分を使用するのが最適かをよく理解することが重要ですが、メソッド名、変数名を知っている必要はありません。

8
Paul

仕事では、ドキュメントにアクセスできなかった状況はありませんでした。一方、不十分に書かれたドキュメントを解釈できるように、読解力と一般的な理解があると、いつでも役に立ちます。

最終的には、APIのパターンと構造を理解する必要がありますが、すべてがどこにあるかを正確に知ることは特に有用ではありません。

SFU Computing Scienceのクローズドブック試験は、成績の70%から100%を占めています。理論は、試験がコース資料の理解と適応性をテストするというものです。実際には、実際にテストするのは、神経、睡眠の質/持続時間、機知、そして暗記のテクニックです。これらは、学問的にも、ソフトウェア業界の典型的な仕事にも必要ありません。

3
Rei Miyasaka

Eclipseではobj.とctrl + spaceを押すと、指定されたオブジェクトのすべてのメソッドオプションが提供され、オートコンプリートが試行されます。それが何らかの理由で失敗した場合、 Java API に残りの答えがあります。私がGoogleで何かをする方法を知らなかった日を考えるのは難しいでしょう。

学校は全く別の話です。

2
Stephanie

最後の質問を除いて、APIドキュメントに関する百科事典的な知識は重要ではありません。すべてのクラスのすべてのメソッドのすべての詳細を知っていれば、明らかにプログラムが速くなりますが、それは妥当な期待ではありません。

最後の質問です。APIドキュメントがなくても、一部のクラスの詳細を知っていることが求められる場合があります。面接の前にテストを受けることがわかっている場合、または仕事が非常に集中している場合(つまり、1日中スレッドを実行する場合)、関連するクラスを詳細に知る必要があると合理的に期待できます。


補遺:教授/インストラクターとの試験の前に、提供される資料と持参できる資料を明確に説明する必要があります。明示的に同意していないものは許可されていないと仮定します。執筆の基本だけを持ち、希望する本を持ち込めるコース、および両面に必要なものを1枚だけ持ち込めるコースがありました。試験は通常、許可されている資料を中心に構成されています。

2
Matt

APIドキュメント!=言語構文。

誰かがさまざまなJavaクラスとそのメソッドの正確な名前を知らないときに理解できます。私はそれらを知らないので、Java every私はドキュメントも万能性もないIDE自動補完-特にJava変数/クラス/メソッド名におけるその冗長性。

しかし、あなたが言ったように、あなたが覚えることができないのは通常ドキュメントに見られるものではありません。これは内部クラスの構文です-これは言語自体の機能であり、ドキュメントから記憶されるものではありません。

学生が(多くの場合)標準のAPIのドキュメントを使用できるようにする必要があると思うのと同じくらい、プログラミング試験に合格したい人は言語構文を知っているべきだと思います。そして、私は言語デザイナーだけが知っている気まぐれなEdgeのケースを意味するのではなく、標準のケースだけをあなたの例のように。

2
Goran Jovic

私見、学界は通常、優れたソフトウェアエンジニアを生み出すことに悪臭を放ちます。レッスン後に楽しいコードを書いた人だけが、実際のプロジェクトで何かを達成するチャンスがあります。

繰り返しになりますが、アカデミアとは開発者を生み出すことではなく、世界全体が抽象的な問題をどのように解決し、研究を行うかということです。ほとんどの場合、実用化にはほど遠い。そして、研究者は必ずしも優れたコーダーではありません。

そして、心臓のにおいによってAPIを学ぶ。すべての隅や隅を検索するautocomplete/google/msdn/javadocsがあります。なぜ、誰もが常にそれらすべてを常に脳に留めておきたいのでしょうか。数週間/数か月で習得する最も一般的な関数。構文、構造、および一般的なアイデアを知っていれば、他のすべてのものが数秒で検索できます。

繰り返しになりますが、一部の人々はまだテキストエディターでコーディングして関数名を覚えています。

さらに、関数名とパラメーターを知っている場合でも、最新のAPIドキュメントでそれらを確認することをお勧めします。 strtokは、10年前のシングルスレッドシナリオでは問題ありませんでしたが、現在は問題です。名前とパラメータを習得しただけでは、その機能が廃止されたり、より優れた代替案が発明されたりする可能性があることは決してわかりません。

言語は変化するので、一緒に変化する必要があります。本当の方法を1つ覚えておくことは、そのためには良くありません。

2
Coder

人間の脳がそれほど多くの情報を記憶することは物理的に不可能ですが、それは必須ではありませんが、基本的な知識や最もよく使われるものを覚えておく必要があります。 。そうでなければ、Javaにあるすべてを記憶することは不可能です。

また、教師が自分に割り当てた演習やプロジェクト以外に、生徒にすべてを知ってもらいたい、またはそれを使用して言語でプログラミングしているかどうかを知るのは不公平です。私にとっては、学校に行っていないときや関連する仕事をしているときに何をしているのかを知りたいようなものです。

編集:明らかに、教師があなたに求めることは彼に依存します。他の教師は理論をより重視し、他の教師は練習を重視し、すべてを理解しなくても気にしません。

1
Coyote21

遅かれ早かれapiを使用してプロジェクトを短期間始めた場合、そのapiは非常によく理解できます。ドキュメント(msdn、manページなど)を見たことがない人は誰も知らないので、これはまったく不要なスキルだと思います。

ただし、大学はまったく異なるユニバースです。たとえば、CreateWindowExの10.番目のパラメーターのtypedef名がわからないために失敗しても驚かないでください。

1