私が知っている多くの PHP/LNMP プログラマーの開発軌跡に従って、個人的な経験と組み合わせて、多くのプログラマーの見解を抽象化しました。将来 混乱、特に技術学習に関する盲目さと混乱は、多くの PHP プログラムが比較して学習と成長の目標を設定できるように、各段階での PHP プログラマーの技術要件を単純に整理しただけです。
この記事は、現在の主流のテクノロジーに基づいて基本的な概要を作成しています。設定全体は、PHP プログラマーがあまりしっかりとした基礎を持っていないという前提に基づいており、すべての設定が非常に具体的かつ明確であるため、不快に感じるかもしれません。ご家族を代表してのみご利用いただけますことをご了承ください。 (将来の技術変化については議論の範囲外です)
最初のステージ: 基本ステージ(基本的なPHPプログラマー)
キーポイント: LNMP に習熟する (中心となるのはインストールと構成の基本操作です)
目標: 基本的な LNMP システムのインストール、簡単な構成とメンテナンスを完了できるようにする; 簡単なシステムの基本的な PHP 開発を実行できるようにする; 中規模の PHP システムで特定の PHP 機能モジュールの開発をサポートできるようにする。
時間: この段階を完了するまでにかかる時間は人によって異なります。半年より早く成長する人もいれば、2、3年でゆっくり成長する人もいます。
1.Linux:
基本的なコマンド、操作、起動、基本的なサービス設定 (rpm インストール ファイル、さまざまなサービス設定などを含む); 簡単なシェル スクリプトや awk/sed スクリプト コマンドなどを作成できます。
2.Nginx:
nginx+php をインストールして構成できるようになり、基本的な nginx コア構成オプションを理解し、server/fastcgi_pass/access_log などの基本構成を理解できるようになります。目標は、nginx+php_fpm をスムーズに動作させることです。
3.MySQL:
mysql を自分で構築できるようになり、基本的な mysql 設定オプションを知り、innodb と myisam の違いを知り、InnoDB と MyISAM の 2 つのエンジンの基本的な違いと、それらの違いを理解します。上記の選択肢は、手動で実行できることです。 MySQL データベースをコンパイルして構築し、正常に安定して実行できるようにエンコードを設定します。主な目的は、実行可能な MySQL データベースを構築することです。
4.PHP:
配列、文字列、データベース、XML、ソケット、GD/ImageMgk 画像処理などの基本的な構文、MySQL 操作 (mysql/mysqli/PDO) にリンクされたさまざまな API に精通しており、さまざまなコーディングの問題を解決する方法を知っている。ルーチンに習熟していること。使用される PHP フレームワーク (ThinkPHP、Zendframework、Yii、Yaf など) について、基本的な MVC 操作メカニズムとその理由を理解し、さまざまな PHP フレームワーク間の違いについて少し理解できること。 MVC フレームワーク。開発プロジェクトのファイル ディレクトリ構成を理解し、基本的な優れたコード構造とスタイルを備え、小規模システムの開発と中規模システムの特定のモジュールの開発を完了できる。
5.フロントエンド:
時間が許せば、HTML/CSS/JS とその他の関連知識を適切に学び、Web 標準、div+CSS の Web/WAP ページ モードを知り、HTML5 と HTML4 の違いをいくつか理解し、基本的なフロントエンドと JS を理解することができます。フレームワーク (jQuery など); JavaScript プログラミングの基本的な知識を理解する (この項目は必須ではありません。時間があれば少しずつ学習することは問題ありませんが、個人的な知識が豊富な場合を除き、重点的に学習することはお勧めしません)。興味あります)
6.システム設計:
簡単なデータベース設計を含む小規模システムの基本設計を完了でき、ブラウザの基本設計と開発作業を完了できる -> Nginx+PHP -> 数十万のデータベース アーキテクチャをサポートできる。毎日何百万ものトラフィック Web サイトの開発と保守作業が行われます。
第二段階: 改善段階(中級PHPプログラマー)
キーポイント: LNMP スキルを向上させ、LNMP をより包括的かつ熟練的に適用できるようになります。
目標:いつでもどこでも LNMP 環境をセットアップし、日常的な構成を迅速に完了できるようになり、開発およびオンライン環境で発生した問題のほとんどを追跡して解決できるようになり、メディアのアーキテクチャと開発作業を独自に開始できるようになります。 - サイズのシステム; 大規模システムで動作できるようにする 中規模のモジュールの開発作業を引き受ける;
1. Linux:
最初の段階に基づいて、シェル スクリプトを使用して多くの自動タスクをスムーズに実行できます。また、awk/sed/perl も適切に動作し、多くのテキスト処理とデータ統計を完了できます。プログラム Linux プログラム (MongoDB/Redis/Sphinx/Luncene/SVN などのさまざまなライブラリ、パッケージ、サードパーティの依存関係などを含む)、基本的な Linux サービスを理解し、Linux パフォーマンス インジケータ データを表示する方法を知っています。 Linux などでの基本的な問題追跡を知っている
2. ギンクス:
最初の段階に基づいて、マルチコア構成、イベント、proxy_pass、sendfile/tcp_* 構成を含む、より複雑な Nginx 構成を理解し、関連する構成とタイムアウトなどのパフォーマンスへの影響を理解します。 Web サーバー、リバース静的サーバー、およびその他の構成に加えて、基本的な nginx 構成のチューニングを理解し、nginx 拡張機能を nginx にコンパイルする方法を理解し、nginx のパフォーマンスが低下する理由を知っています。 Apache よりもパフォーマンスが優れています。知識をお待ちしています。
3. MySQL/MongoDB:
MySQL 開発の第 1 段階に基づいて、通常の SQL 最適化 (グループ化/順序化/ランド最適化など) を含む多くのヒントを習得し、MySQL を構築できるようにするだけでなく、ホットおよびコールドも行うことができます。 MySQL データをバックアップし、innodb/myisam のパフォーマンスに影響を与える設定オプション (key_buffer/query_cache/sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit など) を知っており、これらのオプションを設定するための適切な値も知っています。また、mysql のマスター/スレーブ同期環境のセットアップ方法、各 binlog_format の違い、slow_log/explain などの MySQL のパフォーマンス追跡、および基本的なインデックス作成など、いくつかの特別な設定オプションについても理解しています。基本的な MySQL アーキテクチャ (サーバー + ストレージ エンジン) を原理的に理解し、基本的な InnoDB/MyISAM インデックス ストレージ構造と相違点 (クラスター化インデックス、B ツリー) を理解します。ほとんどの MySQL 例外の解決策 (または解決策を見つける場所を知っている)。状況が許せば、NoSQL の代表である MongoDB データベースについて学び、MySQL との違いを比較し、適切なアプリケーション シナリオで MongoDB を安全かつ慎重に使用し、PHP と MongoDB の基本的な組み合わせ開発を理解することをお勧めします。 。
4. Redis/Memcached:
キャッシュ処理はほとんどの中規模システムに必ず関係するため、基本的なキャッシュを理解し、Memcached と Redis の類似点、相違点、アプリケーション シナリオを理解し、Redis/Memcached を個別にインストールできるようにし、いくつかの基本的な機能と制限を理解する必要があります。 Memcahed の最大値など、PHP とその使用法を組み合わせる方法を理解する、Redis の基本的な動作原理と使用法を理解する、従来のデータ型を理解する、どのようなシナリオでどの型が使用されるかを理解する、Redis トランザクションを理解するなど。原理部分では、Memcached のメモリ構造 (スラブ機構) を大まかに理解できます。Redis は、一般的なデータ型 (SDS/リンクリスト/SkipList/HashTable) などの基盤となる実装ストレージ構造を理解します。 Redis のトランザクション、RDB、AOF、その他のメカニズムについて詳しく学ぶことができます。5.
PHP: インストールと構成に関しては、第 1 段階の機能に加えて、PHP のコンパイルされたインストール構成とさまざまなサードパーティ拡張機能を自由にインストールでき、php-fpm の構成オプションと意味のほとんどを理解できます (max_requests/ など)。 max_children/request_terminate_timeout など、パフォーマンスに影響するもの) 構成)、mod_php/fastcgi の違いを理解していること。フレームワークに関しては、少なくとも 1 つの従来の PHP MVC フレームワークのコードを読み、基本的な PHP フレームワークの内部実装メカニズムと設計思想を理解できました。 PHP 開発におけるアプリケーション開発の従来のデザイン パターン (抽象ファクトリー/ユニット サンプル/オブザーバー/コマンド チェーン/ストラテジー/アダプターなどのモード) を上手に使用するには、開発を完全に自由化するために独自の PHP MVC フレームワークを開発することをお勧めします。 MVC パターンを理解し、ビジネス プロジェクト開発で迅速にアップグレードできるようにする。PHP のさまざまなコード最適化方法に精通している。PHP のほとんどのセキュリティ問題の解決に精通している。基本的な PHP 実行メカニズムの原則 (Zend エンジン/拡張された基本動作メカニズム) に精通している。 );
6.
C/C++: 特定の C/C++ 言語に手を出し始め、基本的な C/C++ コードを記述できるようになり、基本的な C/C++ 構文 (ポインター、配列操作、文字列、通常の標準 API) とデータ構造 (リンク リスト、ツリー) に慣れる、ハッシュ)、キュー); Linux での C 言語開発の概念を基本的に理解しており、簡単な Makefile ファイルを作成でき、簡単な GCC/GDB プログラムのコンパイルと簡単なデバッグを使用できる。 (この項目はより高いレベルへの基礎を築くためのものです)
7.
フロントエンド: 最初の段階に基づいて、基本的な HTTP プロトコル (プロトコル コード 200/300/400/500、基本的な HTTP インタラクション ヘッダー) に慣れ、条件が許せば、もう少し洗練された HTML+CSS+JavaScript を詳しく書くことができます。または、条件が許せば、一部のフロントエンド フレームワーク (jQuery/YUI/ExtJS/RequireJS/BootStrap など) を大まかで簡単に使用できるようになり、クロージャ メカニズムや DOM などの JavaScript プログラミングを詳しく学ぶことができます。処理をさらに詳しく知りたい場合は、jQuery のソース コードを読んでさらに詳しい知識を学ぶことができます。 (フロントエンドに興味がない限り、この項目は重要な調査ではありません)
8.
システム設計:
ほとんどの中規模システム向けの Web サイトのアーキテクチャ、データベース、および基本的な PHP フレームワークの選択ができる。次のようなタスクを実行できる。ブラウザ -> CDN (Squid) -> Nginx+PHP -> キャッシュ -> データベース構造の Web サイトの基本的な設計、開発、保守。毎日数百万から数千万のトラフィックが発生する基本的な Web サイトの開発と保守をサポートします。
第 3 段階: 上級段階 (上級 PHP プログラマー)
キーポイント: 基本的な LNMP プログラムに加えて、特定の方向または分野についての詳細な学習も可能です。 (詳細な開発)
目標: 基本的な PHP ビジネス開発を完了できることに加えて、ほとんどの詳細で複雑な技術的問題も解決でき、中規模および大規模なシステム設計と開発作業を独自に設計して完了できます。特定の技術的方向で独自に詳細な作業を行っており、こちらの方がよりプロフェッショナルです。 (たとえば、MySQL、Nginx、PHP、Redis など、あらゆる方向の詳細な調査)
1. Linux:
第 2 段階の機能に加えて、Linux での通常の操作、パフォーマンスの監視と追跡に加えて、多くの高度で複雑なコマンドを使用して作業を完了することもできます (watch/tcpdump/starce/ldd/ar など)。シェル スクリプトに関しては、バックアップ、自動処理、モニタリングなどの多くのシェル タスクを完了するのに役立つ比較的複雑なシェル スクリプト (500 行以上) をすでに作成できます。私は awk/sed/ などのアプリケーションに習熟しました。 perl を使用し、複雑な形式のテキスト統計分析を自由に操作および制御できる。Linux の内部メカニズム、カーネル モジュールのロード、起動時のエラー処理などをある程度理解している。 NFS、ディスク管理など
2. ギンクス:
第 2 段階に基づいて、私は Nginx を非常に上手に操作できるようになり、個人の興味に応じて、監視、パフォーマンスの最適化、複雑な問題の処理など、Nginx でより詳細な運用および保守作業を実行できるようになりました。より多くの側面を考慮することができます。主に、特定のマスター/ワーカーの動作メカニズム、Nginx の内部イベント処理、メモリ管理などのソース コードを読むことから始めて、Nginx の動作原理の詳細な研究に焦点を当てます。同時に、Nginx 拡張機能の開発を学び、独自のプライベート拡張機能の一部をカスタマイズすることができ、同時に Nginx + Lua をある程度理解して、より良いモデルを組み合わせて適用できるかどうかを確認できます。この段階での要件は、Nginx の原則を深く理解することであり、Nginx の分野で深い専門家になることを検討できます。
3. MySQL/MongoDB:
第 2 段階に基づいて、MySQL アプリケーションに関しては、以前の基本的な SQL 最適化に加えて、大規模なデータ バッチのインポートとエクスポート、オンラインの大規模バッチのテーブル構造の変更など、いくつかの複雑な操作も完了できます。データの追加やインデックス フィールドの追加や削除など、リスクの高い操作を待機するだけでなく、さまざまな問題の追跡、マスターとスレーブの同期遅延の問題の解決など、より複雑な MySQL の問題も処理できるようになりました。 - マシン ルーム データ同期ソリューション、MySQL 高可用性アーキテクチャなど。MySQL アプリケーション レベルでは、トランザクション メカニズム (分離レベル、ロックなど) などの MySQL の主要なテクノロジに精通しており、トリガー、パーティション、およびその他のテクノロジの確実な理解と適用。ディスク最適化 (SAS Migrate to SSD)、サーバー最適化 (メモリ、サーバー構成)、第 2 段階 (innodb_log_buffer_size/back_log) に加えてその他のコア パフォーマンス最適化オプションを含みます。 /table_open_cache/thread_cache_size/innodb_lock_wait_timeout など)、接続プール ソフトウェア選択アプリケーション、および show * (show status/show profile) タイプの操作ステートメントを使用して、ほとんどのパフォーマンスの問題の追跡を完了できます。災害復旧とリカバリ、MySQL の原則における Binlog、ホットおよびコールド バックアップ、マルチ IDC バックアップなどの深い理解。学習の面では、マスター/スレーブ同期 (レプリケーション) 技術のソース コードを学習したり、特定のストレージ エンジン (MyISAM/Innodb/TokuDB) のソース コードを学習して理解したりするなど、条件が許せば、MySQL の動作メカニズムを理解することができます。 CSV エンジンを参照して独自のシンプルなストレージ エンジンを開発し、データを保存し、MySQL についての理解を深めることができます。興味がある場合は、DBA の方向で開発することも検討できます。 MongoDB レベルでは、たとえば、書き込みを減らし読み取りを増やす場合に MongoDB のオンライン適用を開始することや、オンライン データ分析と処理操作を実行することを検討できます。特定のシナリオは作業に基づいていますが、中心となるのは次のとおりです。 NoSQL とは異なるシナリオのアプリケーションについて、条件や関心が許せば、MongoDB の動作メカニズムについてさらに詳しく学び始めることができます。
4. Redis/Memcached:
第2段階を踏まえて、より深く応用して学ぶことができます。 Memcached は特に複雑ではないため、ソース コード、特にメモリ管理部分を読んで Redis 部分をより深く理解することをお勧めします。より複雑なデータ構造のアプリケーションを実行できます (ランキング操作には zset が使用されます)。フラッシュ セール シナリオ アプリケーションで確実に Atomicity が使用されるようにするための /トランザクション処理)、これには主に、aof などの同期メカニズムのアプリケーションの学習と、高可用性の Redis アプリケーション アーキテクチャとクラスターの設計が含まれます。蓄積された知識は、特にコアイベント管理、メモリ管理、内部コアデータ構造などについて読むと完全に理解できます。興味があれば、Redis の非常にプロフェッショナルなユーザーになることができます。
5.PHP:
基礎的なコアスキルとして、第2段階を踏まえたより深い学習と応用が必要です。基本的なコードの適用に関しては、PHP 開発で遭遇する問題の 95% を解決でき、ほとんどの PHP テクニックを理解できます。また、ほとんどの PHP フレームワークを 1 日以内にすぐに使い始めることができ、各主流の PHP フレームワークの利点を理解できます。プロジェクト開発におけるテクノロジーの選択を迅速かつ便利に行うことができ、通常の第 2 段階の知識に加えて、いくつかの複雑な高度な構成を含む、よりあいまいな構成オプション (php auto_prepend_file/auto_append_file) についても理解できるようになります。拡張機能と原則 (memcached 拡張機能設定の memcache.hash_strategy、apc 拡張設定の apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection など)、php-fpm の動作を含む、php の動作メカニズムをよく理解している。メカニズム (php-fpm などにより、さまざまな構成マシンでプロセス番号の計算と原理が可能になります)、zend エンジン (vm/gc/stream 処理) に基本的な知識があること、基本的な PHP カーネル ソース コードを読んでいること (または関連記事を読んでいること)、 PHP の内部メカニズムを理解している。 ほとんどのコア データ構造 (基本型/配列/オブジェクト) の実装を理解し、コア インフラストラクチャ (zval/hashtable/gc) を深く理解している。基本的な PHP 拡張機能の開発を実行でき、拡張機能開発 (minit/rinit など) の中級および高度な知識を理解し、php と apache/nginx (mod_php/fastcgi) の間のさまざまな通信および対話方法の詳細に精通している); PHP 拡張機能の開発に加えて、PHP をより低いレベルから理解するために Zend 拡張機能の開発を学習することを検討できます。
6. C/C++:
第 2 段階に基づいて、C/C++ 言語をより深く理解し、基本的な C/C++ 構文とデータに加えて中小規模の C/C++ システムの開発を完了できるようになります。第 2 段階の構造では、特殊な作業のニーズを容易にするために、いくつかの特殊なデータ構造 (b-tree/rb-tree/skiplist/lsm-tree/trie-tree など) を学習することもできます。システム プログラミング、マルチプロセスおよびマルチスレッド プログラミングに精通している。マルチプロセス状況では、マルチプロセス間の通信方法のほとんどを理解し、通信方法 (共有メモリ/セマフォ/パイプラインなど) を柔軟に選択できる。 ; マルチスレッド プログラミングは、ロックの競合をうまく解決し、同時にマルチスレッド プログラムの開発とデバッグを行うことができます。ネットワーク プログラミングに精通し、マルチプロセス モデル/マルチスレッド モデル/非同期ネットワークの違いと選択を理解します。 IO モデル。さまざまな非同期ネットワーク IO モデル (select/poll/epoll/iocp など) の原理と相違点に精通し、一般的な非同期フレームワーク (ACE/ICE/libev/libevent/libuv/Boost.ASIO) に精通している。自由な時間があれば、国内で開発されたライブラリ (Muduo など) を参照することもできます。同時に、優れた同時実行性の高いプログラム アーキテクチャ (リーダー/フォロー/マスター) を設計することもできます。 C/C++ バックエンド サーバー開発におけるほとんどの問題 (メモリ管理、ログ出力、高い同時実行性、フロントエンドとバックエンドの通信プロトコル、サービスの監視) を理解し、RPC 通信の問題を理解している。各バックエンド サービス (struct /http/thirft/protobuf など) では、GCC と GDB をより使いやすくコンパイルおよびデバッグ プログラムを開発でき、オンライン プログラムのコア化後に問題を迅速に追跡して解決できます。一般的なモジュール開発では、いくつかの一般的なツールやライブラリ (非同期ネットワーク フレームワーク、ログ ライブラリ、メモリ プール、スレッド プールなど) を蓄積または開発できますが、自分自身を節約するために、開発後にそれを適用するかどうか注意する必要があります。虫を追いかけることから
7. フロントエンド:
HTTP プロトコルについての深い理解 (各詳細プロトコルの特別なプロトコル コードとその背後にある理由、たとえば 302 の静的ファイルがキャッシュされている、502 は nginx の背後にある PHP がダウンしていることを意味するなど)。以前のフロントエンド さまざまなフレームワーク アプリケーション統合機能、フロントエンド さらに詳しく知りたい場合は、jQuery などのフロントエンド フレームワークを自分で開発したり、リッチ テキスト エディターやその他の比較的簡単なテストを開発したりできます。あなたの JavaScript スキル
8. 他の分野の言語学習:
基本的な PHP/C/C++ 言語の基礎を積み上げます。個人的な興味や趣味に応じて、現在の段階でさまざまなプログラミング言語を学習することをお勧めします。スクリプト言語として Python/Ruby を学習することもできます。関数型プログラミング言語には、Lisp/Haskell/Scala/Erlang などを試してください。データ統計分析には、R 言語を試してください。別の観点から、Node.js や、Nginx と組み合わせた上記の Nginx_Lua などを試すことができます。さまざまな言語を学ぶことは、主に自分自身のビジョンと問題解決方法の違いを改善することです。たとえば、クロスマシン通信シナリオには、プロセス/スレッドに加えて軽量のコルーチンもあることを理解するでしょう。 , Erlang の解決策は驚くほど簡単です。たとえば、C/C++ を選択したくない場合は、主に視野を広げるために、同様の効率的な Erlang/Golang も利用できます。
9. 他の専門的な方向で勉強する:
この段階では、基本的な LNMP スキルに加えて、他の分野の知識を学ぶことも検討します。これらはすべて、個人の興味と長期的な目標に応じて可能です。現在、クラウドコンピューティング(分散ストレージ、分散コンピューティング、仮想マシンなど)、機械学習(データマイニング、パターン認識など、統計への応用、パーソナライズされたレコメンデーション)、自然科学など、選択できる分野は数多くあります。言語処理 (中国語の単語分割など)、検索エンジン技術、グラフィックスと画像、音声認識など。これらの高度な分野に加えて、高性能システム、モバイル開発 (Android/IOS)、コンピュータ セキュリティ、組み込みシステム、ハードウェアなど、エンジニアリングについてさらに学ぶことができる分野も数多くあります。
10. システム設計:
システム設計の第 2 段階に基づいて、これまでに習得した経験とスキルを応用して、比較的複雑な中規模および大規模システムを設計し、さまざまなオンラインの複雑なシステムの問題のほとんどを解決し、ブラウザーなどのタスクを完了することができます。 > CDN -> アクセス層 -> ビジネスキャッシュ -> さまざまなバックエンド RPC インタラクション (ストレージバックエンド、アンチチートバックエンド) ) -> 毎日数千万から数億のトラフィックを伴う Web サイトの通常の開発と保守をサポートできるバックエンドの Jiangzi のビジネス。
第4フェーズ: アーキテクチャフェーズ(アーキテクト)
追伸:今回は議論を始めません。次回、この部分の内容を説明および補足する特別な記事を書きます。
第5段階:エキスパートステージ(ディレクション分野のエキスパート)
追伸: 私は背が高いので、これについては話しません^_^
第6ステージ:科学者ステージ
追伸: 私は背が高いので、これについては話しません^_^