Every JavaScript Developer Should Know memo

原文

  1. JavaScriptアプリケーション開発者にとって重要な2つのプログラミングパラダイムを挙げることができますか?

Classの導入。prototype継承。

  1. 関数型プログラミングとは何ですか?

副作用が少なくプログラミングが出来て、言語ではScala、Haskelなどがそう。

  1. 古典的継承とプロトタイプ継承の違いは何ですか?

クラスは階層的な構造を作成できる。
プロトタイプ継承は機能の継承や、別機能を連結したりできる。

  1. 関数型プログラミングとオブジェクト指向プログラミングの長所と短所は何ですか?

オブジェクト指向のメリットとしてはオブジェクトが理解しやすく、多言語でも広く使われている。
デメリットとしてはステートフルなオブジェクトであった場合などに管理が大変だったりする。

関数型のメリットとしてはステートレスなため、状態の管理などをする必要がなくなる。
デメリットとしては数学理論から採用されているものが多くあるので、オブジェクト指向に比べて学習曲線に差がある。

  1. 古典的な継承はどんなときに適切な選択ですか?

Javascriptにおいて基本的にはあまりないが、React.Componentを利用している場合は必要。

  1. プロトタイプ継承はどんなときに適切な選択ですか?

基本的にはプロトタイプ継承を使う。Object.createなどを利用。

  1. 「クラス継承よりもオブジェクトの構成を優先する」とはどういう意味ですか?

オブジェクト自体を考えるのではなくて、オブジェクトの構成を考えるべきということ。

  1. 双方向のデータバインディングと一方向のデータフローとはどのような違いがありますか?

双方向データバインディングは例えばReactのようなもの。双方向バインディングはReduxやAngular。

  1. モノリシックとマイクロサービスのアーキテクチャの長所と短所は何ですか?

モノリシックのメリットはロギングやセキュリティ対策などで対応が容易い。
デメリットはソースコードが肥大化していき、柔軟な拡張性を保つことが難しい。

マイクロサービスのメリットは各自が小さく、他に影響を与えないように作れる。
また、拡張性に優れている。
デメリットとしては各自が散らばることになるので、セキュリティ対策やロギングなどが難しくなり、予想していなかったクロスカッティングの問題が多く見つかってしまう。

10.非同期プログラミングとは何ですか、なぜJavaScriptで重要なのですか?

基本的にUIは非同期で動かなくてはいけないため、Javascriptでは重要だと考えられる。
例えば、画像のダウンロードを同期しながら待っていたら操作性が悪すぎる。

改めて考えさせられて勉強になった気がする。。。( ´ω` )