この記事では、2019 年に価値があると思われる 19 のスキルとトピックをまとめています。ただし、プレッシャーを感じる必要はありません。私や他のほとんどの開発者は、すべてのトピックに精通しているわけではありません。これらのことは注目に値すると思いますが、JavaScript エコシステムには終わりがありません。
1. 型とパターンを追加する - TypeScript は 2019 年の非常に良い候補です
型なしのコーディングは非効率であるだけでなく、エラーも発生することが判明しました。傾向がある。ただし、厳密な型構文を使用しなければならないという意味ではありません。エンティティやモデルを検証するために JSON スキーマや Joi を使用したり、JS に注釈を付けるために静的型を使用したりするなど、実際の状況に応じて型の厳密さを選択できます。 https://github.com/facebook/flow へ)、または完全な TypeScript を使用します。
TypeScript は 2018 年に大きな進歩を遂げ、Node の領域に入ったようです。 TypeScript を使用する予定がある場合は、その型機能だけを使用したいかどうかを自問する必要があります。インターフェイスや抽象クラスも使用したい場合は、新しいプログラミング パラダイムを学ぶ必要があるかもしれません。
2. リンターを強化する
リンターは実際には無料のランチであり、セットアップにかかる時間はわずか 5 分で、無料で自動コード保護を利用でき、コード入力中に重大な問題を見つけることができます。糸くずが単に派手だった時代は終わりました。現在、リンターは、適切にスローされないエラー、情報の欠落、履行されていない約束、コード内に絶対に残したくないその他のバグなど、深刻なコードの問題を検出できます。
3. Java を増やし、Ruby を減らす - アーキテクチャの知識を深める
NodeJS エコシステムのアーキテクチャと設計についての知識はあまりなく、誰もがマイクロサービスについて話していますが、話されるだけです。いくつかの内部構造。したがって、ほとんどのアプリケーションと例は、Ruby の他のパターンとともに MVC の概念に基づいています。これの何が問題なのでしょうか? MVC はコンテンツ サービスの構築には最適ですが、堅牢なバックエンドの構築にはあまり適していません。コントローラーとモデルという 2 つのクラスを使用して、ビジネス ロジック、ルール、データ アクセス、他のマイクロサービスとの通信全体を記述することができますか?
重量級の Java/Spring パターンを使用することは絶対にお勧めしません (だからこそ、私たちは Node の領域にいますよね?)。アプリケーションのシンプルさを犠牲にすることなく価値を提供するものを選択してください。
4. 追跡とコンテキストを改善するために非同期フックを活用する方法を計画する
シングルスレッド モデルには欠点があります。リクエストが複数のファイルを通過し、非同期で実行されるとコンテキストが失われます。生涯にわたって保持されるわけではありません。なぜこれが悪いのでしょうか?たとえば、開発者は多くの場合、同じリクエストのすべてのログ エントリを後で関連付けることができるように、各ログ エントリに一意の識別子を含めたいと考えますが、2018 年にこれを達成するのはそれほど簡単ではありません。
2019 年には新しい機能が登場する予定で、Async Hook もその 1 つです (まったく新しい機能ではありませんが、実験段階は間もなく終了します)。簡単に言うと、これは非同期操作のメカニズムです。いつでも最初と最後にカスタム コードを挿入できます。これにより、同じリクエストのすべてのコードを関連付けてコンテキストを保持できます。これにより、Node の追跡機能とコンテキスト機能を次のレベルに引き上げる多くのカスタム パッケージの基礎が築かれました。
5. 「サーバーレス」の最新情報について学ぶ
注: ここでは、FaaS とサーバーレスという用語は同じ意味で使用されていますが、まったく同じではありません。
もともと、FaaS は「マイクロサービス」アプリケーションではなく、マイクロタスクの開発に使用されていました。人気が高まるにつれて、クラウド プロバイダーの需要も高まり、すぐに新しい機能が積み重なり始め、2019 年までに堅牢なアプリケーション インフラストラクチャに変わりつつあるように見えました。
Kubernetes と競合し、大規模なアプリケーションを提供できるようになりましたか?サーバーレスと FaaS は直交するテクノロジーであると考える人もいますが、実際には、2019 年のすべての新しいクラウド アプリケーションは、ベア メタル インスタンス (EC2 や GCP Compute など)、Kubernetes、または FaaS の 3 つのうち 1 つを選択する必要があります。したがって、K8S と FaaS/サーバーレスを理解し、それらの違いを理解することは、必須の設計スキルになります。
6. 最新の JavaScript 機能を理解する
私は、新しい言語機能をすべて追いかけるのが好きではありません。場合によっては、これらのピカピカのおもちゃがコードの単純さの原則に違反する可能性があります。本当に価値のある JavaScript 機能の中には (2 年前に導入された async/await など) 時間の経過とともに定着するものもあります。そのため、TC39 提案リストと Node.green をチェックする価値があります。
7. 少なくとも 1 つの API テクノロジーに精通しておいてください - GraphQL が 2019 年の有力な候補です
REST スタイルの API は、エンティティの変更とクエリを適切に制御するという設計目標に非常に適しています。財務記録システムがあると仮定すると、エンドポイントを非常に厳格になるように設計すること、つまり単一の明示的なデータ モデルを設計することをお勧めします。ただし、異なるデータセットを返す可能性のある一連のクエリの実行、API ペイロードを最小限に抑える必要がある低帯域幅ネットワーク、速度が重視されるマシン間通信、等々。では、別のものに置き換えるべきでしょうか?もちろんそうではありません。組み合わせることもできます。 API はアーキテクチャではなく、アプリケーションへの単なるポート (つまり、エントリ ポイント) であり、Express のような単一の Web フレームワーク上であっても、複数の API スタイルが共存できます。
それではどれを学べばいいのでしょうか?最善の策はおそらく、主流になりつつある GraphQL です。そのエコシステムは非常に成熟しており、動的検索や階層データ ソースなどの非常に人気のあるユース ケースを提供します。一方、gRPC はオーバーヘッドが非常に少ないため (例: Pub-Sub/メッセージ キュー システムで使用される)、依然としてサーバー間通信に適したニッチなテクノロジです。
8. 単体テストと統合テストを超えて
テスト ピラミッド、単体テスト、統合テスト、エンドツーエンド テストについてはすでにご存知ですか?なるほど、これらは成功するテスト戦略の基礎です。過去 10 年間で開発環境は劇的に変化しましたが、テスト モデルはほとんど変わっていないため、マイクロサービス、リッチ フロントエンド、サーバーレスなどをどのようにテストすればよいのか疑問に思っています。一部の最新テクノロジーは、従来のテクノロジー スタックを補完し、場合によっては置き換えることもあり、より無駄のないテスト戦略とより高い ROI を可能にします。
9. モニタリングでは SRE/DevOps のベスト プラクティスに従う
2019 年には、中規模のアプリケーションでも数十の可動部分が含まれる可能性があります。しかし、ほとんどの開発者は、SRE エンジニアから教えられた監視とアラートの側面をわざわざ学ぼうとはしません。たとえば、開発者は多くの場合、エラー率や遅延などのエンドユーザー エクスペリエンスに直接影響を与える指標について考えるのではなく、CPU やメモリなどの内部ハードウェア メトリクスに優先順位を付けて焦点を当てます。これらの顧客向け指標は「ゴールデン シグナル」と呼ばれることもあります。2019 年は、まずこれらの指標に注意を払い、同様のベスト プラクティスを採用するとよいでしょう。
10. 攻撃者のように考える: 攻撃ツールとテクニックを学習してセキュリティ レベルを向上させます
攻撃者のように考えることができない場合、防御者のように考えることはできません。 2019 年には、防御作業をサードパーティ企業にアウトソーシングしたり、静的セキュリティ スキャナーのみに依存したりすべきではありません。攻撃の種類の数は圧倒的で、セキュリティ ワークショップを 2 日間実施した後では、アプリケーションの変更速度は制御不能です。 、チームはいくつかの新しい AWS サービス、データベース タイプ、新しい IAM ロールを追加した可能性があります... したがって、実際には開発者が最大の隠れた脅威であり、開発者を教育することが究極の救済策であるようです。自分自身とチームにセキュリティの DNA を埋め込み、あらゆるものにセキュリティを追加する必要があります。
これを始めてみると、結局のところ、セキュリティ問題はそれほど怖いものではないことがわかります。必要なのは、一般的な攻撃の種類とツールを理解し、アプリケーションのアーキテクチャとフローを描き、自分でどのように攻撃するかを考えることだけです。時間が経つにつれて、気づかないうちに、設計上のあらゆる決定や作成するコードのすべての行でセキュリティについて考えるようになります。
11. パッケージ更新戦略を策定する
2018 年の教訓: 更新が早すぎると危険になる可能性があります。チームは通常、次の 2 つのパッケージ更新戦略のいずれかを使用します。1 つは、可能な限り迅速に更新することで、場合によっては自動プロセスを使用することもあります。 1 つは、更新戦略がまったくなく、気分に基づいて更新される場合があることです。最初の方法のほうが良いように見えましたが、驚くべきことに、2018 年に最も危険な方法になりました。40 日以内に、コミュニティは、フラットストリームなどの悪意のあるパッケージのインシデントをいくつか発見しました。待っている人や、アップデートしていない人は問題ありませんでした。自動ツールを使用して更新戦略を正式化し、更新なしと更新の間のスイート スポットを見つけることを検討してください。
12. プログレッシブ インストールを実行し、展開フェーズとリリース フェーズを個別に実行する
2019 年には、より安全な展開を実行すること、つまり、すべての運用環境に一度に展開しないことが重要であることがわかるかもしれません。あなたの小さな心臓はハンマーのようにドキドキします。詳細なデプロイメント (別名カナリア デプロイメント) の実行は、次の 3 つのフェーズに分けることができます。 デプロイメント – 分離された新しい運用環境 (新しい Kubernetes サービスや新しいマシン インスタンスなど) に新しいコードを送信します。この段階では実際のユーザーにサービスを提供していないため、心配する必要はありません。テスト – 少数の人が実稼働環境のインスタンスを使用して、新しいコードをテストできるようになりました。リリース - 徐々により多くのユーザーが新しいバージョンを使用できるようにし、十分な自信が得られたら古いバージョンを削除できます。
注: 本格的なカナリア デプロイメントの実施には、ルーティングやモニタリングなどの多くのインフラストラクチャ部分の調整が必要となるため、2019 年現在でも依然として非常に費用がかかります。したがって、単純な半手動のカナリア デプロイから開始することを検討してください (たとえば、監視メトリクスに基づいてデプロイされた新しいバージョンで、より多くのホストを手動でスピンアップするなど)。
13. Kubernetes が世界を飲み込んでいる
明らかな傾向があります。アプリケーション コンポーネントにネットワーキング、スケールアウト、デプロイメント、その他のバックボーン サービスを提供するインフラストラクチャである Kubernetes (K8S) は、現在、ほぼ世界の市場に浸透しています。ホスト型アプリケーションの事実上の標準。その人気は驚異的です。すべてのクラウド ベンダーからのサポートと比類のないスケーリング エコシステムにより、企業の 54% がすでに少なくとも 1 つの K8S クラスターを所有しています。
初心者の場合は、始めるのに適した概要をここに示します。 Istio、K-Native、Kuberenes ジョブ、ネットワーク ポリシー、Helm、Scaffold についても学習します。結論: K8S スキルをより深く理解するために費やした時間は、最終的には報われます。
14. ブロックチェーン技術はいくつかの素晴らしい機会を提供します
非常に明確な傾向: ブロックチェーンはビットコインと暗号機能に使用されるだけでなく、あらゆる分散トランザクション性的システムにも使用できます。
15. 機械学習のスキルを身につけ、少なくとも会話のポイントを押さえる
これは明らかな傾向ですが、残念ながら、私は機械学習ライブラリについては何も知りません。2019 年の目標は、少なくとも会話ができるようになることです。機械学習について何かを考え出し、すぐに成功できるものを特定できるようにしてください (たとえば、tensorflow.js や Brain.js などの JS ライブラリは、強力なインフラストラクチャがなくてもいくつかの洞察を提供できます)。
16. 他のオープンソース ライブラリ コードを理解する
プロジェクトで同じテクノロジを長期間使用すると、視野が狭くなり、多くの代替案が見えなくなる可能性があることに注意してください。したがって、他のプロジェクト、主に成功したオープンソース プロジェクトについてもっと学ぶようにしてください。
17. Linux オペレーティング システムについての理解を深め、Linux プロセスに焦点を当てます
Linux プロセスを理解すると、監視、プロセスの保護などの多くの開発タスクに影響を与えるため、真の競争上の優位性が得られます。 、Docker の使用、正常なシャットダウン、その他のタスク。プロセス、シグナル、権限モデル、一般的なコマンド、プロセスの種類などを理解するように努めてください。
18. Node.js の内部に入る
Ryan Dahl (Node.js のオリジナル作者) の次の言葉がとても気に入っています。あなた自身。」基盤となるマシンを深く理解することは、運用上の問題に対処する必要がある場合や、イベント ループのパフォーマンスの監視などのインフラストラクチャ コンポーネントを設計する必要がある場合に役立ちます。 v8 や libuv などのコア ビルディング ブロックについてはすでにご存知かもしれません。
つまり、2019 年は、Node.js について詳しく学ぶのに良い時期です。たとえば、各 libuv イベント ループ サイクルで正確に何が起こるのでしょうか?あるいは、オペレーティング システムの IO との対話がどのように機能するか (アクティビティ ハンドルなど) を理解しているでしょうか。
19. 科学的手法の使い方を学ぶ
あなたが学び、内面化したものが、あなたの将来のキャリアを形作ることになります。しかし、多くの開発者は学習戦略を持たず、効果的な学習のための科学的手法の使用方法も学んでいません。
「JavaScript の型エラーの防止」に関する会議で、VP はコード ベース全体をリファクタリングせずに (TypeScript を使用せずに) JavaScript を使い続けるように求めました。そして突然、同僚の 1 人が Facebook Flow の使用を提案しました。その部屋にいる全員が同意しました!以前にそれに関する記事を見たことがあることを突然思い出しますが、それは決して自分の中に取り込まれたわけではなく、ただ頭の中で通過しただけです。
これはどうなりましたか?
どうやら、私たちがこれらのことを忘れる理由を説明する「競争幻想」と呼ばれる現象があるようです。ブログ投稿を 1 時間かけて読んでも、数日以内には覚えていない可能性があります。研究によると、これらのことについて後で誰かに話したり、翌日もう一度記事の要約を読んだりすると、記憶力が大幅に向上することがわかっています。もちろん、適切な知識を適切なタイミングで記憶し、習得するのに役立つさまざまなテクニックは他にもあります。数時間を勉強方法の学習に費やすことで、キャリアに大きな利益をもたらすことができます。
以上が2019 年により優れた Node.js 開発者になる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。