【再投稿】PHPエンジニアが直面する成長のボトルネック
Web 開発で最も広く使用されている言語の 1 つとして、PHP には多くのファンがいます。では、あなたは優秀なプログラマーですが、自己研鑽をしながら、さまざまな課題に直面することを考えたことはありますか?開発を改善するために自分自身のボトルネックを突破できますか?
PHP エンジニアは成長のボトルネックに直面しています
まず明確にしておきますここでいう PHP エンジニアとは、主に Web 開発に PHP を使用するエンジニアを指します。システムはその言語で動作せずに動作します。私は 3 ~ 4 年の実務経験があり、通常の Web システム (数百万アクセス、1,000 レベル未満のデータ、またはビジネス ロジックが特に複雑ではないもの) を問題なく開発できます。 しかし、彼らには次の欠点があります:
◆PHP 以外の他の言語は使用しないでください。シェル スクリプトをクリックしても構いません。
◆PHPの理解度が低い(ライブラリを除いてPHPマニュアルをあまり読んだことがない)。
◆知識ベースは比較的狭いです (需要に直面して、PHP と mysql を使用する以外のソリューションを知りません)。
◆PHPのコードはプロセス指向が中心で、オブジェクト指向の実装は複雑すぎてわかりにくいと思います。
これらの PHPer は、高パフォーマンス、高同時処理、大量のデータを必要とするプロジェクト、またはビジネス ロジックが比較的複雑である (システムは複数の分野でビジネス上の問題を解決する必要がある) プロジェクトに遭遇したときにアイデアが不足しています。 )。彼らは問題の本質を分析することができず、技術的な判断力も乏しいため、問題に対する一時的な解決策をすぐに見つけることができますが、多くの場合、継続的な一時的な解決策の中でシステムとそれ自体が段階的に崩壊します。では、どうすれば自分を向上させることができるでしょうか?
より高い課題はどこにありますか?
私自身の経験に基づいて、誰もが始めることができる具体的な課題をいくつか挙げます。と知覚的に理解します。
高性能システムの課題はどこにありますか?
◆Web サーバーは fast-cgi モードを使用する必要がありますか? ;
◆リバース プロキシ サービスを使用しますか? フル メモリ キャッシュまたはハード ディスク キャッシュを選択しますか?
◆ 負荷分散はアプリケーション層またはネットワークに基づいていますか?高い信頼性を確保するには?
◆最適化ツールを使用した後のパフォーマンスはどうですか? C で拡張機能を記述する必要がありますか?
◆ユーザーのアクセスの特徴は、読み取りと書き込みのどちらが多いですか?
◆データはどのように保存されますか?データが増えるとアクセス速度はどう変化するのか?
◆キャッシュをどう使うか?無効化をどう考えるか?データの整合性をどう確保するか?
高複雑性の課題はどこにあるのか?システム?
対応するフィールドは 1 つですか? 複数ですか?
◆データの整合性、セキュリティは保証できますか?
◆オブジェクト指向の分析手法と設計手法をマスターしましたか
ここに挙げた質問に肯定的に答えることができれば、それが示されますテクノロジーに熟練していること 基本的には建築家になれる。まだ答えられない場合は、次の方向に強化する必要があります。
ボトルネックを改善して突破するにはどうすればよいですか? まだ答えられません。
引用
◆使用するテクノロジーの背後にある原理と動作メカニズムを分析します。これにより、技術的な判断力が向上し、技術ソリューションの選択の正確性が向上します。
◆大学ですでに学習した C 言語をもう一度学習し始めます。これは、PHP 拡張機能を作成する必要があるためだけでなく、C アプリケーションにはパフォーマンス、メモリ制御、変数のライフサイクル、データ構造、およびアルゴリズムを常に考慮する環境があるためでもあります。オブジェクト指向の分析と設計を学ぶことは、複雑な問題を解決するための効果的な方法です。抽象化を学びましょう。それが複雑な問題を解決する唯一の方法です。
どうやって効率的に勉強するかは大きな問題です。 「アーキテクチャ中心、ユースケース駆動、反復型開発」、この考え方を借用すると、効果的な学習方法は次のように表現できます。原理、モデル、メカニズムを中心とした、タスク駆動型の反復学習です。少し抽象的ですが、学習方法を説明するために例を挙げてみましょう。
目的: 処理パフォーマンスを向上させる方法を学びます。
反復可能タスク: IP で場所を検索します。これは Web アプリケーションでは一般的なタスクであり、IP データベースには約 100,000 行のレコードが含まれています。
1回目のイテレーション:パフォーマンスを考慮せずに関数を実装する(PHPで実装)
KEY(IP)で領域を直接検索することができないため、データに直接配置できるまたは、連想配列などの単純なメソッドでは機能しません。まずデータを並べ替えてから検索するという考え方です。
◆順序付けされたデータの場合、IP で検索する方法は二分検索が最も高速です。
◆ソートはどうするか もちろんライブラリ関数sortを使うこともできますが、学習中なのでクイックソートを自分で実装してください。
学習目標: 並べ替えアルゴリズム、検索アルゴリズム
PHPer はデータ構造とアルゴリズムの基礎が不十分です。私は通常、この分野のタスクを担当しません。自分で勉強しているので、この分野の知識はあまりありません。ただし、プログラミングによって解決される問題は、最終的にはデータ構造と、そのデータ構造上で動作するアルゴリズムに帰着します。データ構造のアルゴリズムが常に頭の中にあれば、問題に遭遇したときにその内部構造が明確に理解でき、解決策も自然に見えてきます。
2 番目の反復: データのロードと並べ替えを最適化する
最初のステップを実行すると、データを毎回ロードして並べ替える必要があり、多すぎるため、基本的に使用できません。時間がかかる。 解決策は、データを一度ロードして並べ替えて、各 PHP プロセスがアクセスできる場所に配置することです。それを Memcache に置くのは誰にとっても簡単な問題です。実際、memcache にはより多くのネットワーク操作も含まれるため、共有メモリ (EA およびその他のアクセラレータによってサポートされている) に配置する方が高速な方法です。 データは全体として共有メモリに配置されますか? それともブロックごとに配置されますか? パフォーマンスをテストする方法 (xdebug) については、次のような問題が考えられます。
学習目標: PHP のパフォーマンスに対する PHP 実装構造の影響を検出、特定、最適化する方法。
3 番目の反復: PHP 拡張機能の作成
パフォーマンスはまだ向上せず、C/C++ の世界に入らなければなりませんが、これからは PHPer であるだけでなく、もちろん、これはサーバーサイドのオールラウンドエンジニアですが、C/C++ をやったことがない学生にとっては大きな課題です。
学習目標: C/C++ の学習、PHP 拡張機能の作成
学習する必要があるメカニズムと原則を決定する方法 必要な学習タスクをすべて知っていますか?概念がまったくない場合、このテクノロジーの位置づけ、つまりその仕組み (仕組み) とその理由から学ぶ必要がある重要な点をどのように答えられますか?それはできるよ。このテクノロジーの最も一般的なアプリケーションを学習タスクとしてリストし、簡単なものから難しいものまで練習します。
JavaScript を学ぶ必要がある場合、HTML と CSS についてある程度の知覚的な知識が必要です。まず理解すべきことは、JavaScript は Web 分野の動的言語であり、主に Web ページの動的な対話を解決するということです。学ぶべき重要なポイントは次のとおりです。
◆JavaScript と HTML のやり取り(仕組み)
◆動的な特性とはJavaScript は他の動的言語とどう違うのですか? (言語モデル)
完全に独学で学習する場合は、学習する必要があるポイントを見つけます (仕組み、モデル、原理)。実際、マスターするのはそれほど簡単ではありません。指導してくれる経験豊富な人を見つけたり、学習チームを追加したりすると、学習の速度は確かに大幅に向上します。
最後に皆さんに言いたいのは、PHP はシンプルだから使われているということですが、そのシンプルさが私たちの成長を制限するものではありません!