<commit_before>#CoffeeScript is not a language worth learning

> A language that doesn't change the way you think about programming is not worth learning.—<NAME>

[CoffeeScript][c] is a program that takes some text you write using a special set of rules and transforms it into some other text, which happens to be a JavaScript program. It is often described as a programming language that "compiles" to JavaScript much as other programming languages compile to assembler or JVM byte codes.
Like many new ideas, CoffeeScript has inspired some enthusiasm from early adopters, some diffidence from pragmatists, and disdain from conservative laggards.

In [A Case Against Using CoffeeScript][against], <NAME> argues that people who write bad CoffeeScript will wind up with even worse JavaScript programs. Quite honestly, he's right that there will be plenty of terrible generated JavaScript in the wild. As Sturgeon remarked, "90% of everything is crud." But will the 90% of crud be worse for having been generated in CoffeeScript? I don't think so.

Mind you, I don't think the 90% will magically be transformed from crud to gold.  Crud is crud. By I think it will be better than the crud that would have been written in "pure" JavaScript. And I think the 10% of good JavaScript will be *better* by virtue of having been transformed from CoffeeScript.

And the reason I think so is the reason that CoffeeScript is "not a language worth learning:"

[c]: http://jashkenas.github.com/coffee-script/
[against]: http://ryanflorence.com/2011/2012/case-against-coffeescript/

##CoffeeScript is JavaScript

My argument is that CoffeeScript is not a language worth learning because **CoffeeScript is not a language**. CoffeeScript is JavaScript. You don't "Think in CoffeeScript," you "Think in JavaScript." Only you think in well-crafted JavaScript.

Obviously, CoffeeScript has a different syntax, but only in the most superficial way. If JavaScript was English, CoffeeScript wouldn't be another language like French, it wouldn't be a dialect like Jamaican Patois, it would be technical jargon like the conversation one programmer might have with another.

CoffeeScript doesn't introduce dramatic new ways to organize programs like continuations, promises, or monads. All of the transformations it produces are local: If you look at a small snippet of CoffeeScript, you know that it translates to a small snippet of JavaScript without dramatically affecting anything else in any other part of the program. There are no back-flips to get "compiled" CoffeeScript to talk to compiled JavaScript.

So you write `@render()` instead of `this.render()`. Big whoop! That's a shorthand notation, not a language. Or you write:

		if foo and @get('bar')
		  doThis()
		  doThat()
			<commit_msg>typo fix, thanks to Masukomi<commit_after>#CoffeeScript is not a language worth learning

> A language that doesn't change the way you think about programming is not worth learning.—<NAME>

[CoffeeScript][c] is a program that takes some text you write using a special set of rules and transforms it into some other text, which happens to be a JavaScript program. It is often described as a programming language that "compiles" to JavaScript much as other programming languages compile to assembler or JVM byte codes.
Like many new ideas, CoffeeScript has inspired some enthusiasm from early adopters, some diffidence from pragmatists, and disdain from conservative laggards.

In [A Case Against Using CoffeeScript][against], <NAME> argues that people who write bad CoffeeScript will wind up with even worse JavaScript programs. Quite honestly, he's right that there will be plenty of terrible generated JavaScript in the wild. As Sturgeon remarked, "90% of everything is crud." But will the 90% of crud be worse for having been generated in CoffeeScript? I don't think so.

Mind you, I don't think the 90% will magically be transformed from crud to gold.  Crud is crud. But I do think it will be better than the crud that would have been written in "pure" JavaScript. And I think the 10% of good JavaScript will be *better* by virtue of having been transformed from CoffeeScript.

And the reason I think so is the reason that CoffeeScript is "not a language worth learning:"

[c]: http://jashkenas.github.com/coffee-script/
[against]: http://ryanflorence.com/2011/2012/case-against-coffeescript/

##CoffeeScript is JavaScript

My argument is that CoffeeScript is not a language worth learning because **CoffeeScript is not a language**. CoffeeScript is JavaScript. You don't "Think in CoffeeScript," you "Think in JavaScript." Only you think in well-crafted JavaScript.

Obviously, CoffeeScript has a different syntax, but only in the most superficial way. If JavaScript was English, CoffeeScript wouldn't be another language like French, it wouldn't be a dialect like Jamaican Patois, it would be technical jargon like the conversation one programmer might have with another.

CoffeeScript doesn't introduce dramatic new ways to organize programs like continuations, promises, or monads. All of the transformations it produces are local: If you look at a small snippet of CoffeeScript, you know that it translates to a small snippet of JavaScript without dramatically affecting anything else in any other part of the program. There are no back-flips to get "compiled" CoffeeScript to talk to compiled JavaScript.

So you write `@render()` instead of `this.render()`. Big whoop! That's a shorthand notation, not a language. Or you write:

		if foo and @get('bar')
		  doThis()
		  doThat()
			
{'fraction_non_alphanumeric': 0.05191305909825759, 'fraction_numerical': 0.005748158792886654, 'mean_word_length': 4.74020618556701, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2436482', 'n_tokens_mistral': 1444, 'n_tokens_neox': 1308, 'n_words': 831}