Cでプログラミングを学び始める理由

要約:記事の著者は、Cが将来のプログラマーの頭脳を訓練し、ポンプでくみ上げる段階で優れている理由を説明しています。そしてしばらくすると、あるいは並行して、より現代的な言語を学び、たとえばエンタープライズやWeb開発を行うことができます。





写真: リアムBrieseUnsplashがあり



、より多くのプログラミング言語が。現在、約700個ありますが、ほとんどの開発者は20個を使用しています。ここでは、他の多くの分野と同様に、評価、トレンド、さらにはファッションがあります。



人気のある言語をいくつか挙げてみましょう。エンタープライズ開発では、Javaが積極的に使用されています(まもなくKotlinもそこで修正されます)、C#、Web開発用-JavaScript、Go、Python、PHP、モバイル開発用-Swift、Java / Kotlin、まあ、私はあえてJavaScriptと呼んでいます(多分、React Nativeのため)。ゲーム開発者はしばしばC#とC ++を使用します。それらのすべては、いくつかの理由で需要があります。



  • 簡略化された構文(ほとんどの場合)と明確なセマンティクス-C言語の背景に対して。
  • フル機能の標準APIセット。
  • 積極的なコミュニティサポート。
  • フレームワークとライブラリの成長するエコシステム。


C言語は、ソフトウェアおよびハードウェアソリューションの開発に使用されます。Cでは、パフォーマンスを要求するソフトウェア製品の機能を部分的に実装することもできます。すべてのプログラマーがそのようなプロジェクトを望んでいて、それに取り組むことができるわけではありませんが。しかし、学習段階に戻ります。



通常、将来の開発者は、学校、大学、または転職コースでコーディングを開始します。ちなみに、後者のオプションは現在人気を集めています。



遅かれ早かれ、彼らは自問します:どのプログラミング言語が最初に学ぶのが良いですか?学校や大学では、この質問に答えることができます。ほとんどの場合、そこでの学習はC / C ++言語から始まります(そのように、「/」を介して)。しかし、別のトレーニングサイトでは、Cを勉強して視野を広げたり、脳を刺激したりすることを誰かが提案する可能性はほとんどありません。彼らが言うように、誰もがすぐにITに参入したいと思っています。ご覧のとおり、C言語から学び始めるには、あちこちで意志と独立性を示す必要があります。  



この記事では、トレーニングの段階と将来のスペシャリストの形成について説明します。したがって、ここで私の議論を述べさせてください。そうすれば、あなたはあなたの議論を述べることができます。



Cは、問題の解決策を深く掘り下げることを強制します



より現代的な言語は、すべての一般的な機会に一度にいくつかの組み込みの抽象化(または標準ライブラリからの抽象化)を提供します。これは主に、標準的なアルゴリズムの問​​題に適用されます。たとえば、特定の要素を最初の配列から2番目の配列にコピーする必要がある場合は、JavaScriptに組み込まれているfilter()メソッドを使用できます。Javaで記述している場合は、java.util.streamパッケージのfilter()メソッドを自由に使用できます。 



JavaScript:Array.filter()



const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
//     6,     
const result = words.filter(word => word.length > 6);  
console.log(result);
//    : Array ["exuberant", "destruction", "present"]
      
      





Java:ストリーム()。フィルター()



List<String> lines = Arrays.asList("spray", "limit", "elite");

//  List  Stream
List<String> result = lines.stream()              
//   elite  
       .filter(line -> !"elite".equals(line))     

//      List
       .collect(Collectors.toList());   

//   :  spray, limit
        result.forEach(System.out::println);   
      
      





C言語では、特に教育目的で、次の実装を提供できます(例を複雑にしないために、文字列を数値に変更し、「フィルタリング」条件を変更しました)。



#include <stdio.h>
#define SIZE 5

void copy_aka_filter_arr(double trg[], double src[], int n);

int main(void){
    int i;
    double source[SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5};
    double target[SIZE];
   
 printf("Source:  ");
    for (i = 0; i < SIZE; i++){
        printf("%5.1f ", source[i]);
    }
    putchar('\n');
    copy_arr(target, source, SIZE);   
    return 0;
}

void copy_aka_filter_arr(double trg[], double src[], int n){
//  i-      ,    3.3. 
//    i-    0.0 
    int i;
    for (i = 0; i < n; i++){
            if (trg[i]) > 3.3){     
                trg[i] = src[i];
            }
            else{
                trg[i] = 0.0;
            }
    }       
    printf("Target: ");
    for (i = 0; i < SIZE; i++){
        printf("%5.1f ", trg[i]);
    }
    putchar('\n');
}
      
      







このような機能を手作業で実装しようとすると、深く理解する必要のある基本的な原則とニュアンスに出くわします。特に、C言語でデータ構造を処理するためのアルゴリズムの独立した実装は、問題を解決する方法を学ぶための優れた方法であり、既成の解決策を探す必要はありません。 



どんなにクールで高度な言語を書いても、標準ライブラリや組み込みの抽象化では解決できない複雑な問題が発生することがあります。これらの場合、そのようなスキルは単に必要です。



ちなみに、競争力のあるハッカソンに参加している開発者は、このスキルをトレーニングして、Cだけで非標準の問題を解決することがよくあります。



Cを使用すると、「低レベル」プログラミングに触れることができます



最新の高級言語(Python、C#、Javaなど)で書くと便利です。ただし、これらの言語はハードウェアとの相互作用が非常に制限されています。言い換えれば、Cでプログラミングを開始するまで、完全なハードウェアエクスペリエンスを得ることができません。最新のプログラミング言語は、ハードウェアに依存する実装の詳細を非表示にし、代わりにある種の抽象化をエミュレートします。ほとんどの場合、仮想マシンを使用して作成されます。



残念ながら、初心者は、Cでの「低レベル」プログラミングの例すら見たことがないため、メモリ管理、ファイル処理、およびコードの最適化についてまったく理解していません。この観点から、最新のプログラミング言語は自動化して隠しすぎています。 。C言語では、手で多くのことを行い、高度に最適化されたコードを作成する必要があります。



私にとって、これはすべてのプロの開発者にとって必見です。まあ、少なくともバックエンダー。



Cは自由と責任を教えます



プログラミング言語が人間に優しい抽象化のセットを提供するとき、それは柔軟性が低くなります。すべての組み込みメソッドまたはライブラリメソッドは、ハードコードされたブラックボックスのように機能します。言い換えれば、最新のプログラミング言語は実装の詳細を隠し、開発者に一連のインターフェースを単に参照するように指示します。最新のプログラミング言語で動的メモリの割り当てを手動で制御することは、ほとんどの場合不可能です。一方、Cはあなたに本当の自由を与え、あなたがそれをより低いレベルでどのように実装するかを選択することを可能にします。



Cコンパイラは、適切に最適化されると、信じられないほど高速なアセンブリコードを生成します。確かに、コンパイルに必要な最適化フラグを設定することに加えて、高性能のソースコードを自分で作成する必要もあります。Cでは、変数を注意深く宣言し、時間内にメモリを割り当ててクリーンアップし、リソースにアクセスし、それらを解放することを忘れないでください。Cが最初の言語である場合は、メモリとリソースを合理的に使用することに慣れ、最適なデータ構造を選択することに慣れます。この習慣は、他の言語で書き始めるときにも続きます。



Cはあなたにクリーンなコードを書く動機を与えます



最新のプログラミング言語とは異なり、Cで同じタスクを実装するには、何倍ものコードを記述する必要があります。これは、Cでは、実装の詳細を隠す組み込みのラッパーや標準ライブラリからの抽象化を使用するのではなく、多くをより低いレベルで実装する必要があるという事実によるものです。コードの行数が増えると、コードの複雑さも増します。この影響を補い、プロジェクトの順序を維持するには、クリーンで理解しやすいコードを作成する必要があります。



クリーンなコードを書くことは、大規模な商業プロジェクトに取り組むときに特に求められるスキルです。クリーンなCコードを書くことを学ぶことができれば、別のより単純な言語でそれを行うことがより簡単になります。



まだ納得していませんか?



C ++の活発な開発により、C言語は多くの人に独立した言語として認識されなくなりました。 C ++言語のサブセットになっているようです。実際にはそうではないことは明らかです。 C ++は、フル機能の標準ライブラリセットを備えた真に最新のプログラミング言語です。私の意見では、C ++が最初に学ぶ言語であってはなりません。確かに、注意点が1つあります。将来、それに特化したい場合は、先に進んでください。この場合、これら2つの言語は並行して教えることができますが、ある時点で「交差」し、CからC ++への移行は有機的でほぼ瞬時に行われます。 



ほとんどすべての最新のプログラミング言語は互いに競合し、新しい構文、セマンティクスを導入し、標準ライブラリとフレームワークを拡張しています。彼らが言うように、すべては人々のためです。これは魅力的です。しかし、将来の開発者がこれらの言語を最初から学び始めると、Cが提供する貴重な機会を逃してしまいます。ある時点で、コードが下位レベルでどのように機能するかを知らずに、開発の新しい一歩を踏み出すことができなくなります。 、お気に入りのフレームワークとライブラリが内部にどのように実装されているかさえ知らない。



したがって、最初のプログラミング言語としてCを選択してください。学ぶのに時間がかかりますが、将来的にはより現代的な言語の専門家になるのに役立ちます。






Macleodのクラウドサーバーは 、Cおよびその他のプログラミング言語での開発に最適です。



上記のリンクを使用するか、バナーをクリックして登録すると、任意の構成のサーバーをレンタルした最初の月が10%割引になります。






All Articles