Terry don't worry, Cozy is fully
compatible with Javascript. If you want to contribute to Cozy, you
can build a web app written with JS.
About the Coffeescript choice, I have no non-emotional stuff to
add, Joseph explained everything. Now if you want to know more
about how we chosed Coffeescript for Cozy, have a coffee and read
the full story.
Years ago, I was a PHP developer. I used to build apps for my
classmates and websites for communities I was part of. When I get
my first job (consultancy stuff), I was missing programming, so I
started a webradio project called Dolebrai. I worked on it with
friends who were the maintainers of Savonet/Liquidsoap a sound
streaming framework. When I submit my first version of the
website, David, one my two mates, was satisfied by the site but
not by the code. He didn't approve the choice of PHP and suggested
me to look for alternatives like Python or Ruby (I was surprised
because he was an OCaml advocate). At first I was quite angry but
finally I started to google for Python or Ruby ways of coding a
web application. I quickly found Ruby-On-Rails and Django. It took
me weeks to decide which one to chose among them but I finally
opted for Django. So I started to use a web framework and code
with Python to build my the website. I really enjoyed coding with
Python and it became obvious that I won't be able to code a web
app without a framework anymore. I dropped PHP from my toolbox
too. We were in 2006.
Then I quit my job, at the same time I stopped my webradio project
and went back to programming as a professional activity. Here I
coded in Java, I was a front-end developer and spent most of time
writing GWT code (so almost no Javascript). I was found of
object-oriented programming and I enjoyed to buildsophisticated
classes with Java and to have a lot of well organized files with
complex deployment. Then I discovered the "Laws of Simplicity" and
"Getting Real". Two books that tells you good stuff doesn't mean
complex stuff, that you should focus more on the useful part than
trying to build a masterpiece of art. I understood that my code
was over-engineered: it was hard to maintain and didn't encourage
my peers to collaborate to it. It was already dead code.
Parallelly, I kept following programming blogs and new open source
coolness. I decided to start a new side project to have a taste
of those new technologies (in fact, mostly to learn Git). It was
Newebe, a distributed social network. So, I went back to Python
and choosed Django as a framework. But Django was over-featured
for what I wanted to achieve with Newebe. I changed for Tornado,
an asynchronous and lightweight web framework for Python. Once
done, I coded quicker than ever and shipped the easiest to
maintain code I ever wrote in my life. Once there, I realized that
my previous over-engineered stuff was partly due to the technology
I chosed : Java. Java pushed me to write a lot of things: long
class, types, punctuation, access keywords, etc. While Python made
things clearer and lighter. Plus, Tornado made the architecture
simple and consistent. Again, the technology choice had a big
impact on my code quality.
Then I started to write the front-end part. At the beginning I was
satisfied with Javascript. I started to make a MVC architecture.
Then I looked for an existing MVC framework for JS. I experimented
them. Then I selected Backbone for its simplicity. It provided me
with what I liked: a frame to organize well the code without too
much magic or constraints.
Jeremy Ashkenas, the Backbone author, is the Coffeescript
author too. So by reading Backbone tutorial, I discovered
Coffeescript: light syntax, code looks almost like pseudo code,
blocks are indentation-based, etc. No need to say I loved it.
Leaving GWT for Backbone and Coffee gave me the same feeling as
described before: I built better code quicker. We were in 2011.
While enjoying these tools, I noticed that the Node.js
community was super active and build great libs for web
development. So when we started coding Cozy, I proposed to
Benjamin to make it with Node and Coffee. He agreed and we built
the first shapes of what Cozy is today. We faced some drawbacks
about code transformation, but the trade-off was still good: we
gained a lot of time with development and maintenance.
When the developer team grew with the arrival of Zoé, Joseph
and Romain we were glad to see that they were able to code on
day 1 despite the fact they didn't knew Coffeescript before. One
week later they were fully operational. Of course, they had a
good computer background but I'm sure that CS helped a lot.
Months later, they all agreed that they had more fun coding with
CS than with JS. They enjoyed doing better programs quicker. Our
choice was validated by the fresh look of young graduate.
To not feel dogmatic and make contribution less scary, we
ported all our tutorials in Javascript. But for the core parts
and our main apps we kept Coffeescript. Except the fact hat
Node.js consumes too much memory, CS and Node.js fits perfectly
with our requirements which are:
1) Building light web applications and modules.
2) Building easy to maintain and reusable software.
3) Building software that makes collaboration easy.
4) Having fun by writing elegant and concise code.
We follow these principles as much as we can: our apps are
accessible and simple, our libs are small and don't require more
than 10 minutes to be learned, we kept our data/service layer
easy to use, our app deployment is described by just a light
manifest, security features are based on simple permissions,
etc.
If you get interested into Cozy, I will ask you a favor: go
further than the language choice and embrace the full philosophy
behind the project. Our goal is to build easy-to-use and
interoperable web apps. Softwares that can be understood by any
developer, that are remixable and that you can share with
anyone. It's our recipe to make the web a better place. This is
what matters. Whatever language we use, it will not change.
Regards,
Frank