web-dev-qa-db-ja.com

PHPの「高度な」知識をさらに増やすには?(すばやく)

私はPHPで何年も働いており、言語を非常によく理解し、非常にうまく機能している多くの高度なシステムとそれほど高度ではないシステムを作成しました。

私が直面している問題は、私が以前に学んだことのない何かの必要性を見つけたときにのみ学ぶということです。これにより、問題を処理するソリューションやその他のコードを検索するので、これまで見たことのない新しい関数や構造について学びます。このようにして、私は自分のより良いテクニックの多くを学びました(Amazon、Google、または他の主要企業によって出されたクラスを勉強するなど)。

これの主な問題は、それが存在することを知らないと何かを学ぶことができないという概念です。たとえば、empty()関数について学ぶのに数か月のプログラミングが必要で、strlen()を使用して文字列の長さをチェックして空の値をチェックするだけでした。

私は今、ますます大きなシステムの構築に取り掛かっています。highscalability.comのようなブログを読み始め、スケーリングのためにMySQLレプリケーションとサーバーデータを研究しています。システム全体を機能させるには、コードの構造が非常に重要であることを私は知っています。

Redditの構造に関する最近のブログを読んだ後、そこにいくつかの標準または「受け入れられたシステム」があるかどうか疑問に思いました。

私はフレームワークを調べました(私は後悔したKohanaを使用しましたが、PHPフレームワークは私には向いていないと判断しました))そして私はフレームワークを持つよりも独自の関数ライブラリを好みます。

私の現在の構造は、WordPress、Kohana、そして私自身の知識を組み合わせたものです。

私が潜在的に有益であると見ることができる方法は次のとおりです。

  • ブログを読む
  • チュートリアルを読む
  • 他の誰かと協力する
  • 本を読む

非常に優れたシステム開発者であるというレベルを「次のレベルに引き上げる」ための最良の方法は何でしょうか。

74
Kerry Jones

PHPプログラマーになりたい人は、常に最初のWordのみを受け取り、2番目のWordを完全に無視します。

「プログラミング」は「PHP」よりもはるかに重要ですが、PHPプロフェッショナルであるためには、そもそもプログラマーである必要があります。

それで、私は最後のものに投票します-本を読むこと。 PHPではなく、プログラミング全般についてです。 Grady Booch 's、 Martin Fowler ' sそして古いもの Donald Knuth 's。
JavaやPythonのような他の言語を見てみるのもいいでしょう。それらに切り替えるのではなく、それらから学ぶことです。

115

フレームワークよりも独自の関数ライブラリの方が好きです

「関数のライブラリ」と「フレームワーク」を別個の概念として参照しているので(良いです!)、少し試してみて、その関数のライブラリをフレームワークに変えてみませんか?これは学ぶための素晴らしい方法ですが、市場性のあるスキルを持つための最良の方法ではありません;)

また、間違ったを学ぶのに最適な方法なので、始める前にいくつかの調査を行う必要があります。

「必須」機能

ほとんどすべてのフレームワークが持っている特定の機能があり、それには理由があります。それらを研究してください。 なぜそれらが存在するのか、そしてそれらのバリエーションは何かを調べます。フレームワークに含める実装を選択します。

理解してエミュレートしたい非PHPプラットフォームの機能

何に興味があるのか​​わからないので、そこでやめます。

公開してください!

ネイサンは正しいので、この部分は重要です。あなたの作品は他の人に見られ、挑戦され、批評され、修正されなければなりません。あかりをあかりの下に置いたままにしないでください。グーグルのコードやsourceforgeなどに載せてください。人々がそれを真剣に見ようとしているのなら、真剣に受け止める必要があります。単体テストと回帰テストを維持する必要があります。バージョン管理を使用する必要があります。各ファイルの先頭に大きな/* header comment */を付け、各クラスとそのメンバーに役立つドキュメント生成コメントを付けて、適切にコメントする必要があります。

概要

これらすべてを行うと、他のプラットフォームについて(高レベルで)学ぶことができます。 PHP開発者として間違いなく「Ding40」を行うことができます。単体テストについて、回帰テストについて学ぶことができます。効果的に文書化することについて学ぶことができます。

あなたのフレームワークが「特異でおそらく厄介」になることを保証しますが、それを書くことから多くを学ぶことができます。フレームワークは製品ではないことに注意してください。それは旅です...ある種の。

28
  1. PHPの隠された機能 および PHPの事前定義されたインターフェース を調べてください
  2. さまざまな言語を学びます。 PHPよりも学習曲線が急な言語を学びましょう。 PHPに対する他の言語の利点を指摘するときはいつでも、PHPバッシング、ほとんどの場合、他の高級言語を実際に習得したことがない人であると非難されます。しかし、リスクを冒すつもりです。 。Ruby、Python、Pearl、 haXe (厳密に型指定された対応物として)をお勧めします。一度実行したら、新しい知識をPHPに適用してみてください。または、そうでない場合は、PHPから離れてください。戻りたい(これは起こりそうもないと思う)。
  3. 批判に対処することを学びます。ネイサンの投稿に対するあなたの反応は、あなたがまだそれに対処できないことをはっきりと示していました。彼は絶対に正しい。
    • 私の最初のPHPフレームワークを今見て、それはかなりくだらなかったと言わなければなりません。当時、私はそれが素晴らしいと思っていました(そしてそれは私が持っている多くの本番コードよりもまだ優れていますそれでも、多くの欠陥がありました。あなたが完全な天才でない限り、最初のフレームワークは、数年後に振り返ると(進化したと仮定して)ひどく見えます。
    • 実際、作成するフレームワークは、時間の経過とともに悪化します(進化を止めないことを前提としています)。このため、利用可能なフレームワークを使用して、アプリケーション開発に集中することもできます。使用するフレームワークに制限がある場合は、さらに別のPHPフレームワークを作成するのではなく、貢献することを検討してください。
    • 独自のフレームワークを作成することを選択する時点は(楽しみ/学習のためだけでなく、本番環境への展開のためにも)、要件が他のフレームワークが提供するものを上回っているときであり、フレームワークを操作するというアイデアが気に入らないときではありません。それは私が自分でやったよくある間違いです。しかし今、私はそれから学んだと言うことができます。しかし、アドバイスを求めると(残念ながら当時はしませんでした)、このような答えが得られます。
    • 自分で書いたのではないコードを扱うことから多くのことを学びます。他の人がよく考えているフレームワークによって促進された概念を理解するだけでなく、生産性、柔軟性、チームでの作業、仕事の遂行(適度に良い結果を得る)を学びます。
    • PHPオープンソースプロジェクトのすべてのチームよりも自分が優れているとは思えないでしょう。そうでなければ、尋ねるでしょう。頑固な本能的な必要性を乗り越えて、若い世代の車輪を再発明してください。開発者は、まだ誰も取り組んでいない問題に取り組むために成長してきました。
  4. コンポーネントライブラリとフレームワークの違いを学びましょう。フレームワークを「独自の関数ライブラリ」に置き換えることができると思うので、フレームワークのポイントが何であるかをおそらく理解していないでしょう。 依存性逆転制御の反転 および 依存性注入 を見てください。
  5. ソフトウェア設計について学びます。 OO [〜#〜] solid [〜#〜][〜#〜] grasp [〜#〜] のような原則=。
  6. さまざまなパラダイムを試してください。 AOP、関数型プログラミング。 Ruby、Objective-C、Smalltalkなど、より強力なオブジェクト指向の言語を使用して、OOスキルを強化します。
  7. PHP Flow3、Symfony、PHP igniter、CakePHPなどのフレームワークを見てください。なぜそうすべきだと思うのかはすでに指摘しました。
  8. 私の別のコメントで指摘されているように、RDBM以外のストレージを検討する必要があります。 SQLとOOPは実際にはうまくいきません。OODBMS、さまざまなデータベース抽象化レイヤー、Key-Valueストア、CouchDBやMongoDBなどのドキュメントストアを見て、キャッシュサーバーをmemcacheとして配布します。等.
18
back2dos

ここにいくつかの考えがあります:

  • 別のことを試してください。新しい言語を学びましょう。他の言語を学ぶ過程で、実際には両方であなたをより良くすることがあります。

  • オープンソースプロジェクトに貢献します。

  • 高いスケーラビリティとPHP/MySQLは友だちではありません。そのためだけに構築されたテクノロジーが今日あります。 node.jsとRedisがいくつか挙げます。

  • SOで質問に答えます。他の人の問題は、あなたが箱の外で考えさせ、助けようとするプロセスを改善し、そしてあなたは誰かに良いことをすることもできます。

  • [コーヒーを飲みながら目が覚めた他のことを考えたら、ここに追加しようとします:D]

11
stagas

あなたがすでに知っていることをすることを学びなさい...別の方法で。例:

  • 別の言語で
  • 別のプラットフォームで
  • 並列/分散
  • フレームワークを介して(はい、あなたはそれらが「あなたのためではない」と決めました-多分別のものを試してみてください、それらは時々互いに非常に異なるです)
3
Piskvor

シンプル:やる。ニーズはあなたに学ばせます。商用であれオープンソースであれ、ますます高度なプロジェクトに参加する方法を見つけてください。あなたが本当に何かを学ぶことができる他の方法はありません。

3
Halil Özgür

フレームワークをもう一度調べる必要があるかもしれません。ZendFrameworkを見てみることをお勧めします。これは、適切と思われるコンポーネントのライブラリに似ており、従う必要のある厳密な構造を実際に課すものではないためです(他のいくつかのフレームワークはそうします)、それは(かなり正気の私見)プロジェクトレイアウトを示唆しますが。良い出発点は ディープエンドを生き残る です。

あなたがまだ言及していないこと、そしてそれは知っておくと役立つかもしれません(特に大規模なプロジェクトで):

3
wimvds

私は掲示板に参加して、他の人々の問題を解決しようとしました。時々、あなたにいくつかの研究を強いる非常に挑戦的な質問があります。あなたがそれに答えることができないならば、あなたはそれから何かを学ぶことができる誰かを待つことができます。

フレームワークについては、それらから学びましょう。そこにあるフレームワークのほとんどはかなり遅い可能性があるので、私も自分でロールします。そこにあるほとんどのウェブサイトには十分速いですが。

FacebookのPHPライブラリもご覧になることをお勧めします。そこでは面白いことがいくつかあります。

3
Brent Baisley

あなたができる最善のことは効率的なアルゴリズムに関する本を買うことです。すべてのコンピュータサイエンスの学生の生活の中で、彼/彼女はそれらを研究しなければならない時が来ます。議論/解決された問題は、あなたが直面する可能性のあるほとんどすべての現実世界の問題の抽象化です。

他の人がどのようにしたかについてのブログを読むことに加えて、効率的なアルゴリズムの原則を実際に使用する(そしておそらく実装する)方法を理解するのに役立つので、それは完全に問題ありません。

よろしく。

2
aefxx

他の開発者との協力については十分とは言えません。私は特に3人の開発者を知っています。2人は私が日常的に一緒に仕事をしていて、彼らの知識で私を驚かせます。私がしていることすべてについて彼らの意見を聞いています。私が自分の考えを二番目に推測するからではなく、特に開発者として尊敬している人々から、他の考えを聞きたいと思っています。私はこれらの人々から他のどの手段よりも多くを学びます。他の上級開発者にアクセスできない場合は、必ずSOまたは他の開発フォーラムに投稿して人々の意見を聞いてください。特定のプロジェクト/問題にどのように取り組むかを人々に尋ねてください。新しいテクニックを学ぶことはありません。 /メソッド/関数は、それらが使用されていることを確認しない限り、一般的に使用されます(存在することがわからない場合、どのようにして何を探すべきかを知ることができますか?)

また、すでに述べたように、OSアプリに参加してください。 sourceforgeにアクセスして、開発者が必要なプロジェクトを見つけてください。または、アプリをダウンロードして、そのプラグインを作成してみてください(Invision 3.0 atmのプラグインを作成していて、いくつかのことを学んでいます)。

お役に立てば幸いです。

2
Christian

他の人のコードを読んでください。あなたは今あなた自身のライブラリを持っています、それでもあなたは他のアプリケーションのソースを読むときにいくらかの啓蒙を得るかもしれません。次に、「なぜ」と自問してください。読者ではなく、ブログの執筆者になりましょう。また、言語よりもプログラマーを重視します。むしろ、すでに問題を解決している解決策を見て、あなた自身の知識でそれらを複製しようとします。頑張って、たくさん楽しんでください!

1
Shyam

他のプログラマーのコードを調べるアプローチは、「良い」または「悪い」プラクティスを学ぶための良い方法です。他のコードを読んだ後、あなたは良いコードに対する「感覚」を発達させます。

Zend Framework、symfony、CakePHP、Agaviなどのフレームワークを絶対にお勧めします。多くの貢献者がそのコードを見て、常に「理想的な」ソリューションに向けて開発しているからです(もちろん、決して到達することはありません...);)まだ作成できますフレームワークが提供するクラスではなく、独自のクラスを開発するという決定...

このように長いPHPの背景があるため、オープンソースフレームワークへの貢献を検討できます。他の開発者との話し合いにより、より迅速に前進できます。

コードを他の人に見せて建設的なフィードバックを求めることも同じ効果があります。他の人と自分のスキルをベンチマークするまで、自分がどれだけ優れているかはわかりません。常に建設的な方法で。これは、オープンソースフレームワークに貢献する場合の自然なプロセスです。 ;)

1
udo

例を操作し、展開するときに操作して、例をより機能的にし、より多くの機能を提供することによって例を拡張する方法を学習する必要があります。

ただし、これまでにPHPで学んだことを作成するのは良いことです。もっと練習するには、予約システムなどを作成する必要があります。遅かれ早かれ、PHPでさらに勉強すると、より多くを学ぶことで、より多くのことを拡張できるようになります。はるかに良くなります。

0
MacMac

Zend PHP認定試験を支払うことができるかどうか、会社に尋ねることができます。この試験を勉強するには、PHPよく知って、読んでトレーニングする必要があります。多くのドキュメント、Zend学習ガイド、および模擬試験によるトレーニングもあります。これは非常に効率的な改善方法であり、レジュメでは非常に見栄えがします。

0
greg0ire