ホームページ  >  記事  >  Java  >  Java Journey: トラベラーズ マップ

Java Journey: トラベラーズ マップ

黄舟
黄舟オリジナル
2017-02-06 11:40:231135ブラウズ

少し前に、私は CSDN から Java ナレッジ ベースの内容をレビューするよう招待されました。また、私自身の Java ナレッジ システムを整理する機会もありました。この記事が、これから始めようとしている、またはこれから始めようとしているプログラマに役立つことを願っています。 Javaの世界。

最初の写真、基本的な写真

私が Java を知り始めたのは 2003 年頃ですが (当時はまだ Delphi を使用していました)、正式に Java を学ぼうと決心したのは 2004 年に学部を卒業してからでした。 当時、Delphi を使って C/S アーキテクチャのプログラムを書くのは面白くないと感じていましたが、当時 Java が提唱していた J2EE 標準の概念やエンタープライズレベルのアーキテクチャは高級なものに感じられ、内なる欲求を抑えることができませんでした。それで私は Java の旅を始めました。 正直に言うと、私は Java の世界に入った瞬間にめまいを感じました。さまざまな仕様、概念、英語の略語は人をめまいさせることがあります。

  • J2SE

  • J2EE

  • J2ME

  • JSP

  • JDBC

  • JMS

  • EJB

  • JNDI

  • JDBC

  • JTA

入ったときに見たものを何気なく思い出しました。見慣れない英語の略語がたくさんありました(幸いなことに、当時はJavaにあらゆる種類のフレームワークが開花していませんでした。そうでなければ、私はさらにめまいがしたでしょう)。どこから学習を始めればよいかわかりません。 たまたまクラスメイトが JSP の本を持っていたので、JSP を始めました。正直に言うと、これは本当にひどい本でした。今ではその名前さえ覚えていません。おそらく、JSP デモ サイトを構築するためにいくつかのサンプルから始めたのを覚えています。 さまざまな環境やコンテナーの問題に何千回も悩まされた後、ついにサンプルを実行し、ローカル ブラウザーでサンプルのページを確認できました。一瞬達成感を感じましたが、その後、途方に暮れました。 仕組みが全く理解できないのですが、どういう原理なのでしょうか? 長い道のりであり、寄り道もたくさんありました。もう一度やり直す機会が与えられたら、Java 言語の基礎から始めるでしょう。

根拠は何ですか? Java はオブジェクト指向言語であり、最も重要な概念はオブジェクトであり、そのすべての構文はオブジェクトを中心に展開されます。 他のプログラムの基本構造と変数、シーケンス、ループ、分岐は以前の他の言語に基づいていますが、形式が異なるだけです。 オブジェクトを理解すると、オブジェクトを取り巻く概念、つまりクラスやインターフェイスはすべて自然に拡張されたものになります。 もちろん、核となる概念と基本的な文法をマスターすれば、Hello World を作成するだけです。しかし重要なのは、出発点が正しければ、旅は近づいているということです。

この段階では、良い本を読み、基本的な演習を行うことで、言語と関連ライブラリに慣れることができます。私の考えでは、『Thinking In Java』は Java を始めるのに適した本です (いや、この本に出会うまでにかなり遠回りしました)。もちろん、他にも『Java プログラミング入門』など、良い本はあります。 "、" コア Java》。 私の感覚としては、この種の入門書をもう少し入手して、各知識点を参考に読んでみるとよいでしょう。結局のところ、著者は 1 冊の本を最初から最後まで縦に読むのではなく、横に読んだほうがよいでしょう。 知識のポイントを 1 つずつ把握し、理解して、1 つのステップで深い足跡を作成します。

基本に関しては、私の目から見て、中核的で重要な部分はあまり多くありません。ここで簡単にリストします:

  • 中核概念

  • オブジェクトモデル

  • インターフェースデザイン

  • クラス ライブラリ

  • lang

  • collections

  • concurrent

  • io

ここでは核となる概念についてはあまり書きません。これらは基本的にすべての Java に反映されますコード違いは、理解と抽象化の程度にのみあります。 JDK には非常に多くのライブラリがありますが、ここでは上記のものだけをリストします。実際、lang で最も重要なものは String ですが、多くの人はこれを無視しています。 C には String という概念がありません。Java はこのオブジェクトを提供しますが、このオブジェクトを理解してうまく活用しないと、将来無限の落とし穴に足を踏み入れることになり、何度もその落とし穴を踏むことになります。 私の言うことが信じられない場合は、検索して、さまざまな文字エンコーディングの文字化けに関する低レベルの問題がどれだけ存在するかを調べてください。さらに、String によって引き起こされるさまざまなパフォーマンスの問題もあります。 String のコア オブジェクトは、文字のエンコーディング、文字のバイト表現 (ビッグ エンディアン、リトル エンディアン、ネットワーク バイト オーダー)、GC への影響、正規表現、およびパターン マッチングから派生します。これは、Java で最も豊富な内容と言えます。物体。


コレクション フレームワークは、一般的に使用される多数のデータ構造のカプセル化を提供するため、基本的に Java プログラマは、データ構造のコースで学んだ一般的なデータ構造のほとんどを手動で実装する必要がなくなります。 さまざまなデータ構造の適用可能なシナリオを手動で実装するよりも、それらを正しく理解する方がはるかに便利です。何もすることがない場合は、コレクション内のコードを参照してください。これらはすべてマスターレベルの実装です。 私が Java を勉強していた頃はまだ JDK 1.3 だったと記憶していますが、私が働き始めてからは JDK 1.4 が主流で、当時は並行ライブラリはありませんでした。 スレッド間通信を自分で処理していると、さまざまな通知が漏れたり、早期に通知されたり、デッドロックが発生したりしました。 したがって、今日の Java プログラマーは、Concurrent がもう 1 つのマスターレベルのクラス ライブラリ実装であり、詳しく調べて理解することができます。 IO ライブラリは、ファイル IO であってもネットワーク IO であっても、Java プログラマが最も扱うものです。その API に慣れることは重要ですが、より重要なのは、IO 操作を抽象化およびモデル化する方法を理解し、その違いを理解することです。 IO モデルの背後にある本質と原則。


さて、上記の基本的な内容を完了すると、以下のような最初のマップが得られました。

Java Journey: トラベラーズ マップ

2番目のスキルマップ


最初のマップをマスターしたとしても、Javaの世界で自由に走り回るのはまだ少し難しいです。 現在の Java の主流の使用シナリオの 1 つは、バックエンド開発です。以前の時代では、この分野は Java Enterprise Edition とも呼ばれる J2EE (現在は Java EE と呼ばれています) によって独占されていました。 J2EE には多くのコンテンツが含まれており、その中心となるのは EJB です。当時、私は学校で分散オブジェクト技術の勉強を終えたばかりで、CORBA や EJB を例に分散オブジェクト技術を実装していました。 EJB の設計パターンとベスト プラクティスに関する本を何冊か読みました。卒業してインターンシップのために会社に入る前に、誰もが EJB はもう必要なく、Spring と呼ばれるものを使用していると言っていることに気づきました。 IoC や DI などの新しい英語の略語が再び登場しましたが、一口分の古い血が噴き出す前に、私は立ち上がり、新たな学習の旅を始めました。


はい、EJB は当時 (2005 年) から徐々に主流から外れ始めていました。 音楽学博士のロッド・ジョンソン氏が書いた『Expert One-on-One J2EE Development without EJB』という本が EJB の終焉を宣告し、Spring は歴史の舞台に入りました。 それ以来、Java はフレームワークの大きな発展の時代に入り、SSH/SSI などの技術フレームワークの組み合わせが Java 開発の主流を形成し、今日まで影響を与え続けています。


Java フレームワークはますます増えており、エコシステムはますます大きくなっています。これほど複雑なフレームワークに直面すると、初心者は混乱するはずです。学習には終わりがないように感じます。 実際、実際のプロジェクトでは、SSH/SSI は基本的に Java Web プロジェクトのコア フレームワークであり、これに習熟する必要があります。 しかし、これを知るには、Spring がオブジェクトの作成と相互依存性の管理の作業を引き継ぎ、フレームワークの使用方法を知っているだけで、それについて考えたことがない人がたくさんいます。 Web 開発は、初期の混乱した JSP (HTML + CSS + JS + Java + SQL。初期の頃は、保守がどれほど難しいかを考えて、これらすべてを JSP に入れただけでした) から、 MVC の責任分担。 ビュー レイヤーのみがタグ ライブラリからページ テンプレート (Velocity、Freemarker) への進化を経験しました。現在は、より徹底したフロントエンドとバックエンドの分離モデルを好みます。 かつて、私は数ページの CSS スタイルを調整するだけで命を落としていました。専門分業が効率性と奥深さをもたらしました。インターネットとモバイル インターネットの急速な発展によって、Web バージョンは今日のフロントエンドを作り上げました。複雑さはバックエンドの複雑さよりも劣りません。


では、Java エンジニアとして、いくつのフレームワークをマスターする必要があるでしょうか?これは誤った命題です。いくらマスターしても十分ではないからです。 解決策は、いくつかの中核的なものを上手にマスターし、その多くを全体的に理解し、迅速な学習フレームワークをマスターすることです。 SSH/SSI を例にとると、フロントエンドの専門的な分業の傾向がますます明確になり、バックエンド Java エンジニアの不安は完全に解放されています。 Spring を例にとったフレームワークは、多数の汎用問題を解決します。今日の Spring は、以前の数十倍以上の規模 (Spring にちなんで名付けられたすべてのサブプロジェクトを数えます) であり、そのすべてが特定の汎用問題を解決します。 したがって、コードを書いていて、突然 Util にちなんで名付けられたクラスを書きたくなった場合は、立ち止まって、これが一般的な問題を解決するクラスであるかどうかを考えてください。たとえば、既成のクラス ライブラリを検索することをお勧めします。必要なコードがあるかもしれません。 一般的なクラス ライブラリとフレームワークを使用すると、ビジネス ロジックと効率に集中できるようになります。これはおそらくコードの最も価値のある部分であり、これらには技術的な内容がないと不満を言う人もいるかもしれませんが、私は最も効果的なテクノロジを使用してビジネスを実現できると考えています。価値を最大化することは最も技術的なことです。


フレームは武器のようなものです。私は 18 の武器すべてを知っているわけではありませんが、張無忌が太極拳の剣を学ぶのと同じように、私たちも同じ能力を持っているはずです。敵と対峙するときは剣を持って、それでも勝つ。 ここで重要なのは、コツを学ぶことではありません。たとえば、Hibernate の使用法は完璧だと思っているかもしれませんが、データベースがオンラインになるとすぐにクラッシュします。 ここでの本質は依然としてリレーショナル (SQL) データベースを理解することですが、特定の非リレーショナル (NoSQL) データベースの原理とメカニズムの理解、さらには O/R マッピング モデルの本質的な理解がさらに必要になる場合があります。


つまり、基礎は内部の強さのようなもの、フレームワークは武器のようなもの、そして使用法は動きのようなものであり、この 3 つが統合されれば、すでに Java の世界を支配することができます。 上で述べたように、これに基づいて 2 番目のマップが作成されます。

Java Journey: トラベラーズ マップ

3枚目の写真、拡大写真


3枚目の写真に関しては、ちょっと普遍的かなと思う提案はもうできません。 この段階で、人それぞれの成長や発達の方向性は、その人の置かれている環境や現実の状況によって左右されます。私を例に少し説明してみます。 インターネット企業に入社してからのここ数年で、Java テクノロジーの開発は、J2EE コンテナー化された単一アプリケーションから SOA およびマイクロサービスへと進化し始めました。 大規模な分散システムが標準になっているため、私の関連業務はこの分野に集中しています。 一方で、知識の盲点を埋めるために徹底的な調査が続けられています。たとえば、分散プログラムの基礎は RPC 呼び出しであり、RPC の本質はネットワークとオブジェクトのシリアル化です。 したがって、TCP の原理、Unix/Linux でのネットワーク プログラミング モデル、およびいくつかの異なるネットワーク IO モデルを完全に理解する必要があります。 次に、これをベースにJavaが提供するネットワークプログラミングモデル、BIO(ブロッキング)、NIO(ノンブロッキング)、AIO(非同期IO)に進み、実際の業務実践と組み合わせて理解を深めます。


この過程で、Java 独自の RMI から WebService の技術仕様に至るまで、多数の異なる RPC テクノロジに触れました。 その後、Hessian、Thrift など、よりシンプルで強力な RPC フレームワークが次々に登場しました。 さまざまなフレームワークの本質は同じですが、サービス化の発展に伴い、Alibaba のオープンソース Dubbo など、RPC フレームワークに基づいて追加の付加価値機能を提供するサービス フレームワークがさらに派生しました。 作業の実践が深まるにつれて、JVM レベルまで下がって、オブジェクトのメモリ使用量、スレッドのスケジューリング、遅延を分析することが可能になります。 この段階でも中心的な役割を果たすのは、やはり迅速に学び、それを前述した仕事の実践に応用する能力です。


深さの反対側は水平方向の拡張です。仕事の性質が変化するにつれて、より広範な技術的知識も必要になる場合があります。 例えば、建築家になると、必要とされる技術的知識の幅がより広くなる面もあります。 体系的な技術学習と少しのスキルにより、技術の範囲をより迅速に拡大し、より高い観点からさまざまな技術的方向性と製品を検討し、適切な技術的決定を最も効果的に行うことができます。


この段階では誰もが異なる環境や実践に直面する可能性があるため、この段階で形成されるマップは大きく異なります。 以下は私の 3 番目の写真です。これはジャワ旅行の仲間の参考としてのみ使用してください。 そして、これらの大きく異なる地図に沿ってたどる道が、たまたまユニークなあなたを形成します。

Java Journey: トラベラーズ マップ

まだ地図を持っていなくても、混乱して永遠に立ち止まらないでください。 前進し続ければ必ず道は見つかる。

上記は Java Journey: Walker's Map の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。