プログラマーは多くの人にとって比較的儲かる職業であり、毎年多くの人がこの業界に参入し、その中にはコンピューターを専攻した人や訓練を受けた人もいますが、どのタイプであっても、多くの人が働いています。 1、2 年後、私はキャリアを変えることにしました。理由は単純でした。この業界が発展していないのではなく、自分が正しい道を持っていないので、この業界で発展する方法がないのです。したがって、今日の私たちのphp中国語ウェブサイトは、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 操作にリンクされたさまざまな API (mysql/mysqli/PDO) に精通しており、さまざまなコーディングの問題を解決する方法を知っています。 ● 一般的に使用される PHP フレームワーク (ThinkPHP、Zendframework、Yii、Yaf など) を理解する
; ● MVC の基本的な動作メカニズムとその理由を理解し、さまざまな PHP フレームワークの違いについて少し理解します。 ● MVC フレームワークをすぐに学習できる能力。開発プロジェクトのファイル ディレクトリ構成を理解し、基本的な優れたコード構造とスタイルを備え、小規模システムの開発と中規模システムの特定のモジュールの開発を完了できる。
5. フロントエンド:● 時間と条件が許せば、HTML/CSS/JS およびその他の関連知識を適切に学び、Web 標準、p+css Web/wap ページ モード、および HTML5 と HTML4 の違いを知ることができます。 ● 基本的なフロントエンドと JS フレームワーク (jQuery など) を理解します。 ● JavaScript プログラミングの基本知識を理解します (この項目は必須ではありません。時間があれば少し学習できますが、強い関心がない限り重点的に学習することはお勧めしません)
6.デザイン:
簡単なデータベース設計を含む小規模システムの基本設計を完了でき、ブラウザ -> Nginx+PHP -> データベース アーキテクチャの設計と開発作業を完了でき、数十万から数百万のトラフィック Web サイトをサポートできる。毎日の開発とメンテナンス作業
第 2 段階: 改善段階 (中級 PHP プログラマー)
重点:
LNMP スキルを向上させ、LNMP をより包括的かつ熟練的に適用できるようになります。
目標: ● いつでもどこでも LNMP 環境をセットアップし、日常的な構成を迅速に完了する機能
● 開発環境やオンライン環境で発生する問題のほとんどを追跡して解決できます ; ● 中規模システムの構築・開発業務を独立して請け負える方
● 大規模なシステムで中規模のモジュールの開発作業を引き受けることができる
1.Linux:● 最初の段階に基づいて、シェル スクリプトを使用して多くの自動化されたタスクをスムーズに完了できます
● awk/sed/perl もうまく機能し、多くのテキスト処理とデータ統計を完了できます。 ● 基本的に、特別ではないほとんどの Linux プログラム (MongoDB/Redis/Sphinx/Luncene/SVN などのさまざまなライブラリ、パッケージ、サードパーティの依存関係などを含む) をインストールできます。
● 基本的な Linux サービスを理解し、Linux パフォーマンス指標データを表示する方法を理解し、Linux での基本的な問題追跡について理解します。
2.Nginx:
● 最初の段階に基づいて、マルチコア構成、イベント、プロキシパス、sendfile/tcp* 構成などのより複雑な Nginx 構成を理解し、関連する構成とタイムアウトなどのパフォーマンスへの影響を把握します。 ● Web サーバーに加えて、nginx はプロキシ サーバー、リバース静的サーバー、その他の構成も実行できることを知ってください
● 基本的な 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 の違いなど、いくつかの特別な設定オプションについても理解します。 ● MySQL のパフォーマンス追跡 (slow_log/explain など) を理解し、基本的なインデックスの作成と処理についても理解していること。 ● 原則: 基本的な 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 の違いを理解します。 ● リフレクションなどの構文レベルでの PHP オブジェクト指向/SPL/特殊機能の深い理解など、より詳細な PHP を含む、PHP のさまざまな基本テクノロジにすでに習熟している。 ● フレームワークに関しては、少なくとも 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. システム設計:● ウェブサイトのアーキテクチャ、データベース、基本的な PHP フレームワークの選択、パフォーマンス テスト、およびほとんどの中規模システムのトラブルシューティングを設計できる。 ● ブラウザ -> CDN (Squid) -> Nginx+PHP -> データベース構造の基本的な設計、開発、保守を行うことができます。 ● 毎日数百万から数千万のトラフィックがある基本的な 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 段階に基づいて、私は Nginx を非常に上手に操作できるようになり、モニタリング、パフォーマンスの最適化、複雑な問題の処理など、Nginx 上でより詳細な運用および保守作業を実行できるようになりました。 ● 個人的な興味に応じて、主にソースコードを読むことから始めて、特定のマスター/ワーカーの動作メカニズム、Nginx の内部イベント処理、メモリ管理など、Nginx の動作原理の詳細な学習に焦点を当てることを検討できます。 ; 同時に、Nginx 拡張機能の開発を学ぶことで、独自のプライベート拡張機能のいくつかをカスタマイズすることができ、Nginx + Lua をある程度理解して、それを組み合わせて適用できるかどうかを確認できます。より良いモデルを作成するため
● この段階での要件は、Nginx の原則を深く理解することです。Nginx の分野で深い専門家になることを検討できます。
3.MySQL/MongoDB:● 第 2 段階に基づいて、MySQL アプリケーションに関しては、以前の基本的な SQL 最適化に加えて、大規模なデータ バッチのインポートとエクスポート、オンラインの大規模バッチのテーブル構造の変更など、いくつかの複雑な操作を完了することもできます。データの追加やインデックス フィールドの追加や削除など、リスクの高い操作を待機するだけでなく、さまざまな問題の追跡、マスターとスレーブの同期遅延の問題の解決など、より複雑な MySQL の問題も処理できるようになりました。 - コンピューター室のデータ同期ソリューション、MySQL 高可用性アーキテクチャなど ;
● MySQL アプリケーション レベルでは、トランザクション メカニズム (分離レベル、ロックなど) など、MySQL の主要なテクノロジに精通しており、トリガー、パーティション、その他のテクノロジについて一定の理解と応用を持っています。 ● MySQL のパフォーマンスに関しては、第 2 段階 (innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_timeout など) に加えて、ディスク最適化 (SSD への SAS 移行)、サーバー最適化 (メモリ、サーバー構成)、その他のコア パフォーマンス最適化オプションが含まれます。 、接続プール ソフトウェアはアプリケーションを選択し、show * (show status/show profile) などの操作ステートメントを深く理解しており、ほとんどのパフォーマンス問題の追跡を完了できます 。 ● 災害復旧とリカバリ、Binlog、ホットおよびコールド バックアップ、マルチ IDC バックアップなどの深い理解など、MySQL バックアップ テクノロジに関する深い知識
。 ● MySQL の動作メカニズムに関するソース コードの一部を読み始めたり、マスター スレーブ同期 (レプリケーション) テクノロジのソース コードを学習したり、特定のストレージ エンジンについて学習したりするなど、MySQL の原理について詳しく学習します (条件が許せば、CSV エンジンを参照して独自のシンプルなストレージ エンジンを開発し、データを保存し、MySQL についての理解を深めることができます。興味があれば、DBA の方向での開発を検討することもできます。
● MongoDB レベルでは、たとえば、書き込みを減らし読み取りを増やす場合に MongoDB のオンライン適用を開始したり、オンライン データ分析や処理操作を実行したりすることを検討できます。具体的なシナリオは作業に基づいていますが、中心となるのは次のとおりです。 RMDBS と NoSQL のさまざまなシナリオのアプリケーションについて、条件や関心が許せば、MongoDB の動作メカニズムについてさらに詳しく学び始めることができます。
4.Redis/Memcached:
● 第 2 段階をベースに、より深い応用と学習が可能になります。 Memcached は特に複雑ではないため、深く理解するには、ソース コード、特にメモリ管理の部分を読むことをお勧めします。 ● Redis 部分では、複雑なデータ構造のアプリケーションをさらに実行できます (zset はランキング操作に使用され、トランザクション処理はフラッシュ セール シナリオ アプリケーションのアトミック性を確保するために使用されます)。これには、aof アプリケーションなどの同期メカニズムをさらに学習する必要があります。高可用性の Redis アプリケーション アーキテクチャとクラスターを設計するには、Redis ソース コードを詳しく調べて、特に、コア イベント管理、メモリ管理、内部コアについて学習して、その知識を適用することをお勧めします。データ構造などについて。興味があれば、Redis の非常にプロフェッショナルなユーザーになることができます。
5.PHP:●基礎的なコアスキルとして、第2段階を踏まえたより深い学習と応用が必要です。基本的なコードの適用に関しては、PHP 開発で遭遇する問題の 95% を解決でき、PHP スキルのほとんどを理解できます。 ● ほとんどの PHP フレームワークを 1 日以内にすぐに使い始めることができ、主流の各 PHP フレームワークの長所と短所を理解し、プロジェクト開発中にテクノロジーを迅速かつ便利に選択できるようになります。 ● 設定に関しては、第 2 段階の一般的な知識に加えて、いくつかの複雑な高度な設定や拡張機能の原則 (例: memcached 拡張構成)、apc 拡張構成の apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection); ● php-fpm の動作メカニズム (さまざまな構成マシン下で php-fpm によって有効になるプロセス数の計算と原理など) を含む、php の動作メカニズムをよく理解し、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++ バックエンド サーバー開発におけるほとんどの問題 (メモリ管理、ログ出力、高い同時実行性、フロントエンドとバックエンドの通信プロトコル、サービスの監視) を理解し、各バックエンドの 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 などを試してください。静的言語では、Java/Golang を試してください。視点を変えてバックエンドのビジネスをしたい場合は、R 言語を学ぶことができます。 , Nginxと組み合わせたNode.jsや上記のNginx_Luaなどを試すことができます。
● さまざまな言語を学ぶことは、主に自分自身のビジョンと問題解決方法の違いを改善することです。たとえば、クロスマシン通信には、プロセス/スレッドに加えて、軽量のコルーチンもあることを理解するでしょう。たとえば、C/C++ を選択したくない場合は、同様の効率的な Erlang/Golang も利用できます。主な目的は、視野を広げることです。
9. 他の専門的な方向で勉強する:
この段階では、基本的な LNMP スキルに加えて、個人の興味や長期的な目標に応じて、他の分野の知識を学ぶことも検討します。現在、クラウドコンピューティング(分散ストレージ、分散コンピューティング、仮想マシンなど)、機械学習(データマイニング、パターン認識など、統計への適用、パーソナライズされたレコメンデーション)、自然科学など、選択できる分野は数多くあります。言語処理 (中国語の単語分割など)、検索エンジン技術、グラフィックスと画像、音声認識など。これらの高度な分野に加えて、高性能システム、モバイル開発 (Android/IOS)、コンピュータ セキュリティ、組み込みシステム、ハードウェアなど、エンジニアリングについてさらに学ぶことができる分野も数多くあります。
10. システム設計:
システム設計の第 2 段階に基づいて、習得した経験とスキルを応用して、比較的複雑な中規模および大規模システムを設計できます。これにより、さまざまなオンラインの複雑なシステムの問題のほとんどを解決でき、ブラウザと同様のタスクを完了できます。 ; CDN - > アクセス層 - > ビジネス キャッシュ - > さまざまなバックエンド RPC 相互作用 (ストレージ バックエンド、アンチチート バックエンド、外部サービス) -> バックエンド Jiangzi のより複雑なビジネス
● 毎日数千万から数億のトラフィックがある Web サイトの通常の開発と保守をサポートできます。
追記
より高度なアーキテクチャやエキスパートの段階については、この記事では当面説明しません。興味がある人は自分で検索してください。最後に、プログラミングの初心者向けに作られた php 中国語の Web サイトを心からお勧めします。 php入門から上級までの独習ロードマップ、皆さんができるだけ早くPHPマスターになることを願っています。