asciidwango/js-primer

[meta] 全体的な設計/ユースケース一覧

azu opened this issue · 27 comments

azu commented

この本について 📖

この書籍はES2015以降をベースとしたJavaScript入門書となる予定です。
基本的なStableのECMAScriptのバージョンを扱います。

プログラミングをやったことがあるが、今のJavaScriptがよくわからないという人が、
今のJavaScriptアプリケーションを読み書きできるようになることを目標にする内容です。
(プログラミングが初めてという人が対象ではないです)

この本は、主に次の2種類から構成される予定です。

  • 基本文法
  • (応用)ユースケース

また、書籍として出版予定があります。

このIssueについて

新しいユースケースが思いついたら、新しいIssueを作ってここにまとめる。
Issue切るほどでもないアイデアを思いついたら、とりあえずここに書いておく形で利用しています。

その他全体的な構成についての意見を募集しています。 ✋

  • こういう話も必要なのでは?
  • JavaScriptを書いてていてこれを理解するのが難しかった(重点的にするべき)
  • こういうユースケースがあるともっといいのでは?
  • この本が分かりやすかった
  • この機能の使いみちがよくわからない

といったようなコメントを書いてくれると参考になります。

基本文法

  • 基本文法 #17

ユースケース一覧

  • TODOアプリ #4
  • Ajaxで何か #9
  • Node.js CLIアプリ #7
azu commented

自分が書いたTODO #4 でもEventEmitterを直で実装してたので、
EventEmitterを実装してみるというのも一つの話として面白いかも(ライブラリに近い)
MapとかSetとかを使う例として面白そう(WeakMapとも絡む気がする)
Array.from は実際はRest Parametersの方がわかりやすい気がするけど

Observerの例

Observerパターンの実装は確かに良さそう

azu commented

Immutablityに関する何かがあるととてもJavaScriptの癖が出る気がする。
===Nan.isNanObject.is()Object.assignとか。

レガシーな部分(isNanとか)に対する新しいAPIとかがちょこちょこあるので、単にメソッドをなぞるだけでもいいけど、最近のライブラリ(React周りとか)はこの辺を上手く使って等値の比較だけで済むような仕組みをよくやってる印象。
この辺のJavaScriptにおける等値とその仕組みを上手く使った話があると、最近のライブラリを使った時に何でこんな書き方してるんだろってのはつかめるかもしれない。

前提としてオブジェクトの生成よりも、C++(DOM)との相互やり取りの方がコスト高いみたいな話があるんだろうけど、そこまではいらなくて単純なJavaScriptの世界で示せる上手い例があるとよさそう

azu commented

Math系と数字と浮動小数点数とparseInt系の上手く扱うケースとして計算機を作ってみるというのはありがちだけど、ありそう。
(何か普通に難しい予感がしてるんだけど、普通の計算機をJavaScriptで書けるのかな)

azu commented

(実際そういうものを求める層向けなのかは謎いけど)
Proxy APIとReflect APIを使ったテストライブラリみたいのを書いて、テストをしてみるみたいな話はRubyみたいな言語やってたりする人は面白いと思ったりするのかも
(Proxy APIを使ったテストみたいな話ってほとんど見たことないというだけ)

📝 Note: ProxyのtrapとReflect APIが対の概念というのは、言われないと気づきにくいのでそういうのを出したいだけ
https://twitter.com/ljharb/status/720847830156386304

Proxyまだちゃんと触ってないからあんまりピンときてない

Proxy/Reflectが Push/Pull になってるんですかね? この話流石に重すぎるのではって気はする

フォールバックの考え方をちゃんと書きたい気はする。
if ('serviceWorker' in navigator) みたいな、動作環境によって使いたい機能があるかもしれないしないかもしれないっていうの、JS特有な気がするので

azu commented

@laco0416 feature detectまじめにやると闇が深そう。
UA detectionから始まって、触るだけで例外投げるやつとか https://modernizr.com/ 見ろ的な感じになりそう。
feature detectがアプリケーションコードに入るのは、あんまり好ましくはない気がしてて、ライブラリとかpolyfillとかそういう層に収めて欲しい感じがする。
(最近、ECMAScriptの仕様レベルでもfeature detectionのための互換仕様が入ってたりしてるので、feature detectがすべて良しという話ではない気はしている。 tc39/ecma262#262 (comment) )

duck typing的な話ならプログラミング一般になるけど、こっちからの流れの方無難そう

azu commented

マイクロタスク

HTTPパッケージ使ってローカルサーバを建てるとか

TODOで書けないもの

  • 非同期
  • 文字列操作 String.prototype系 + Regexp
  • Ajax
  • エラーハンドリング + try-catch

Ajaxを投げてレスポンスのJSONパースをエラーハンドリングする流れでカバーできそう

Wikipediaの検索APIを叩いてページ一覧を表示する
https://en.wikipedia.org/w/api.php?format=json&action=query&list=search&srsearch=JavaScript

Node-CLIで npmとcommonjs、外部ライブラリを使うユースケース

ファイルを読み込んで文字列操作なりして吐き出すツールっぽい

azu commented

ユースケース一覧 to [meta] 全体的な設計/ユースケース一覧

Issueタイトル変えた。何かメタのメタ的なメモ欄が欲しくなったのでここで。

In the first 25 pages, the author has you installing 10+ software packages/addons... hardly something attractive for someone who is drawn to the name "Learning Javascript".
http://shop.oreilly.com/product/0636920035534.do

Learning JavaScript, 3rd Edition - O'Reilly Mediaでこういうレビューがあって、現実的にモジュールを使いまくる状況とはいえ、大量のモジュールをいきなり見せると面食らうのは確かにーって感じはした。

azu commented
azu commented

#30 (comment) で話してたコードを入れたら構文レベルで、そのコードがECMAScript何なのか出してくれるやつを作った

azu commented

学び方を学ぶというのはやっぱりテーマとして合ったほうがいい気がするので、そこに1セクションあったほうが特徴が出る気がする。

azu commented

新しい仕組みを覚えるときに、良く抱える問題の一つとして フォルダ構成のベストプラクティス がある。これを一番最初に書いて欲しいと良く思ってしまう。

https://gist.github.com/voluntas/14303cbf0a1a5fb47ac58c2682bfa877#%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E6%A7%8B%E6%88%90

#140 でも話していたけど、やっぱりディレクトリ構成についてはユースケースで触れたほうが良い気がするなー

azu commented

まったくの初学者はJavaScriptをどう学ぶべきか? 失敗しない学習法を考えてみた - WPJ

JavaScriptを学ぼうとしている人からよく聞くセリフに「ちょっとしたスライドショーを作ってみよう」があります。そして、たいてい下の2つのうちどちらかに陥ります。

azu commented

Javaプログラマ向けJSの忘備録 - Qiita

Javaな人からプロトタイプチェーンがどう見えるか

azu commented
  1. 基本文法
  2. ユースケース

と大きく別れた作りになるけど、2に入るときに2部ではユースケースを元に特定の実行環境におけるJavaScriptについて学ぶみたいな扉ページがあると良さそうと思った。
基本文法よりいっきに難しくなる気がするから、ここから先ではどういう環境でどういうことをするのかという前置きを入れて和らげたい感じする。

JavaScript Wayを見てたら、DOMの話に入る前にそういう前置き章があった。

azu commented

Should new developers learn ES6 directly or should they grasp old JS first?
https://hashnode.com/ama/with-brian-terlson-cj6vu9vjv01nmo1wu8vmtt1x9#cj6zcu8oh013tnpwu68yysc40

Brian Terlsonの返事が面白い。
JavaScriptを学ぶときに、基礎から見ていくスタイルと新しいHigh LevelなAPIから基礎を掘っていくスタイルの両方あるという話。
この本では両方あるのかな。後者の傾向はあるけど。

azu commented

JavaScript. The Core: 2nd Edition – ds.laboratory

デミトリーさんの用語定義

azu commented

もう構成は変わらないと思うので、クローズする