このテンプレートの名前はfunctionです。
より具体的には、それはインターフェースであり、通常は関数のコレクションです。
どの言語を学びましたか?
プログラミングを学ぶ最初の1つは、再利用可能なロジックの原理を学びます。これにより、常に機能がもたらされます。これは、すべてのソフトウェアプロジェクトの構成要素です。機能自体はそれほど悪くはありませんが、ソフトウェアの作成、保守、およびスケーリングが非常に高価になるのは、再利用可能なコンポーネントとして使用されているためです。
どうして?
再利用可能なコードを書くことは困難です。
いいえ、そうではありません。これは受け入れがたい。
開発者は、経験に関係なく、再利用可能なコードを作成できます。 JavaScript、Python、Ruby、Goなどの言語は、シンプルで再利用可能なソースコードの記述のしやすさを示す何百万もの小さな共通モジュールで構成されています。再利用可能なコードを書くのは簡単です 。
このステートメントをリファクタリングしてみましょう。
しかし、これもそうではありません。 node.jsライブラリを見てください
repeat-string
npmで。この行を繰り返すだけで、開発者は毎週1,700万回ダウンロードします。
npmでのrepeat-string
のダウンロード数1700万はダウンロード数です。この数では、この関数がソースコードで何回使用されているかはわかりません。量は天文学的なはずです!
だから私は何をしているのですか? node.jsプロジェクトの
ようなモジュールをどのように見つけることができます
repeat-string
か?npmで「repeatstring」を探し ます。 「stringrepeat」と入力するかもしれませんが、結果は似ています。私が話している問題は、2番目の検索結果に見られます。そして、4番目、9番目、10番目、11番目に。
これらの例を見てください。各ライブラリは完全に同じ動作を提供します。
npm行繰り返しライブラリの例
問題が何であるかわかりますか?
いいえ、不明な理由でそのうちの1つが非同期であるというわけではありません。言うまでもなく、文字列の繰り返しは6年以上前からJavaScript(
"A".repeat(5)
)言語の一部となっています 。問題は、各ライブラリが異なることです。
- 着信データの署名。受け取るものもあれば
(string, int)
、受け取るものもあります(int, string)
。1つは浮動小数点数を受け入れ、もう1つはコールバック関数を必要とします。 - 出力の署名。何も出力せず、その結果をコールバック関数に渡す1つを除いて、すべてのライブラリは文字列を出力します。そして、私は彼らの間違いを解析し始めさえしないようにさせてください。
- それらが実行されたときの動作。1つは非同期で、他は同期です。
- アクセスを許可する方法による。エクスポートされた単一の関数へのアクセスを提供するものもあれば、オブジェクトのメソッドとして関数を提供するものもあります。
JavaScriptはさまざまな理由で非難される可能性がありますが、これは言語の問題ではありません。JavaScriptの人気とその標準ライブラリの制限のために、この問題は非常に一般的であるため、文字列の繰り返しのような単純な例でそれを示すことができました。一方、他の言語でこれらすべての違いを再現することを妨げるものは何もありません。これは非常に単純な例ですが、機能がより複雑になるにつれて、これらの違いはさらに顕著になります。
なぜこれが問題なのですか?
問題は、そのような豊富なオプションは価値を生み出さず、問題だけを生み出す ことです。それらは「ビジネスロジック」(つまり、そもそも重要なこと)には影響しません。これらは実装の詳細です。これらのオプションは、言語またはフレームワークに何かが不足していることから生じる場合もあれば、単なる自発的な選択である場合もあります。現在または将来の開発者の作業を簡素化するオプションを選択しようとしていますが、将来を予測することは不可能です。このようなソリューションは本当に悪魔的なものです。選択した各オプションは最初は良いように見えますが、すべてが機能します。私たちはドーパミンブーストを受け取り、世界のトップにいるように感じます。すべてのシステムの支配者!しかし、何かを追加、置換、または変更する必要があるとき、私たちはその天才ではなかったことに気づきます。
どのくらいの頻度で何かを変更する必要がありますか?毎日。これが私たちがしていることです。このため、ソフトウェアはどのくらいの頻度で壊れますか?文字通り毎回。故障が軽微な場合もあり、少しの努力で修正します。壊れたソフトウェアは正常であるという事実に同意しました。何かが壊れていることを確認するだけの自動テストを作成する場合でも。
インターフェイスの問題は、プログラマーが開発プロセス中に多くの決定を下すことができるという事実に起因します。位置パラメーター、構成とリンカー、非同期と同期、グローバルとローカル、ステートフルとステートレス、コンストラクターとファクトリ、機能とオブジェクト指向のアプローチ、その他の無数のオプションから選択するなどの決定。それぞれの選択は最新のベストプラクティスによって決定され、それぞれがメカニズム内に閉じ込められた砂粒になります。
この問題は新しいものではあり ませんしかし、私たちはそれを我慢し、すべての新しい世代にこのアプローチを教えています。どうして?問題は、私たちが間違った決定をすることではなく、悪い選択肢が提示されることです。各オプションはトレードオフの万華鏡であり、正しい答えは視点によって異なります。すべてが妥協であるとき、常により良いオプションがあります 。 あなたはいつでもあなたのコードをより良くするために書き直すことができます。
ステートメントを3回リファクタリングしましょう。
この声明はそれほど魅力的ではありませんが、真実に近いものです。
貼り付けるだけのコードがなければ、使用する前にインターフェイスのすべての部分にアイロンをかける必要があります。アプリケーションに入るすべてのコードをカスタマイズする必要があり ます。すべての入力。すべての結論。すべてのAPI。リンカーをアダプターにプッシュし、サービスベースのファクトリでラップします。 しかし、メイクの量があなたのデザインパターンをきれいに見せることはありません。
18世紀にソフトウェアを構築しているようなものです。私たちは手作業で木を任意のサイズのボードに見ました。次の家とまったく同じように見える家を建てるために、ハンマーと釘を一から作ります。費用がかかりすぎ、時間がかかりすぎます。プロジェクト終了後も、支援の重荷で地に足を踏み入れています。寸法は標準ではなく、配線は電気技師に衝撃を与え、専門学校を卒業したばかりの建築業者は私たちが釘を作った方法が好きではありません。 Leroy-Merlinとデジタル2x4がソフトウェアの世界に登場する時が来ました。
「こんにちは、私の名前はティムです。私はGoogleで技術リーダーとして働いており、コーディングの経験は30年ありますが、Pythonで文字列の長さを取得する方法を見つける必要があります。」
常に個人的にあなたを探すためのAPIのヘルプが必要ですか?
誰にとっても十分な基準が得られたと言っても、驚くことではありません。マイクロソフトは90年代に、任意の言語で記述されたアプリケーション間でロジックを交換するためのCOMテクノロジを導入しました。 JVMテクノロジーはほぼ同じ時代であり、同じバイトコードを処理し、相互に対話できる言語の数を示しています。世界は何十年もの間フローを再発見し続けています 分散型ブラックボックスを相互にリンクする方法としてのLinda。Dockerは、最新のブラックボックスが何であるかを調べる新しい方法です。
この問題には多くの可能性があり、多くの人がそれを解決しようとしています。Daprと WasmCloudは有望な新しいソリューションに見えます ..。それらはさまざまな方法で問題を部分的に解決します。今日のソフトウェア開発の状況は悲しいことですが、私は過去10年間よりも今日の方が希望を持っています。このエキサイティングな約束の短い期間は、アモルファスアプリケーションが世界中に広がることができるユニバーサルプラットフォームを作成することを約束したJavaScriptから来ましたが、その結果、Electron、React、および無駄なRAMの束になりました。私にとって、WebAssemblyは新しい楽観的な見方になりました。理想からは程遠いですが、素晴らしいです。理想は決して勝ちません。
広告
プロジェクトのデバッグ用のレンタルサーバー、開発およびホスティング用のサーバーをお探し ですか?あなたは間違いなく私たちのクライアントです:)サーバーの毎日の請求、数回のクリックで独自の構成を作成します。アンチDDoSはすでに価格に含まれています。 Telegramでチャットを
購読して ください。