Hacker News new | past | comments | ask | show | jobs | submit login
CoffeeScript is Afrikaans JavaScript (logicalfriday.com)
53 points by appleton on Feb 7, 2012 | hide | past | favorite | 23 comments

Like HAML before it, coffeescript is more like 'piglatin with shortcuts' to me, i.e. you have to mentally make a transformation on the javascript you were going to write while simultaneously stripping away unnecessary crud.

This is somewhat analogous to the stage in learning a spoken language where you're mentally translating (rather than just articulating directly in the target language). Unlike a spoken language however, in haml/coffeescript this phase only needs to last about an hour, instead of months or years.

P.S. I have a pet theory that bi-linguals are more 'intuitively comfortable' with what I call 'transformation' languages like HAML and Coffeescript, probably because they're used to cross-compiling their own speech while learning their second language. Not based on any scientific research but it appears to play out in my current office.

Well, as a linguist and hapa I don't fit your mold very well. I don't like HAML particularly, and I prefer explicit block scoping a la JS and Ruby rather than CS and Python. I do like CoffeeScript though :)

I speak only one language and found it pretty trivial to switch from JS to Coffeescript.

I guess it's always possible I have an innate capacity for languages I've never actually developed, though... :P

I'm bilingual (English/Portuguese), and use both JavaScript and CoffeeScript.

And I'm not "intuitively comfortable" at all with CoffeeScript -- it has nice Python-esque features which I love, but its seemingly arbitrary parsing edge cases drive me mad.

But I think that one's comfort with using CoffeeScript depends entirely on their level of comfort and knowledge of Python and JavaScript. I don't feel like linguistic skills have any bearing. But it's an interesting idea!

An underappreciated benefit of computer programming "languages" is how human begins use them to communicate with other humans. Once you get two or more programmers working on a project, they have to be able to write code that the other programmer can readily understand. Programming languages advance this goal to varying degrees; assembly does it poorly, and so does obfuscated C or Perl. CoffeeScript, on the other hand, seems to have borrowed language features that enhance this human-to-human communication ability: significant whitespace, easily comprehensible object models, etc.

This sort of analogy doesn't go very far for me because spoken languages evolve organically and continually in ways that computer programming languages do not. My compiler/interpreter doesn't meet me half way when I make small human-comprehendible changes. Even spoken languages that are engineered grow and change in-use.

Interesting comparison. I speak Afrikaans in the office every day (although it's not my mother tongue) and I do appreciate the simplicity of the language. It's also really cool in the same way Klingon is cool, i.e. some things can only be said in Afrikaans.

I must point out that the language itself is not as simple ("kitchen dutch") as the author makes it out to be though, in fact it's in my opinion just as sophisticated as dutch - albeit with slightly simplified grammar and spellings.

I suppose it depends on your mother tongue.

KoffieSkrip is nie eintlik 'n Afrikaanse Javaskrip nie.

Afrikaans has a few quirks and oddities that would make it seem strange to English speakers. For example, the Afrikaans sentence above means "CoffeeScript is not actually an Akfrikaans Javascript". But to someone who is unfamiliar with the language, the structure might imply a double-negative ("CoffeeScript is not actually an Akfrikaans Javascript not").

As far as I understand, a few languages use the double negative (also called negative concord); main suspect in this case would be French influence of Afrikaans through the Huguenot settlers in the Cape.

Middle Dutch also had the double negative (en/niet).

I'm not sure I understand why CoffeeScript should be easier to understand for a backend developer than JavaScript?

Perhaps the author meant for those who know Ruby:

- @ for instance variables

- #{} interpolation

and Python:

- for comprehensions

- significant whitespace

Those are syntactic sugar. If your devs have trouble understanding JavaScript because of this, I suggest your devs aren't very good.

I don't think all features are "just" syntactic sugar:


Everyone parrots the line that programs should be written for people to read. I agree, and that's exactly why I use CoffeeScript: All of the devs in our office read and write JavaScript fluently, but code written in CoffeeScript is easier to read than code written in JavaScript.

> but code written in CoffeeScript is easier to read than code written in JavaScript.

To be fair, that's a personal preference as well. For e.g. some people prefer reading code with symbols (&&, ||) than English keywords (and, or). Also, I have seen people from a C/C++ or Java background find JS easier to read than CS.

Yes, certainly. But the issue was whether these features makes CoffeeScript inherently more readable than JavaScript to a Ruby developer.

The list comprehension syntax can be a bit confusing at first, especially if they're nested.

When I first saw them I just asked jashkenas in #coffeescript and then it made sense. Later I came to appreciate them in Python. Coincidentally I learned Ruby-style string interpolation from CoffeeScript before trying Ruby.

> Simple grammar ... verbs do not conjugate differently ... This made me wonder about all those complicated grammar rules

It reminds me that Japanese has a very simple grammar regarding verbs.

There are very few, clearly identifiable groups based on suffix (I seem to recall it's three groups ~u, ~iru/~eru and irregulars), they are basically invariable, and have only two tense, past and present (plus each having a negative form). Time is more often than not purely contextual. Going even farther, subjects and objects are often omitted altogether,adding to the context you have to maintain. Also, there are only two irregular verbs (kuru and suru).

It's a bliss when you talk to someone and only a few words can bear a lot of meaning (no S) thanks to the context. At some point it feels like perl :-)

Now you might think that japanese got it right but then you learn to count stuff and holy cow you're in for a brainfuck as numbering things vary depending on what you're counting. Yay. But if it was too easy it wouldn't be so charming :-)

I spoke only Afrikaans for the first 6 years of my life. The simplification still affects me when speaking English, mainly the examples mentioned in the article, especially with regards to tenses. I still sometimes make mistakes with 'do/does', 'was/were', etc.

It can help Ruby developers to get going with Javascript because of its similar syntax, and it takes care of some of the bad parts in the language

I've been watching the coffeescript bandwagon pick up passengers for a while now, but I simply am not convinced that creating a 'language' to simplify or 'improve' another one is a smart thing to do. Maybe on a team that has all Ruby developers this could fly, but now you make it hard to add pure javascript developers to your team without them first getting caught up on your way of doing things.

And then to make things even more tedious, you make it compile to original javascript, an interpreted language. It just reminds me of how Rails initially tried to bake ajax into its way of doing things initially (and has since stopped ... but now we have to support that mess). If the top devs in our field are using it, then there's got to be some merit to it ... but I gotta say, it really doesn't seem all that clever to me.

I like the analogy but I don't think it's correct. CoffeeScript is not a simplified JavaScript. On the contrary. It adds more syntactic and semantic rules.

Ek dink nie so nie, boet.

The analogy is good, but there are parts of Afrikaans which are more complex than Dutch. Conjugating an adjective or negating a sentence, for instance. Are there parallels in CoffeeScript?

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