74

私は何年も PHP を扱ってきましたが、言語をよく理解し、非常にうまく機能する多くの高度なシステムとそうでないシステムを作成しました。

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

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

私は現在、ますます大規模なシステムの構築に取り組んでおり、highscalability.com などのブログを読み始め、スケーリングのために MySQL レプリケーションとサーバー データを調査しています。システム全体を機能させるには、コードの構造が非常に重要であることを知っています。

reddit の構造に関する最近のブログを読んだ後、そこに標準または「承認されたシステム」があるかどうか疑問に思いました。

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

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

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

  • ブログを読む
  • チュートリアルを読む
  • 誰かと一緒に仕事をする
  • 本を読む

非常に優れたシステム開発者のレベルである「次のレベルに到達する」ための最良の方法は何ですか?

4

15 に答える 15

115

PHP プログラマーになりたい人は、常に最初の単語だけを使用し、2 番目の単語は完全に無視します。

「プログラミング」は「PHP」よりもはるかに重要ですが、PHP の専門家になるには、そもそもプログラマーになる必要があります。

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

于 2010-06-01T08:54:25.737 に答える
28

フレームワークを持つよりも、関数の独自のライブラリを好む

あなたは「関数のライブラリ」と「フレームワーク」を別個の概念として参照しています (良い!) では、その関数のライブラリをフレームワークに変えてみませんか? これは学習するのに最適な方法ですが、市場性のあるスキルを身に付けるための最良の方法ではないことに注意してください;)

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

「なくてはならない」機能

ほとんどすべてのフレームワークが備えている特定の機能があり、それには理由があります。それらを調査します。それらが存在する理由とそのバリエーションを調べます。フレームワークに含めたい実装を選択します。

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

あなたが何に興味を持っているのかわからないので、ここでやめておきます。

それを公開してください!

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

概要

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

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

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

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

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

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

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

  • SO で質問に答えます。他の人の問題は、既成概念にとらわれずに考えさせ、助けようとするプロセスを改善し、誰かに何か良いことをすることもできます。

  • [コーヒーを飲んで目が覚めたばかりで他に何か思いついたら、ここに追加しようとします:D]

于 2010-06-01T09:04:32.640 に答える
3

掲示板に参加して、他の人々の問題を解決しようとしました。場合によっては、いくつかの調査を行うことを余儀なくされる非常に難しい質問があります。答えられない場合は、答えられる人を待って、そのとき何かを学ぶことができます。

フレームワークについては、それらから学びます。そこにあるほとんどのフレームワークはかなり遅くなる可能性があるため、私も自分でロールバックします。そこにあるほとんどのWebサイトには十分な速度ですが.

Facebook の PHP ライブラリも参照することをお勧めします。彼らはそこで面白いことをします。

于 2010-06-05T12:31:11.507 に答える
3

すでに知っていることを別の方法で行うことを学びましょう。例:

  • 別の言語で
  • 別のプラットフォームで
  • 並列/分散
  • フレームワークを介して(はい、それらは「あなたには向いていない」と判断しました-別のものを試してみてください。それらは互いに非常に異なる場合があります)
于 2010-06-01T08:50:44.467 に答える
3

フレームワークをもう一度調べる必要があるかもしれませんが、Zend Framework を確認することをお勧めします。Zend Framework は、必要に応じて使用できるコンポーネントのライブラリのようなものであり、従わなければならない厳格な構造を実際に課すことはないからです (他のいくつかのフレームワークはそうします)、しかしそれは (かなりまともな) プロジェクトのレイアウトを示唆しています. 良い出発点は、深い終わりを生き残ることです。

あなたがまだ言及していないこと、および知っておくと役立つ可能性があること(特に大規模なプロジェクトでは):

于 2010-06-08T08:00:17.510 に答える
3

シンプル:やりましょう。ニーズはあなたに学びをもたらします。商用であれオープンソースであれ、ますます高度化するプロジェクトに参加する方法を見つけてください。本当に何かを学べる方法は他にありません。

于 2010-11-01T18:20:49.910 に答える
2

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

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

よろしく。

于 2010-06-01T09:24:02.580 に答える
2

他の開発者との共同作業については、十分とは言えません。特に 3 人の開発者を知っており、うち 2 人は日常的に一緒に働いており、彼らの知識には圧倒されます。私が行うすべてのことについて彼らの意見を聞くのは、自分の考えを推測するためではなく、特に開発者として尊敬している人々から、他の考えを聞きたいからです。私はこれらの人々から他のどの手段よりも多くを学びます。他の上級開発者にアクセスできない場合は、必ず SO または他の開発者フォーラムに投稿して、人々の意見を聞いたり、特定のプロジェクト/問題にどのようにアプローチするかを尋ねたりしてください。一般に、新しいテクニック/方法/機能が使用されているのを見ない限り、それらを学ぶことはありません (存在することを知らない場合、何を探すべきかをどうやって知ることができますか?)

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

それが役立つことを願っています。

于 2010-06-08T07:14:36.250 に答える
1

他の人のコードを読んでください。これで独自のライブラリーができましたが、他のアプリケーションのソースを読んでいるときに、いくらかの啓発が得られるかもしれません。次に、「なぜ」を自問してください。読者ではなく、ブログのライターになりましょう。また、言語よりもプログラマーに重点を置いてください。むしろ、すでに問題を解決しているソリューションを見て、自分の知識でそれらを再現してみてください。頑張って、たくさん楽しんでください!

于 2010-06-08T12:06:24.717 に答える
1

他のプログラマーのコードを見るアプローチは、「良い」または「悪い」プラクティスを学ぶ良い方法です。他のコードを読んだ後、良いコードに対する「感覚」を養います。

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

PHP のバックグラウンドがこれほど長いため、オープン ソース フレームワークへの貢献を検討できます。他の開発者とのディスカッションにより、より迅速に前進できます。

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

于 2010-08-15T13:50:29.887 に答える
0

例を使用して作業し、それらを展開するときに作業する必要があります。そうすれば、例をより機能的にしてより多くの機能を提供することで例を拡張する方法を学ぶことができます。

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

于 2010-06-01T08:58:55.293 に答える
0

Zend PHP 認定試験の費用を支払ってもらえるかどうか、会社に尋ねることができます。この試験のために勉強するには、PHP をよく理解し、多くのドキュメントや Zend スタディ ガイドを読んだり、模擬試験でトレーニングしたりする必要があります。これは改善するための非常に効率的な方法であり、履歴書の見栄えがよくなります。

于 2010-06-05T12:09:48.547 に答える
-11

「私自身の関数ライブラリ」 == 「[特異で、おそらく厄介な] フレームワーク」.

Symfonyを学習することをお勧めします。なぜなら、開発者は一貫して「ベスト」プラクティスに従ってすべてを実行しようと努力しているように見えるからです。しかし、一般的なフレームワークから多くを学ぶことができるでしょう。

独自のフレームワークを作成しないでください。お願いします。

于 2010-06-05T00:31:00.197 に答える