プログラミングの習得-問題なし

この記事について



現代の技術を学ぶことが難しい理由、それらを習得して専門家になる最も簡単な方法を見つける方法を説明する試み。



画像








この記事の対象者



読者を失望させないために、この記事の対象者をすぐに決定する必要があります。 まず第一に、この記事は、ソフトウェアの作成を独自にマスターしたいプログラマーに役立つかもしれません。 おそらく、プログラミングの教師に役立つでしょう。 同時に、彼女は、自分の道を歩み、物事の独自の確立された理解を持っている専門家のビジョンとは異なるかもしれない視点を説明します。



この記事はまた、緊急のアドバイスよりも多くの研究です。 これを考慮すると、読者が著者の観点から問題に対処しようとすることが必要になる場合があります。 また、トレーニングに直接関係するこの記事は、生産の観点から見ると役に立たず退屈に思えるかもしれません。



まえがき



情報技術は最近非常に進歩していますが、その開発と有資格の専門家になることは引き続き困難です。 著者はトレーナーインストラクターであり、プログラミングや関連トピックを習得するための最も便利な方法を生徒に見つけようと何度か試みました。 この記事は、この問題の単純な構造図を構築する試みです。



著者は、できるだけシンプルに記事を書き、彼のビジョンの重要な原則を示し、あらゆるレベルの専門家に有用な自己開発戦略を提供しようとしました。



著者はその作成時からC#言語を使い始めました。 これまで、著者はさまざまなITテクノロジー(機器、OSの内部機能、アセンブラー、C ++、COM、WinApi、ネットワーク、マルチスレッドなど)での幅広い経験を積んできました。取得したスキルは、C#、.およびそれらの新しいバージョン。 しかし、初心者の場合、学習にはさまざまななじみのない分野から多くの新しいテクノロジーを学ぶ必要があり、そのため学習は長く困難なプロセスになります。



最大の難易度



何かの研究で生じる最大の難しさは、膨大な数の異なる技術と、これらの技術を適用できる産業部門です。 また、この数は常に増加しています(いわゆる「技術的特異点」を参照)。



このような複雑な環境での方向付けは非常に困難になります。 簡単なルール、説明、戦略が非常に役立ちます。



男、道具、問題



トレーニングシステムの多くの重要なプロセスと要素を理解するために、Man-Tool-Problem接続を使用できます。



問題の分析の便宜上、次の仮定を受け入れます。





問題とツールの複雑さ



異なる問題には、異なる難易度の解決策があります。 家計を念頭に置くことは、市内の商品の配送を管理するよりもはるかに簡単な作業です。



説明を簡素化するために、問題の複雑さはその解決策の複雑さとしてのみ考えることができます。 次に、ツールの複雑さは、人間によるツールの使用の複雑さと考えることができます。 ツールが単純であればあるほど、人が使いやすくなります。



さまざまなツールを使用して、1つの問題を解決できます。 使いやすくするために、ツールはグループに分けることができます。





難易度



人にとって最も重要なのは、ツールの使いやすさです。 ツールの複雑さは、遅延、悪い結果、および問題を解決できないことにつながる可能性があります。 言うまでもなく、ツールの欠如が問題を完全に解決できない理由になる可能性があります(ツールなしのソリューションは考えていません-これはすでに最も単純な問題のランクです)。 したがって、ツールを作成するときの主な基準は使いやすさです。



人にとって何かの複雑さは、次のように分類できます。





低、高、超高レベル





プログラミング言語の進化により、ハードウェアプラットフォームからのプログラミング言語の抽象化レベルが向上しました。

  1. 低レベル言語-機器の実装には便利ですが、単純な操作を実行する多数のチームがあるため、人間にとっては困難です。
  2. 高水準言語-人間の理解に便利で、プログラムをより速く開発できます。 しかし、これらの言語はハードウェアを実行するために実装するのが難しく、一般にコードの低速化とリソース消費の増加につながります。
  3. 非常に高度なプログラミング言語(VHLL)-非常に高度な抽象化を備えたプログラミング言語。 「方法」の原則が記述されている高レベルのプログラミング言語とは異なり、超高レベルのプログラミング言語では「必要なこと」の原則のみが記述されています。




プログラミング言語の通常の開発では、そのレベルは低いハードウェアレベルからの抽象化のレベルに対応しています。 抽象化が増えても、使用の複雑さが増すことはありません。 ただし、実際には理解が複雑になる場合があります。 抽象化のレベルを上げることは、ほとんどの場合、内部の複雑さを隠し、外部から使いやすくする大きな構造の作成に関連しています。



しかし、マイナスの副作用を避けるために適切に使用するには、開発者は構造の内部構造を知る必要があります。 そのため、ネットワークアプリケーションでソケットを使用する場合、適切なネットワークプロトコルとネットワーク操作の原則を知る必要があります。 彼らの理解がなければ、本当に高品質の製品を書くことはできません。 つまり、抽象化のレベルを上げると、単純に内部の複雑さが隠されますが、それは排除されません。



プログラミング言語の進化は継続的な改善を示していますが、長期にわたる開発では理解が単純化されていません。 ここで、ITによって解決される問題の範囲が大幅に拡大していることにも言及する必要があります。



この進化は単純なプロセスではありません。 ただし、このプロセスを理解するのに役立つ機能がいくつかあります。





プログラミング言語の複雑さ



最新のプログラミング言語の複雑さは、次の主な要因の結果でした。





超高級言語



説明されたプログラミング言語の進化のプロセスは、多数のプロパティを持つ大きなコンポーネントの出現をもたらしました。 高レベル言語の開発は、小さなコンポーネント(コマンド)を大きな構造に統合することにより、低レベル言語に基づいています(たとえば、高レベル言語から低レベルへのコンパイルが使用されます)。 とりわけ、説明されているプロセスには慣性があり、最終的にはプログラミング言語をさらに高いレベルから、いわゆるスーパーハイに引き上げます。



前述のように、抽象化レベルが上がると、内部実装の複雑さを隠す大きな構造(言語要素、関数、ライブラリなど)が出現します。 ただし、高品質の製品を作成するには、使用する構造の内部実装、動作時間、消費メモリ、およびその他のプロパティを知る必要があります。 これにより、次の図に示すように、開発者にとって都合が良いよりも複雑度が高くなります。



この図は、単純な要素または要素のプロパティが多数ある場合の複雑さの増加を示しています。 ご覧のとおり、低レベル言語に対応する多くの単純な要素を持つタスクは、コンピューターの実行に便利です。 多くのプロパティを持つコンポーネントを使用したタスクは、1人の開発者にとっては困難ですが、開発者のグループがより簡単に習得できます。



画像








戦略



エントリーレベル



プログラミングを学習するための最も簡単なレベルは、コンポーネントの数とこれらのコンポーネントのプロパティが開発者にとって理解しやすいレベルです。 通常、これらのコンポーネントは、算術演算、テキストの処理行、単純なデータの入力/出力など、単純な一般的な操作を反映しています。 ほとんどの本は、このレベルから物語を始めます。



初期段階で最も重要なことは、質問を理解することです-「次は何ですか?」これは、現在のポイントから開発をさらに見ることができる重要な戦術的な質問です。 「次は何?」という質問は、次の2つの重要なケースで発生する可能性があります。





開発者がトピックにこだわっている場合、彼は学習の方向(ベクトル)を変更する必要があります。このトピックを学習する別の方法を見つけるか、学習する別のトピックを選択します。 開発者が選択の問題に直面している場合-彼は選択をしなければなりません。 つまり、停止することはできません。



開発者は、初期レベルを習得した後、次の2つの主な方向でさらに開発するための選択を行うことができます。





低レベルプログラミング



低レベルプログラミングは、ハードウェアに優しいプログラミングです。 システムプログラミングをマスターするには、低レベルの言語とプラットフォームを学ぶ必要があります。 低レベル言語の学習は複雑であるため、多数の小さな単純な要素と、それらをコンピューターシステムで整理する方法を学ぶ必要があります。



低レベルのプログラミングは特定の傾向です。 開発者自身がこの指示に従うことを決定する必要があります。 これは現在、開発者がめったに選択しない方向でもあります。



高レベルプログラミング



高レベルプログラミング-プログラミング。通常、人間の生活の大規模なプロセスを自動化するソフトウェアが作成されます。 機器の動作の最適化を心配することなく、適用された問題を解決することを目的としています。



そのようなシステムは高水準言語を使用します。 ここでの研究の複雑さには、(低レベルプログラミングと比較して)より大きな言語コンポーネントと一定量のプロパティの研究が含まれます。 そのため、たとえば、開発者は、コンテナ(配列、スタック、ハッシュテーブルなど)の内部構造とプロパティを知って、悪影響(高いメモリ消費、スローダウンなど)なしでそれらを使用する必要があります。



高レベル言語の開発により、コンポーネントコンポーネントの「サイズ」が増加し、それに応じて、プロパティの数(外部および内部)が増加します。 開発者の複雑さは、これらのコンポーネントとそのプロパティを調査する必要性、および新しいコンポーネントとバージョンの絶え間ない外観を監視する必要性の両方で増加します。



組織



上記の問題は解決できません。 ただし、適切なアクションを実行しないと、停止する可能性があります。 多くのアクションが知られており、明確です。 上記の説明により、これらのアクションの有効性と必要性​​を理解できます。





推奨事項



要約すると、次の重要な事実を強調できます。





そして最も重要なことは、プログラミングを愛し、プログラミングを学び、プロになるために一生懸命働く意欲がなければ、あなたは成功しないでしょう。



All Articles