Hacker News new | past | comments | ask | show | jobs | submit login
The Little Book on CoffeeScript (arcturo.github.com)
161 points by protez on Oct 2, 2011 | hide | past | favorite | 38 comments



"The Little Book.." was the first instructional text I read on CoffeeScript, i.e. beyond Coffee's home page hosted on GitHub.

I followed up with the following free e-book, which I highly recommend:

Smooth CoffeeScript

http://autotelicum.github.com/Smooth-CoffeeScript/


Very nice. That book seems to be complete on every aspect of CoffeeScript.


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.


>The only thing that seems unintuitive about it is how functions get defined

http://en.wikipedia.org/wiki/Function_(mathematics)#Notation

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.


Ruby has a 6000 LOC yacc parser for the grammar. I would bet that Coffee's grammar is smaller, tighter, and less full of perlisms.



Perhaps it is also influenced by Python? Come on, not everyone on Earth loves Ruby's syntax. I was turned off by the endless 'end's.


Because there are already a ton of projects out there that attempt to implement Ruby in JavaScript. See the "Ruby" section on this page:

https://github.com/jashkenas/coffee-script/wiki/List-of-lang...

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.


Yes, you might be right there. Eco would probably be a better choice (CoffeeScript syntax). I'll see if I can find time to change it.


Excellent work. FWIW, from my experience with The Little MongoDB Book, people love epub format.


Any suggestions on how to go about converting it (Markdown) to epub?


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.


Calibre can convert directly from markdown to epub:

  ebook-convert ebook.txt ebook.epub --formatting-type markdown
or you can use the UI.


Calibre does not like PDF. It sometimes works, but the Calibre team recommend using against using PDF anywhere in the workflow.

Calibre also comes bundled with a bunch of command line tools which, in my opinion, are much nicer than Calibre itself.


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.


Is there a good way to compile this into an ebook? I'd love to have this on my kindle.


Here's my PDF conversion of the book http://dl.dropbox.com/u/6746847/little-coffee.pdf

The links point to URL's though.


Why is this language continually hyped to no end on HN?


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.


It just wreaks of fanboyism when every comment or question that doesn't give praise to coffeescript is downvoted.


Ok, point to a specific comment/question that you think was unfairly downvoted.


The top level comment starting this thread seems to be a valid enough question to have generated some discussion, but it's showing grayed out to me.


That comment is inflammatory, inaccurate, and adds nothing interesting to the discussion.


It got real answers.

I imagine it was downvoted for its aggressive wording, coupled with the poster's later commments about 'fanboyism'.


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.


Hardly real answers

You seem to have missed this part of my response:

  Having a real choice in that space is a big deal.


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.


Shockingly, some people might not feel the urge to write out an essay length post discussing the differences between JS and CoffeeScript.

Yet, they might still be moved to give a short, high level answer to the OP's question.

Those fucking bastards! :)


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.




Consider applying for YC's first-ever Fall batch! Applications are open till Aug 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: