5 ms·
I would not suggest this book. While it does begin with simple, concise examples, it leaves out many important details. For example: - The first variable usin
by eurasiantiger 6y ago
I would not suggest this book. While it does begin with simple, concise examples, it leaves out many important details.
For example:
- The first variable using `const` is called ”immutable”, which is misleading, since only the _assignment_ is immutable. Later on the same page, a const object property is assigned to without any clarification as to why it works.
- Only single- and double-quoted strings are introduced at first, even though template strings are arguably the cleanest for building strings.
- Arrow functions are introduced as just another syntax - neither implicit `this` binding nor implicit return of last block statement are mentioned.
- afefers 6y agoGood points. What would you suggest instead?
- lprd 6y agoMy two favorites are YDKJS (You Don't Know Javascript)[1], and Eloquent Javascript[2]. [1]https://github.com/getify/You-Dont-Know-JS https://github.com/getify/You-Dont-Know-JS [2]https://eloquentjavascript.net/ https://eloquentjavascript.net/
- mattmanser 6y agoNo book is perfect.
- zarathustreal 6y ago> const is called immutable which is misleading Consider that this may simply be a knowledge gap on your end. I think most programmers understand the concept of value vs reference types and would not assume an object to be a value type. Obviously the reference is immutable, as is any other value type you assign to the const. > nor the implicit return of last block statement are mentioned Probably not mentioned because it doesn’t exist. There is no implicit return of the last block statement. That statement is misleading in at least two ways: there cannot be multiple top-level block statements as the body of a function, nor does the singular block statement body of an arrow function implicitly return the last expression. It actually requires an explicit return statement. On the other hand, an arrow function with an expression body -does- implicitly return.
- hoorayimhelping 6y ago>Consider that this may simply be a knowledge gap on your end. My experience says this is very far from the truth. JavaScript's implementation of const is confusing for almost everyone the first time they come across it, especially the area you're talking about - changing collections. Junior engineers and non JavaScript senior engineers alike don't seem to understand what const actually means until they dig in to get deeper context, which I would point as a pretty big failure of language design.
- maple3142 6y agoI don't think it is really confusing if you already know how "final" works in Java or (const) references in C++.
- throwanem 6y agoI think it's a failure of education, specifically around the concept of binding as the general case of assignment. I came late to that myself, not encountering it as a discrete concept until I got interested in Lisp, and found it clarified a great deal for me that had previously been obscure. With that concept available, const is trivially explained as an immutable binding, as indeed the author of the book under discussion explains it elsewhere in this comment thread. Without it, yeah, const feels full of special cases, just like everything else involving non-primitive types. It's something I've learned to cover early in teaching the language, because a little early effort there goes a long way toward clearing up a lot of confusion later.
- IggleSniggle 6y agoMaybe they meant implicit return after the last block statement (ie the implicit return void)? But that's not exclusive to arrow functions, so probably not.
- eurasiantiger 6y agoGood point. However, most web developers starting with JS tend to come from PHP with its &$variable reference-passing magic. I seem to have chosen my wording badly, since I did not mean (labeled) blocks, but indeed the expression body (which may have been referenced in the book as a ”block”, too lazy to check).
- rauschma 6y ago> The first variable using `const` is called ”immutable”, which is misleading, since only the _assignment_ is immutable That’s a first look at the syntax. The details are explained here: https://exploringjs.com/impatient-js/ch_variables-assignment.html https://exploringjs.com/impatient-js/ch_variables-assignment... But I should clarify that “immutable” here means “immutable binding”. > Only single- and double-quoted strings are introduced at first I had to start somewhere. Template literals and tagged templates are a more complex topic that benefits from strings already having been introduced. > Arrow functions are introduced as just another syntax Arrow functions are introduced in detail here: https://exploringjs.com/impatient-js/ch_callables.html https://exploringjs.com/impatient-js/ch_callables.html --- In general, I occasionally have to initially leave out some details so that the book can be read linearly. But those details are then filled in later in the book.
- throwanem 6y agoYou should define and describe the concept of "binding", if you don't already. Telling me a const declaration is an immutable binding does nothing for me if I don't already know, or immediately find out, that binding is the general case of assignment, an association of a value with a name. Given that and an understanding of the differences between value and reference types, there are few surprises left for me in how Javascript handles names and values. I sometimes find myself informally teaching devs less experienced with the language, and I've learned to cover this part of it very early. It's not made terribly obvious in a lot of resources people have mentioned using, and I've yet to encounter a case where developing that understanding failed to help someone better understand the code they were writing, and thus write better code. (Usually I'm also reviewing a lot of their PRs, and that makes the change pretty easy to see.)