アルゴリズムは、方程式の変数の1つにすぎません

アルゴリズムの重要性に関する非常に面白い記事を読みましたが、結論は非常に物議を醸しているように思えました



始めに-論文。 私は、アルゴリズムを知っていても、システム教育を受けたとしても、あなたを優れた開発者にしないと主張しています。 難しいと言えます-ほとんどのタスクでは、グラフの理論をマスターしたり、アルゴリズムの計算の複雑さを知ったり、Knutのすべてを読んだりするのは不適切です。







問題は、ソフトウェア開発は単なるアルゴリズムや言語ではないということです。



1.第1に、すべてを1つのアルゴリズムのみを知るように減らすことは、考えに反します。 たとえば、プログラマーがネットワークテクノロジーなどを理解していない、オペレーティングシステムがどのように機能するかなどを理解していない場合、クイックソートとすべてのデータ構造の知識は役に立たないでしょう。



したがって、プログラマーが* nix環境で使用可能な既製のツールを理解しておらず、独自に(作業を開始する-条件付きで独自のクラウンを発明する)作成する場合、これはパイプです。 または、人はネットワークデバイスを理解しておらず、誤って登録されたルートやDNSサーバーの遅れにより、データの特定の部分が自分のWebアプリケーションにロードされていないと想定することもできません。



2.第二に、実際の技術スタック(ソフトウェアと軸/ハードウェアの両方)を使用した経験がなくても、クールな理論的知識を持つプログラマーはトップコーダーを使用できますが、スケーラブルなアプリケーションを作成する最も簡単なタスクがあります。



Java /さまざまなコンパイラ/インタプリタの動作の微妙な違いについて、何万もの記事を読むことができます。



3.グローバルな思考、すべてのレベル(アプリケーションのサンドボックス内だけでなく、軸/ハードウェア/ネットワークインフラストラクチャ内)でのアプリケーション全体の理解なしでは、プログラマは自分をプログラマと呼ぶことはできません。 比較的言えば、Webプログラマーが新しいlibをサーバーに配置する方法のみを考えているが、管理者が200以上のサーバーでそれを更新する方法にまったく困惑していない場合(そして、アプリケーションにとって重要になり、次の後にOSIの更新では、まったくコンパイルされないことが判明しています)。



4.セキュリティ。 実験室やオリンピックで訓練されていないのは、経験がある場合のみです。



5.アーキテクチャ。

私は喜んで次の言語/フレームワークがどのように出てくるかを見て、それから群衆はそれを自分自身にねじるように急いでいます。 または-さらに良いことには、彼らのスタートアップを引き受けます。

5以降のテクノロジーの動物園を後からサポートする方法が理解されていない(特にサポートされない場合-GWTや他の数百に感謝します)、新規のがらくたを複数のサーバーに拡張する方法、またはコミュニティがない場合の問題を解決する方法。



適用する価値は何ですか? それはそれぞれの特定のケースに依存しますが、多くの場合、新しく登場したばかりのツールよりも、より慣らしが行き渡ったツールの方が望ましいです。 ドライバー、システム、Postgresなど、魅力的な性質のために人々が嫌いなもの(および複雑なポインター、足で自分を撃つことができる場所がたくさんあるなど)を言うような、流行に合わない言語Pure Cをもたらすことができます。開発のための追加要件)、ただし、長い歴史と使用経験の蓄積があります。



6.データベースの設計とクエリの最適化。 そこにあるすべての通常のフォームがすべてを通過し、DBMSを選択し、実際のデータのスケーラブルな構造を作成して、その後の作業の最適化を行うという経験は、実践に伴うものです。 しかし、赤黒木を知っており、オリンピアードの問題を解決している劣等生は、単にPostgreSQLでのクエリオプティマイザーの動作の経験と理解がないため、なぜこのような複合インデックスを配置する方がよいのか、そしてなぜ現在の読み取り/書き込み負荷のサーバー設定を微調整します。



7.最後に、人々の知性とソフトスキル、EQ /共感の一般的なレベルを無視することはできません。

たとえば、頭が良くて常識がある人は、その言語がツールであることを理解します。 そして、彼はプロでよく書かれており、ブレーキやタンバリンなしで動作する(そして太ったサーバーや高価な同僚と同様に)Javaで実際の作業を書くことはありません。



同時に、問題を解決する既製のフレームワーク、ライブラリ、およびオープンソースソフトウェアがすでに存在する場合、彼はJavaとスタック全体を喜んで利用します。 リーダーとコミュニケーションをとるスキルにより、可能な変更やビジネス要件(Scalaのような新しいおもちゃを選ぶことによる絶え間ない話題などだけでなく)を考慮して、要件を解決し、インフラストラクチャ全体を選択し、アーキテクチャを開発するなどが可能になります。



したがって、親愛なる同僚、私はまだ他人に対してより慎重であり、より少ない感情と感情を持ちます。 誰かが一度読んだ基本的なアルゴリズムやデータ構造を忘れたのかもしれませんが、同じアーキテクチャやセキュリティでの彼の能力は、あなたを見下すことができるほどあなたのものよりも優れています。



私たち全員がより共感し、友人や見知らぬ人と共有するのではなく、興味深いリンクを同僚と共有することを望みます(新しい知識やスキルを所有することの利点を示すなど)。



脅威。 あなたがすべて同じだと感じた場合、アルゴリズムは不要ではありません-Courseraの優れたコース: onetwo



長く生き、繁栄します。



All Articles