ホームページ  >  記事  >  バックエンド開発  >  PHPプログラマーのための技術成長計画(迷っているあなたへ)

PHPプログラマーのための技術成長計画(迷っているあなたへ)

WBOY
WBOYオリジナル
2016-08-08 09:29:231098ブラウズ

多くの 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. リナックス:

最初の段階に基づいて、シェル スクリプトを使用して多くの自動タスクをスムーズに実行できます。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 の基本的な実行メカニズムの原理 (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. リナックス:

第 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 バックアップなど。学習の面では、動作に関するソース コードの一部を読み始めるなど、より理解が深まります。 MySQLの仕組みについては、マスタ・スレーブ同期(レプリケーション)技術のソースコードを学習したり、特定のストレージエンジン(MyISAM/Innodb/TokuDB)のソースコードを学習して理解したりするなど、条件が許せば参照していただけます。 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 言語について学ぶことができます。見方を変えると、Nginxと組み合わせたNode.jsや上記のNginx_Luaなどを試すこともできます。さまざまな言語を学ぶことは、主に自分自身のビジョンと問題解決方法の違いを改善することです。たとえば、クロスマシン通信シナリオには、プロセス/スレッドに加えて軽量のコルーチンもあることを理解するでしょう。 , Erlang の解決策は驚くほど簡単です。たとえば、C/C++ を選択したくない場合は、主に視野を広げるために、同様の効率的な Erlang/Golang も利用できます。

9. 他の専門的な方向で勉強する:

この段階では、基本的な LNMP スキルに加えて、他の分野の知識を学ぶことも検討します。これらはすべて、個人の興味と長期的な目標に応じて可能です。現在、クラウドコンピューティング(分散ストレージ、分散コンピューティング、仮想マシンなど)、機械学習(データマイニング、パターン認識など、統計への適用、パーソナライズされたレコメンデーション)、自然科学など、選択できる分野は数多くあります。言語処理 (中国語の単語分割など)、検索エンジン技術、グラフィックスと画像、音声認識など。これらの高度な分野に加えて、高性能システム、モバイル開発 (Android/IOS)、コンピュータ セキュリティ、組み込みシステム、ハードウェアなど、エンジニアリングについてさらに学ぶことができる分野も数多くあります。

10. システム設計:

システム設計の第 2 段階に基づいて、これまでに習得した経験とスキルを応用して、比較的複雑な中規模および大規模システムを設計できます。これにより、さまざまなオンラインの複雑なシステムの問題のほとんどを解決し、ブラウザーなどのタスクを完了できます。 > CDN -> アクセス層 -> ビジネスキャッシュ -> さまざまなバックエンド RPC インタラクション (ストレージバックエンド、アンチチートバックエンド) ) -> 毎日数千万から数億のトラフィックを伴う Web サイトの通常の開発と保守をサポートできるバックエンドの Jiangzi のビジネス。

第4段階:建築段階(建築家)

追伸:今回は議論を始めません。次回、この部分の内容を説明および補足する特別な記事を書きます。

第5段階:エキスパートステージ(ディレクション分野のエキスパート)

追伸: 私は背が高いので、これについては話しません^_^

第6ステージ:科学者ステージ

追伸: 私は背が高いので、これについては話しません^_^

上記は、PHP プログラマー向けの技術的成長計画 (混乱している人向け) を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

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