フロントエンドとバックエンドのWeb開発の違い

この投稿では、Web開発のコンテキストで、フロントエンドからバックエンドへの概念的な移行を支援したいと思います。

まず、フロントエンドとは何かを定義しましょう。フロントエンドは、ブラウザ内のプログラミングを識別するために使用する用語です。これをクライアント側のWeb開発とも呼びます。

フロントエンド側では、ラップトップ、デスクトップコンピューター、モバイルデバイスなどのクライアントマシンで実行されるアプリケーションの作成と配布について心配します。配布するものを作成してから、各クライアントブラウザ内で実行します。

バックエンド側では、(最初は)単一のサーバーで実行されるアプリケーションを設計および構築し、すべてのクライアントがそのアプリケーションにアクセスします。アプリケーションは、制御する環境であるサーバーで実行されます。次に、アプリのサーバー側レンダリングを使用してアプリケーションをブラウザーに送信するか、JSONデータをクライアントに配布するだけのAPIを作成します(最近ではかなり一般的なことですが、特に、React、Vueなどのフロントエンドフレームワーク/ライブラリとペアになっています)。

ここで重複があることがすでにわかります。バックエンドは、ブラウザーで実行されるフロントエンド向けアプリケーションを提供するために使用できます。

HTML、CSS、JavaScript、画像、アニメーション、React、Vue、Svelte、CSS-in-JS、フロントエンドでの状態管理、パフォーマンスの最適化、これらすべてのトピック(およびその他多数!)はフロントエンドプログラミングにリンクされています。

一部の種類のアプリケーションでは、フロントエンド部分のみが必要です。たとえば、私のWebサイトにはバックエンドがありません。これはHugoを使用して生成された静的なWebサイトであり、そこで行うすべての作業はフロントエンドプログラミングと見なされます。たとえば、CSS、マークアップ、検索を強化するために使用するJavaScriptなどです。

フロントエンドプログラミングには、独自の一連の課題があります。たとえば、ブラウザによる機能のサポートなどです。または、ローエンドデバイスでのアプリケーションのパフォーマンス。シングルページアプリケーションの構築。

バックエンドの開発は、フロントエンドとはまったく異なります。まず、ブラウザ環境を終了します。これは一方では解放されていますが、圧倒されることもあります。

どうして?ええと、あなたにはもっと多くの選択肢があります。

ブラウザでは、プログラミング言語の選択は常にJavaScriptです。または、TypeScript、ElmなどのJavaScriptにコンパイルされる言語。

バックエンドでは、好きなものを使用できます。私の通常の選択はNode.jsです。これは、JavaScriptベースであるため、1つの言語のエキスパートであり、JavaScriptを使用してフロントエンドとバックエンドの両方で作業できるためです。

ただし、次のようなフレームワークを使用できます。

  • Pythonに基づくDjango
  • PHPに基づくLaravel
  • RubyをベースにしたRails
  • エリクサーをベースにしたフェニックス
  • TypeScriptに基づくDeno

そして、Javaや.NETのようなよりエンタープライズ指向のエコシステムを含む他の多くのもの。

そして、私はGoとRust、2つの素晴らしい選択肢についても言及していません。

これはおそらくバックエンドプログラミングの最大の強みです。使用できる言語には多くの選択肢があるため、好みの言語を使用できます。しかし、まだ何を好むかわからない場合は、「分析麻痺」につながる可能性もあります。

バックエンドでは、フロントエンドで直面する必要のある問題はありません。私がよく耳にすることの1つは、フロントエンドの開発が速すぎるということです。新しいものが毎日現れ、最高のツールは月ごとに変わります。これは虚偽の陳述ではありません。比較すると、バックエンドは、特によく知られた成熟した環境やツールでは、ペースの遅いエコシステムに見えます。適切に作成されたバックエンドは、何年もの間現代的であると感じることができますが、フロントエンドで同じことを言うことはできません。

もちろん、バックエンドには独自の問題があります。たとえば、データベースにデータを保存する方法。適切なデータベースを選択する方法。 SQLとNoSQL。マイクロサービスとモノリス。アプリケーションをデプロイする方法と場所。より多くのトラフィックを処理する方法。データとリクエストを安全に処理する方法。エラー処理をテストおよび処理する方法。適切なアーキテクチャを選択する方法。

次に、DockerとKubernetesの使用方法、継続的インテグレーションと継続的デリバリーワークフローの設定方法、Linux、インフラストラクチャ、サーバーレベルのネットワークの処理方法など、DevOpsと重複するトピックがあります。独自のVPSサーバーを使用する、HerokuなどのPAASを使用する、AWSLambdaでサーバーレスにするなどの選択に直面する必要があります。勤務している会社やチームによっては、これらのトピックに取り組む準備ができている必要がある場合もあります。

もちろん、バックエンドをフロントエンドに接続する方法を理解する必要があります。 APIを構築する方法。 GraphQLとREST。認証の処理方法。 APIを大規模に高速化する方法。これらは、フロントエンドとバックエンドの両方が互いに話し合うようにするための探求に関係するトピックです。

それはたくさんのものであり、それらのトピックに関する本全体を見つけることができます。これが、フロントエンド開発者とバックエンド開発者を分離している理由です。また、これらすべての問題をナビゲートできるフルスタック開発者であることが貴重なスキルである理由です。 。

そしてもちろん、フロントエンドまたはバックエンド開発者としての資格を得るために、これらすべてを知る必要はありません。あなたは(まだ)あなたが知らないことのアイデアを得るために、それらのことを高いレベルで知る必要があります。しかし、特定のニッチに特化してそれを上手くすることも素晴らしいアイデアです。

たとえば、高度なLinux構成を処理する方法を知らないバックエンド開発者であり、HerokuのようなPAASに依存してそれを行うことができます。または、AWSLambdaを使用してそれを完全に回避します。

私が考える重要なことは、自分の仕事をサポートするツールを使用するのではなく、自分で学び、自分で行うのが最適な時期を知ることです。