I love CoffeeScript. The only thing that seems unintuitive about it is how functions get defined, and perhaps the meaningful whitespace (no 'end' on blocks).
I've always wondered why they made coffee-script syntax so close to ruby without going all the way. "Write javascript in ruby" would have been a killer feature and tagline, but instead we're 80% of the way there with occasional expectations still being broken and new quirks to learn. Anyway...still a huge improvement overall so don't want to sound negative. Just something I was curious about.
As someone who learned coffeescript last weekend, it took me literally minutes to figure out enough to translate some javascript I'd written. And I've never even used a significant-whitespace language before.
That someone who knows javascript can so trivially pick up coffeescript says a lot about why they chose the syntax they did.
I think that's probably the source (perhaps indirect) of CS's function notation. Personally I think it's far more intuitive than JavaScript's, if you start out knowing neither language.
I don't think a direct translation of Ruby -> Javascript would have made much sense, though. It makes much more sense to custom mould a new language to the needs of Javascript, than to try and fit Ruby into a whole new context.
I started looking into making a parser that took CoffeeScript and parsed it into PHP, and the farther I got spec'ing things out, the less the CoffeeScript syntax made sense for the context of PHP. So it would make more sense to start new, and create a new syntax that fits better. I'm assuming the same process may have occurred for CoffeeScript.
Anyways, as someone who greatly prefers Python over Ruby, I love using whitespace for blocks.
The point of CoffeeScript is something quite different. It's an attempt to tidy up JS semantics, while finding a minimalist syntax to express the "good parts" of JavaScript. Any similarities to Ruby, Python, Haskell, Perl, Potion, etc. are hopefully only present in places where they make sense on the merits, and not just to be similar for familiarity's sake.
I realize the situation may have been different when the Applications chapter was written, but I would be careful of the subtle jQuery.tmpl "endorsement" in the "JavaScript templates" section.
jQuery.tmpl is unmaintained, slow, and very broken. It may be worth changing the example.
Well, I went from markdown to pdf using pandoc/latex/markdown2pdf and then I think I used calibre.
However, I just tried taking one of your html files and converting it directly to epub (again, using calibre, which is free)..and it did a pretty good job.
I think if you can merge the chapters together and spend a bit of time tweaking it, you'll end up with a nice ebook.
I was excited when I saw the title, disappointed when I started reading the book. I'm hoping someone with sufficient expertise can write a guide to coffeescript that doesn't defer to "just like javascript, except X". That is, something that talks about coffeescript, covering it from start to finish, without distracting with talk about javascript.
You can't talk about coffeescript without talking about JavaScript, and that's the whole point of coffeescript: "it's just JavaScript". You need to know both languages to use it effectively.
You can't talk about javascript without talking about the execution environment, object system, and so on, which happens to be shared with javascript, but there is no more reason to discuss javascript when talking about coffeescript than to talk about the assembly-like output of javap when talking about java.
Coffeescript has a different syntax than javascript, and it is totally pointless to say "you don't need to type 'var'". It would be better to talk about how scoping works in coffescript.
It happens that everything that's been written about coffeescript so far is about convincing javascript users to switch or helping javascript users to switch. That's not the only way.
I don agree with that. Sure knowing JavaScript is helpful in debugging. But you can be very effective with coffeescript without knowing too much about JavaScript.
I guess you could, but you'd be making life harder for yourself, and other developers. Consider a website mockup by a designer with html/css experience and one without: the one with no html/css experience may be designing a total headache, and be completely oblivious to that fact.
Javascript is fundamentally an awesome language at its core, as powerful as lisp in many ways. But it's hampered by a few bugs and mis-features that were baked into the language definition early (due to high pressure to release the language early and marketing pressure to make the syntax a certain way, even if it didn't make sense). Coffeescript is a very successful attempt to remove a lot of that pain and let the underlying awesomeness of javascript shine through.
Considering that JS is one of the most ubiquitous and popular languages today this is kind of a big deal.
I think it's because it delights two kinds of people. JavaScript lovers, because it make JavaScript beautiful, and JavaScript haters, because it makes JavaScript palatable.
Although it dignifies your question, I'd say it's because it's the first breath of fresh air in client-side development people have had in a long time. Having a real choice in that space is a big deal.
Do you have specific criticisms of CoffeeScript? That would probably have made for a more productive comment.
The answers which the question received, in addition to an insult, were that CoffeeScript removes bugs and mis-features, "is a breath of fresh air", and delights programmers by letting "the underlying awesomeness of Javascript shine through." Hardly real answers.
It is perhaps to-the-point, but I don't think it is aggressive to point out that CoffeeScript frequently shows up on the front page of HN. I am guessing that the comments about fanboyism and unfair down votes came as a response to a down vote, so the initial down vote couldn't be justified on those grounds.
As to the original question of the why CoffeeScript is so popular on HN, I too would like to know.
You are begging the question. You can't just say that CoffeeScript provides a real choice without explaining what differentiates CoffeeScript from Javascript and makes the choice viable.
I never got that behavior, there is nothing in the guidelines that said "Don't be aggressive and don't call people fanboys even if you think so and have something to show supporting that"
The closest that I can see in approach to comments is that you have to be civil and not say things in you wouldn't say in real life. The original post was not guilty on any of those counts. By no means was it an rude or uncivil comment, I see no name calling and he did support his statement in subsequent comments. If you are going to be a baby about it and can't take being called a fanboy then please accept that being called fanboy is uncivil and push to include that into the approach to comments.
I followed up with the following free e-book, which I highly recommend:
Smooth CoffeeScript
http://autotelicum.github.com/Smooth-CoffeeScript/