ホームページ >見出し >PHPプログラマーの成長過程

PHPプログラマーの成長過程

小云云
小云云オリジナル
2017-11-18 14:00:442189ブラウズ

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 エンジンのさまざまな設定オプションを知っている、2 つのエンジンの基本的な違いと選択肢を知っている。上記の違いは、MySQL データベースを純粋に手動でコンパイルおよび構築でき、通常かつ安定して実行されるようにエンコードを構成できることです。主な目的は、実行可能な MySQL データベースを構築できることです。

4.PHP:

基本的な構文配列、文字列、データベース、XML、ソケット、GD/ImageMgk 画像処理など; MySQL 操作にリンクされたさまざまな API (mysql/mysqli/PDO) に精通しており、さまざまなエンコーディングを知っている一般的に使用される 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 サイトの開発とメンテナンスをサポートできます。

焦点: LNMP スキルを向上させ、LNMP をより包括的かつ熟練的に適用できるようになります。

目標: いつでもどこでも LNMP 環境をセットアップでき、日常的な構成を迅速に完了できるようになり、発生した開発およびオンライン環境の問題のほとんどを追跡して解決できるようになり、メディアのアーキテクチャと開発作業を独自に開始できるようになります。中規模のシステムでのタスクを実行できる

1. Linux:

最初の段階に基づいて、多くの自動化された作業をスムーズに実行できます。 ; awk/sed/perl も適切に動作し、多くのテキスト処理とデータ統計を完了できます。基本的に、MongoDB/Redis などの、特別ではないほとんどの Linux プログラムをインストールできます。 /Sphinx/Luncene/SVN など); 基本的な Linux サービスを理解し、Linux パフォーマンス インジケーター データを表示する方法を知り、Linux での基本的な問題追跡について知っています。

2. Nginx:

最初の段階に基づいて、マルチコア構成、イベント、proxy_pass、sendfile/tcp_* 構成を含む、より複雑な Nginx 構成を理解し、タイムアウトやその他の関連する構成とパフォーマンスへの影響を理解します。 Web サーバー、リバース静的サーバー、その他の構成に加えて、基本的な nginx 構成のチューニングを知っている、nginx の拡張機能を nginx にコンパイルする方法を知っている、nginx の基本的な動作原理 (マスター/ワーカー メカニズム、epoll) を知っている。 nginx のパフォーマンスは Apache のパフォーマンスよりも優れています

3. MySQL/MongoDB:

第 1 段階に基づいて、通常の SQL 最適化 (group by/order by/rand 最適化など) を含む MySQL 開発の多くのヒントを習得します。 .); 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 ツリー)、基本的な InnoDB トランザクション処理メカニズムを知っている、ほとんどの MySQL 例外の解決策を知っている (または、例外がどこにあるかを知っている)。状況が許せば、NoSQL の代表である MongoDB データベースについて学び、MySQL との違いを比較し、適切なアプリケーション シナリオで MongoDB を安全かつ慎重に使用し、PHP と MongoDB の基本的な組み合わせ開発を理解することをお勧めします。 。

4. Redis/Memcached:

キャッシュ処理はほとんどの中規模システムに関係するため、基本的なキャッシュを理解し、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 の違いを理解していること。 PHP の深さ (PHP オブジェクト指向/SPL/文法の深い理解を含む) フレームワークに関するリフレクションなどのレベルの特殊機能。少なくとも 1 つ以上の従来の PHP MVC フレームワークのコードを読んでおり、基本的な PHP フレームワークの内部実装メカニズムと設計アイデア。PHP 開発で従来の設計パターンを上手に使用できます。アプリケーション開発 (抽象ファクトリ/シングル ケース/オブザーバー/コマンド チェーン/ストラテジー/アダプターおよびその他のパタ​​ーン)。独自の PHP MVC フレームワークを開発して、開発を完全に自由化し、MVC パターンを深く理解してビジネスに取り組むことをお勧めします。 プロジェクト開発中に迅速にアップグレードし、PHP のさまざまなコード最適化方法に慣れ、問題解決に慣れてください。 PHP のセキュリティの問題のほとんどを理解する; 基本的な PHP 実行メカニズムの原理 (Zend エンジン/拡張された基本的な動作メカニズム) に精通していること。 C/C++ コード、および基本的な C/C++ 構文 (ポインター、配列操作、文字列、通常の標準 API) およびデータ構造 (リンク リスト、ツリー)、ハッシュ、キュー) に精通しており、C の概念を基本的に理解している。 Linux での言語開発ができること、簡単な 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 サイトの開発と保守をサポートします。 (上級 PHP プログラマー)

要点: 基本的な LNMP プログラムに加えて、特定の方向または分野についての詳細な学習も可能です。 (深さ次元の開発)

目標: 基本的な PHP ビジネス開発を完了できることに加えて、ほとんどの詳細で複雑な技術的問題も解決でき、中規模および大規模なシステム設計と開発を独自に設計して完了できるこの分野では、技術的な方向性が比較的専門的です。 (例: MySQL、Nginx、PHP、Redis など、あらゆる方向の詳細な調査)

1. Linux:

第 2 段階の機能に加え、通常の運用とパフォーマンスの監視と追跡シェル スクリプトに関しては、多くの高度な複雑なコマンド (watch/tcpdump/starce/ldd/ar など) を使用して作業を完了することもできます。私は、比較的複雑なシェル スクリプト (500 行以上) を作成することができました。バックアップ、自動処理、モニタリングなどの多くのタスクの完了を支援します。シェル。awk/sed/perl などのアプリケーションに習熟し、さまざまな複雑な形式のデータを自由に操作、制御、処理、テキスト化、統計分析できるようになりました。 ; 私は Linux の内部メカニズムをある程度理解しており、カーネル モジュールのロード、起動時のエラー処理などの経験があります。同時に、NFS、ディスク管理などの他の関連事項も理解しています。など;

2. Nginx:

第 2 段階に基づいて、Nginx を非常に上手に操作できるようになり、モニタリング、パフォーマンスの最適化など、より詳細な運用と保守作業を実行できるようになりました。複雑な問題の処理など、個人的な興味に応じて、主にソースコードを読むことから始めて、特定のマスター/ワーカーの動作メカニズム、Nginx の内部イベント処理など、Nginx の動作原理の詳細な学習に焦点を当てることを検討できます。 、メモリ管理など、同時に Nginx 拡張機能の開発を学び、同時にいくつかの独自のプライベート拡張機能をカスタマイズすることができ、Nginx+Lua をある程度理解してそれが機能するかどうかを確認できます。アプリケーションを組み合わせてより良いモデルを開発することができます。この段階での要件は Nginx の原理を深く理解することであり、Nginx の分野で深い専門家になることを検討できます。

3. MySQL/MongoDB:

MySQL アプリケーションに関しては、第 2 段階に基づいて、以前の基本的な SQL 最適化に加えて、大規模なバッチのインポートとエクスポートなどのいくつかの複雑な操作も完了できます。データ、オンラインの大規模バッチ データのテーブル構造の変更やインデックス フィールドの追加または削除などのリスクの高い操作。インストールと構成に加えて、さまざまな問題のトレース、マスターの解決など、より複雑な MySQL 問題も処理できます。 - スレーブ同期の遅延問題、およびコンピューター ルーム間のデータ同期ソリューションなどを理解している。MySQL アプリケーション レベルに精通しており、トランザクションなどの MySQL の主要なテクノロジに精通している。メカニズム (分離レベル、ロックなど) を理解し、トリガー、パーティション、その他のテクノロジについて一定の理解と応用を持っている。 パフォーマンスの観点では、ディスクの最適化 (SAS から SSD への移行)、サーバーの最適化 (メモリ) がある。 、サーバー構成)、第 2 段階に加えてその他のコア パフォーマンス最適化オプション (innodb_log_buffer_size/back_log/table_open_cache /thread_cache_size/innodb_lock_wait_timeout など)、接続プール ソフトウェアの選択アプリケーション、show * ( などの操作ステートメントを深く理解していること)ステータスの表示/プロファイルの表示)、災害復旧と復元、Binlog、ホットおよびコールド バックアップ、マルチ IDC バックアップなどを含む、MySQL バックアップ テクノロジーに関するほとんどのパフォーマンス問題の追跡を完了できる。 .; MySQL の動作メカニズムのソース コードの一部を読み始めたり、マスター/スレーブ同期 (レプリケーション) テクノロジのソース コードを学習したり、特定のストレージ エンジンについて学習したりするなど、MySQL の原理をよりよく理解します。 (MyISAM/Innodb /TokuDB) など、このプロセス中に興味があれば、CSV エンジンを参照して独自の単純なストレージ エンジンを開発できます。 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++ システムの開発を完了できるようになります。第 2 段階の C/C++ 構文とデータ構造の基本に加えて、ニーズに合わせていくつかの特別なデータ構造 (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++ バックエンド サーバー開発におけるほとんどの問題 (メモリ管理、ログ出力、高い同時実行性、フロントエンド) を理解できる。バックエンド通信プロトコル、サービス監視など)、さまざまなバックエンド サービス(struct/http/thirft/protobuf など)との RPC 通信の問題を理解し、コンパイルおよびデバッグ プログラムを開発するために GCC と GDB をよりよく使用できるようになります。オンライン プログラムがコア化された後、問題を迅速にトレース、追跡、解決できます。一般的なモジュール開発、いくつかの一般的なツールやライブラリ (非同期ネットワーク フレームワーク、ログ ライブラリ、メモリ プール、スレッド プールなど) を蓄積または開発できます。ただし、バグを追跡しないように、開発後に適用するかどうかは注意する必要があります。

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 相互作用 (ストレージ バックエンド、アンチチート バックエンド、外部サービス) -> バックエンド Jiangzi の複雑なビジネス。毎日数千万から数億のトラフィックを伴う Web サイトの通常の開発と保守をサポートできます。

このルートでは、あなたを成長させるだけでなく、PHP プログラマーとして自分がどの段階にいるのかを理解することもできます。自分が目標にはまだ遠いとわかった場合は、上記のルートに従って自分自身を向上させることができます。

関連する推奨事項:

PHP プログラマーの将来についての簡単な話

プログラマーが避けるべきいくつかの落とし穴

違うプログラマーになる

成功するプログラマーになる必須

オープン検討すべき質問: プログラマーはどのようにしてプログラミング スキルを向上させることができますか?

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