初心者はIDEオートコンプリート(Intellisense)を使用する必要がありますか?[閉まっている]


35

プログラミングを初めて学び、初めてプログラミングを学ぶ人を助けているときに、これに遭遇することがよくあります。私は本当に新しい初心者について話している、まだオブジェクト指向について学び、オブジェクトを構築し、メソッド呼び出しとそのようなもの。通常、彼らにはキーボードがあり、私はただガイダンスを提供しています。

一方では、IDEのオートコンプリート機能は、IDEが正しく実行されていることをフィードバックし、すぐに気に入って信頼できるようになることを支援します。

一方で、IDEのオートコンプリートへの初期の依存は、概念を本当に理解しなかったり、いつか単純なエディターだけで自分自身を見つけた場合に機能できるようになることを恐れています。

この点でより多くの経験がある人は誰でも彼らの意見を共有できますか?初心者、オートコンプリート、または手動入力のどちらが良いですか?

更新

みんなの入力に感謝します!

多くの答えは、メソッドの完成、メソッドのルックアップやドキュメントの提供など、オートコンプリートの主な用途に焦点を当てているように見えます。しかし、最近のIDEはもっと似ています。

  • リストタイプのオブジェクトを作成するとき、IDEは右側の新しいArrayListに自動補完します。なぜ新しいリストになれないのか、初心者にはすぐには分からないかもしれませんが、それがうまくいくので、彼らは先に進みます。
  • コンテキスト内のローカル変数に基づいてメソッドパラメーターを入力します。
  • オブジェクトのキャストを実行する
  • 「import」または「using」ステートメントを自動的に追加する

などなど。これらは私が意味する種類のものです。私がプログラミング101をやっている人について話していることを思い出してください。IDEがこれらのことを行うのを見たことがあります。

プログラムの流れに集中し、言語の詳細を理解して言語のニュアンスを理解する前に物事のコツをつかむのに役立つと主張することができますが、私にはわかりません。


1
これは一般的な差し止め命令に該当すると思います。ツールを使用してください。盲目的に使用するほど怠laにならないでください。
アレックスファインマン

標準のテキストエディター」を使用する必要があると思います... gnu.org/fun/jokes/ed.msg
JoelFan

ここで学んだことをブログ投稿でまとめました:codinguser.com/2011/01/abstraction-is-good-magic-is-bad
codinguser

回答:


11

IDEを利用すると、学習プロセスに役立つと思います。メソッド、プロパティ、パラメーター、オーバーロードなどが検出可能です。圧倒的に巨大なライブラリを備えたIntellisenseは、JITの知識を流し込むのに役立ちます。今日のコーディング環境では、すべてを事前に学習することは不可能であり、JIT学習は多くの場合、迅速に生産性を高める唯一の実用的な方法です。

IDEを盲目的に使用すると、松葉杖を使用することが松葉杖になる可能性があることは理解していますが、マイナスの利点をはるかに上回る利点があると思います。

一方、事前に構築されているものを理解せずにテンプレートを使用することは、より大きな問題です。開発者がテンプレートコードを読むのに時間がかかる場合、これらは学習ツールとして使用できると思います。しかし、ほとんどの人は気にしません。しかし、それは素晴らしい学習ツールになる可能性があります。


JIT?.NET FCLを意味しませんか?=)そうだね...長年にわたってインテリセンスは私にとって学習ツールであることが証明されており、新しいクラス、メソッド、およびプロパティについて多くのことを学んできた。
ギデオン

1
JITのコンパイルではなく、JITの学習を意味しました;)学ぶべきことはたくさんあります。前もってすべてを学習しようとするのは非現実的です。
マークフリードマン

75

概念を理解し、何十何百もの愚かなライブラリクラスとメソッドを記憶することは、まったく異なる2つのことです。インテリセンスは、その役に立たない知識をすべて完全にあなたの心から追い払うのを助け、あなたがそれを早くするほど良いです。有用な概念のためのスペースを残し、APIの限られたリソースを無駄にしないでください。

質問の更新された部分に答えるには、一般的なプログラミングの概念と比較して、構文の詳細、ファイルレイアウト、コンパイラ、およびリンカーの呼び出しも重要ではありません。彼らが理解されると、初心者は、低レベルのものが実際にどのように機能するかをより深く理解することができます。すでに基本を知っているときにそれを行うことをお勧めします。そうしないと、多くの危険な魔法の迷信を拾う可能性があります。

たとえば、DrScheme IDEはプログラミングの教育において素晴らしい実績があり、その成功は主に、本当に重要なことに集中できるようになったためです。


30
+1。実際に当時のインタビューで、Win32 API関数のパラメーターのリストを引用するように頼まれました。その知識がどのような関連性があるのか​​理解できませんでした。

4
@codinguser:それも問題ではありません。現在使用している言語の構文すら覚えていないことがよくあります(自分で設計したとしても)。importステートメントやゲッター/セッターペアの記述方法よりも、覚えておくべき重要なことがたくさんあります。また、IDEはより便利なことを行っています-たとえば、ツールチップに型を表示します。
SKロジック

4
@ジョシュK、「抽象化」という言葉を聞いたことがありますか?抽象化のレベルが異なる理由を知っていますか?現在の問題領域の抽象化レベルより下にあるものに注意を払うことは、愚かで非生産的です。キャリアの早い段階でこの破壊的な習慣を取り戻すことは災害です。部分的に回復するのに10年以上かかりました。
SKロジック

3
@ジョシュK、あなたはシステムコールに至るまで何が起こっているかを理解することを主張しますか?この理解には付加価値はありません。もちろん、優れたプログラマーは、マシンコードを含むすべてのレベルで操作できなければなりませんが、優れたプログラマーは無関係なものから完全に抽象化できる必要があります。
SKロジック

3
@ SK-logic:同意します直接使用しているインポートと関数呼び出しは抽象化するものではありません。
ジョシュK

16

オートコンプリートを使用することは悪いことではありません。

それは単にスピードのためだけであり、私にとっては、誰かがIDEをつかみ始め、それを上手に使い始めた兆候でしょう。

たとえば、それを使用しないとオブジェクト指向の学習に役立つとは思いません。


1
あなたが基本をマスターしたとき、私はすべてオートコンプリートをします。スピードアップの速度がわかっている場合、スピードは良いです。ただし、IDEが同じ型のローカル変数に基づいてパラメーターを自動的に入力するか、インポートステートメントを追加すると、動作するだけで、一部の初心者は実際には理解しません。
コーディングユーザー

私はあなたの編集を読みましたが、私たちが雇っている初心者は、何が満たされているかを見て、質問し、理解する賢い人だと思います。もちろん、実際にそれが起こるかどうかは別の問題です。
-ozz

13

プログラミングの初心者である学生を教え、指導してきたので、オートコンプリート/インテリセンスは時々良いことよりも悪いことを引き起こすことがわかりました。はい、彼らはそれを使用してプログラムを書くことができます。はい、それはコンパイルして実行され、私たちが彼らにするように頼んだことさえするかもしれません。しかし、彼らは何をしているのか理解していません。

何が起こっているのか理解できないと、プログラミングが減り、ソリューションを一緒にハッキングしてマークを取得するようになります。私たちが彼らに何をするように依頼したかが難しくなり、何かがうまくいくまで彼らはちょうどハッキングしたので、それは学生でたくさん起こったことがわかりました。これは、中間期が到来し、学生が簡単な方法を手書きで書くように求められたときに明らかになりました...彼らはできませんでした。

はい、オートコンプリート/インテリセンスは、私たち(プロの開発者)に非常に役立ちます。さまざまなメソッドやパラメータリストをすべて記憶する必要はありませんが、同時に、メソッドがどのパラメータを取得するのかを推測することもできます。

初心者はしません。IDEがメソッドのリストを取得するまで待機し、必要なものが見つかるまでそのリストをスクロールし、必要なパラメーターを調べて、渡す必要があるかどうかを確認します。 ..そして最後に、彼らは手渡すことができる何かを一緒にハッキングします。

そして、コースの最後にパスを取得すると、彼らは浅い勝利でプログラミングクラスから離れ、多くの人は自分がやったことや理由を理解していなかったため、別のCSクラスを再び受講することはありませんでしたそれ。


2
私はシニカルになり、CSには常にそのようなタイプの学生がいたと言います。Intellisenseを学習したい場合は、Googleや本の各関数名を調べるのに時間を費やすのではなく、より速く物事を行うのに役立ちます
-user151019

4
@マーク、同意します。私の答えは、すべての生徒を暗示する範囲で広すぎたと思います。しかし、これを言うと、IDEをコースの開発環境にオートコンプリートを使用して導入した後、最初の中間期の失敗の数のようにいつまでに理解できなかった学生の数を紹介します。受けた質問の数はかなり減りましたが、b / cの学生の方がよく理解しているのではなく、b / cを理解するのに時間をかけずにプログラムを動作させることができることがわかりました。
ティアナ

students were asked to write simple methods by hand...they couldn't.それはあなたが彼らに教えようとしていることに帰着します。一般的なプログラミングの概念、または言語固有の構文?
ジンジャーブレッド

9

一般にIDEと開発環境の問題は、オートコンプリートのようなものではなく、多くの「興味深い」ものがすでにあなたのために行われ、さまざまな程度で隠されているテンプレート化されたソリューション(file | new | project)の使用。

フードの下で何が起こっているかを広く理解している人にとってはこれは役に立ちますが、必要なことを学んでいる人にとってはかなり少ないです。

また、ヘビーウェイトIDEを起動するのにかかる時間の問題もあります...

したがって、より軽量なものを使用し、コードのすべての行を自分で記述したアプリケーションを実行できることは、かなりのメリットがあると思います-特にテキストエディタとコンパイラを使用することは、必要ないという重要なポイントを示すためですIDEなどはソフトウェアを作成しますが、それは私が長い間テキストエディタを使用したいということではなく、デバッグの面で課題を提示することを意味します-ブレークポイントを実行でき、コードをシングルステップできるようにしたいこれにより、何が起こっているのかを理解しやすくなります。

もちろん、「ライブ」コマンドラインがあるPythonのようなものを考慮することで、問題をさらに混乱させることができます...

良い質問です。良い答えはありません-テキストエディターとコンパイラー(またはコマンドラインインタープリター)を使用して進行を学習し、さらに進む前に構文とロジックの基本に集中できるようにすることを除きます。より強力な開発環境で簡単に行える複雑なもの。


2
正直なところ、IDEの起動にかかる時間はごくわずかです。IDEを使用して起動するまでに何十時間も費やしています。確かに、その期間中にコード補完だけで開始するのにかかる余分な30〜45秒以上の時間を節約できます。
EricBoersma

@Eric-あなたの文脈では?はい、100%。質問の文脈では、すなわち完全な初心者ですか?短いセッションではIDEが頻繁に開いたり閉じたりするのではないかと思いますが、一般的に邪魔になるのは落胆です。
マーフ

ORMについてはこのように感じています。データベースの初心者は、データベースの開発について十分に理解していないため、それらを使用することを許可されるべきではありません。自分が何をしているかを知っている人々のための素晴らしいツール、初心者のための災害。
HLGEM

@HLGEMそれはそれよりも少し複雑であることを提案するつもりでした...しかし、私はリモートで初心者やデータベースにコメントする資格さえないと思います)-:(そして、明確にするために、新しい言語とフレームワークを学ぶIDEの問題についてコメントできると思います-.NETとVisual Studioの初期の問題が多すぎるという特定の思い出があります)
マーフ

4

困難な方法を学ぶことは、通常あなたにとどまります。

初心者として、IDEを使用しないでください。コマンドラインを使用して、間違いから学びます。これは、コンパイラとリンカーのオプションをより詳しく理解するのにも役立ちます。

では、いつIDEを使用しますか?巨大なものを設計しているとき、またはクラス、メソッド、変数のロードがある巨大なコードベースで作業しているとき。


7
コンパイラとは何かをまだ知らない場合、コンパイラとリンカのオプションを理解する意味は何ですか?それは通常混乱に終わります。私は10年以上かけて、最初は深すぎて低すぎる露出(MACRO32、Fortran、DCL ...)によって生じた自分自身の混乱を解消しました。
SKロジック

2
同意した。たとえば、PythonやC#を学習する前にアセンブリを学習するのは意味がありません。一般に、高レベルの概念を学習してから、低レベルの概念またはその他の巧妙なものに絞り込みます。
-DMan

4

IDEは、その癖について不平を言うことはよくありますが、IDEが生産性にとって有益であると最初に言うでしょう。ただし、BASIC、C、C ++、Java、Python、Perl、PHP、および他のいくつかの言語を、テキスト強調エディターとその言語のコンパイラー/インタープリター以上のものなしで学びました。私は実際にメモ帳でJavaを学びました!

IDEの学習は「魔法」を促進します-「それは機能しますが、どのようにでも構いません」という考え。抽象化は優れています。魔法は悪い。プログラマーは、プロジェクトで行われているすべてのことを知っているか、見つけることができなければなりません。優れたIDEは、プロジェクトを制御するのではなく、ブックキーピングを処理するように設計されています。適切に使用すると、素晴らしいツールになります。しかし、どの職人がCNCルーターを使用して始めたのでしょうか?

私が学んだ方法(すべてを入力し、プロジェクトをビルドするためにコンパイラーを熟知する必要がある)は、IDEを使い始めたとき、計り知れないほど助けになったと思います。たとえば、JavaプロジェクトはEclipseプロジェクトの小さなフォルダーではなく、パッケージ構造内のクラスのコレクションであり、パス、構成、およびデプロイメント用のXMLファイルがいくつかあります。IDEなしで大規模なエンタープライズアプリケーションを構築したくないのですが、小さなものを構築できます。これにより、大きなものの構造を理解しやすくなり、ビルドで特定の動作が必要な場合、たとえばjavacの動作がわかっているので、実際のビルドプロンプトを微調整することができます。ビルド構成に存在します。また、エラーメッセージと、それらを見つけて修正する方法をより深く理解していると思います。

IDEの使用は教えません。開始プロジェクトは十分に小さいので、複雑さを管理するための議論は意味がないと思います。たとえば、Javaを教えている場合、すべてのクラスを同じフォルダおよびに配置できますjavac *.java。そのためにIDEは必要ありません!これは、プロジェクトを小さく、概念実証以上のものにすることを主張します。オーバーヘッドを最小限に抑え、学生が必要とする概念を教えることに集中します。IDEが役立つ大きなプロジェクトは、より高度なSEクラスまたは専用プロジェクトのいずれかに属します。

クラスの検索とAPIの調査の支援については、プロジェクトが小規模に保たれている場合、これは意味がないと思います。再びJavaでは、javadocは非常に読みやすいです。誰がとにかく頭の中で全体のAPIを保つことができる、とTHERはなりますが、IDEの恩恵なしにAPIを研究する必要があります時間がかかります。たとえば、他の言語で、またはIDEを開けないサーバーにリモート接続する場合。「 'を押す」ではなく、ドキュメントの検索方法を教えます。オブジェクトのメソッドが何であるかを見ることができます。」

どんなプログラマーでもIDEを学ぶことができますが、IDEを知っていてもあなたは良いプログラマーにはなりません。ブラックユーモアはさておき、「マジック」はプログラマーが使用する良い言葉ではありません。


テキストの強調表示で学んだ...ラッキーパンク。私たちの中には、キーワードのリストとプロンプトだけを持っている人もいます。
マシューホワイトニング

@Matthew:Javaはメモ帳から始めました... :)
マイケルK

LOL ...私は、ROMに組み込まれたApplesoft BASICでApple IIcを始めました。:o)
マシューホワイトニング

うわー、QBasicを持っていてラッキーだ!
マイケルK

4

おそらく、初心者は簡単な問題に最初に取り組むべきでしょう。いいえ、これらの問題は、タスクを完了するためにIDEを使用することを要求または奨励するものではありません。基本的な概念を理解することにより、長期的に得られるものがさらにあります。ツールは後に来るはずです。

木工職人は、最初に木材のタイプとハンドプレーンの両方の複雑さを理解せずに、高馬力の表面プレーナーを使用することに直行しません。

(注:オートコンプリートとインテリセンスは大きく異なる2つです)。

インテリセンス自体は悪くありません。基盤となるドキュメントや実装を読んだり理解したりせずに松葉杖を使用して機能を推測する場合にのみ悪いことです。

サイドポイント:言語でIDEがコードを作成する必要がある場合、その言語はおそらく、解決しようとしている問題の抽象化レベルが間違っています。


2
サイドポイントに+1。私は複数の言語を学ぶのが好きなので、言語がタスクに適していない場合を知っています。
マイケルK

3

私たちが子供の頃に成長したとき、話す前に英語の複雑な規則を理解する必要があるとは言われていません。前置詞、接続詞の適切な使用を完全に理解し、文の断片を避ける必要があるとは言われていません。やって学ぶ。私たちは成功と失敗を通して学びます。

オートコンプリートを備えたIDEは、新しいプログラマーがプログラムの作成を容易にすることで自信を得るのに役立ちますが、膨大な数のライブラリーのあらゆる無数の機能を覚えるのに苦労することはありません。

1は本当にオートコンプリートは、それが彼らのためにあまりにも簡単にそれを作るために、あなたが主張する可能性があり、新たなプログラマを傷つけるという見解を推定した場合、その参考書を使用すべきではありませんしながら、内の概念が最初にメモリにコミットする必要がありますので、プログラミングそれらを記憶させないと速度が遅くなり、最初に概念を完全に理解することができなくなります。

オートコンプリートはツールであり、プログラマの生産性を高めるために使用されます。初めて言語を学ぶのと同じように、私たちが学んでいることに自信と成功のレベルを獲得した後、私たちは知識を改善するように働きます。


これは、IDEを使用するための優れた議論です。しかし、それはCSで崩壊するようです。なぜなら、(私には)多くの人が「話すことを学ぶ」だけに留まらないように思えるからです。そのためには、カリキュラムをリファクタリングして、IDEが隠すものを明示的に教える必要があります。
マイケルK

2

最初は、うまく機能するものを構築するのは十分に難しいので、ブランドをより良くするのに役立つものは何でも。新しいプログラマーは、配列のバインドされたリストまたはリンクされたリストが目前の問題によりよくマッチするかどうかを考えさせるために、より上級の誰かを必要とするでしょう。それぞれに長所と短所があります。

初心者がIDEを持っているか、APIドキュメントをオンラインで閲覧しているかに関係なく、作成するコードに実際の違いはありません。構文エラーを書くことの苦痛に対処することは学習経験になる可能性がありますが、最初はそれについて心配することを学ぶにはあまりにも多くあります。

あなたはネットなしでハイワイヤーにまっすぐに行くことによって綱渡りを歩くことを学びません。地面から数インチ離れたロープを歩くことから始めます。私たちのほとんどがIDEと、ある種のビルドスクリプト(Visual StudioのビルドスクリプトはIDEによって作成されますが、そこにあります)で作業していると言いたいと思います。私たちのほとんどは、テキストエディタを使用して手動でクラスを構築し、その後、手動でコンパイラを呼び出しません。なぜもっと学ぶべき初心者にこれを課すべきなのでしょうか?


2

開発者が学んでいるときでさえ、前述のツールの苦痛に苦しむ必要はないと思います。ツールなしでコードを書くのにかかる余分な時間と労力は、単体テストとデバッグの書き方を学ぶことに費やした方が良いと思います。ユーザーが自分のコードをテストし、実行中にステップ実行する方法を知ったら、実際に何をしているのかについて多くを学びます。

それに、IDEを使用するということは、コードがそれ自体を記述することを意味しません。未熟なまたは初心者の開発者は、IDEを使用しているかどうかにかかわらず機能しないコードを作成しようとしています。

コーディングするとき、IDEを抽象化の別のレベルと見なします。Javaを作成している場合、通常、Javaが生成するバイトコードがどのように機能するかを理解する必要はありません。新しいプログラマーがJavaライブラリを使用している場合、IDEが自動的に追加できるのであれば、どのパッケージに入っているかを知る必要はありません。どちらの場合でも、エラーを引き起こす下位レベルのバグや問題(クラス名の衝突など)が発生する可能性がある場合は、開発者がそれを手動で確認します。


0

他にもたくさんの良い答えがありますので、これを完全な答えとは思わないでください。しかし、初心者や経験豊富なユーザーにとっては、自分が自由に使える機能の全体像を見ることができます。

Delphiでctrl-jを押すと、構文的に機能すると期待できるすべての可能なもののリストが表示されます。

必ずしも同意するわけではありませんが、プログラマが使用するオブジェクトのプライベートクラスメンバを見てはいけないという主張を読みました。このようにして、オートコンプリートはすべてのユーザーにインスタントAPIリファレンスを提供します。

新しいIDEを使用すると、ユーザーと言語開発者はメタデータをインテリセンスに入れて、ソースを読まなくても関数が何をするのかを読んで理解する能力をさらに高めることができます(とにかく行う必要はありません)。

おそらく、初心者が実装するすべてのものを実際に読んで理解するのが最善です。しかし、初心者がそれを含む理由を文書化せずに、必要なネームスペースまたはユニットを含めたりインポートしたりできるようにするべきかどうかは、おそらくより良い質問でしょう。


0

私の経験では、OOの基本を学習するためにIDEを使用することは、新しい開発者がプロ​​グラムのロジックに集中できるようにする一方で、実際にコードを記述する複雑さの一部を隠すため、素晴らしいです。しかし、プログラミングを学び、基本的なオブジェクト指向の教義を身に付けた直後、コースを通じて、プログラミングコースによってソースファイルで互いにやり取りするために必要な要素(インポートステートメントを忘れず、正しいクラスをインスタンス化するなど)をより正確に理解することを余儀なくされましたターミナルのみのUnixマシンを使用する必要がありました。

誰かがあなたにローファイツールを使用するように強制する「権限」を持っているので、これは学校で可能です。ビジネス環境や企業環境で達成することははるかに困難です。


0

これについて2つの考えがあります。最初は、本当に何が起こっているのかを知る必要があると私が信じる何かを真に学ぶことです。そして、IntelliSenseの優れた機能により、その一部を新しい開発者に隠すことができます。たとえば、大学にWebエンジニアリングクラスがあり、実際に独自のWebフレームワークを構築して、最終的なアプリを構築しました。私はそのクラスから出てきて、ほとんどすべてのWebフレームワークに適応できるようになりました。なぜなら、最初にその下にあるものを理解していたからです。IDEを使用することは、そのレベルには至りませんが、ポイントはまだそこにあると信じています。

ただし、IDEを使用すると、新しい開発者にAPIを公開するなどのこともできます。コーディングを真剣に始めたとき、使用したIDEは、オブジェクトの入力、オートコンプリートを使用したメソッドの確認などを行い、利用可能なドキュメントを使用して調査するため、非常に役立ちます。これはすべてIDE内で行われ、優れた学習ツールでした。

ですから、時間をかけて何が起こっているのかを理解するのであれば、それを使用しても大丈夫だと思います。なぜそれをしなければならないのかを理解せずにオブジェクトキャストを使用するのは本当に悪いことですが、新しい開発者がオブジェクトキャストを使用できることを見てから、なぜ私が何も間違っていないのかを調べます。


0

学習には練習が必要です。プログラミングは、何ができるのか、物事がどのように機能するのかわからない場合、非常にイライラするタスクになります。

たとえば、1行のコードを書かずにプログラミングの原理に関する本をたくさん読むことは実用的ではありません。この方法では何も学習しません。

Intellisenseは、新しいプログラマーにプログラミングを維持し、練習を続け、学習するために必要な支援を提供するのに非常に役立ちます。

既に述べたように、特定のAPIの学習は、プログラミングの原則の学習と同じではありません。間違いなく起こるのは、新しいプログラマーが(Intellisenseに関係なく)ミスを犯すことであり、それらのミスを修正するためにどのように選択するかが、優れたプログラマーまたは貧しいプログラマーになる理由です。

あなたが誰かにプログラミングの方法を教えようとしているなら、私は彼らにIntellisenseを使わせ、彼らが動けなくなるまで遊んでもらうでしょう。それが、彼らが動けなくなった理由を彼らに教えて基礎を築こうとするときです。


0

IMO、IDEにより生産性が向上します。しかし、初心者にとっては、IDEでプログラミングを開始することは一般に良い考えではありません。notepad ++、notepadなどのようなテキストエディタで十分です。

また、一般に、高級言語を使用してプログラミングを学習し始めることは良い考えとは見なされません。アセンブリ言語から始めることをお勧めします。これにより、忍耐力だけでなく基礎も学べます。

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