8


4

私は、PayPalのような大規模なシステムを構築したい意欲的な開発者です。 どのパスをたどる必要がありますか?

私はアフリカのエチオピアで2年生のコンピューター工学の学生です。 CとC ++を使い、自分のHTML、CSS、PHP(cakePHPフレームワークも)と小さなJavaScript、JQUERY、mySQLを教えて、ブログのような小さなシステムを開発しました。 しかし、安全で堅牢な大規模システムを構築したいと考えています。 SOで非常に賢く経験豊富な開発者を見ることができて非常に謙虚です。 私は、最初にどれに従うべきか(ASP.NETまたはPHP)と、それを実現するために他のどの言語またはシステムを学ぶべきかについて、迷っています。 前もって感謝します。

PS. あらゆる種類の数学を処理できます。

7 Answer


6


私はそれを言うのは老人のように感じますが、やがて、あなたは気付くでしょう、ソフトウェア開発における2つの最大の課題は次のとおりです:

  • コードの再利用-コードを記述できること、つまり再利用可能。 そうではありません コードが長期間にわたって再利用可能であることは、それが書かれたのとまったく同じソフトウェア内でさえ明らかです。 しばらく前に書いたコードを開くとき、それを修正しようとして数時間を浪費し、ソフトウェアの次のバージョンでそれを再利用せずに書き直すことに決めた後、あなたは自分自身に直面するでしょう。 コードを書くことは真の芸術であり、再利用することができ、同様に、コードを再利用することは真の芸術です。 ソフトウェア開発者は、常に書き直しと車輪の再発明を望んでいます。 楽しいですよ。 しかし、それはあなたをそれほど遠くに連れて行きません。

  • 実際の使用-ソフトウェアを書くことは明らかではありません。 ソフトウェア開発者のソフトウェアに対する期待は、アプリケーションのユーザーとはまったく異なるためです。 https://stackoverflow.com/questions/3505685/a-function-that-returns-only-true [あまりにも多くのwhat-ifを検討する]に多くの機能を追加するために、物事を過剰に設計し、最適化し、過度に複雑にする傾向があります。 優れたユーザーインターフェイスや、退屈で時間のかかる、やりがいのない問題で手を汚すのではなく、興味深い部分に集中することを好みます。 私たちは、誰も使いたくない、あるいは使用できないものをたくさん生産しています。

それはあなたの質問にどのように答えますか?

  • コードの再利用:これを習得する必要があります。 と知り合いになる 多くのライブラリとフレームワーク。 アプリケーションを設計してから、既存のコンポーネントとアーキテクチャを使用してアプリケーションを接続してみてください。 グルーコードの記述は、最も困難で最も重要なタスクです。 また、このような大規模システムの作成を目指す場合は、システムの個別のタスクを選び出し、それらの単一のタスクを対象とした独自のコンポーネントを作成してみてください。 それぞれを堅牢で再利用できるようにしてください。 システム全体を一度に構築しようとしないでください。 あなたは失敗します。 あなたはおそらく何かを学ぶでしょう、たぶんたくさんですが、あなたは失敗します(またはあなたはおかしい天才です)。

  • 実際の使用:まあ、それは何かを作成したい非常に野心的です PayPalほど大きいが、大きなものを作成しないようにしてください。 良いものを作成してみてください。 便利で使いやすく、使用されているという点で優れています。 あなたはすぐに見るでしょう、それは十分難しいです。 他の人が使用し、満足している何かを作成してみてください。

これら2つで良くなることに焦点を当てます。 好きなライブラリ/フレームワーク/プラットフォーム/言語を選択し、タスクを実行するのに適していると判断します。 私見PHPは、いくつかの理由で固執するのに適した言語ではありませんが、最終的には、あなたが好きなものを使い、気分が良いはずです。 私は個人的にプロジェクトにhttp://haxe.org/doc/intro[haXe]を使用しています。 あなたはそれを試してみたいかもしれません。 最終的には、さまざまな概念を把握するために、多くの言語とフレームワークを試してみるべきだと思います。 学習するほとんどのことは、具体的な言語とフレームワークを超えていますが、それらのいくつかを本当に、本当によく知ることによってしか学習することができません。

終了する前に、http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29 [5戒め];)を紹介したいと思います

greetz back2dos


2


PayPalは大きくは始まりませんでした。成功したため、PayPalは時間とともに大きくなりました。 また、特定のプラットフォームを選択したために成功しませんでした。 彼らは彼らのビジネスモデル、彼らが提供したサービスと彼らが引き付けた顧客のために成功しました。

ASPまたはPHP、あるいはその両方を学んでください。 プログラマーにとっても同様に有用です。 また、高度にスケーラブルなシステムをほぼ同等にバックアップできます。


2


あなたが知っていることから始めてください。 あなたが見ている大きな問題は、ゼロから始める人にとって本当に気を散らすものです。

  1. 人々が解決策を必要としている問題を見つける

  2. 既に知っていることを使用して機能する最も簡単なものを書く

  3. 改善し続ける

  4. Worry あとでスケーリングについて


2


大規模システムとは、コンポーネント間の結合とテストに関するものです。

「ソフトウェアアーキテクチャ」や「ソフトウェアエンジニアリング」などのコースは、システムの設計方法(コンポーネント間の結合と通信を正しく行う方法)を教えるのに適しているはずです。 私の大学のこれに対する考え方には少しがっかりしましたが、少なくとも正しいことについて考えるのに役立ちます。

次に、テストのために、http://en.wikipedia.org/wiki/Test-driven_development [テスト駆動開発]方法論を調べ始めます。 堅牢性とセキュリティが懸念される場合、テストカバレッジは非常に重要です。

最後に、より「正式な」操作モードに移行する以外の理由がない場合は、http://www.haskell.org [Haskell]を参照することをお勧めします。 Haskellは多かれ少なかれ、その型システムを通じて問題をどのように表現するかについて、より正式になります。 (また、高度な数学が本当に好きなら、おそらくhaskellが好きになるでしょう:))


2


ここには2つの目標があります。 それらに個別に取り組む:

大規模で複雑なシステムの構築:

大規模で複雑なシステムは、次の2つの結果として発生します。

  • 有用であり、アピールする製品またはサービスのビジョン 大市場

  • ゼロから目標を達成するためのビジネスプラン

これを達成することは、他の人と提携することを意味する場合があります。 明らかに、あなたは物事の技術的な側面に興味があります-これがあなたの強みです。 物事の非技術的な側面を管理するために、あなたのビジョンを共有する他の人を見つける必要があるかもしれません。 これには、資金調達、プロモーション、マーケティングなどが含まれます。 グループの各メンバーは、異なるコアの強さをもたらす必要があります。

技術的リーダーとして、アプリケーションアーキテクチャをしっかりと把握する必要があります。 これは、目標を達成するためにさまざまな設計パターンと技術をどのように活用できるかを理解することよりも、プログラミングスキルの問題ではありません。 できるだけ多くのフレームワークと設計パターンについて少し学びます。 構築しようとしているアプリケーションに関するそれぞれの長所と短所を感じるまで、それらのいずれかの専門家になる必要はありません。

一般的なCSスキルの構築

理論は決して古くなることはありません。 コンピューターエンジニアリングプログラムの科学分野の強力なバックグラウンドを取得します。 言語理論、離散数学、アルゴリズム設計/分析、コンピューターアーキテクチャ、アプリケーションアーキテクチャなどのコースを受講してください。 これらはあなたのキャリアの残りのためにあなたによく役立つでしょう。

それから、問題の実際的な側面があります:あなたのキャリアを活用するために、今、どの言語、技術、およびフレームワークについて学ぶ必要がありますか(本当に大きな何かをすることを期待して)。 この目的のために、あなたはすでに正しい軌道に乗っています。 好奇心を抱き、できるだけ多くのツールを使用してください。 知っているものが多いほど、新しいものを学ぶのは簡単です。 各ツールのベースとなるモデル、および使用した他のツールとどのように似ているが異なるかを理解するために時間をかけてください。

プログラミング言語は、取引そのものではなく、単なる「取引のツール」であることに留意してください。 時間が経つにつれて、新しいツールが見つかり、他のツールは破棄されます。

すべてを一緒に入れて

あなたの想像力を働かせて、その「キラーアプリ」を考え出しましょう。 自分を補完するスキルセットを持つ人々と友達になります。 一緒に大きなことについて話し、夢を見る。

コアCSスキルの開発に取り組む

できるだけ多くのさまざまなツールや言語に慣れてください。 現時点で何をしているにせよ、あなたが最も役立つと思う少数の知識のみを取得します。 いずれかのツールを習得するには数年かかる場合がありますが、現在のニーズをガイドにしてください。 技術ツールセットが時間とともに進化できるように準備してください。


1


言語やシステムの問題ではないと思います。 優れたプログラマーであれば、あらゆる種類のプログラミング言語やフレームワークを簡単に採用して対応できます。

プログラムしたいシステムの種類については、考慮すべき多くのフレームワークがあります。 すべて長所と短所があります。 以前にそれをやったことがある人から学び、大企業が何を使っているのかを見て、もっと勉強することをお勧めします。


0


  • プロジェクトを単独で開発する場合は、PHPで十分です。

  • 開発者のチームを構築する必要がある場合は、Javaをお勧めします

言語に加えて、SSL /暗号化/セキュリティの部分を忘れないでください。

Paypalは、他のすべての支払いシステムと同様に、(可能な限り)を確保するために強力なセキュリティプランを実装する必要があります

  • サーバーは、彼が偽装している人です(証明書は、 権限)

  • 「ブラウザ<→サーバー」の途中でデータを(実際に)スパイすることはできません

HTTPs、http://en.wikipedia.org/wiki/Transport_Layer_Security[SSL]を参照してください