4 ms·
Comparing this code ( e.g. https://github.com/stripe/shop/blob/master/public/assets/js/shop.js https://github.com/stripe/shop/blob/master/public/assets/js/... )
by sync 13y ago
Comparing this code ( e.g. https://github.com/stripe/shop/blob/master/public/assets/js/shop.js https://github.com/stripe/shop/blob/master/public/assets/js/... )
to something like https://checkout.stripe.com/v2/checkout.js https://checkout.stripe.com/v2/checkout.js is like night and day. JS vs. compiled CoffeeScript. One large, monolithic file vs. obviously concatenated files. Variable naming, commenting, etc.
It's interesting -- I wonder what kind of code style guidelines they have over there, if any.
- joeblau 13y agoWhich one is compiled CoffeeScript? The second one? I went to a Node 0.10.0 talk [1] at AirBnB and Isaac Schluetter had some pretty funny comments for people programming in CoffeeScript. [1] - http://www.youtube.com/watch?v=zM-gUM9C5SA&t=2770 http://www.youtube.com/watch?v=zM-gUM9C5SA&t=2770
- deleted 13y ago[deleted]
- rcsorensen 13y agoBullet points of the CoffeeScript comments: * People don't compile to JS before publishing to NPM, making it harder to use CoffeeScript written modules. * I don't know CoffeeScript, so it's harder to debug. * The language is bad, introduces things from Ruby he doesn't like, there are ambiguities introduced. When asked about ambiguities introduced, there was a reference to a "different require implementation in CoffeeScript", which has possibly since been fixed.
- deleted 13y ago[deleted]
- slexaxton 13y agoHi, Stripe Developer here. We have a mostly per-project set of code style and tooling guidelines. Most (if not all) of our larger projects are coffeescript and commonjs based. That's mostly because they all share at least some code. As long as a project is internally consistent and the team agrees with each other, we don't force any specific styles or tools (within reason). We have expertise with the tools we use the most though, so a lot of times the best fit is our own tools. However, the comparison is a little bit apples and oranges. The JavaScript is optimized for reading, and maximum coherence by outside developers (an example), and the other is a compiled application for execution. The actual _source_ of the checkout project (which is not open-sourced) internally is broken up into neat files and uses modules, etc. It's quite readable for those working on the code, and the output there is generated by a computer and not really intended for humans. Hope that helps give some insight into our process and reasoning.
- rcsorensen 13y agoWhat are you using to stitch the modules together? Stitch, browserify, grunt/grunt-contrib and friends, something home grown?
- slexaxton 13y agoThis varies from project to project based on needs. The checkout stuff uses sprockets-commonjs, browserify and require.js are used in other projects though. The decision is often made based on the backend (is it already ruby/sprockets?), and the needs of the project (would rebuilding the full file on each change be prohibitive). For the most part though, the build system remains transparent to all but one person (me, these days).
- e12e 13y agoAny plans for open sourcing the source, as well? Why/Why not?
- slexaxton 13y agoMany important parts of checkout are open-sourced via our jQuery.payment plugin [1]. It allows you to build your own checkout flow from component parts. As for open sourcing (capital C) Checkout entirely, we're working hard to provide a high-touch, consistent experience for checking out and we haven't been able to reconcile that with a bunch of small (maybe less thought-out) variations on the same thing floating around. We're always trying to think about ways to make this stuff better, though. We're definitely not against the idea, we just wanna do it right (i.e. allow non-programmers to customize without making things work incorrectly or look bad). 1. https://github.com/stripe/jquery.payment https://github.com/stripe/jquery.payment