プログラミング学習の第一言語としてのC ++の利点

すべての人に良い一日を!



この記事は、結局のところ、学生を教えるための最初のプログラミング言語としてC ++を選択する価値がある理由と、大学での教育の問題について少し説明しています。 学習プロセスに関する判断の一部は、個人的な教育経験(大学院で勉強中の3年間)、および教師と生徒とのコミュニケーションに基づいています。

C ++プログラミング言語の利点は、特にトレーニングのため、および基本概念のより良い理解の観点から考慮されます。 最初の言語(Pascal / Python / C#/ Java)の役割の残りの候補は、ホリバーを誘発しないように考慮されません。 繰り返しますが、産業発展のためではなく、利便性などの主観的な基準に関してもです。

「プログラミング教育の基礎としてのDelphi XE5」という率直な広告投稿の印象を受けて書かれました(執筆時点では「from Google」バージョンのみが利用可能です)。



0はじめに



まず第一に、専門外の専門分野の学生については、最初のプログラミング言語を選択する問題は考慮されないことに注意したいと思います。 アルゴリズムの基本(必要な場合)は、Pythonでも、C ++(Java、C#、Pascalなど)でも習得できます。 この場合、言語が単純であればあるほど良いです。人々は、少なくともアルゴリズムの考え方と基本的な構造の理解の文化を形成する必要があります。 いくつかの専門分野(法律、経済、人道)の学生の場合、YPの研究はまったく必要ありません。

上記のすべての自明性にもかかわらず、多くの経済学1年生は、コンピューターサイエンスワークショップでPascalプログラミングを教えられます。 MS Wordの操作方法をまだよく知らない学生。 このような活動の利点は、非常に疑わしいものです。 同様に、数学の学生はC ++ / C#/ Javaプログラミングを数年間学ぶことができますが、なぜですか? Mathcad、Simulink、Surferなどのプログラムを学習することは、その後の知識の応用に非常に役立ちます。

上記を考慮して、専門分野(たとえば、「ソフトウェアエンジニアリング」)およびITに偏った専門分野(「応用数学とコンピューターサイエンス」など)の学生専用の第一言語を選択するプロセスを検討します。 まず、そのような専門分野のカリキュラムには、十分な数の講義と実践が含まれます(第1言語が考慮されるため、最初のコースのみが考慮されます)。2つの関連分野(コンピューターサイエンスとプログラミング)では、専門分野に応じて約230時間。 第二に、学生の興味と特定のメンタリティの存在。 そのような学生は、ほとんどの場合、すでにプログラミングを試みており、おそらくウェブサイト/おもちゃを書いていました。 同時に、これら2つの理由は、学習を開始し、語学研修に入るためのしきい値を下げるための良い基盤となります。 さらに、問題の専門分野の卒業生は、将来ソフトウェア開発業界で働く必要があります。 したがって、彼らにとって第一言語の選択は特に重要です。



1なぜC ++なのか?



初年度には、さらなるトレーニングの基礎が築かれ、さらなる知識への学生のアプローチが形成されます。 ここではプログラミング言語が重要な役割を果たします。

C ++を最初のプログラミング言語として選択する理由は4つあります。

  1. 静的型付けでコンパイルされた言語。
  2. 高レベルツールと低レベルツールの組み合わせ。
  3. OOPの実装。
  4. STL。


これらの理由をより詳細に検討してください。



コンパイラ ここでは、C ++がすべての栄光に現れています。 多くのコンパイラ、コンソールコマンド、プログラムアセンブリの段階...はい、最初のプログラムは、構文の強調表示やオートコンプリートなしのシンプルなテキストエディタで作成し、起動方法と方法を見つける必要があります。 このアプローチは、すべてがどのように機能するかについての個人の理解を形成します。



将来の専門家は、コード自体は開始されないことを認識しています(将来、たとえばPythonインタープリターやJITコンパイルがどのように機能するかに興味を持つかもしれません)。 人は、「なぜ?」、「違いは何ですか?」、「どのように?」という質問を自問します。 2つの魔法のボタンを押すか、対話型コマンドラインですべてが機能するという幻想はありません。 学生は、プログラムのビルドプロセスをカスタマイズでき、サードパーティのプログラムでソースコードを処理できることを知っています。 将来、IDEを使用する場合、これはほとんどのルーチン操作を実行する便利なプログラムのセットであり、柔軟性が不十分な場合は放棄または拡張できることを理解するでしょう。



静的タイピング。 静的型付けを備えた言語の例を使用すると、データ型とは何か、なぜ必要なのか、そして何に依存するのかを理解しやすくなります。 アナウンス、定義、および初期化を構成するものを見ることができます。 C ++言語を使用すると、これが明確に表示され、これらのメカニズムが他の言語でどのように機能するかをさらに理解するのに役立ちます。 さらに、符号なし整数と符号付き整数の違い、倍精度および単精度数の違い、文字と文字列の違いなどを実際の例で理解できます。



高レベルおよび低レベルのツール。 ポインタや動的メモリ割り当てなどのツールを使用すると、スタック、ヒープ、コールスタック、スタックプロモーションなどを理解できます(または、さらに理解に貢献できます)。 さらに、実際には、アドレスおよびアドレス算術の概念の理解は固定されています。 例では、メモリが無限ではないため、メモリリークが発生するため、メモリを割り当てる必要があることを示しています。 将来、GCで言語を学習するとき、それが何であるかを理解しやすくなります。

それとは別に、参照、値、ポインター、オブジェクトの転送によって値を転送するための単純なメカニズムに注目する価値があります。 可変および可変でないパラメーターとは何ですか。 将来、これらの概念は他の言語の研究に使用できます。 生徒は、たとえば、N言語のオブジェクトが参照によって渡されることを理解し、その値がメンバー関数で変更されると、どこでも変更されることを理解します。



OOPの実装。 これは、(他のいくつかの言語に比べて)構文糖を使用しないOOPの比較的クリーンな実装です。 クラスメンバへのアクセスの明確に描かれたレベル、多重継承の可能性、および動的なポリモーフィズムにより、OOPの基本概念(抽象化、継承、カプセル化、およびポリモーフィズム)をすばやく習得することができます。 ポインタと動的メモリ割り当てにより、アップキャストやダウンキャストなどの重要なメカニズムを理解できます。 将来、この知識に基づいて、他の言語のすべての構文糖を簡単に理解できます。 リソースを制御する必要性(C ++ 11を考慮して、「3つの規則」または既に「5つの規則」を含む)、コンストラクターでそれらをキャプチャーし、デストラクターで解放することも、OOPのより深い理解に貢献します。

非強制OOPなどの重要な点に注目する価値があります。 つまり、プログラミングへのこのアプローチは便利なときに適用され、たとえば関数型プログラミングと組み合わせることができます。 これは、実装手段がタスクに基づいて選択されるという理解を作成するのに役立ちます。



STL C ++テンプレート、コード生成、およびさまざまなコンテナへの広範なアルゴリズムの適用というまさにコンセプトは、学習プロセスにプラスの効果をもたらします。 ここではすべてが表面にあり、1つのコンテナクラスに基づいて整数のベクトルとカスタムオブジェクトのベクトルを作成できる理由は理解できます。 オブジェクトのシーケンスに何らかの操作を適用できる理由、または組み込みの比較操作が提供されていないオブジェクトをソートする方法。 要素へのアクセス方法を理解し、イテレータカテゴリについて学習できます。 さらに、一般化されたプログラミングの理解が統合されます。



2学習の問題について少し



学習プロセスは、おそらく、前の段落で書かれたすべてを実装するための最も重要な障害の1つです。 おそらく、この問題は一流のIT大学には関係ありませんが、通常の教育機関を採用する場合、有能な人材が不足し、学生のモチベーションが低下します。 ほとんどの実用的な分野では、ソフトウェア開発に直接関与する専門家はめったに関与しません。 たとえば、実際のプロジェクトでSTLを使用しなかった人は、これを行う方法と、最も重要な理由を説明することはできません。 すべてのコード(独自のクラス、抽象化、カプセル化のヒントなし)は非常にわかりやすい名前のボタンクリックハンドラーで記述されているため、フォームを使用したDelphiでのプログラミングは既に実際のOOPであると心から信じている教師「学習プロセスに貢献しません。 どこに行ったのか、なぜ行ったのかを本当に理解していない生徒側には問題があります。 多くの学生は、自己学習だけでなく、さらなる学習と理解を促進する意欲もありません。 このような生徒と教師は互いに完全に補完し合うという事実にもかかわらず、トレーニングの終わりには、若手空席を申請する専門家は働きません。



3結論



現時点では、ソフトウェア開発の世界では、価格は特定のテクノロジーの知識とアプリケーションの経験であり、理解ではないという状況です。 現代社会には、厳密に定義された機能を実行できる多くのプログラマが必要です。 開発技術の開発はこれに一部貢献しています。 特定のツールセットを単純に使用できるほとんどの開発者は、「穴のある抽象化の法則」に遭遇することはありません。 ただし、最適化とアーキテクチャの問題に関与する主要な開発者の職に応募する人は、すべてがどのように機能するかについてより深く理解する必要があります。 このような理解につながる要因の1つは、最初のプログラミング言語の正しい選択を拒否することです。 これに基づいて、静的に型指定され、コンパイルされ、メモリを使用した低レベルの作業をサポートするC ++言語、および構文糖をロードしていないOOP実装が最初のプログラミング言語として推奨されます。



All Articles